Skip to content

Commit 6a41297

Browse files
authored
add test (#28)
1 parent 08d12fa commit 6a41297

9 files changed

+86
-64
lines changed

app/service/stampService.ts

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// stampService.js
21
import { StampRepository } from '../repository/stampRepository';
32

43
export class StampService {

jest.config.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
module.exports = {
2-
testMatch: ["**/tests/**/*.[jt]s?(x)", "**/?(*.)+(spec|test).[tj]s?(x)"],
2+
preset: 'ts-jest',
3+
testMatch: ['**/tests/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[tj]s?(x)'],
34
};

package.json

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"dev:monorepo": "next dev",
1010
"build": "next build",
1111
"start": "next start",
12+
"clean": "rimraf node_modules",
1213
"format": "prettier --write 'app/**/*.{ts,tsx,json,md}'",
1314
"format:fix": "prettier --write 'app/**/*.{ts,tsx,json,md}'",
1415
"format:check": "prettier --check 'app/**/*.{ts,tsx,js,jsx,json,css}'",
@@ -44,6 +45,7 @@
4445
},
4546
"devDependencies": {
4647
"@frames.js/debugger": "^0.1.9",
48+
"@types/jest": "^29.5.12",
4749
"@types/node": "^20.11.30",
4850
"@types/react": "^18.2.0",
4951
"@types/react-dom": "^18.2.0",

tests/sample.test.ts

-6
This file was deleted.

tests/stampRepository.test.ts

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// StampRepository.test.ts
2+
import OpenAI from 'openai';
3+
import { StampRepository } from '../app/repository/stampRepository';
4+
5+
describe('StampRepository', () => {
6+
let openAIInstance: OpenAI;
7+
let stampRepository: StampRepository;
8+
const mockImageUrl = 'https://example.com/image.png';
9+
10+
beforeEach(() => {
11+
openAIInstance = new OpenAI({ apiKey: 'dummy-api-key' });
12+
stampRepository = new StampRepository(openAIInstance);
13+
});
14+
15+
it('should generate an image URL successfully', async () => {
16+
jest.spyOn(openAIInstance.images, 'generate').mockResolvedValue({
17+
created: 0,
18+
data: [{ url: mockImageUrl }],
19+
});
20+
21+
const prompt = 'test prompt';
22+
const imageUrl = await stampRepository.generateImage(prompt);
23+
expect(imageUrl).toBe(mockImageUrl);
24+
expect(openAIInstance.images.generate).toHaveBeenCalledWith({
25+
model: 'dall-e-3',
26+
prompt,
27+
n: 1,
28+
size: '1024x1024',
29+
});
30+
});
31+
32+
it('should throw an error when image generation fails', async () => {
33+
jest
34+
.spyOn(openAIInstance.images, 'generate')
35+
.mockRejectedValue(new Error('API call failed'));
36+
37+
await expect(stampRepository.generateImage('test prompt')).rejects.toThrow(
38+
'Image generation failed'
39+
);
40+
});
41+
});

tests/stampRepository.test.ts_tmp

-54
This file was deleted.

tests/stampService.test.ts

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// stampService.test.js
2+
import { StampRepository } from '../app/repository/stampRepository';
3+
import { StampService } from '../app/service/stampService';
4+
5+
describe('StampService', () => {
6+
let service: StampService;
7+
const template = 'Template: ';
8+
const mockImageUrl = 'https://example.com/image.png';
9+
10+
beforeEach(() => {
11+
jest.clearAllMocks();
12+
service = new StampService(template, StampRepository.prototype);
13+
14+
jest
15+
.spyOn(StampRepository.prototype, 'generateImage')
16+
.mockImplementation((prompt) => {
17+
return Promise.resolve(mockImageUrl);
18+
});
19+
});
20+
21+
it('should generate an image URL using the provided template and input', async () => {
22+
const input = 'test input';
23+
const result = await service.generateImageUrl(input);
24+
25+
const expectedPrompt = template + input;
26+
expect(StampRepository.prototype.generateImage).toHaveBeenCalledWith(
27+
expectedPrompt
28+
);
29+
expect(result).toBe(mockImageUrl);
30+
});
31+
});

tests/stampService.test.ts_tmp

Whitespace-only changes.

yarn.lock

+10-2
Original file line numberDiff line numberDiff line change
@@ -2490,6 +2490,14 @@
24902490
dependencies:
24912491
"@types/istanbul-lib-report" "*"
24922492

2493+
"@types/jest@^29.5.12":
2494+
version "29.5.12"
2495+
resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544"
2496+
integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==
2497+
dependencies:
2498+
expect "^29.0.0"
2499+
pretty-format "^29.0.0"
2500+
24932501
"@types/json5@^0.0.29":
24942502
version "0.0.29"
24952503
resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz"
@@ -4867,7 +4875,7 @@ exit@^0.1.2:
48674875
resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz"
48684876
integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==
48694877

4870-
expect@^29.7.0:
4878+
expect@^29.0.0, expect@^29.7.0:
48714879
version "29.7.0"
48724880
resolved "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz"
48734881
integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==
@@ -7859,7 +7867,7 @@ prettier@^3.2.5:
78597867
resolved "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz"
78607868
integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==
78617869

7862-
pretty-format@^29.7.0:
7870+
pretty-format@^29.0.0, pretty-format@^29.7.0:
78637871
version "29.7.0"
78647872
resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz"
78657873
integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==

0 commit comments

Comments
 (0)