Skip to content

Commit f667107

Browse files
test; modifying unittest.test.ts
Signed-off-by: sekhar kumar dash <sekharkumardash229@gmail.com>
1 parent 527aa31 commit f667107

File tree

1 file changed

+116
-26
lines changed

1 file changed

+116
-26
lines changed

newtest/unittest.test.ts

Lines changed: 116 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,61 @@
11
import { wrappedNodeFetch } from '../integrations/octokit/require';
22
import { Response } from 'node-fetch';
33
import fetch from 'node-fetch';
4-
import { createExecutionContext, getExecutionContext} from '../src/context';
4+
import { createExecutionContext, getExecutionContext } from '../src/context';
55
import { HTTP } from '../src/keploy';
66

77
describe('wrappedNodeFetch', () => {
8-
it('should call fetch function with correct arguments in record mode', async () => {
8+
it('should return mocked response in test mode - case 1', async () => {
9+
const mockResponse = new Response('mocked response');
910
const ctx = {
10-
mode: 'record',
11+
mode: 'test',
1112
testId: 'testId',
12-
mocks: [],
13-
deps: [],
13+
mocks: [
14+
{
15+
Version: 'V1_BETA2',
16+
Name: 'testId',
17+
Kind: HTTP,
18+
Spec: {
19+
Metadata: {
20+
name: 'node-fetch',
21+
url: 'https://api.keploy.io/healthz',
22+
options: { method: 'GET' },
23+
type: 'HTTP_CLIENT',
24+
},
25+
Req: {
26+
URL: 'https://api.keploy.io/healthz',
27+
Body: '',
28+
Header: {},
29+
Method: 'GET',
30+
},
31+
Res: {
32+
StatusCode: 200,
33+
Header: { 'content-type': { Value: ['text/plain'] } },
34+
Body: 'mocked response',
35+
},
36+
},
37+
},
38+
],
39+
deps: [],
40+
1441
};
1542
createExecutionContext(ctx)
43+
1644
const wrappedFetch = (wrappedNodeFetch(fetch) as any).bind({ fetch });
1745
const url = 'https://api.keploy.io/healthz';
1846
const options = {
1947
method: 'GET',
2048
};
2149
const response = await wrappedFetch(url, options);
2250
const updatedctx= getExecutionContext().context;
23-
const responseBody = await response.text();
24-
const recordedOutput = updatedctx.mocks[0].Spec.Res.Body;
25-
expect(response).toBeInstanceOf(Response);
26-
expect(updatedctx.mocks.length).toBeGreaterThan(0);
27-
expect(updatedctx.deps.length).toBeGreaterThan(0);
28-
expect(response).toHaveProperty('body');
29-
expect(responseBody).toEqual(recordedOutput);
51+
expect(response.status).toEqual(mockResponse.status);
52+
expect(response.statusText).toEqual(mockResponse.statusText);
53+
54+
const mocks=updatedctx.mocks.length;
55+
expect(mocks).toBe(0);
3056
});
3157

32-
it('should return mocked response in test mode', async () => {
58+
it('should return mocked response in test mode - case 2', async () => {
3359
const mockResponse = new Response('mocked response');
3460
const ctx = {
3561
mode: 'test',
@@ -42,12 +68,12 @@ describe('wrappedNodeFetch', () => {
4268
Spec: {
4369
Metadata: {
4470
name: 'node-fetch',
45-
url: 'https://api.keploy.io/healthz',
71+
url: 'https://api.keploy.io/status',
4672
options: { method: 'GET' },
4773
type: 'HTTP_CLIENT',
4874
},
4975
Req: {
50-
URL: 'https://api.keploy.io/healthz',
76+
URL: 'https://api.keploy.io/status',
5177
Body: '',
5278
Header: {},
5379
Method: 'GET',
@@ -61,12 +87,13 @@ describe('wrappedNodeFetch', () => {
6187
},
6288
],
6389
deps: [],
90+
6491

6592
};
6693
createExecutionContext(ctx)
6794

6895
const wrappedFetch = (wrappedNodeFetch(fetch) as any).bind({ fetch });
69-
const url = 'https://api.keploy.io/healthz';
96+
const url = 'https://api.keploy.io/status';
7097
const options = {
7198
method: 'GET',
7299
};
@@ -78,20 +105,58 @@ describe('wrappedNodeFetch', () => {
78105
const mocks=updatedctx.mocks.length;
79106
expect(mocks).toBe(0);
80107
});
81-
82-
it('should return undefined if execution context is not present in record mode', async () => {
83-
const mockFetch = jest.fn().mockResolvedValue(new Response());
84-
const consoleSpy = jest.spyOn(console, 'error').mockImplementation();
85-
const wrappedFetch = (wrappedNodeFetch(mockFetch) as any).bind({ fetch: mockFetch });
86-
const url = 'https://api.keploy.io/healthz';
108+
it('should record an HTTP request in record mode', async () => {
109+
const ctx = {
110+
mode: 'record',
111+
testId: 'testId',
112+
mocks: [],
113+
deps: [],
114+
};
115+
createExecutionContext(ctx)
116+
const wrappedFetch = (wrappedNodeFetch(fetch) as any).bind({ fetch });
117+
const url = 'https://jsonplaceholder.typicode.com/posts';
118+
const options = {
119+
method: 'POST',
120+
headers: {
121+
'Content-Type': 'application/json',
122+
},
123+
body: JSON.stringify({ data: 'test' }),
124+
};
125+
const response = await wrappedFetch(url, options);
126+
const updatedctx = getExecutionContext().context;
127+
const responseBody = await response.text();
128+
const recordedOutput = updatedctx.mocks[0].Spec.Res.Body;
129+
expect(response).toBeInstanceOf(Response);
130+
expect(updatedctx.mocks.length).toBeGreaterThan(0);
131+
expect(updatedctx.deps.length).toBeGreaterThan(0);
132+
expect(response).toHaveProperty('body');
133+
expect(responseBody).toEqual(recordedOutput);
134+
});
135+
it('should record a successful HTTP response with JSON body in record mode', async () => {
136+
const ctx = {
137+
mode: 'record',
138+
testId: 'testId',
139+
mocks: [],
140+
deps: [],
141+
};
142+
createExecutionContext(ctx);
143+
const wrappedFetch = (wrappedNodeFetch(fetch) as any).bind({ fetch });
144+
const url = 'https://jsonplaceholder.typicode.com/todos/1';
87145
const options = {
88146
method: 'GET',
89147
};
90148
const response = await wrappedFetch(url, options);
91-
expect(consoleSpy).toHaveBeenCalledWith('keploy context is not present to mock dependencies');
92-
expect(response).toBeUndefined();
149+
const json = await response.json();
150+
expect(response.status).toBe(200);
151+
expect(json.userId).toBeDefined();
152+
expect(json.id).toBeDefined();
153+
expect(json.title).toBeDefined();
154+
expect(json.completed).toBeDefined();
155+
const updatedctx = getExecutionContext().context;
156+
expect(updatedctx.mocks.length).toBeGreaterThan(0);
157+
expect(updatedctx.deps.length).toBeGreaterThan(0);
93158
});
94-
159+
95160
it('should call fetch function with correct arguments in off mode', async () => {
96161
const mockFetch = jest.fn().mockResolvedValueOnce(new Response());
97162
const ctx = {
@@ -112,4 +177,29 @@ describe('wrappedNodeFetch', () => {
112177
expect(mockFetch).toHaveBeenCalledWith(url, options);
113178
expect(response).toBeInstanceOf(Response);
114179
});
115-
});
180+
181+
it('should call fetch function with correct arguments in off mode', async () => {
182+
const mockFetch = jest.fn().mockResolvedValueOnce(new Response());
183+
const ctx = {
184+
mode: 'off',
185+
testId: 'testId',
186+
mocks: [],
187+
deps: [],
188+
};
189+
createExecutionContext(ctx);
190+
191+
const wrappedFetch = (wrappedNodeFetch(mockFetch) as any).bind({ fetch: mockFetch });
192+
const url = 'https://api.example.com/test';
193+
const options = {
194+
method: 'POST',
195+
headers: {
196+
'Content-Type': 'application/json',
197+
},
198+
body: JSON.stringify({ data: 'test' }),
199+
};
200+
const response = await wrappedFetch(url, options);
201+
202+
expect(mockFetch).toHaveBeenCalledWith(url, options);
203+
expect(response).toBeInstanceOf(Response);
204+
});
205+
});

0 commit comments

Comments
 (0)