grapher/lib/query/testing/server.test.js

242 lines
No EOL
6.8 KiB
JavaScript

import { createQuery } from 'meteor/cultofcoders:grapher';
import Comments from './bootstrap/comments/collection.js';
describe('Hypernova', function () {
it('Should fetch One links correctly', function () {
const data = createQuery({
comments: {
text: 1,
author: {
name: 1
}
}
}).fetch();
assert.lengthOf(data, Comments.find().count());
assert.isTrue(data.length > 0);
_.each(data, comment => {
assert.isObject(comment.author);
assert.isString(comment.author.name);
assert.isString(comment.author._id);
assert.isTrue(_.keys(comment.author).length == 2);
})
});
it('Should fetch One links with limit and options', function () {
const data = createQuery({
comments: {
$options: {limit: 5},
text: 1
}
}).fetch();
assert.lengthOf(data, 5);
});
it('Should fetch One-Inversed links with limit and options', function () {
const data = createQuery({
authors: {
$options: {limit: 5},
comments: {
$filters: {text: 'Good'},
$options: {limit: 2},
text: 1
}
}
}).fetch();
assert.lengthOf(data, 5);
_.each(data, author => {
assert.lengthOf(author.comments, 2);
_.each(author.comments, comment => {
assert.equal('Good', comment.text);
})
})
});
it('Should fetch Many links correctly', function () {
const data = createQuery({
posts: {
$options: {limit: 5},
title: 1,
tags: {
text: 1
}
}
}).fetch();
assert.lengthOf(data, 5);
_.each(data, post => {
assert.isString(post.title);
assert.isArray(post.tags);
assert.isTrue(post.tags.length > 0);
})
});
it('Should fetch Many - inversed links correctly', function () {
const data = createQuery({
tags: {
name: 1,
posts: {
$options: {limit: 5},
title: 1
}
}
}).fetch();
_.each(data, tag => {
assert.isString(tag.name);
assert.isArray(tag.posts);
assert.lengthOf(tag.posts, 5);
_.each(tag.posts, post => {
assert.isString(post.title);
})
})
});
it('Should fetch One-Meta links correctly', function () {
const data = createQuery({
posts: {
$options: {limit: 5},
title: 1,
group: {
name: 1
}
}
}).fetch();
assert.lengthOf(data, 5);
_.each(data, post => {
assert.isString(post.title);
assert.isString(post._id);
assert.isObject(post.group);
assert.isString(post.group._id);
assert.isString(post.group.name);
})
});
it('Should fetch One-Meta inversed links correctly', function () {
const data = createQuery({
groups: {
name: 1,
posts: {
title: 1
}
}
}).fetch();
_.each(data, group => {
assert.isString(group.name);
assert.isString(group._id);
assert.lengthOf(_.keys(group), 3);
assert.isArray(group.posts);
_.each(group.posts, post => {
assert.isString(post.title);
assert.isString(post._id);
})
})
});
it('Should fetch Many-Meta links correctly', function () {
const data = createQuery({
authors: {
name: 1,
groups: {
$options: {limit: 1},
name: 1
}
}
}).fetch();
_.each(data, author => {
assert.isArray(author.groups);
assert.lengthOf(author.groups, 1);
_.each(author.groups, group => {
assert.isObject(group);
assert.isString(group._id);
assert.isString(group.name);
})
})
});
it('Should fetch Many-Meta inversed links correctly', function () {
const data = createQuery({
groups: {
name: 1,
authors: {
$options: {limit: 2},
name: 1
}
}
}).fetch();
_.each(data, group => {
assert.isArray(group.authors);
assert.isTrue(group.authors.length <= 2);
_.each(group.authors, author => {
assert.isObject(author);
assert.isString(author._id);
assert.isString(author.name);
})
})
});
it('Should fetch Resolver links properly', function () {
const data = createQuery({
posts: {
$options: {limit: 5},
commentsCount: 1
}
}).fetch();
assert.lengthOf(data, 5);
_.each(data, post => {
assert.equal(10, post.commentsCount);
})
})
it('Should fetch in depth properly at any given level.', function () {
const data = createQuery({
authors: {
$options: {limit: 5},
posts: {
$options: {limit: 5},
comments: {
$options: {limit: 5},
author: {
groups: {
posts: {
$options: {limit: 5},
author: {
name: 1
}
}
}
}
}
}
}
}).fetch();
assert.lengthOf(data, 5);
let arrivedInDepth = false;
_.each(data, author => {
_.each(author.posts, post => {
_.each(post.comments, comment => {
_.each(comment.author.groups, group => {
_.each(group.posts, post => {
assert.isString(post.author.name);
arrivedInDepth = true;
})
})
})
})
});
assert.isTrue(arrivedInDepth);
})
});