Skip to content

Commit c37722a

Browse files
prefer-promise-reject-errors lint error fixes (#1448)
* prefer-promise-reject-errors lint error fixes * add unit tests for fetchSupportFrontendData function * unnecessary if conditional check is removed
1 parent c7c3789 commit c37722a

File tree

4 files changed

+55
-34
lines changed

4 files changed

+55
-34
lines changed

eslint-suppressions.json

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,6 @@
1515
"count": 1
1616
}
1717
},
18-
"src/server/lib/fetchTickerData.ts": {
19-
"@typescript-eslint/prefer-promise-reject-errors": {
20-
"count": 3
21-
},
22-
"@typescript-eslint/no-unsafe-argument": {
23-
"count": 2
24-
},
25-
"@typescript-eslint/no-unsafe-member-access": {
26-
"count": 2
27-
},
28-
"@typescript-eslint/no-unnecessary-condition": {
29-
"count": 1
30-
}
31-
},
3218
"src/server/middleware/errorHandling.ts": {
3319
"@typescript-eslint/no-unsafe-assignment": {
3420
"count": 1
@@ -114,14 +100,6 @@
114100
"count": 1
115101
}
116102
},
117-
"src/server/utils/supportFrontend.ts": {
118-
"@typescript-eslint/prefer-promise-reject-errors": {
119-
"count": 3
120-
},
121-
"@typescript-eslint/no-unsafe-member-access": {
122-
"count": 1
123-
}
124-
},
125103
"src/server/utils/valueReloader.ts": {
126104
"@typescript-eslint/no-floating-promises": {
127105
"count": 1

src/server/lib/fetchTickerData.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ const tickerUrl = (stage: Stage, name: TickerName): string => {
1515

1616
const checkForErrors = (response: Response): Promise<Response> => {
1717
if (!response.ok) {
18-
return Promise.reject(
18+
const error = new Error(
1919
response.statusText || `Ticker api call returned HTTP status ${response.status}`,
2020
);
21+
return Promise.reject(error);
2122
}
2223
return Promise.resolve(response);
2324
};
2425

25-
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- JSON not yet parsed to a type.
26-
const parse = (json: any): Promise<TickerData> => {
26+
const parse = (json: { total: string; goal: string }): Promise<TickerData> => {
2727
const total = parseInt(json.total);
2828
const goal = parseInt(json.goal);
2929

@@ -33,7 +33,8 @@ const parse = (json: any): Promise<TickerData> => {
3333
goal,
3434
});
3535
} else {
36-
return Promise.reject(`Failed to parse ticker data: ${json}`);
36+
const error = new Error(`Failed to parse ticker data: ${JSON.stringify(json)}`);
37+
return Promise.reject(error);
3738
}
3839
};
3940

@@ -44,8 +45,9 @@ const getTickerDataForTickerTypeFetcher =
4445
.then((response) => response.json())
4546
.then(parse)
4647
.catch((error) => {
47-
logError(`Error fetching ${name} ticker data: ${error}`);
48-
return Promise.reject(error);
48+
const errorObj = error instanceof Error ? error : new Error(String(error));
49+
logError(`Error fetching ${name} ticker data: ${errorObj.message}`);
50+
return Promise.reject(errorObj);
4951
});
5052
};
5153

@@ -61,9 +63,7 @@ export class TickerDataProvider {
6163

6264
getTickerData(name: TickerName): TickerData | undefined {
6365
const provider = this.providers[name];
64-
if (provider) {
65-
return provider.get();
66-
}
66+
return provider.get();
6767
}
6868

6969
addTickerDataToSettings(tickerSettings: TickerSettings): TickerSettings | undefined {
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { fetchSupportFrontendData } from './supportFrontend';
2+
3+
describe('fetchSupportFrontendData', () => {
4+
const originalFetch = global.fetch;
5+
6+
beforeAll(() => {
7+
global.fetch = jest.fn();
8+
});
9+
10+
afterAll(() => {
11+
global.fetch = originalFetch;
12+
});
13+
it('should throw an error if no endpoint is provided', async () => {
14+
await expect(fetchSupportFrontendData('')).rejects.toThrow('No endpoint value supplied');
15+
});
16+
it('should throw an error if fetch response is not ok', async () => {
17+
(global.fetch as jest.Mock).mockResolvedValueOnce({
18+
ok: false,
19+
status: 404,
20+
});
21+
await expect(fetchSupportFrontendData('test-endpoint')).rejects.toThrow(
22+
'HTTP error! Status: 404',
23+
);
24+
});
25+
26+
it('should return response text if fetch is successful', async () => {
27+
const mockText = 'response data';
28+
(global.fetch as jest.Mock).mockResolvedValueOnce({
29+
ok: true,
30+
text: jest.fn().mockResolvedValueOnce(mockText),
31+
});
32+
const data = await fetchSupportFrontendData('test-endpoint');
33+
expect(data).toBe(mockText);
34+
});
35+
36+
it('should throw an error if fetch fails', async () => {
37+
const mockError = new Error('Network error');
38+
(global.fetch as jest.Mock).mockRejectedValueOnce(mockError);
39+
await expect(fetchSupportFrontendData('test-endpoint')).rejects.toThrow(
40+
'Data fetch error: Error: Network error',
41+
);
42+
});
43+
});

src/server/utils/supportFrontend.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { isProd } from '../lib/env';
33
export const fetchSupportFrontendData = (endpoint: string): Promise<string> => {
44
return new Promise((resolve, reject) => {
55
if (!endpoint) {
6-
reject('{"error": "No endpoint value supplied"}');
6+
reject(new Error('No endpoint value supplied'));
77
}
88

99
const supportUrl = isProd
@@ -15,11 +15,11 @@ export const fetchSupportFrontendData = (endpoint: string): Promise<string> => {
1515
fetch(apiUrl)
1616
.then((packet) => {
1717
if (!packet.ok) {
18-
reject(`{"error": "HTTP error! Status: ${packet.status}"}`);
18+
reject(new Error(`HTTP error! Status: ${packet.status}`));
1919
}
2020
return packet.text();
2121
})
2222
.then((res) => resolve(res))
23-
.catch((err) => reject(`{"error": "Data fetch error: ${err.message}"}`));
23+
.catch((err) => reject(new Error(`Data fetch error: ${String(err)}`)));
2424
});
2525
};

0 commit comments

Comments
 (0)