Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gapi_loader_spec.js « gke_cluster « create_cluster « frontend « spec - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 9e4d6996340c7771805fdf1da7f154f14e3a81cf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import gapiLoader from '~/create_cluster/gke_cluster/gapi_loader';

describe('gapiLoader', () => {
  // A mock for document.head.appendChild to intercept the script tag injection.
  let mockDOMHeadAppendChild;

  beforeEach(() => {
    mockDOMHeadAppendChild = jest.spyOn(document.head, 'appendChild');
  });

  afterEach(() => {
    mockDOMHeadAppendChild.mockRestore();
    delete window.gapi;
    delete window.gapiPromise;
    delete window.onGapiLoad;
  });

  it('returns a promise', () => {
    expect(gapiLoader()).toBeInstanceOf(Promise);
  });

  it('returns the same promise when already loading', () => {
    const first = gapiLoader();
    const second = gapiLoader();
    expect(first).toBe(second);
  });

  it('resolves the promise when the script loads correctly', async () => {
    mockDOMHeadAppendChild.mockImplementationOnce((script) => {
      script.removeAttribute('src');
      script.appendChild(
        document.createTextNode(`window.gapi = 'hello gapi'; window.onGapiLoad()`),
      );
      document.head.appendChild(script);
    });
    await expect(gapiLoader()).resolves.toBe('hello gapi');
    expect(mockDOMHeadAppendChild).toHaveBeenCalled();
  });

  it('rejects the promise when the script fails loading', async () => {
    mockDOMHeadAppendChild.mockImplementationOnce((script) => {
      script.onerror(new Error('hello error'));
    });
    await expect(gapiLoader()).rejects.toThrow('hello error');
    expect(mockDOMHeadAppendChild).toHaveBeenCalled();
  });
});