Skip to content
Open
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
1 change: 1 addition & 0 deletions src/modules/file/file.controller.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,7 @@ describe('FileController', () => {
const thumbnailDto: ThumbnailDto = {
id: 1,
...createThumbnailDto,
bucketId: createThumbnailDto.bucketId!,
createdAt: new Date(),
updatedAt: new Date(),
};
Expand Down
6 changes: 4 additions & 2 deletions src/modules/thumbnail/dto/create-thumbnail.dto.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,12 @@ export class CreateThumbnailDto {
@ApiProperty({
description: 'The bucket id where the file is stored',
example: 'my-bucket',
deprecated: true,
required: false,
})
@IsNotEmpty()
@IsOptional()
@IsString()
bucketId: string;
bucketId?: string;

@ApiProperty({
description: 'The id of file in the bucket',
Expand Down
72 changes: 69 additions & 3 deletions src/modules/thumbnail/thumbnail.usecase.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ describe('ThumbnailUseCases', () => {
id: 1,
fileId: 123456,
fileUuid: fileUuid,
bucketId: 'oldBucketId',
bucketFile: 'existingBucketFile',
} as any;

Expand Down Expand Up @@ -57,6 +58,7 @@ describe('ThumbnailUseCases', () => {
id: 123456,
uuid: fileUuid,
userId: userMocked.id,
bucket: 'fileBucketId',
} as any);
});

Expand All @@ -74,6 +76,7 @@ describe('ThumbnailUseCases', () => {
expect(thumbnailRepository.findByFileUuid).toHaveBeenCalledWith(fileUuid);
expect(thumbnailRepository.create).toHaveBeenCalledWith({
...createThumbnailDto,
bucketId: 'fileBucketId',
fileId: 123456,
fileUuid: fileUuid,
createdAt: expect.any(Date),
Expand Down Expand Up @@ -101,11 +104,11 @@ describe('ThumbnailUseCases', () => {

expect(networkService.deleteFile).toHaveBeenCalledWith(
userMocked,
createThumbnailDto.bucketId,
existingThumbnail.bucketId,
existingThumbnail.bucketFile,
);
expect(thumbnailRepository.update).toHaveBeenCalledWith(
createThumbnailDto,
{ ...createThumbnailDto, bucketId: 'fileBucketId' },
{
id: existingThumbnail.id,
fileUuid: existingThumbnail.fileUuid,
Expand Down Expand Up @@ -140,7 +143,7 @@ describe('ThumbnailUseCases', () => {
expect.stringContaining('Error deleting existent thumbnail'),
);
expect(thumbnailRepository.update).toHaveBeenCalledWith(
createThumbnailDto,
{ ...createThumbnailDto, bucketId: 'fileBucketId' },
{
id: existingThumbnail.id,
fileUuid: existingThumbnail.fileUuid,
Expand All @@ -149,6 +152,68 @@ describe('ThumbnailUseCases', () => {
expect(result).toEqual(existingThumbnail);
});

it('When file bucket differs from DTO bucket, it should use file bucket for thumbnail', async () => {
const dtoWithDifferentBucket = {
...createThumbnailDto,
bucketId: 'dtoBucketId',
};

jest.spyOn(thumbnailRepository, 'findByFileUuid').mockResolvedValue(null);
jest
.spyOn(thumbnailRepository, 'create')
.mockResolvedValue(existingThumbnail);

await thumbnailUseCases.createThumbnail(
userMocked,
dtoWithDifferentBucket,
);

expect(thumbnailRepository.create).toHaveBeenCalledWith({
...dtoWithDifferentBucket,
bucketId: 'fileBucketId',
fileId: 123456,
fileUuid: fileUuid,
createdAt: expect.any(Date),
updatedAt: expect.any(Date),
});
});

it('When existing thumbnail has different bucket than file, it should delete from old bucket and update with file bucket', async () => {
const dtoWithDifferentBucket = {
...createThumbnailDto,
bucketId: 'dtoBucketId',
};

jest
.spyOn(thumbnailRepository, 'findByFileUuid')
.mockResolvedValue(existingThumbnail);
jest.spyOn(networkService, 'deleteFile').mockResolvedValue(undefined);
jest
.spyOn(thumbnailRepository, 'update')
.mockResolvedValue(existingThumbnail);
jest
.spyOn(thumbnailRepository, 'findByFileUuid')
.mockResolvedValue(existingThumbnail);

await thumbnailUseCases.createThumbnail(
userMocked,
dtoWithDifferentBucket,
);

expect(networkService.deleteFile).toHaveBeenCalledWith(
userMocked,
existingThumbnail.bucketId,
existingThumbnail.bucketFile,
);
expect(thumbnailRepository.update).toHaveBeenCalledWith(
{ ...dtoWithDifferentBucket, bucketId: 'fileBucketId' },
{
id: existingThumbnail.id,
fileUuid: existingThumbnail.fileUuid,
},
);
});

it('When an error occurs while creating a new thumbnail, it should handle the error', async () => {
jest.spyOn(thumbnailRepository, 'findByFileUuid').mockResolvedValue(null);
jest
Expand Down Expand Up @@ -193,6 +258,7 @@ describe('ThumbnailUseCases', () => {

expect(thumbnailRepository.create).toHaveBeenCalledWith({
...createThumbnailDto,
bucketId: 'fileBucketId',
fileId: 123456,
fileUuid: fileUuid,
createdAt: expect.any(Date),
Expand Down
15 changes: 10 additions & 5 deletions src/modules/thumbnail/thumbnail.usecase.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,30 +34,35 @@ export class ThumbnailUseCases {
'You do not have permission to modify this file',
);
}
const bucketId = file.bucket;
const existingThumbnail = await this.thumbnailRepository.findByFileUuid(
file.uuid,
);
if (existingThumbnail) {
try {
await this.network.deleteFile(
user,
thumbnail.bucketId,
existingThumbnail.bucketId,
existingThumbnail.bucketFile,
);
} catch (error) {
Logger.error(
`[THUMBNAIL/CREATE] Error deleting existent thumbnail. Error: ${error.message}`,
);
}
await this.thumbnailRepository.update(thumbnail, {
id: existingThumbnail.id,
fileUuid: existingThumbnail.fileUuid,
});
await this.thumbnailRepository.update(
{ ...thumbnail, bucketId },
{
id: existingThumbnail.id,
fileUuid: existingThumbnail.fileUuid,
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fix small lint error here, missing coma

);
return this.thumbnailRepository.findByFileUuid(file.uuid);
}

const newThumbnailObject = {
...thumbnail,
bucketId,
fileId: file.id,
fileUuid: file.uuid,
createdAt: new Date(),
Expand Down
Loading