mirror of
https://github.com/immich-app/immich.git
synced 2025-12-27 09:14:55 +03:00
fix(server): tag upsert (#12141)
This commit is contained in:
@@ -365,25 +365,23 @@ describe(MetadataService.name, () => {
|
||||
it('should extract tags from TagsList', async () => {
|
||||
assetMock.getByIds.mockResolvedValue([assetStub.image]);
|
||||
metadataMock.readTags.mockResolvedValue({ TagsList: ['Parent'] });
|
||||
tagMock.getByValue.mockResolvedValue(null);
|
||||
tagMock.create.mockResolvedValue(tagStub.parent);
|
||||
tagMock.upsertValue.mockResolvedValue(tagStub.parent);
|
||||
|
||||
await sut.handleMetadataExtraction({ id: assetStub.image.id });
|
||||
|
||||
expect(tagMock.create).toHaveBeenCalledWith({ userId: 'user-id', value: 'Parent', parent: undefined });
|
||||
expect(tagMock.upsertValue).toHaveBeenCalledWith({ userId: 'user-id', value: 'Parent', parent: undefined });
|
||||
});
|
||||
|
||||
it('should extract hierarchy from TagsList', async () => {
|
||||
assetMock.getByIds.mockResolvedValue([assetStub.image]);
|
||||
metadataMock.readTags.mockResolvedValue({ TagsList: ['Parent/Child'] });
|
||||
tagMock.getByValue.mockResolvedValue(null);
|
||||
tagMock.create.mockResolvedValueOnce(tagStub.parent);
|
||||
tagMock.create.mockResolvedValueOnce(tagStub.child);
|
||||
tagMock.upsertValue.mockResolvedValueOnce(tagStub.parent);
|
||||
tagMock.upsertValue.mockResolvedValueOnce(tagStub.child);
|
||||
|
||||
await sut.handleMetadataExtraction({ id: assetStub.image.id });
|
||||
|
||||
expect(tagMock.create).toHaveBeenNthCalledWith(1, { userId: 'user-id', value: 'Parent', parent: undefined });
|
||||
expect(tagMock.create).toHaveBeenNthCalledWith(2, {
|
||||
expect(tagMock.upsertValue).toHaveBeenNthCalledWith(1, { userId: 'user-id', value: 'Parent', parent: undefined });
|
||||
expect(tagMock.upsertValue).toHaveBeenNthCalledWith(2, {
|
||||
userId: 'user-id',
|
||||
value: 'Parent/Child',
|
||||
parent: tagStub.parent,
|
||||
@@ -393,35 +391,32 @@ describe(MetadataService.name, () => {
|
||||
it('should extract tags from Keywords as a string', async () => {
|
||||
assetMock.getByIds.mockResolvedValue([assetStub.image]);
|
||||
metadataMock.readTags.mockResolvedValue({ Keywords: 'Parent' });
|
||||
tagMock.getByValue.mockResolvedValue(null);
|
||||
tagMock.create.mockResolvedValue(tagStub.parent);
|
||||
tagMock.upsertValue.mockResolvedValue(tagStub.parent);
|
||||
|
||||
await sut.handleMetadataExtraction({ id: assetStub.image.id });
|
||||
|
||||
expect(tagMock.create).toHaveBeenCalledWith({ userId: 'user-id', value: 'Parent', parent: undefined });
|
||||
expect(tagMock.upsertValue).toHaveBeenCalledWith({ userId: 'user-id', value: 'Parent', parent: undefined });
|
||||
});
|
||||
|
||||
it('should extract tags from Keywords as a list', async () => {
|
||||
assetMock.getByIds.mockResolvedValue([assetStub.image]);
|
||||
metadataMock.readTags.mockResolvedValue({ Keywords: ['Parent'] });
|
||||
tagMock.getByValue.mockResolvedValue(null);
|
||||
tagMock.create.mockResolvedValue(tagStub.parent);
|
||||
tagMock.upsertValue.mockResolvedValue(tagStub.parent);
|
||||
|
||||
await sut.handleMetadataExtraction({ id: assetStub.image.id });
|
||||
|
||||
expect(tagMock.create).toHaveBeenCalledWith({ userId: 'user-id', value: 'Parent', parent: undefined });
|
||||
expect(tagMock.upsertValue).toHaveBeenCalledWith({ userId: 'user-id', value: 'Parent', parent: undefined });
|
||||
});
|
||||
|
||||
it('should extract hierarchal tags from Keywords', async () => {
|
||||
assetMock.getByIds.mockResolvedValue([assetStub.image]);
|
||||
metadataMock.readTags.mockResolvedValue({ Keywords: 'Parent/Child' });
|
||||
tagMock.getByValue.mockResolvedValue(null);
|
||||
tagMock.create.mockResolvedValue(tagStub.parent);
|
||||
tagMock.upsertValue.mockResolvedValue(tagStub.parent);
|
||||
|
||||
await sut.handleMetadataExtraction({ id: assetStub.image.id });
|
||||
|
||||
expect(tagMock.create).toHaveBeenNthCalledWith(1, { userId: 'user-id', value: 'Parent', parent: undefined });
|
||||
expect(tagMock.create).toHaveBeenNthCalledWith(2, {
|
||||
expect(tagMock.upsertValue).toHaveBeenNthCalledWith(1, { userId: 'user-id', value: 'Parent', parent: undefined });
|
||||
expect(tagMock.upsertValue).toHaveBeenNthCalledWith(2, {
|
||||
userId: 'user-id',
|
||||
value: 'Parent/Child',
|
||||
parent: tagStub.parent,
|
||||
|
||||
@@ -115,9 +115,9 @@ describe(TagService.name, () => {
|
||||
|
||||
describe('upsert', () => {
|
||||
it('should upsert a new tag', async () => {
|
||||
tagMock.create.mockResolvedValue(tagStub.parent);
|
||||
tagMock.upsertValue.mockResolvedValue(tagStub.parent);
|
||||
await expect(sut.upsert(authStub.admin, { tags: ['Parent'] })).resolves.toBeDefined();
|
||||
expect(tagMock.create).toHaveBeenCalledWith({
|
||||
expect(tagMock.upsertValue).toHaveBeenCalledWith({
|
||||
value: 'Parent',
|
||||
userId: 'admin_id',
|
||||
parentId: undefined,
|
||||
@@ -126,15 +126,15 @@ describe(TagService.name, () => {
|
||||
|
||||
it('should upsert a nested tag', async () => {
|
||||
tagMock.getByValue.mockResolvedValueOnce(null);
|
||||
tagMock.create.mockResolvedValueOnce(tagStub.parent);
|
||||
tagMock.create.mockResolvedValueOnce(tagStub.child);
|
||||
tagMock.upsertValue.mockResolvedValueOnce(tagStub.parent);
|
||||
tagMock.upsertValue.mockResolvedValueOnce(tagStub.child);
|
||||
await expect(sut.upsert(authStub.admin, { tags: ['Parent/Child'] })).resolves.toBeDefined();
|
||||
expect(tagMock.create).toHaveBeenNthCalledWith(1, {
|
||||
expect(tagMock.upsertValue).toHaveBeenNthCalledWith(1, {
|
||||
value: 'Parent',
|
||||
userId: 'admin_id',
|
||||
parentId: undefined,
|
||||
parent: undefined,
|
||||
});
|
||||
expect(tagMock.create).toHaveBeenNthCalledWith(2, {
|
||||
expect(tagMock.upsertValue).toHaveBeenNthCalledWith(2, {
|
||||
value: 'Parent/Child',
|
||||
userId: 'admin_id',
|
||||
parent: expect.objectContaining({ id: 'tag-parent' }),
|
||||
|
||||
Reference in New Issue
Block a user