Skip to content

Commit

Permalink
test: add unit tests for builder bad practice
Browse files Browse the repository at this point in the history
  • Loading branch information
vahidvdn committed Aug 8, 2024
1 parent 945096d commit da9853f
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 33 deletions.
37 changes: 37 additions & 0 deletions app/builder/bad-practice.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import axios, { AxiosRequestConfig, AxiosResponse } from 'axios';

import { PostData, QueryParam, ResponseData } from './interface';
import { makePostRequest } from './request';

describe('Builder bad practice', () => {
const queryParams: QueryParam = {
status: 'active',
role: 'user',
};

const config: AxiosRequestConfig = {
headers: {
'Authorization': 'Bearer your-access-token',
'Content-Type': 'application/json',
},
params: queryParams,
};

it('should send request with axios', async () => {
const data: PostData = {
title: 'mock title',
body: 'mock description',
};

const response: ResponseData = {
...data,
id: 1
}

jest.spyOn(axios, 'post').mockReturnValue({ data: response } as unknown as Promise<AxiosResponse>)
const result = await makePostRequest(data);
expect(result).toEqual(response);
expect(axios.post).toHaveBeenCalledTimes(1);
expect(axios.post).toHaveBeenCalledWith('https://jsonplaceholder.typicode.com/posts', data, config);
})
})
40 changes: 7 additions & 33 deletions app/builder/bad-practice.ts
Original file line number Diff line number Diff line change
@@ -1,35 +1,9 @@
import axios, { AxiosRequestConfig } from 'axios';
import { PostData, ResponseData } from './interface';
import { PostData} from './interface';
import { makePostRequest } from './request';

async function makePostRequest() {
const data: PostData = {
title: 'test title',
body: 'title description',
};
const data: PostData = {
title: 'test title',
body: 'title description',
};

const queryParams = {
status: 'active',
role: 'user',
};

const config: AxiosRequestConfig = {
headers: {
'Authorization': 'Bearer your-access-token',
'Content-Type': 'application/json',
},
params: queryParams,
};

try {
const response = await axios.post<ResponseData>(
'https://jsonplaceholder.typicode.com/posts', // Replace with your API endpoint
data,
config
);
console.log('Response Data:', response.data);
} catch (error) {
console.error('Error:', error);
}
}

makePostRequest();
makePostRequest(data);
6 changes: 6 additions & 0 deletions app/builder/interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,9 @@ export interface PostData {
title: string;
body: string;
}

export interface QueryParam {
status: string;
role: string;
}

30 changes: 30 additions & 0 deletions app/builder/request.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import axios, { AxiosRequestConfig } from "axios";

import { PostData, QueryParam, ResponseData } from "./interface";

export async function makePostRequest(data: PostData) {
const queryParams: QueryParam = {
status: 'active',
role: 'user',
};

const config: AxiosRequestConfig = {
headers: {
'Authorization': 'Bearer your-access-token',
'Content-Type': 'application/json',
},
params: queryParams,
};

try {
const response = await axios.post<ResponseData>(
'https://jsonplaceholder.typicode.com/posts',
data,
config
);
console.log('Response Data:', response.data);
return response.data
} catch (error) {
console.error('Error:', error);
}
}

0 comments on commit da9853f

Please sign in to comment.