mirror of
https://github.com/Ratstail91/sineQL.git
synced 2025-11-28 18:24:28 +11:00
161 lines
3.7 KiB
JavaScript
161 lines
3.7 KiB
JavaScript
const buildTypeGraph = require('../source/build-type-graph');
|
|
const parseInput = require('../source/parse-input');
|
|
const parseUpdateTree = require('../source/parse-update-tree');
|
|
|
|
//schemas
|
|
const simpleSchema = `
|
|
|
|
scalar Date
|
|
|
|
type Book {
|
|
unique String title
|
|
Date published
|
|
Float rating
|
|
}
|
|
|
|
type Author {
|
|
unique String name
|
|
Book books
|
|
}
|
|
|
|
`;
|
|
|
|
const simpleBookQuery = `
|
|
|
|
update Book {
|
|
match title "The Wind in the Willows"
|
|
update rating 9.5
|
|
}
|
|
|
|
`;
|
|
|
|
const compoundBookQuery = `
|
|
|
|
update Book [
|
|
{
|
|
match title "The Philosopher's Kidney Stone"
|
|
update published "1997-06-26"
|
|
}
|
|
{
|
|
match title "The Chamber Pot of Secrets"
|
|
update published "1998-07-02"
|
|
}
|
|
{
|
|
match title "The Prisoner of Aunt Kazban"
|
|
update published "1999-07-08"
|
|
}
|
|
{
|
|
match title "The Goblet of the Fire Cocktail"
|
|
update published "2000-07-08"
|
|
}
|
|
{
|
|
match title "The Order for Kleenex"
|
|
update published "2003-06-21"
|
|
}
|
|
{
|
|
match title "The Half-Priced Pharmacy"
|
|
update published "2005-07-16"
|
|
}
|
|
{
|
|
match title "Yeah, I Got Nothing"
|
|
update published "2007-07-21"
|
|
}
|
|
]
|
|
|
|
`;
|
|
|
|
const simpleAuthorQuery = `
|
|
|
|
update Author {
|
|
match name "Kenneth Grahame"
|
|
update books {
|
|
match title "The Wind in the Willows"
|
|
}
|
|
}
|
|
|
|
`;
|
|
|
|
const compoundAuthorQuery = `
|
|
|
|
update Author {
|
|
match name "J. K. Rolling"
|
|
update books [
|
|
{ match title "The Philosopher's Kidney Stone" }
|
|
{ match title "The Chamber Pot of Secrets" }
|
|
{ match title "The Prisoner of Aunt Kazban" }
|
|
{ match title "The Goblet of the Fire Cocktail" }
|
|
{ match title "The Order for Kleenex" }
|
|
{ match title "The Half-Priced Pharmacy" }
|
|
{ match title "Yeah, I Got Nothing" }
|
|
]
|
|
}
|
|
|
|
`;
|
|
|
|
//do stuff
|
|
test('parseUpdateTree - update a single book', () => {
|
|
//setup
|
|
const tokens = parseInput(simpleBookQuery, true);
|
|
const graph = buildTypeGraph(simpleSchema);
|
|
|
|
//process
|
|
const updateTree = parseUpdateTree(tokens, graph);
|
|
|
|
//inspect
|
|
expect(updateTree.length).toEqual(1);
|
|
expect(updateTree[0].update).toEqual(true);
|
|
expect(updateTree[0].title.match).toEqual('The Wind in the Willows');
|
|
expect(updateTree[0].rating.update).toEqual(9.5);
|
|
});
|
|
|
|
test('parseUpdateTree - update multiple books', () => {
|
|
//setup
|
|
const tokens = parseInput(compoundBookQuery, true);
|
|
const graph = buildTypeGraph(simpleSchema);
|
|
|
|
//process
|
|
const updateTree = parseUpdateTree(tokens, graph);
|
|
|
|
//inspect
|
|
expect(updateTree.length).toEqual(7);
|
|
expect(updateTree[0].update).toEqual(true);
|
|
expect(updateTree[0].title.match).toEqual('The Philosopher\'s Kidney Stone');
|
|
expect(updateTree[0].published.update).toEqual('1997-06-26');
|
|
});
|
|
|
|
test('parseUpdateTree - single join', () => {
|
|
//setup
|
|
const tokens = parseInput(simpleAuthorQuery, true);
|
|
const graph = buildTypeGraph(simpleSchema);
|
|
|
|
//process
|
|
const updateTree = parseUpdateTree(tokens, graph);
|
|
|
|
//inspect
|
|
expect(updateTree.length).toEqual(1);
|
|
expect(updateTree[0].typeName).toEqual('Author');
|
|
expect(updateTree[0].update).toEqual(true);
|
|
expect(updateTree[0].name.match).toEqual('Kenneth Grahame');
|
|
expect(updateTree[0].books.length).toEqual(1);
|
|
expect(updateTree[0].books[0].title.match).toEqual('The Wind in the Willows');
|
|
});
|
|
|
|
test('parseUpdateTree - multiple join', () => {
|
|
//setup
|
|
const tokens = parseInput(compoundAuthorQuery, true);
|
|
const graph = buildTypeGraph(simpleSchema);
|
|
|
|
//process
|
|
const updateTree = parseUpdateTree(tokens, graph);
|
|
|
|
//inspect
|
|
expect(updateTree.length).toEqual(1);
|
|
expect(updateTree[0].typeName).toEqual('Author');
|
|
expect(updateTree[0].update).toEqual(true);
|
|
expect(updateTree[0].name.match).toEqual('J. K. Rolling');
|
|
expect(updateTree[0].books.length).toEqual(7);
|
|
expect(updateTree[0].books[0].title.match).toEqual('The Philosopher\'s Kidney Stone');
|
|
expect(updateTree[0].books[6].title.match).toEqual('Yeah, I Got Nothing');
|
|
});
|
|
|