Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/dtos/tasklist-state-dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,9 @@ export class TasklistStateDTO {
const isUpdate = Boolean(revision.previousRevisionId);
let status = TaskListStatus.NotStarted;

if (isUpdate) {
if (revision.tasks?.measure) {
status = revision.tasks.measure.lookupTableUpdated ? TaskListStatus.Updated : TaskListStatus.NotStarted;
} else if (isUpdate) {
status = TaskListStatus.Unchanged;
} else if (measure.joinColumn) {
status = TaskListStatus.Completed;
Expand Down
8 changes: 2 additions & 6 deletions src/services/measure-handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ import { performanceReporting } from '../utils/performance-reporting';
import { FileType } from '../enums/file-type';
import { dbManager } from '../db/database-manager';
import { MeasureMetadata } from '../entities/dataset/measure-metadata';
import { RevisionTask } from '../interfaces/revision-task';
import { loadFileIntoCube } from '../utils/file-utils';
import { randomUUID } from 'node:crypto';

Expand Down Expand Up @@ -799,11 +798,7 @@ async function getMeasurePreviewWithExtractor(
return viewGenerator(currentDataset, 1, pageInfo, pageSize, 1, headers, dataArray);
}

export const getMeasurePreview = async (
dataset: Dataset,
lang: string,
revisionTasks?: RevisionTask
): Promise<ViewDTO | ViewErrDTO> => {
export const getMeasurePreview = async (dataset: Dataset, lang: string): Promise<ViewDTO | ViewErrDTO> => {
logger.debug(`Getting preview for measure: ${dataset.measure.id}`);
const measure = dataset.measure;

Expand All @@ -812,6 +807,7 @@ export const getMeasurePreview = async (
}

try {
const revisionTasks = dataset.draftRevision?.tasks;
// If there's a revision task for the measure empty the measure table to preview the raw column
if (revisionTasks && revisionTasks.measure) measure.measureTable = [];

Expand Down
54 changes: 54 additions & 0 deletions test/unit/dtos/tasklist-state-dto.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,60 @@ describe('TasklistStateDTO', () => {
status: TaskListStatus.Unchanged
});
});

it('should return NotStarted when revision.tasks.measure has lookupTableUpdated=false', () => {
const dataset = {
measure: {
id: 'measure-1',
factTableColumn: 'value',
joinColumn: 'measure_col',
metadata: [{ language: 'en', name: 'Test Measure' }]
}
} as Dataset;
const revision = {
previousRevisionId: 'prev-123',
tasks: {
dimensions: [],
measure: { id: 'measure-1', lookupTableUpdated: false }
}
} as unknown as Revision;

const result = TasklistStateDTO.measureStatus(dataset, revision, 'en');

expect(result).toEqual({
type: 'measure',
id: 'measure-1',
name: 'Test Measure',
status: TaskListStatus.NotStarted
});
});

it('should return Updated when revision.tasks.measure has lookupTableUpdated=true', () => {
const dataset = {
measure: {
id: 'measure-1',
factTableColumn: 'value',
joinColumn: 'measure_col',
metadata: [{ language: 'en', name: 'Test Measure' }]
}
} as Dataset;
const revision = {
previousRevisionId: 'prev-123',
tasks: {
dimensions: [],
measure: { id: 'measure-1', lookupTableUpdated: true }
}
} as unknown as Revision;

const result = TasklistStateDTO.measureStatus(dataset, revision, 'en');

expect(result).toEqual({
type: 'measure',
id: 'measure-1',
name: 'Test Measure',
status: TaskListStatus.Updated
});
});
});

describe('dimensionStatus', () => {
Expand Down
25 changes: 25 additions & 0 deletions test/unit/services/measure-handler.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -367,6 +367,31 @@ describe('getMeasurePreview', () => {
expect(result).toMatchObject({ current_page: 1 });
});

it('treats null revisionTasks as absent (uses with-extractor path when measureTable has rows)', async () => {
const dataset = makeDataset({
measureTable: [
{ id: 'measure-1', reference: 'REF1', language: 'en-gb', description: 'Desc', format: 'integer' }
]
});

mockQuery.mockResolvedValueOnce([
{
reference: 'REF1',
description: 'Desc 1',
notes: null,
sort_order: 1,
format: 'integer',
decimals: 0,
measure_type: null,
hierarchy: null
}
]);

const result = (await getMeasurePreview(dataset, 'en-GB')) as ViewDTO;

expect(result).toMatchObject({ current_page: 1, page_size: 1 });
});

it('uses the with-extractor path when measureTable has rows', async () => {
const dataset = makeDataset({
measureTable: [
Expand Down
Loading