Skip to content

Commit

Permalink
Feature/switch to axios (#2543)
Browse files Browse the repository at this point in the history
  • Loading branch information
xavierfacq committed Jan 2, 2024
1 parent b4440bf commit a43610d
Show file tree
Hide file tree
Showing 25 changed files with 762 additions and 508 deletions.
693 changes: 351 additions & 342 deletions package-lock.json

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
"@mui/x-date-pickers": "^6.18.5",
"@popperjs/core": "^2.11.8",
"@react-icons/all-files": "^4.1.0",
"axios": "^1.6.3",
"bootstrap": "^5.3.2",
"date-fns": "^2.30.0",
"flexsearch": "^0.7.31",
Expand Down Expand Up @@ -48,7 +49,7 @@
"html-to-text": "^9.0.5",
"i18next": "^23.7.11",
"iso-639-1": "^3.1.0",
"jest-canvas-mock": "2.5.2",
"jest-canvas-mock": "2.5.1",
"moment": "^2.30.1",
"prismjs": "^1.29.0",
"prop-types": "^15.8.1",
Expand Down Expand Up @@ -80,6 +81,7 @@
"@vitejs/plugin-react": "^4.2.1",
"@vitest/coverage-v8": "^1.1.0",
"ajv": "^8.12.0",
"axios-mock-adapter": "^1.22.0",
"babel-preset-gatsby": "^3.12.1",
"gatsby-cli": "^5.12.4",
"jsdom": "^22.1.0",
Expand Down
14 changes: 6 additions & 8 deletions src/hooks/__tests__/__snapshots__/fetchMarketplace.test.tsx.snap
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ exports[`getAllPkgsForVersion > returns valid JSON - Alpine Linux 1`] = `
{
"architecture": "arch_mock",
"image_type": "jdk",
"installer": undefined,
"os": "os_mock",
"package": {
"checksum": "checksum_mock",
Expand All @@ -22,8 +21,8 @@ exports[`getAllPkgsForVersion > returns valid JSON - Alpine Linux 1`] = `
"release_link": "https://release_link_mock/",
"release_name": "release_name_mock",
"release_type": "release_type_mock",
"timestamp": 2020-01-01T00:00:00.000Z,
"updated_at": 2020-01-01T00:00:00.000Z,
"timestamp": "2020-01-01T00:00:00.000Z",
"updated_at": "2020-01-01T00:00:00.000Z",
"vendor": "vendor_mock",
"version_data": {
"build": 0,
Expand Down Expand Up @@ -64,8 +63,8 @@ exports[`getAllPkgsForVersion > returns valid JSON - installer 1`] = `
"release_link": "https://release_link_mock/",
"release_name": "release_name_mock",
"release_type": "release_type_mock",
"timestamp": 2020-01-01T00:00:00.000Z,
"updated_at": 2020-01-01T00:00:00.000Z,
"timestamp": "2020-01-01T00:00:00.000Z",
"updated_at": "2020-01-01T00:00:00.000Z",
"vendor": "vendor_mock",
"version_data": {
"build": 0,
Expand All @@ -86,7 +85,6 @@ exports[`getAllPkgsForVersion > returns valid JSON 1`] = `
{
"architecture": "arch_mock",
"image_type": "jdk",
"installer": undefined,
"os": "os_mock",
"package": {
"checksum": "checksum_mock",
Expand All @@ -101,8 +99,8 @@ exports[`getAllPkgsForVersion > returns valid JSON 1`] = `
"release_link": "https://release_link_mock/",
"release_name": "release_name_mock",
"release_type": "release_type_mock",
"timestamp": 2020-01-01T00:00:00.000Z,
"updated_at": 2020-01-01T00:00:00.000Z,
"timestamp": "2020-01-01T00:00:00.000Z",
"updated_at": "2020-01-01T00:00:00.000Z",
"vendor": "vendor_mock",
"version_data": {
"build": 0,
Expand Down
4 changes: 2 additions & 2 deletions src/hooks/__tests__/__snapshots__/fetchNews.test.tsx.snap
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ exports[`fetchNewsItems > returns valid news and events object 1`] = `
{
"events": [
{
"date": 2020-01-01T00:00:00.000Z,
"date": "2020-01-01T00:00:00.000Z",
"id": "id_mock",
"infoLink": "https://link_mock/",
"title": "events_title_mock",
Expand All @@ -14,7 +14,7 @@ exports[`fetchNewsItems > returns valid news and events object 1`] = `
"news": [
{
"body": "body_mock",
"date": 2020-01-01T00:00:00.000Z,
"date": "2020-01-01T00:00:00.000Z",
"id": "id_mock",
"link": "https://link_mock/",
"title": "news_title_mock",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ exports[`getAssetsForVersion > returns valid JSON - ea 1`] = `
},
"release_link": "https://release_link_mock/",
"release_name": "release_name_mock",
"timestamp": 2020-01-01T00:00:00.000Z,
"timestamp": "2020-01-01T00:00:00.000Z",
},
],
}
Expand Down Expand Up @@ -54,7 +54,7 @@ exports[`getAssetsForVersion > returns valid JSON - with installers 1`] = `
},
"release_link": "https://release_link_mock/",
"release_name": "release_name_mock",
"timestamp": 2020-01-01T00:00:00.000Z,
"timestamp": "2020-01-01T00:00:00.000Z",
},
],
}
Expand Down Expand Up @@ -83,7 +83,7 @@ exports[`getAssetsForVersion > returns valid JSON - with release notes 1`] = `
"release_link": "https://release_link_mock/",
"release_name": "release_name_mock",
"release_notes": true,
"timestamp": 2020-01-01T00:00:00.000Z,
"timestamp": "2020-01-01T00:00:00.000Z",
},
],
}
Expand Down Expand Up @@ -112,7 +112,7 @@ exports[`getAssetsForVersion > returns valid JSON - with source 1`] = `
"release_link": "https://release_link_mock/",
"release_name": "release_name_mock",
"source_url": "https://source_mock/",
"timestamp": 2020-01-01T00:00:00.000Z,
"timestamp": "2020-01-01T00:00:00.000Z",
},
],
}
Expand Down Expand Up @@ -140,7 +140,7 @@ exports[`getAssetsForVersion > returns valid JSON 1`] = `
},
"release_link": "https://release_link_mock/",
"release_name": "release_name_mock",
"timestamp": 2020-01-01T00:00:00.000Z,
"timestamp": "2020-01-01T00:00:00.000Z",
},
],
}
Expand Down
41 changes: 32 additions & 9 deletions src/hooks/__tests__/fetchLatestTemurin.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,60 @@ import { renderHook, waitFor } from '@testing-library/react'
import { describe, expect, it, vi } from 'vitest'
import { fetchLatestForOS } from '../fetchLatestTemurin';
import { mockLatestTemurin } from '../../__fixtures__/hooks';
import axios from 'axios'
import MockAdapter from 'axios-mock-adapter';

let mockResponse = [mockLatestTemurin(false)];

global.fetch = vi.fn(() => Promise.resolve({
json: () => Promise.resolve(mockResponse)
}));
const mock = new MockAdapter(axios);

afterEach(() => {
vi.clearAllMocks();
mock.reset();
});

afterAll(() => {
mock.restore();
});

describe('fetchLatestForOS', () => {
it('binary URL is set correctly', async () => {
const mockResponse = [mockLatestTemurin(false)];

mock.onGet().reply(200, mockResponse);
let spy = vi.spyOn(axios, "get");

const { result } = renderHook(() => fetchLatestForOS(true, 11, 'linux', 'x64'));
await waitFor(() => {
expect(result.current?.release_name).toBe('release_name_mock')
}, { interval: 1 });
expect(global.fetch).toHaveBeenCalledTimes(1)
expect(fetch).toHaveBeenCalledWith(
expect(spy).toHaveBeenCalledTimes(1)
expect(spy).toHaveBeenCalledWith(
"https://api.adoptium.net/v3/assets/feature_releases/11/ga?os=linux&architecture=x64&image_type=jdk&jvm_impl=hotspot&page_size=1&vendor=eclipse"
);
expect(result.current).toMatchSnapshot()
})

it('installer is returned if available', async () => {
mockResponse = [mockLatestTemurin(true)];
const mockResponse = [mockLatestTemurin(true)];

mock.onGet().reply(200, mockResponse);
let spy = vi.spyOn(axios, "get");

const { result } = renderHook(() => fetchLatestForOS(true, 11, 'linux', 'x64'));
await waitFor(() => {
expect(result.current?.release_name).toBe('release_name_mock')
}, { interval: 1 });
expect(global.fetch).toHaveBeenCalledTimes(1)
expect(spy).toHaveBeenCalledTimes(1)
expect(result.current).toMatchSnapshot()
})

it('binary to be null on error', async() => {
mock.onGet().reply(500);
let spy = vi.spyOn(axios, "get");

const { result } = renderHook(() => fetchLatestForOS(true, 11, 'linux', 'x64'));
await waitFor(() => {
expect(result).toBeNull
}, { interval: 1 });
expect(spy).toHaveBeenCalledTimes(1)
})
});
24 changes: 20 additions & 4 deletions src/hooks/__tests__/fetchMarketplace.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,21 @@ import { getAllPkgsForVersion, getImageForDistribution } from '../fetchMarketpla
import { createMockTemurinFeatureReleaseAPI } from '../../__fixtures__/hooks';
import vendors from '../../json/marketplace.json';
import getVendorIdentifier from '../../util/vendors';
import AxiosInstance from 'axios'
import MockAdapter from 'axios-mock-adapter';

const mock = new MockAdapter(AxiosInstance);
let mockResponse = [createMockTemurinFeatureReleaseAPI(false)];
let selectedVendorIdentifiers = vendors.map(v => getVendorIdentifier(v));

global.fetch = vi.fn(() => Promise.resolve({
json: () => Promise.resolve(mockResponse)
}));

afterEach(() => {
vi.clearAllMocks();
});

describe('getAllPkgsForVersion', () => {
it('returns valid JSON', async() => {
mock.onGet().reply(200, mockResponse);

renderHook(async() => {
await getAllPkgsForVersion(8, 'linux', 'x64', 'jdk', selectedVendorIdentifiers).then((data) => {
expect(data).toMatchSnapshot()
Expand All @@ -26,6 +27,8 @@ describe('getAllPkgsForVersion', () => {
});

it('returns valid JSON - Alpine Linux', async() => {
mock.onGet().reply(200, mockResponse);

renderHook(async() => {
await getAllPkgsForVersion(8, 'alpine-linux', 'x64', 'any', selectedVendorIdentifiers).then((data) => {
expect(data).toMatchSnapshot()
Expand All @@ -35,6 +38,9 @@ describe('getAllPkgsForVersion', () => {

it('returns valid JSON - installer', async() => {
mockResponse = [createMockTemurinFeatureReleaseAPI(true)];

mock.onGet().reply(200, mockResponse);

renderHook(async() => {
await getAllPkgsForVersion(8, 'linux', 'x64', 'jdk', selectedVendorIdentifiers).then((data) => {
expect(data).toMatchSnapshot()
Expand All @@ -50,4 +56,14 @@ describe('getAllPkgsForVersion', () => {
expect(getImageForDistribution('zulu')).toBe('/images/azul-logo.png');
expect(getImageForDistribution('semeru')).toBe('/images/ibm-logo.png');
});

it('MarketplaceReleases to be null on error', async() => {
mock.onGet().reply(500);

renderHook(async() => {
await getAllPkgsForVersion(8, 'linux', 'x64', 'jdk', selectedVendorIdentifiers).then((data) => {
expect(data).toBeNull
})
});
})
});
40 changes: 26 additions & 14 deletions src/hooks/__tests__/fetchNews.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,33 +2,45 @@ import { renderHook, waitFor } from '@testing-library/react'
import { describe, expect, it, vi } from 'vitest'
import { fetchNewsItems } from '../fetchNews';
import { mockNewsAPI, mockEventsAPI } from '../../__fixtures__/hooks';
import axios from 'axios'
import MockAdapter from 'axios-mock-adapter';

global.fetch = vi.fn()
.mockImplementation((url: URL) => {
switch (url.pathname) {
case '/api/news':
return Promise.resolve({
json: () => Promise.resolve(mockNewsAPI())
});
case '/api/events':
return Promise.resolve({
json: () => Promise.resolve(mockEventsAPI())
});
}
});
const mock = new MockAdapter(axios);

afterEach(() => {
vi.clearAllMocks();
mock.reset();
});

afterAll(() => {
mock.restore();
});

describe('fetchNewsItems', () => {
it('returns valid news and events object', async () => {
mock.onGet(/.*\/api\/news.*/).reply(200, mockNewsAPI());
mock.onGet(/.*\/api\/events.*/).reply(200, mockEventsAPI());
let spy = vi.spyOn(axios, "get");

const { result } = renderHook(() => fetchNewsItems(true, 1));
await waitFor(() => {
expect(result.current?.news.news[0].title).toBe('news_title_mock')
expect(result.current?.events[0].title).toBe('events_title_mock')
}, { interval: 1 });
expect(global.fetch).toHaveBeenCalledTimes(2)
expect(spy).toHaveBeenCalledTimes(2)
expect(result.current).toMatchSnapshot()
})

it('newsAndEvents to be empty on error', async() => {
mock.onGet().reply(500);
let spy = vi.spyOn(axios, "get");

const { result } = renderHook(() => fetchNewsItems(true, 1));
await waitFor(() => {
expect(result.current?.news.news).toStrictEqual([])
expect(result.current?.events).toStrictEqual([])
}, { interval: 1 });

expect(spy).toHaveBeenCalledTimes(2)
})
});
Loading

0 comments on commit a43610d

Please sign in to comment.