Index tested - ready for demo

This commit is contained in:
2022-02-22 13:58:30 +00:00
parent eec7b059b6
commit d063eea628
2 changed files with 77 additions and 9 deletions

View File

@@ -3,9 +3,10 @@ const parseInput = require('./parse-input');
const parseQueryTree = require('./parse-query-tree'); const parseQueryTree = require('./parse-query-tree');
const parseCreateTree = require('./parse-create-tree'); const parseCreateTree = require('./parse-create-tree');
const parseUpdateTree = require('./parse-update-tree'); const parseUpdateTree = require('./parse-update-tree');
const parseDeleteTree = require('./parse-delete-tree');
//the main function to be returned (sineQL()) //the main function to be returned (sineQL())
const sineQL = (schema, { queryHandlers, createHandlers }, options = {}) => { const sineQL = (schema, { queryHandlers, createHandlers, updateHandlers, deleteHandlers }, options = {}) => {
let typeGraph; let typeGraph;
try { try {
@@ -24,9 +25,9 @@ const sineQL = (schema, { queryHandlers, createHandlers }, options = {}) => {
switch(tokens[0]) { switch(tokens[0]) {
//check for leading keywords //check for leading keywords
case 'create': case 'create': {
if (!createHandlers) { if (!createHandlers) {
return [501, 'Create handlers not implemented']; return [405, 'Create handlers not implemented'];
} }
if (!createHandlers[tokens[1]]) { if (!createHandlers[tokens[1]]) {
@@ -38,10 +39,11 @@ const sineQL = (schema, { queryHandlers, createHandlers }, options = {}) => {
const result = await createHandlers[tokens[1]](createTree, typeGraph); const result = await createHandlers[tokens[1]](createTree, typeGraph);
return [200, result]; return [200, result];
}
case 'update': case 'update': {
if (!updateHandlers) { if (!updateHandlers) {
return [501, 'Update handlers not implemented']; return [405, 'Update handlers not implemented'];
} }
if (!updateHandlers[tokens[1]]) { if (!updateHandlers[tokens[1]]) {
@@ -53,10 +55,11 @@ const sineQL = (schema, { queryHandlers, createHandlers }, options = {}) => {
const result = await updateHandlers[tokens[1]](updateTree, typeGraph); const result = await updateHandlers[tokens[1]](updateTree, typeGraph);
return [200, result]; return [200, result];
}
case 'delete': case 'delete': {
if (!deleteHandlers) { if (!deleteHandlers) {
return [501, 'Delete handlers not implemented']; return [405, 'Delete handlers not implemented'];
} }
if (!deleteHandlers[tokens[1]]) { if (!deleteHandlers[tokens[1]]) {
@@ -68,11 +71,12 @@ const sineQL = (schema, { queryHandlers, createHandlers }, options = {}) => {
const result = await deleteHandlers[tokens[1]](deleteTree, typeGraph); const result = await deleteHandlers[tokens[1]](deleteTree, typeGraph);
return [200, result]; return [200, result];
}
//no leading keyword - regular query //no leading keyword - regular query
default: { default: {
if (!queryHandlers) { if (!queryHandlers) {
return [501, 'Query handlers not implemented']; return [405, 'Query handlers not implemented'];
} }
if (!queryHandlers[tokens[0]]) { if (!queryHandlers[tokens[0]]) {
@@ -94,7 +98,7 @@ const sineQL = (schema, { queryHandlers, createHandlers }, options = {}) => {
} }
catch(e) { catch(e) {
console.error('Error:', e); console.error('Error:', e);
return [400, e.stack || e]; return [400, e];
} }
}; };
}; };

64
test/index.test.js Normal file
View File

@@ -0,0 +1,64 @@
const sineQL = require('../source');
const schema = `
scalar Date
type Book {
unique String title
Date published
Float rating
}
type Author {
unique String name
Book books
}
`;
const dummyHandlers = {
Book: async (tree, typeGraph) => tree,
Author: async (tree, typeGraph) => tree,
};
const handlerPackage = {
queryHandlers: dummyHandlers,
createHandlers: dummyHandlers,
updateHandlers: dummyHandlers,
deleteHandlers: dummyHandlers,
};
test('sinQL - Testing creation and function of the sine function', async () => {
//setup
const sine = sineQL(schema, handlerPackage);
//process
const a = await sine('Book { title }');
const b = await sine('create Book { create title "The Wind in the Willows" }');
const c = await sine('update Book { match title "The Wind in the Willows" update published "1908-04-01" }');
const d = await sine('delete Book { match title "The Wind in the Willows" }');
//inspect
expect(a[0]).toEqual(200);
expect(b[0]).toEqual(200);
expect(c[0]).toEqual(200);
expect(d[0]).toEqual(200);
});
test('sinQL - Testing error handling (lack of handlers)', async () => {
//setup
const sine = sineQL(schema, {});
//process
const a = await sine('Book { title }');
const b = await sine('create Book { create title "The Wind in the Willows" }');
const c = await sine('update Book { match title "The Wind in the Willows" update published "1908-04-01" }');
const d = await sine('delete Book { match title "The Wind in the Willows" }');
//inspect
expect(a[0]).toEqual(405);
expect(b[0]).toEqual(405);
expect(c[0]).toEqual(405);
expect(d[0]).toEqual(405);
});