PluginProbe
Extendify / 3.0.6
Extendify v3.0.6
3.2.1 3.2.0 3.1.6 3.1.5 3.1.4 3.1.3 3.1.2 3.1.1 3.1.0 3.0.6 3.0.5 3.0.4 trunk 0.1.0 0.10.0 0.10.1 0.10.2 0.11.0 0.11.1 0.2.0 0.3.0 0.3.1 0.4.0 0.5.0 0.6.0 All 127 releases
extendify / src / Launch / api / __tests__ / getSiteStyles.test.js

getSiteStyles.test.js in Extendify 3.0.6, at src/Launch/api/__tests__/getSiteStyles.test.js

83 lines 2.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { getSiteStyles } from '@launch/api/DataApi';
2
3 const fallback = [];
4 const originalFetch = global.fetch;
5 global.Request = class Request {
6 constructor(input, init) {
7 this.input = input;
8 this.init = init;
9 }
10 };
11
12 describe('getSiteStyles', () => {
13 beforeEach(() => {
14 global.fetch = jest.fn();
15 });
16
17 afterEach(() => {
18 jest.clearAllMocks();
19 global.fetch = originalFetch;
20 });
21
22 it('returns parsed JSON when fetch succeeds with valid data', async () => {
23 const mockResponse = [{ color: '#000' }, { color: '#fff' }];
24 global.fetch.mockResolvedValueOnce({
25 ok: true,
26 json: () => mockResponse,
27 });
28
29 const result = await getSiteStyles({ title: 'My Site', siteProfile: {} });
30 expect(result).toEqual(mockResponse);
31 expect(global.fetch).toHaveBeenCalledTimes(1);
32 });
33
34 it('returns fallback when first fetch throws and second returns not ok', async () => {
35 global.fetch
36 .mockRejectedValueOnce(new Error('Network error'))
37 .mockResolvedValueOnce({ ok: false });
38
39 const result = await getSiteStyles({ title: 'My Site', siteProfile: {} });
40 expect(result).toEqual(fallback);
41 expect(global.fetch).toHaveBeenCalledTimes(2);
42 });
43
44 it('returns fallback when both fetch attempts throw', async () => {
45 global.fetch
46 .mockRejectedValueOnce(new Error('Network error'))
47 .mockRejectedValueOnce(new Error('Still failing'));
48
49 const result = await getSiteStyles({ title: 'My Site', siteProfile: {} });
50 expect(result).toEqual(fallback);
51 expect(global.fetch).toHaveBeenCalledTimes(2);
52 });
53
54 it('returns fallback when response is ok but JSON parsing fails', async () => {
55 global.fetch.mockResolvedValueOnce({
56 ok: true,
57 json: () => {
58 throw new Error('Invalid JSON');
59 },
60 });
61
62 const result = await getSiteStyles({ title: 'My Site', siteProfile: {} });
63 expect(result).toEqual(fallback);
64 expect(global.fetch).toHaveBeenCalledTimes(1);
65 });
66
67 it('returns fallback when response ok=false without throwing (no retry by design)', async () => {
68 global.fetch.mockResolvedValueOnce({ ok: false });
69
70 const result = await getSiteStyles({ title: 'My Site', siteProfile: {} });
71 expect(result).toEqual(fallback);
72 expect(global.fetch).toHaveBeenCalledTimes(1);
73 });
74
75 it('returns fallback when fetch resolves with undefined', async () => {
76 global.fetch.mockResolvedValueOnce(undefined);
77
78 const result = await getSiteStyles({ title: 'My Site', siteProfile: {} });
79 expect(result).toEqual(fallback);
80 expect(global.fetch).toHaveBeenCalledTimes(1);
81 });
82 });
83