diff options
Diffstat (limited to 'spec/frontend/environments/graphql/resolvers_spec.js')
-rw-r--r-- | spec/frontend/environments/graphql/resolvers_spec.js | 136 |
1 files changed, 129 insertions, 7 deletions
diff --git a/spec/frontend/environments/graphql/resolvers_spec.js b/spec/frontend/environments/graphql/resolvers_spec.js index 4d2a0818996..d8d26b74504 100644 --- a/spec/frontend/environments/graphql/resolvers_spec.js +++ b/spec/frontend/environments/graphql/resolvers_spec.js @@ -1,18 +1,33 @@ import MockAdapter from 'axios-mock-adapter'; import axios from '~/lib/utils/axios_utils'; import { resolvers } from '~/environments/graphql/resolvers'; +import environmentToRollback from '~/environments/graphql/queries/environment_to_rollback.query.graphql'; +import environmentToDelete from '~/environments/graphql/queries/environment_to_delete.query.graphql'; +import createMockApollo from 'helpers/mock_apollo_helper'; +import pollIntervalQuery from '~/environments/graphql/queries/poll_interval.query.graphql'; +import pageInfoQuery from '~/environments/graphql/queries/page_info.query.graphql'; import { TEST_HOST } from 'helpers/test_constants'; -import { environmentsApp, resolvedEnvironmentsApp, folder, resolvedFolder } from './mock_data'; +import { + environmentsApp, + resolvedEnvironmentsApp, + resolvedEnvironment, + folder, + resolvedFolder, +} from './mock_data'; const ENDPOINT = `${TEST_HOST}/environments`; describe('~/frontend/environments/graphql/resolvers', () => { let mockResolvers; let mock; + let mockApollo; + let localState; beforeEach(() => { mockResolvers = resolvers(ENDPOINT); mock = new MockAdapter(axios); + mockApollo = createMockApollo(); + localState = mockApollo.defaultClient.localState; }); afterEach(() => { @@ -21,10 +36,87 @@ describe('~/frontend/environments/graphql/resolvers', () => { describe('environmentApp', () => { it('should fetch environments and map them to frontend data', async () => { - mock.onGet(ENDPOINT, { params: { nested: true } }).reply(200, environmentsApp); + const cache = { writeQuery: jest.fn() }; + const scope = 'available'; + mock + .onGet(ENDPOINT, { params: { nested: true, scope, page: 1 } }) + .reply(200, environmentsApp, {}); - const app = await mockResolvers.Query.environmentApp(); + const app = await mockResolvers.Query.environmentApp(null, { scope, page: 1 }, { cache }); expect(app).toEqual(resolvedEnvironmentsApp); + expect(cache.writeQuery).toHaveBeenCalledWith({ + query: pollIntervalQuery, + data: { interval: undefined }, + }); + }); + it('should set the poll interval when there is one', async () => { + const cache = { writeQuery: jest.fn() }; + const scope = 'stopped'; + const interval = 3000; + mock + .onGet(ENDPOINT, { params: { nested: true, scope, page: 1 } }) + .reply(200, environmentsApp, { + 'poll-interval': interval, + }); + + await mockResolvers.Query.environmentApp(null, { scope, page: 1 }, { cache }); + expect(cache.writeQuery).toHaveBeenCalledWith({ + query: pollIntervalQuery, + data: { interval }, + }); + }); + it('should set page info if there is any', async () => { + const cache = { writeQuery: jest.fn() }; + const scope = 'stopped'; + mock + .onGet(ENDPOINT, { params: { nested: true, scope, page: 1 } }) + .reply(200, environmentsApp, { + 'x-next-page': '2', + 'x-page': '1', + 'X-Per-Page': '2', + 'X-Prev-Page': '', + 'X-TOTAL': '37', + 'X-Total-Pages': '5', + }); + + await mockResolvers.Query.environmentApp(null, { scope, page: 1 }, { cache }); + expect(cache.writeQuery).toHaveBeenCalledWith({ + query: pageInfoQuery, + data: { + pageInfo: { + total: 37, + perPage: 2, + previousPage: NaN, + totalPages: 5, + nextPage: 2, + page: 1, + __typename: 'LocalPageInfo', + }, + }, + }); + }); + it('should not set page info if there is none', async () => { + const cache = { writeQuery: jest.fn() }; + const scope = 'stopped'; + mock + .onGet(ENDPOINT, { params: { nested: true, scope, page: 1 } }) + .reply(200, environmentsApp, {}); + + await mockResolvers.Query.environmentApp(null, { scope, page: 1 }, { cache }); + expect(cache.writeQuery).toHaveBeenCalledWith({ + query: pageInfoQuery, + data: { + pageInfo: { + __typename: 'LocalPageInfo', + nextPage: NaN, + page: NaN, + perPage: NaN, + previousPage: NaN, + total: NaN, + totalPages: NaN, + }, + }, + }); }); }); describe('folder', () => { @@ -42,7 +134,7 @@ describe('~/frontend/environments/graphql/resolvers', () => { it('should post to the stop environment path', async () => { mock.onPost(ENDPOINT).reply(200); - await mockResolvers.Mutations.stopEnvironment(null, { environment: { stopPath: ENDPOINT } }); + await mockResolvers.Mutation.stopEnvironment(null, { environment: { stopPath: ENDPOINT } }); expect(mock.history.post).toContainEqual( expect.objectContaining({ url: ENDPOINT, method: 'post' }), @@ -53,7 +145,7 @@ describe('~/frontend/environments/graphql/resolvers', () => { it('should post to the retry environment path', async () => { mock.onPost(ENDPOINT).reply(200); - await mockResolvers.Mutations.rollbackEnvironment(null, { + await mockResolvers.Mutation.rollbackEnvironment(null, { environment: { retryUrl: ENDPOINT }, }); @@ -66,7 +158,7 @@ describe('~/frontend/environments/graphql/resolvers', () => { it('should DELETE to the delete environment path', async () => { mock.onDelete(ENDPOINT).reply(200); - await mockResolvers.Mutations.deleteEnvironment(null, { + await mockResolvers.Mutation.deleteEnvironment(null, { environment: { deletePath: ENDPOINT }, }); @@ -79,7 +171,7 @@ describe('~/frontend/environments/graphql/resolvers', () => { it('should post to the auto stop path', async () => { mock.onPost(ENDPOINT).reply(200); - await mockResolvers.Mutations.cancelAutoStop(null, { + await mockResolvers.Mutation.cancelAutoStop(null, { environment: { autoStopPath: ENDPOINT }, }); @@ -88,4 +180,34 @@ describe('~/frontend/environments/graphql/resolvers', () => { ); }); }); + describe('setEnvironmentToRollback', () => { + it('should write the given environment to the cache', () => { + localState.client.writeQuery = jest.fn(); + mockResolvers.Mutation.setEnvironmentToRollback( + null, + { environment: resolvedEnvironment }, + localState, + ); + + expect(localState.client.writeQuery).toHaveBeenCalledWith({ + query: environmentToRollback, + data: { environmentToRollback: resolvedEnvironment }, + }); + }); + }); + describe('setEnvironmentToDelete', () => { + it('should write the given environment to the cache', () => { + localState.client.writeQuery = jest.fn(); + mockResolvers.Mutation.setEnvironmentToDelete( + null, + { environment: resolvedEnvironment }, + localState, + ); + + expect(localState.client.writeQuery).toHaveBeenCalledWith({ + query: environmentToDelete, + data: { environmentToDelete: resolvedEnvironment }, + }); + }); + }); }); |