import MockAdapter from 'axios-mock-adapter'; import axios from '~/lib/utils/axios_utils'; import { clearSvgIconPathContentCache, getSvgIconPathContent } from '~/lib/utils/icon_utils'; describe('Icon utils', () => { describe('getSvgIconPathContent', () => { let spriteIcons; let axiosMock; const mockName = 'mockIconName'; const mockPath = 'mockPath'; const mockIcons = ``; beforeAll(() => { spriteIcons = gon.sprite_icons; gon.sprite_icons = 'mockSpriteIconsEndpoint'; }); afterAll(() => { gon.sprite_icons = spriteIcons; }); beforeEach(() => { axiosMock = new MockAdapter(axios); }); afterEach(() => { axiosMock.restore(); clearSvgIconPathContentCache(); }); describe('when the icons can be loaded', () => { beforeEach(() => { axiosMock.onGet(gon.sprite_icons).reply(200, mockIcons); }); it('extracts svg icon path content from sprite icons', () => { return getSvgIconPathContent(mockName).then(path => { expect(path).toBe(mockPath); }); }); it('returns null if icon path content does not exist', () => { return getSvgIconPathContent('missing-icon').then(path => { expect(path).toBe(null); }); }); }); describe('when the icons cannot be loaded on the first 2 tries', () => { beforeEach(() => { axiosMock .onGet(gon.sprite_icons) .replyOnce(500) .onGet(gon.sprite_icons) .replyOnce(500) .onGet(gon.sprite_icons) .reply(200, mockIcons); }); it('returns null', () => { return getSvgIconPathContent(mockName).then(path => { expect(path).toBe(null); }); }); it('extracts svg icon path content, after 2 attempts', () => { return getSvgIconPathContent(mockName) .then(path1 => { expect(path1).toBe(null); return getSvgIconPathContent(mockName); }) .then(path2 => { expect(path2).toBe(null); return getSvgIconPathContent(mockName); }) .then(path3 => { expect(path3).toBe(mockPath); }); }); }); }); });