fix(core): Fix workflow tagging failure due to unique constraint check (#8505)

This commit is contained in:
Iván Ovejero
2024-02-02 12:36:55 +01:00
committed by GitHub
parent cccdfc73d6
commit 92f939f827
3 changed files with 101 additions and 4 deletions

View File

@@ -0,0 +1,90 @@
import Container from 'typedi';
import * as testDb from './shared/testDb';
import { WorkflowTagMappingRepository } from '@/databases/repositories/workflowTagMapping.repository';
import { createWorkflow } from './shared/db/workflows';
import { TagRepository } from '@/databases/repositories/tag.repository';
describe('WorkflowTagMappingRepository', () => {
let taggingRepository: WorkflowTagMappingRepository;
let tagRepository: TagRepository;
beforeAll(async () => {
await testDb.init();
taggingRepository = Container.get(WorkflowTagMappingRepository);
tagRepository = Container.get(TagRepository);
});
afterEach(async () => {
await testDb.truncate(['WorkflowTagMapping', 'Workflow', 'Tag']);
});
afterAll(async () => {
await testDb.terminate();
});
describe('overwriteTaggings', () => {
test('should overwrite taggings in a workflow', async () => {
const workflow = await createWorkflow();
const oldTags = await tagRepository.save(
['tag1', 'tag2'].map((name) => tagRepository.create({ name })),
);
const oldTaggings = oldTags.map((tag) =>
taggingRepository.create({
tagId: tag.id,
workflowId: workflow.id,
}),
);
await taggingRepository.save(oldTaggings);
const newTags = await tagRepository.save(
['tag3', 'tag4'].map((name) => tagRepository.create({ name })),
);
await taggingRepository.overwriteTaggings(
workflow.id,
newTags.map((t) => t.id),
);
const taggings = await taggingRepository.findBy({ workflowId: workflow.id });
expect(taggings).toHaveLength(2);
const [firstNewTag, secondNewTag] = newTags;
expect(taggings).toEqual(
expect.arrayContaining([
expect.objectContaining({ tagId: firstNewTag.id, workflowId: workflow.id }),
expect.objectContaining({ tagId: secondNewTag.id, workflowId: workflow.id }),
]),
);
});
test('should delete taggings if no tags are provided', async () => {
const workflow = await createWorkflow();
const oldTags = await tagRepository.save(
['tag1', 'tag2'].map((name) => tagRepository.create({ name })),
);
const oldTaggings = oldTags.map((tag) =>
taggingRepository.create({
tagId: tag.id,
workflowId: workflow.id,
}),
);
await taggingRepository.save(oldTaggings);
await taggingRepository.overwriteTaggings(workflow.id, []);
const taggings = await taggingRepository.findBy({ workflowId: workflow.id });
expect(taggings).toHaveLength(0);
});
});
});