diff options
author | Robert Speicher <rspeicher@gmail.com> | 2021-01-20 13:34:23 -0600 |
---|---|---|
committer | Robert Speicher <rspeicher@gmail.com> | 2021-01-20 13:34:23 -0600 |
commit | 6438df3a1e0fb944485cebf07976160184697d72 (patch) | |
tree | 00b09bfd170e77ae9391b1a2f5a93ef6839f2597 /spec/frontend/create_cluster/gke_cluster | |
parent | 42bcd54d971da7ef2854b896a7b34f4ef8601067 (diff) | |
download | gitlab-ce-6438df3a1e0fb944485cebf07976160184697d72.tar.gz |
Add latest changes from gitlab-org/gitlab@13-8-stable-eev13.8.0-rc42
Diffstat (limited to 'spec/frontend/create_cluster/gke_cluster')
3 files changed, 58 insertions, 9 deletions
diff --git a/spec/frontend/create_cluster/gke_cluster/gapi_loader_spec.js b/spec/frontend/create_cluster/gke_cluster/gapi_loader_spec.js new file mode 100644 index 00000000000..9e4d6996340 --- /dev/null +++ b/spec/frontend/create_cluster/gke_cluster/gapi_loader_spec.js @@ -0,0 +1,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(); + }); +}); diff --git a/spec/frontend/create_cluster/gke_cluster/helpers.js b/spec/frontend/create_cluster/gke_cluster/helpers.js index 52b43b82698..026e99fa8f4 100644 --- a/spec/frontend/create_cluster/gke_cluster/helpers.js +++ b/spec/frontend/create_cluster/gke_cluster/helpers.js @@ -8,7 +8,7 @@ const cloudbilling = { projects: { getBillingInfo: jest.fn( () => - new Promise(resolve => { + new Promise((resolve) => { resolve({ result: { billingEnabled: true }, }); @@ -21,7 +21,7 @@ const cloudresourcemanager = { projects: { list: jest.fn( () => - new Promise(resolve => { + new Promise((resolve) => { resolve({ result: { ...gapiProjectsResponseMock }, }); @@ -34,7 +34,7 @@ const compute = { zones: { list: jest.fn( () => - new Promise(resolve => { + new Promise((resolve) => { resolve({ result: { ...gapiZonesResponseMock }, }); @@ -44,7 +44,7 @@ const compute = { machineTypes: { list: jest.fn( () => - new Promise(resolve => { + new Promise((resolve) => { resolve({ result: { ...gapiMachineTypesResponseMock }, }); diff --git a/spec/frontend/create_cluster/gke_cluster/stores/actions_spec.js b/spec/frontend/create_cluster/gke_cluster/stores/actions_spec.js index c1ac3841136..8852baafec7 100644 --- a/spec/frontend/create_cluster/gke_cluster/stores/actions_spec.js +++ b/spec/frontend/create_cluster/gke_cluster/stores/actions_spec.js @@ -14,7 +14,7 @@ import { describe('GCP Cluster Dropdown Store Actions', () => { describe('setProject', () => { - it('should set project', done => { + it('should set project', (done) => { testAction( actions.setProject, selectedProjectMock, @@ -27,7 +27,7 @@ describe('GCP Cluster Dropdown Store Actions', () => { }); describe('setZone', () => { - it('should set zone', done => { + it('should set zone', (done) => { testAction( actions.setZone, selectedZoneMock, @@ -40,7 +40,7 @@ describe('GCP Cluster Dropdown Store Actions', () => { }); describe('setMachineType', () => { - it('should set machine type', done => { + it('should set machine type', (done) => { testAction( actions.setMachineType, selectedMachineTypeMock, @@ -53,7 +53,7 @@ describe('GCP Cluster Dropdown Store Actions', () => { }); describe('setIsValidatingProjectBilling', () => { - it('should set machine type', done => { + it('should set machine type', (done) => { testAction( actions.setIsValidatingProjectBilling, true, @@ -71,10 +71,12 @@ describe('GCP Cluster Dropdown Store Actions', () => { beforeAll(() => { originalGapi = window.gapi; window.gapi = gapi; + window.gapiPromise = Promise.resolve(gapi); }); afterAll(() => { window.gapi = originalGapi; + delete window.gapiPromise; }); describe('fetchProjects', () => { @@ -92,7 +94,7 @@ describe('GCP Cluster Dropdown Store Actions', () => { }); describe('validateProjectBilling', () => { - it('checks project billing status from Google API', done => { + it('checks project billing status from Google API', (done) => { testAction( actions.validateProjectBilling, true, |