Skip to content

Commit 72275f5

Browse files
committed
alternative to fix issue
1 parent 5ab1a17 commit 72275f5

File tree

3 files changed

+65
-21
lines changed

3 files changed

+65
-21
lines changed

scripts/testing/globalSetup.ts

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11

22
import { RedisMemoryServer } from 'redis-memory-server';
3-
import { Client } from 'minio';
43

54
export default async function globalSetup(): Promise<void> {
65
const redisMemoryServer = new RedisMemoryServer();
@@ -10,21 +9,5 @@ export default async function globalSetup(): Promise<void> {
109
process.env.REDIS_URL = `redis://${host}:${port}`;
1110
// @ts-ignore
1211
global.__REDISINSTANCE = redisMemoryServer;
13-
14-
const minioClient = new Client({
15-
endPoint: 'localhost',
16-
port: 9000,
17-
useSSL: false,
18-
accessKey: 'miniouser',
19-
secretKey: 'miniouser',
20-
});
21-
22-
const bucketName = 'test-bucket';
23-
process.env.S3_BUCKET = bucketName;
24-
25-
const bucketExists = await minioClient.bucketExists(bucketName);
26-
if (!bucketExists) {
27-
await minioClient.makeBucket(bucketName);
28-
}
2912
}
3013

src/infra/storage/storage.service.spec.ts

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,60 @@ describe('StorageService', () => {
4141
jest.resetAllMocks();
4242
});
4343

44-
44+
describe('onModuleInit', () => {
45+
describe('when makeBucket resolves', () => {
46+
it('should call makeBucket', async () => {
47+
await service.onModuleInit();
48+
49+
expect(client.makeBucket).toHaveBeenCalledWith(bucketName);
50+
});
51+
});
52+
53+
describe('when makeBucket rejects with BucketAlreadyOwnedByYou', () => {
54+
const setup = () => {
55+
const error = new Error();
56+
// @ts-ignore
57+
error.code = 'BucketAlreadyOwnedByYou';
58+
client.makeBucket.mockRejectedValueOnce(error);
59+
};
60+
61+
it('should not throw an error', async () => {
62+
setup();
63+
64+
await expect(service.onModuleInit()).resolves.not.toThrow();
65+
});
66+
});
67+
68+
describe('when makeBucket rejects with BucketAlreadyExists', () => {
69+
const setup = () => {
70+
const error = new Error();
71+
// @ts-ignore
72+
error.code = 'BucketAlreadyExists';
73+
client.makeBucket.mockRejectedValueOnce(error);
74+
};
75+
76+
it('should not throw an error', async () => {
77+
setup();
78+
79+
await expect(service.onModuleInit()).resolves.not.toThrow();
80+
});
81+
});
82+
83+
describe('when makeBucket rejects with other error', () => {
84+
const setup = () => {
85+
const error = new Error('other error');
86+
client.makeBucket.mockRejectedValueOnce(error);
87+
88+
return { error };
89+
};
90+
91+
it('should throw an error', async () => {
92+
const { error } = setup();
93+
94+
await expect(service.onModuleInit()).rejects.toThrow(error);
95+
});
96+
});
97+
});
4598

4699
describe('persistDoc', () => {
47100
describe('when putObject resolves', () => {

src/infra/storage/storage.service.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,18 @@ export class StorageService implements DocumentStorage, OnModuleInit {
2929
}
3030

3131
public async onModuleInit(): Promise<void> {
32-
const bucketExists = await this.client.bucketExists(this.config.S3_BUCKET);
33-
34-
if (!bucketExists) {
32+
try {
3533
await this.client.makeBucket(this.config.S3_BUCKET);
34+
} catch (err: unknown) {
35+
if (
36+
err &&
37+
typeof err === 'object' &&
38+
'code' in err &&
39+
(err.code === 'BucketAlreadyOwnedByYou' || err.code === 'BucketAlreadyExists')
40+
) {
41+
return;
42+
}
43+
throw err;
3644
}
3745
}
3846

0 commit comments

Comments
 (0)