2021-08-30 19:53:24 +02:00
|
|
|
import { ModelType } from '../../../BaseModel';
|
|
|
|
import ItemChange from '../../../models/ItemChange';
|
|
|
|
import Note from '../../../models/Note';
|
|
|
|
import { expectThrow, setupDatabaseAndSynchronizer, switchClient } from '../../../testing/test-utils';
|
|
|
|
import { ItemChangeEntity } from '../../database/types';
|
|
|
|
import Api, { RequestMethod } from '../Api';
|
|
|
|
|
|
|
|
let api: Api = null;
|
|
|
|
|
2023-02-20 17:02:29 +02:00
|
|
|
describe('routes/events', () => {
|
2021-08-30 19:53:24 +02:00
|
|
|
|
2022-11-15 12:23:50 +02:00
|
|
|
beforeEach(async () => {
|
2021-08-30 19:53:24 +02:00
|
|
|
api = new Api();
|
|
|
|
await setupDatabaseAndSynchronizer(1);
|
|
|
|
await switchClient(1);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should retrieve the latest events', async () => {
|
|
|
|
let cursor = '0';
|
|
|
|
|
|
|
|
{
|
|
|
|
const response = await api.route(RequestMethod.GET, 'events', { cursor });
|
|
|
|
expect(response.cursor).toBe('0');
|
|
|
|
}
|
|
|
|
|
|
|
|
const note1 = await Note.save({ title: 'toto' });
|
|
|
|
await Note.save({ id: note1.id, title: 'tutu' });
|
|
|
|
const note2 = await Note.save({ title: 'tata' });
|
|
|
|
await ItemChange.waitForAllSaved();
|
|
|
|
|
|
|
|
{
|
|
|
|
const response = await api.route(RequestMethod.GET, 'events', { cursor });
|
|
|
|
expect(response.cursor).toBe('3');
|
|
|
|
expect(response.items.length).toBe(2);
|
|
|
|
expect(response.has_more).toBe(false);
|
|
|
|
expect(response.items.map((it: ItemChangeEntity) => it.item_id).sort()).toEqual([note1.id, note2.id].sort());
|
|
|
|
|
|
|
|
cursor = response.cursor;
|
|
|
|
}
|
|
|
|
|
|
|
|
{
|
|
|
|
const response = await api.route(RequestMethod.GET, 'events', { cursor });
|
|
|
|
expect(response.cursor).toBe(cursor);
|
|
|
|
expect(response.items.length).toBe(0);
|
|
|
|
expect(response.has_more).toBe(false);
|
|
|
|
}
|
|
|
|
|
|
|
|
await Note.save({ id: note2.id, title: 'titi' });
|
|
|
|
await ItemChange.waitForAllSaved();
|
|
|
|
|
|
|
|
{
|
|
|
|
const response = await api.route(RequestMethod.GET, 'events', { cursor });
|
|
|
|
expect(response.cursor).toBe('4');
|
|
|
|
expect(response.items.length).toBe(1);
|
|
|
|
expect(response.items[0].item_id).toBe(note2.id);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should limit the number of response items', async () => {
|
|
|
|
const promises = [];
|
|
|
|
for (let i = 0; i < 101; i++) {
|
|
|
|
promises.push(Note.save({ title: 'toto' }));
|
|
|
|
}
|
|
|
|
|
|
|
|
await Promise.all(promises);
|
|
|
|
await ItemChange.waitForAllSaved();
|
|
|
|
|
|
|
|
const response1 = await api.route(RequestMethod.GET, 'events', { cursor: '0' });
|
|
|
|
expect(response1.items.length).toBe(100);
|
|
|
|
expect(response1.has_more).toBe(true);
|
|
|
|
|
|
|
|
const response2 = await api.route(RequestMethod.GET, 'events', { cursor: response1.cursor });
|
|
|
|
expect(response2.items.length).toBe(1);
|
|
|
|
expect(response2.has_more).toBe(false);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should retrieve a single item', async () => {
|
|
|
|
const beforeTime = Date.now();
|
|
|
|
|
|
|
|
const note = await Note.save({ title: 'toto' });
|
|
|
|
await ItemChange.waitForAllSaved();
|
|
|
|
|
|
|
|
const response = await api.route(RequestMethod.GET, 'events/1');
|
|
|
|
|
|
|
|
expect(response.item_type).toBe(ModelType.Note);
|
|
|
|
expect(response.type).toBe(1);
|
|
|
|
expect(response.item_id).toBe(note.id);
|
|
|
|
expect(response.created_time).toBeGreaterThanOrEqual(beforeTime);
|
|
|
|
|
|
|
|
await expectThrow(async () => api.route(RequestMethod.GET, 'events/1234'));
|
|
|
|
});
|
|
|
|
|
|
|
|
});
|