feat(autoRepair): make _removeMissingIdsFromLists work

This commit is contained in:
Johannes Millan 2020-09-24 22:05:14 +02:00
parent 6a111d92ce
commit 192ef5ad86
2 changed files with 99 additions and 15 deletions

View file

@ -5,6 +5,8 @@ import { fakeEntityStateFromArray } from '../../util/fake-entity-state-from-arra
import { DEFAULT_TASK, Task } from '../../features/tasks/task.model';
import { createEmptyEntity } from '../../util/create-empty-entity';
import { Tag, TagState } from '../../features/tag/tag.model';
import { ProjectState } from '../../features/project/store/project.reducer';
import { Project } from '../../features/project/project.model';
fdescribe('dataRepair()', () => {
let mock: AppDataComplete;
@ -38,7 +40,7 @@ fdescribe('dataRepair()', () => {
});
});
xit('should delete missing tasks for tags today list', () => {
it('should delete missing tasks for tags today list', () => {
const taskState = {
...mock.task,
...fakeEntityStateFromArray<Task>([{
@ -77,8 +79,83 @@ fdescribe('dataRepair()', () => {
});
it('should delete missing tasks for projects today list', () => {
const taskState = {
...mock.task,
...fakeEntityStateFromArray<Task>([{
...DEFAULT_TASK,
id: 'TEST',
title: 'TEST',
}])
} as any;
const projectState: ProjectState = {
...fakeEntityStateFromArray([{
title: 'TEST_PROJECT',
id: 'TEST_ID_PROJECT',
taskIds: ['goneProject', 'TEST', 'noneExisting'],
backlogTaskIds: [],
}] as Partial<Project> []),
};
expect(dataRepair({
...mock,
project: projectState,
task: taskState,
})).toEqual({
...mock,
task: taskState as any,
project: {
...projectState,
entities: {
TEST_ID_PROJECT: {
title: 'TEST_PROJECT',
id: 'TEST_ID_PROJECT',
taskIds: ['TEST'],
backlogTaskIds: [],
},
} as any
}
});
});
it('should delete missing tasks for projects backlog list', () => {
const taskState = {
...mock.task,
...fakeEntityStateFromArray<Task>([{
...DEFAULT_TASK,
id: 'TEST',
title: 'TEST',
}])
} as any;
const projectState: ProjectState = {
...fakeEntityStateFromArray([{
title: 'TEST_PROJECT',
id: 'TEST_ID_PROJECT',
taskIds: [],
backlogTaskIds: ['goneProject', 'TEST', 'noneExisting'],
}] as Partial<Project> []),
};
expect(dataRepair({
...mock,
project: projectState,
task: taskState,
})).toEqual({
...mock,
task: taskState as any,
project: {
...projectState,
entities: {
TEST_ID_PROJECT: {
title: 'TEST_PROJECT',
id: 'TEST_ID_PROJECT',
taskIds: [],
backlogTaskIds: ['TEST'],
},
} as any
}
});
});
describe('should fix duplicate entities for', () => {

View file

@ -1,12 +1,16 @@
import { AppBaseDataEntityLikeStates, AppDataComplete } from '../../imex/sync/sync.model';
import { TagCopy } from '../../features/tag/tag.model';
import { ProjectCopy } from '../../features/project/project.model';
const ENTITY_STATE_KEYS: (keyof AppDataComplete)[] = ['task', 'taskArchive', 'taskRepeatCfg', 'tag', 'project', 'simpleCounter'];
export const dataRepair = (data: AppDataComplete): AppDataComplete => {
// console.time('dataRepair');
let dataOut: AppDataComplete = data;
// let dataOut: AppDataComplete = dirtyDeepCopy(data);
dataOut = _fixEntityStates(dataOut);
dataOut = _removeDuplicatesFromArchive(dataOut);
dataOut = _removeMissingIdsFromLists(dataOut);
// console.timeEnd('dataRepair');
return dataOut;
};
@ -19,7 +23,6 @@ const _fixEntityStates = (data: AppDataComplete): AppDataComplete => {
return data;
};
//
const _removeDuplicatesFromArchive = (data: AppDataComplete): AppDataComplete => {
const taskIds = data.task.ids as string[];
const archiveTaskIds = data.taskArchive.ids as string[];
@ -36,20 +39,24 @@ const _removeDuplicatesFromArchive = (data: AppDataComplete): AppDataComplete =>
return data;
};
// const _removeDuplicatesFromArchive = (data: AppDataComplete): AppDataComplete => {
// return data;
// };
//
// const _removeDuplicatesFromArchive = (data: AppDataComplete): AppDataComplete => {
// return data;
// };
const _removeMissingIdsFromLists = (data: AppDataComplete): AppDataComplete => {
const {task, project, tag} = data;
// const _makeEntityIdsUnique = <T>(data: AppBaseDataEntityLikeStates): AppBaseDataEntityLikeStates => {
// return {
// ...data,
// ids: unique(data.ids as any) as any
// };
// };
project.ids.forEach(() => {
});
project.ids.forEach((pId: string | number) => {
const projectItem = project.entities[pId] as ProjectCopy;
projectItem.taskIds = projectItem.taskIds.filter(id => task.ids.includes(id));
projectItem.backlogTaskIds = projectItem.backlogTaskIds.filter(id => task.ids.includes(id));
});
tag.ids.forEach((tId: string | number) => {
const tagItem = tag.entities[tId] as TagCopy;
tagItem.taskIds = tagItem.taskIds.filter(id => task.ids.includes(id));
});
return data;
};
const _resetEntityIdsFromObjects = <T>(data: AppBaseDataEntityLikeStates): AppBaseDataEntityLikeStates => {
return {