Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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', null)) as ViewDTO;
Comment thread
github-code-quality[bot] marked this conversation as resolved.
Fixed

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