Rework edit history service, add unit tests
This commit is contained in:
parent
e682cfa074
commit
4ff64cda79
43
app/src/api/services/__tests__/editHistory.test.ts
Normal file
43
app/src/api/services/__tests__/editHistory.test.ts
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
import { mocked } from 'ts-jest/utils';
|
||||||
|
|
||||||
|
import { EditHistoryEntry } from '../../../frontend/models/edit-history-entry';
|
||||||
|
import * as editHistoryData from '../../dataAccess/editHistory'; // manually mocked
|
||||||
|
import { getGlobalEditHistory } from '../editHistory';
|
||||||
|
|
||||||
|
jest.mock('../../dataAccess/editHistory');
|
||||||
|
|
||||||
|
const mockedEditHistoryData = editHistoryData as typeof import('../../dataAccess/__mocks__/editHistory');
|
||||||
|
|
||||||
|
describe('getGlobalEditHistory()', () => {
|
||||||
|
mockedEditHistoryData.__setHistory(
|
||||||
|
[...Array(20).keys()].map<EditHistoryEntry>(i => ({
|
||||||
|
revision_id: (100 + i) + '',
|
||||||
|
revision_timestamp: new Date(2019, 10, 1, 17, 20 + i).toISOString(),
|
||||||
|
username: 'testuser',
|
||||||
|
building_id: 1234567,
|
||||||
|
forward_patch: {},
|
||||||
|
reverse_patch: {}
|
||||||
|
}))
|
||||||
|
);
|
||||||
|
|
||||||
|
describe('without before/after parameters', () => {
|
||||||
|
it.each(
|
||||||
|
[
|
||||||
|
[0, []],
|
||||||
|
[3, ['119', '118', '117']],
|
||||||
|
[6, ['119', '118', '117', '116', '115', '114']]
|
||||||
|
]
|
||||||
|
)('should return the N latest records in descending order', async (count: number, ids: string[]) => {
|
||||||
|
const historyResult = await getGlobalEditHistory(null, null, count);
|
||||||
|
|
||||||
|
expect(historyResult.history.map(h => h.revision_id)).toEqual(ids);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('with after ID parameter', () => {
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('with before ID parameter', () => {
|
||||||
|
|
||||||
|
});
|
||||||
|
});
|
@ -1,20 +1,28 @@
|
|||||||
import db from '../../db';
|
import { EditHistoryEntry } from '../../frontend/models/edit-history-entry';
|
||||||
|
import { getHistoryAfterId, getHistoryBeforeId, getIdNewerThan, getIdOlderThan, getLatestHistory } from '../dataAccess/editHistory';
|
||||||
|
|
||||||
async function getGlobalEditHistory() {
|
async function getGlobalEditHistory(beforeId?: string, afterId?: string, count: number = 100) {
|
||||||
try {
|
// limited set of records. Expected to be already ordered from newest to oldest
|
||||||
return await db.manyOrNone(
|
let editHistoryRecords: EditHistoryEntry[];
|
||||||
`SELECT log_id as revision_id, forward_patch, reverse_patch, date_trunc('minute', log_timestamp) as revision_timestamp, username, building_id
|
|
||||||
FROM logs, users
|
if(afterId != undefined) {
|
||||||
WHERE logs.user_id = users.user_id
|
editHistoryRecords = await getHistoryAfterId(afterId, count);
|
||||||
AND log_timestamp >= now() - interval '7 days'
|
} else if (beforeId != undefined) {
|
||||||
ORDER BY log_timestamp DESC`
|
editHistoryRecords = await getHistoryBeforeId(beforeId, count);
|
||||||
);
|
} else {
|
||||||
} catch (error) {
|
editHistoryRecords = await getLatestHistory(count);
|
||||||
console.error(error);
|
|
||||||
return [];
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
const newer = getIdNewerThan(editHistoryRecords[0]?.revision_id);
|
||||||
|
const older = getIdOlderThan(editHistoryRecords[editHistoryRecords.length-1]?.revision_id);
|
||||||
|
return {
|
||||||
|
history: editHistoryRecords,
|
||||||
|
paging: {
|
||||||
|
has_newer: newer != undefined,
|
||||||
|
has_older: older != undefined
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
getGlobalEditHistory
|
getGlobalEditHistory
|
||||||
|
Loading…
Reference in New Issue
Block a user