Skip to content

Commit 1d5b0b6

Browse files
committed
Add unit tests for dataset, revision and task services (#686)
Brings the three under-covered services up to the testing-initiative target: - dataset.ts: 50% -> 99.6% statements - revision.ts: 31% -> 93.5% statements - task.ts: 14% -> 100% statements Covers happy and unhappy paths across each service's public methods, including task lifecycle and status transitions, revision draft/approval flows and dataset fact-table replacement. dataset.ts: drop the dead revisionIndex === 1 guard around the dimension/measure reset (the surrounding code already guarantees only the first revision reaches it) and use the injected this.fileService instead of getFileService() so the draft-revision delete path is unit-testable. Raise the global coverage thresholds in jest.config.ts to match the new floor (statements 79, branches 67, functions 75, lines 79).
1 parent b02c6cb commit 1d5b0b6

5 files changed

Lines changed: 1609 additions & 11 deletions

File tree

jest.config.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ const config: Config = {
2525
coverageReporters: ['cobertura', 'lcov', 'html', 'text'],
2626
coverageThreshold: {
2727
global: {
28-
statements: 61,
29-
branches: 49,
30-
functions: 57,
31-
lines: 61
28+
statements: 79,
29+
branches: 67,
30+
functions: 75,
31+
lines: 79
3232
}
3333
},
3434
projects: [

src/services/dataset.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ import {
4545
import { StorageService } from '../interfaces/storage-service';
4646
import { TempFile } from '../interfaces/temp-file';
4747
import { dbManager } from '../db/database-manager';
48-
import { getFileService } from '../utils/get-file-service';
4948
import { bootstrapCubeBuildProcess } from '../utils/lookup-table-utils';
5049

5150
export class DatasetService {
@@ -118,10 +117,9 @@ export class DatasetService {
118117
col.factTableColumn = col.columnName;
119118
});
120119

121-
if (draftRevision.revisionIndex === 1) {
122-
await removeAllDimensions(dataset);
123-
await removeMeasure(dataset);
124-
}
120+
// only the first revision can have its fact table replaced (guarded above), so always reset its dimensions/measure
121+
await removeAllDimensions(dataset);
122+
await removeMeasure(dataset);
125123

126124
await RevisionRepository.replaceDataTable(draftRevision, dataTable);
127125
await DatasetRepository.replaceFactTable(dataset, dataTable);
@@ -356,13 +354,12 @@ export class DatasetService {
356354
}
357355

358356
const cubeDB = dbManager.getCubeDataSource().createQueryRunner();
359-
const fileService = getFileService();
360357
try {
361358
logger.warn(`Deleting draft revision ${revisionId} from cube database and data lake...`);
362359
await cubeDB.query(pgformat('DROP SCHEMA IF EXISTS %I CASCADE', revisionId));
363360
if (draft.dataTable?.id) {
364361
await cubeDB.query(pgformat('DROP TABLE IF EXISTS data_tables.%I;', draft.dataTable?.id));
365-
await fileService.delete(draft.dataTable.id, datasetId);
362+
await this.fileService.delete(draft.dataTable.id, datasetId);
366363
}
367364
} catch (err) {
368365
logger.warn(

0 commit comments

Comments
 (0)