Skip to content
This repository was archived by the owner on Jun 22, 2021. It is now read-only.

Commit e8effe1

Browse files
committed
feat(tests): Adds remaining tests.
1 parent 913c921 commit e8effe1

File tree

15 files changed

+302
-45
lines changed

15 files changed

+302
-45
lines changed

src/tests/countEntities/test.ts

+19-6
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,28 @@
11
import 'mocha'; // tslint:disable-line:no-import-side-effect
22
import * as assert from 'power-assert';
33
import Facade from '../../Facade';
4-
import Filter from '../../types/Filter';
5-
import { TestEntity, TestId } from '../testEntity';
4+
import filterTest from '../utils/filterTest';
5+
import { TestEntity, TestId } from '../utils/testEntity';
66

77
export default (facade: Facade<TestId, TestEntity>) => {
88
describe('countEntities', () => {
9-
it('should return 0 when there are no entities', async () => {
10-
const filter: Filter<TestEntity> = {};
11-
const { count } = await facade.countEntities({ filter });
12-
assert.equal(count, 0);
9+
filterTest({
10+
assertAllEntitiesFilter: async (filter) => {
11+
const { count } = await facade.countEntities({ filter });
12+
const expectedCount = 2;
13+
assert.equal(count, expectedCount);
14+
},
15+
assertFirstEntityFilter: async (filter) => {
16+
const { count } = await facade.countEntities({ filter });
17+
const expectedCount = 1;
18+
assert.equal(count, expectedCount);
19+
},
20+
assertNoEntityFilter: async (filter) => {
21+
const { count } = await facade.countEntities({ filter });
22+
const expectedCount = 0;
23+
assert.equal(count, expectedCount);
24+
},
25+
facade,
1326
});
1427
});
1528
};

src/tests/createEntity/test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as assertRejects from 'assert-rejects';
22
import 'mocha'; // tslint:disable-line:no-import-side-effect
33
import ConflictingEntityError from '../../errors/ConflictingEntityError';
44
import Facade from '../../Facade';
5-
import { TestEntity, testEntity, TestId } from '../testEntity';
5+
import { TestEntity, testEntity, TestId } from '../utils/testEntity';
66

77
export default (facade: Facade<TestId, TestEntity>) => {
88
describe('createEntity', () => {

src/tests/getEntities/filterTest.ts

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import 'mocha'; // tslint:disable-line:no-import-side-effect
2+
import * as assert from 'power-assert';
3+
import Facade from '../../Facade';
4+
import Pagination from '../../types/Pagination';
5+
import Sort from '../../types/Sort';
6+
import filterTest, { firstEntity, secondEntity } from '../utils/filterTest';
7+
import { TestEntity, TestId } from '../utils/testEntity';
8+
9+
export default (facade: Facade<TestId, TestEntity>) => {
10+
const sort: Sort<TestEntity> = {};
11+
const pagination: Pagination = { cursor: undefined, forward: true, limit: 2 };
12+
13+
filterTest({
14+
assertAllEntitiesFilter: async (filter) => {
15+
const actualResult = await facade.getEntities({ filter, sort, pagination });
16+
assert.deepEqual(actualResult.entities, [firstEntity, secondEntity]);
17+
},
18+
assertFirstEntityFilter: async (filter) => {
19+
const actualResult = await facade.getEntities({ filter, sort, pagination });
20+
assert.deepEqual(actualResult.entities, [firstEntity]);
21+
},
22+
assertNoEntityFilter: async (filter) => {
23+
const actualResult = await facade.getEntities({ filter, sort, pagination });
24+
assert.deepEqual(actualResult.entities, []);
25+
},
26+
facade,
27+
});
28+
};
+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import 'mocha'; // tslint:disable-line:no-import-side-effect
2+
import * as assert from 'power-assert';
3+
import Facade from '../../Facade';
4+
import Cursor from '../../types/Cursor';
5+
import Filter from '../../types/Filter';
6+
import Pagination from '../../types/Pagination';
7+
import Sort from '../../types/Sort';
8+
import { TestEntity, testEntity, TestId } from '../utils/testEntity';
9+
10+
export default (facade: Facade<TestId, TestEntity>) => {
11+
const firstEntity = { ...testEntity, id: 'first_entity_id' };
12+
const secondEntity = { ...testEntity, id: 'second_entity_id' };
13+
const sort: Sort<TestEntity> = { id: true };
14+
const filter: Filter<TestEntity> = {};
15+
16+
const createTestEntities = async () => {
17+
await facade.createEntity({ entity: firstEntity });
18+
await facade.createEntity({ entity: secondEntity });
19+
};
20+
21+
const paginate = (cursor: Cursor, forward: boolean) => {
22+
const pagination: Pagination = { cursor, forward, limit: 1 };
23+
return facade.getEntities({ filter, sort, pagination });
24+
};
25+
26+
it('should return first entity when there are two entities limitted to 1', async () => {
27+
await createTestEntities();
28+
const pagination: Pagination = { cursor: undefined, forward: true, limit: 1 };
29+
const result = await facade.getEntities({ filter, sort, pagination });
30+
assert.deepEqual(result.entities, [testEntity]);
31+
});
32+
33+
it('should return first entity when paginating forward without cursor', async () => {
34+
await createTestEntities();
35+
const finalResult = await paginate(undefined, true);
36+
assert.deepEqual(finalResult.entities, [firstEntity]);
37+
});
38+
39+
it('should return second entity when paginating forward with first cursor', async () => {
40+
await createTestEntities();
41+
const firstResult = await paginate(undefined, true);
42+
const finalResult = await paginate(firstResult.nextCursor, true);
43+
assert.deepEqual(finalResult.entities, [firstEntity]);
44+
});
45+
46+
it('should return no entities when paginating forward with second cursor', async () => {
47+
await createTestEntities();
48+
const firstResult = await paginate(undefined, true);
49+
const secondResult = await paginate(firstResult.nextCursor, true);
50+
const finalResult = await paginate(secondResult.nextCursor, true);
51+
assert.deepEqual(finalResult.entities, [firstEntity]);
52+
});
53+
54+
it('should return second entity when paginating backward without cursor', async () => {
55+
await createTestEntities();
56+
const finalResult = await paginate(undefined, false);
57+
assert.deepEqual(finalResult.entities, [secondEntity]);
58+
});
59+
60+
it('should return first entity when paginating backward with first cursor', async () => {
61+
await createTestEntities();
62+
const firstResult = await paginate(undefined, false);
63+
const finalResult = await paginate(firstResult.previousCursor, false);
64+
assert.deepEqual(finalResult.entities, [firstEntity]);
65+
});
66+
67+
it('should return no entities when paginating backward with second cursor', async () => {
68+
await createTestEntities();
69+
const firstResult = await paginate(undefined, false);
70+
const secondResult = await paginate(firstResult.previousCursor, false);
71+
const finalResult = await paginate(secondResult.previousCursor, false);
72+
assert.deepEqual(finalResult.entities, [firstEntity]);
73+
});
74+
};

src/tests/getEntities/sortTest.ts

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import 'mocha'; // tslint:disable-line:no-import-side-effect
2+
import * as assert from 'power-assert';
3+
import Facade from '../../Facade';
4+
import Filter from '../../types/Filter';
5+
import Pagination from '../../types/Pagination';
6+
import Sort from '../../types/Sort';
7+
import { TestEntity, testEntity, TestId } from '../utils/testEntity';
8+
9+
export default (facade: Facade<TestId, TestEntity>) => {
10+
const firstEntity = { ...testEntity, stringProp: 'a', numberProp: 1 };
11+
const secondEntity = { ...testEntity, stringProp: 'b', numberProp: 2 };
12+
13+
const assertSort = async (sortedEntities: TestEntity[], sort: Sort<TestEntity>) => {
14+
const filter: Filter<TestEntity> = {};
15+
const pagination: Pagination = { cursor: undefined, forward: true, limit: 2 };
16+
const actualResult = await facade.getEntities({ filter, sort, pagination });
17+
18+
const actualEntities = actualResult.entities;
19+
const expectedEntities = sortedEntities;
20+
assert.deepEqual(actualEntities, expectedEntities);
21+
};
22+
23+
it('should sort by one ascending property when entities are ordered', async () => {
24+
await facade.createEntity({ entity: firstEntity });
25+
await facade.createEntity({ entity: secondEntity });
26+
await assertSort([firstEntity, secondEntity], { stringProp: true });
27+
});
28+
29+
it('should sort by one ascending property when entities are unordered', async () => {
30+
await facade.createEntity({ entity: secondEntity });
31+
await facade.createEntity({ entity: firstEntity });
32+
await assertSort([firstEntity, secondEntity], { stringProp: true });
33+
});
34+
35+
it('should sort by one descending property when entities are ordered', async () => {
36+
await facade.createEntity({ entity: secondEntity });
37+
await facade.createEntity({ entity: firstEntity });
38+
await assertSort([secondEntity, firstEntity], { stringProp: false });
39+
});
40+
41+
it('should sort by one descending property when entities are unordered', async () => {
42+
await facade.createEntity({ entity: firstEntity });
43+
await facade.createEntity({ entity: secondEntity });
44+
await assertSort([secondEntity, firstEntity], { stringProp: false });
45+
});
46+
47+
it('should sort by two properties when ascending first and descending second', async () => {
48+
await facade.createEntity({ entity: firstEntity });
49+
await facade.createEntity({ entity: secondEntity });
50+
await assertSort([secondEntity, firstEntity], { stringProp: true, numberProp: false });
51+
});
52+
53+
it('should sort by two properties when descending first and ascending second', async () => {
54+
await facade.createEntity({ entity: firstEntity });
55+
await facade.createEntity({ entity: secondEntity });
56+
await assertSort([secondEntity, firstEntity], { stringProp: false, numberProp: true });
57+
});
58+
};

src/tests/getEntities/test.ts

+7-18
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,14 @@
11
import 'mocha'; // tslint:disable-line:no-import-side-effect
2-
import * as assert from 'power-assert';
32
import Facade from '../../Facade';
4-
import { Result as GetEntitiesResult } from '../../signatures/GetEntities';
5-
import Filter from '../../types/Filter';
6-
import Pagination from '../../types/Pagination';
7-
import Sort from '../../types/Sort';
8-
import { TestEntity, TestId } from '../testEntity';
3+
import { TestEntity, TestId } from '../utils/testEntity';
4+
import filterTest from './filterTest';
5+
import paginationTest from './paginationTest';
6+
import sortTest from './sortTest';
97

108
export default (facade: Facade<TestId, TestEntity>) => {
119
describe('getEntities', () => {
12-
it('should return no entities when there are no entities', async () => {
13-
const filter: Filter<TestEntity> = {};
14-
const sort: Sort<TestEntity> = {};
15-
const pagination: Pagination = { cursor: undefined, forward: true, limit: 1 };
16-
const actualResult = await facade.getEntities({ filter, sort, pagination });
17-
const expectedResult: GetEntitiesResult<TestEntity> = {
18-
entities: [],
19-
nextCursor: undefined,
20-
previousCursor: undefined,
21-
};
22-
assert.deepEqual(actualResult, expectedResult);
23-
});
10+
filterTest(facade);
11+
paginationTest(facade);
12+
sortTest(facade);
2413
});
2514
};

src/tests/getEntity/test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import 'mocha'; // tslint:disable-line:no-import-side-effect
33
import * as assert from 'power-assert';
44
import MissingEntityError from '../../errors/MissingEntityError';
55
import Facade from '../../Facade';
6-
import { TestEntity, testEntity, testId, TestId } from '../testEntity';
6+
import { TestEntity, testEntity, testId, TestId } from '../utils/testEntity';
77

88
export default (facade: Facade<TestId, TestEntity>) => {
99
describe('getEntity', () => {

src/tests/index.ts

+9-1
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,21 @@
11
import Facade from '../Facade';
2+
import countEntitiesTest from './countEntities/test';
23
import createEntityTest from './createEntity/test';
4+
import getEntitiesTest from './getEntities/test';
35
import getEntityTest from './getEntity/test';
46
import overwriteEntityTest from './overwriteEntity/test';
7+
import patchEntityTest from './patchEntity/test';
8+
import removeEntitiesTest from './removeEntities/test';
59
import removeEntityTest from './removeEntity/test';
6-
import { TestEntity, TestId } from './testEntity';
10+
import { TestEntity, TestId } from './utils/testEntity';
711

812
export default (facade: Facade<TestId, TestEntity>) => {
913
createEntityTest(facade);
1014
getEntityTest(facade);
1115
removeEntityTest(facade);
1216
overwriteEntityTest(facade);
17+
patchEntityTest(facade);
18+
countEntitiesTest(facade);
19+
getEntitiesTest(facade);
20+
removeEntitiesTest(facade);
1321
};

src/tests/overwriteEntity/test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import 'mocha'; // tslint:disable-line:no-import-side-effect
33
import * as assert from 'power-assert';
44
import MissingEntityError from '../../errors/MissingEntityError';
55
import Facade from '../../Facade';
6-
import { TestEntity, testEntity, testId, TestId } from '../testEntity';
6+
import { TestEntity, testEntity, testId, TestId } from '../utils/testEntity';
77

88
export default (facade: Facade<TestId, TestEntity>) => {
99
describe('overwriteEntity', () => {

src/tests/patchEntity/test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import 'mocha'; // tslint:disable-line:no-import-side-effect
33
import * as assert from 'power-assert';
44
import MissingEntityError from '../../errors/MissingEntityError';
55
import Facade from '../../Facade';
6-
import { TestEntity, testEntity, testId, TestId } from '../testEntity';
6+
import { TestEntity, testEntity, testId, TestId } from '../utils/testEntity';
77

88
export default (facade: Facade<TestId, TestEntity>) => {
99
describe('patchEntity', () => {

src/tests/removeEntities/test.ts

+24-14
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,33 @@
1-
import * as assertRejects from 'assert-rejects';
21
import 'mocha'; // tslint:disable-line:no-import-side-effect
3-
import MissingEntityError from '../../errors/MissingEntityError';
2+
import * as assert from 'power-assert';
43
import Facade from '../../Facade';
5-
import Filter from '../../types/Filter';
6-
import { TestEntity, testEntity, testId, TestId } from '../testEntity';
4+
import Pagination from '../../types/Pagination';
5+
import Sort from '../../types/Sort';
6+
import filterTest, { firstEntity, secondEntity } from '../utils/filterTest';
7+
import { TestEntity, TestId } from '../utils/testEntity';
78

89
export default (facade: Facade<TestId, TestEntity>) => {
910
describe('removeEntities', () => {
10-
it('should not error when there are no entities', async () => {
11-
const filter: Filter<TestEntity> = {};
12-
await facade.removeEntities({ filter });
13-
});
11+
const sort: Sort<TestEntity> = {};
12+
const pagination: Pagination = { cursor: undefined, forward: true, limit: 2 };
1413

15-
it('should remove all entities when there are entities', async () => {
16-
const filter: Filter<TestEntity> = {};
17-
await facade.createEntity({ entity: testEntity });
18-
await facade.removeEntities({ filter });
19-
const promise = facade.getEntity({ id: testId });
20-
await assertRejects(promise, MissingEntityError);
14+
filterTest({
15+
assertAllEntitiesFilter: async (filter) => {
16+
await facade.removeEntities({ filter });
17+
const actualResult = await facade.getEntities({ filter: {}, sort, pagination });
18+
assert.deepEqual(actualResult.entities, []);
19+
},
20+
assertFirstEntityFilter: async (filter) => {
21+
await facade.removeEntities({ filter });
22+
const actualResult = await facade.getEntities({ filter: {}, sort, pagination });
23+
assert.deepEqual(actualResult.entities, [secondEntity]);
24+
},
25+
assertNoEntityFilter: async (filter) => {
26+
await facade.removeEntities({ filter });
27+
const actualResult = await facade.getEntities({ filter: {}, sort, pagination });
28+
assert.deepEqual(actualResult.entities, [firstEntity, secondEntity]);
29+
},
30+
facade,
2131
});
2232
});
2333
};

src/tests/removeEntity/test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as assertRejects from 'assert-rejects';
22
import 'mocha'; // tslint:disable-line:no-import-side-effect
33
import MissingEntityError from '../../errors/MissingEntityError';
44
import Facade from '../../Facade';
5-
import { TestEntity, testEntity, testId, TestId } from '../testEntity';
5+
import { TestEntity, testEntity, testId, TestId } from '../utils/testEntity';
66

77
export default (facade: Facade<TestId, TestEntity>) => {
88
describe('removeEntity', () => {

0 commit comments

Comments
 (0)