b6519e0f1f
fixes GRO-34 fixes GRO-33 This is a revision of a previous commit, that broke the browser tests because changes in the data generator (requiring bookshelf had side effects). This adds a new way to run all tests with enforced numeric ObjectIDs. These numeric ids cause issues if they are used withing NQL filters. So they surface tiny bugs in our codebase. You can run tests using this option via: NUMERIC_IDS=1 yarn test:e2e Removed some defensive logic that could be explained by this discovered issue.
111 lines
3.6 KiB
JavaScript
111 lines
3.6 KiB
JavaScript
const assert = require('assert/strict');
|
|
const ObjectID = require('bson-objectid');
|
|
const InMemoryMentionRepository = require('../lib/InMemoryMentionRepository');
|
|
const Mention = require('../lib/Mention');
|
|
|
|
describe('InMemoryMentionRepository', function () {
|
|
it('Can handle filtering on resourceId', async function () {
|
|
const resourceId = new ObjectID();
|
|
const repository = new InMemoryMentionRepository();
|
|
|
|
const validInput = {
|
|
source: 'https://source.com',
|
|
target: 'https://target.com',
|
|
sourceTitle: 'Title!',
|
|
sourceExcerpt: 'Excerpt!'
|
|
};
|
|
|
|
const mentions = await Promise.all([
|
|
Mention.create(validInput),
|
|
Mention.create({
|
|
...validInput,
|
|
resourceId
|
|
}),
|
|
Mention.create({
|
|
...validInput,
|
|
resourceId
|
|
}),
|
|
Mention.create(validInput),
|
|
Mention.create({
|
|
...validInput,
|
|
resourceId
|
|
}),
|
|
Mention.create({
|
|
...validInput,
|
|
resourceId
|
|
}),
|
|
Mention.create(validInput),
|
|
Mention.create({
|
|
...validInput,
|
|
resourceId
|
|
}),
|
|
Mention.create(validInput)
|
|
]);
|
|
|
|
for (const mention of mentions) {
|
|
await repository.save(mention);
|
|
}
|
|
|
|
const pageOne = await repository.getPage({
|
|
filter: `resource_id:'${resourceId.toHexString()}'`,
|
|
limit: 2,
|
|
page: 1
|
|
});
|
|
assert(pageOne.meta.pagination.total === 5);
|
|
assert(pageOne.meta.pagination.pages === 3);
|
|
assert(pageOne.meta.pagination.prev === null);
|
|
assert(pageOne.meta.pagination.next === 2);
|
|
|
|
const pageTwo = await repository.getPage({
|
|
filter: `resource_id:'${resourceId.toHexString()}'`,
|
|
limit: 2,
|
|
page: 2
|
|
});
|
|
assert(pageTwo.meta.pagination.total === 5);
|
|
assert(pageTwo.meta.pagination.pages === 3);
|
|
assert(pageTwo.meta.pagination.prev === 1);
|
|
assert(pageTwo.meta.pagination.next === 3);
|
|
|
|
const pageThree = await repository.getPage({
|
|
filter: `resource_id:'${resourceId.toHexString()}'`,
|
|
limit: 2,
|
|
page: 3
|
|
});
|
|
assert(pageThree.meta.pagination.total === 5);
|
|
assert(pageThree.meta.pagination.pages === 3);
|
|
assert(pageThree.meta.pagination.prev === 2);
|
|
assert(pageThree.meta.pagination.next === null);
|
|
});
|
|
|
|
describe(`GetPage`, function () {
|
|
it(`Doesn't return deleted mentions`, async function () {
|
|
const repository = new InMemoryMentionRepository();
|
|
|
|
const validInput = {
|
|
source: 'https://source.com',
|
|
target: 'https://target.com',
|
|
sourceTitle: 'Title!',
|
|
sourceExcerpt: 'Excerpt!'
|
|
};
|
|
|
|
const mentions = await Promise.all([
|
|
Mention.create(validInput),
|
|
Mention.create(validInput)
|
|
]);
|
|
|
|
for (const mention of mentions) {
|
|
await repository.save(mention);
|
|
}
|
|
|
|
const pageOne = await repository.getPage({page: 1, limit: 'all'});
|
|
assert(pageOne.meta.pagination.total === 2);
|
|
|
|
mentions[0].delete();
|
|
await repository.save(mentions[0]);
|
|
|
|
const pageTwo = await repository.getPage({page: 1, limit: 'all'});
|
|
assert(pageTwo.meta.pagination.total === 1);
|
|
});
|
|
});
|
|
});
|