Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 0
Stop deployment log polling after cancellation, Update configuration in rollback command and Update snyk vulnerabilities#220
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Uh oh!
There was an error while loading. Please reload this page.
Changes from all commits
09f6b0ce7c11fa6a1f57cc6606bd5620e5f20dd8736d9d6392a8273714e4aa3a555987File filter
Filter by extension
Conversations
Uh oh!
There was an error while loading. Please reload this page.
Jump to
Uh oh!
There was an error while loading. Please reload this page.
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Uh oh!
There was an error while loading. Please reload this page.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,8 +1,25 @@ | ||
| import { EventEmitter } from 'events'; | ||
| import { logPolling as cliUtilitiesJestMock } from '../test/mocks/cli-utilities'; | ||
| import LogPolling from './logs-polling-utilities'; | ||
| import defaultConfig from '../config'; | ||
| type LogPollingCtor = typeof import('./logs-polling-utilities').default; | ||
| jest.mock('@contentstack/cli-utilities', () => cliUtilitiesJestMock); | ||
| jest.mock('timers/promises', () => ({ setTimeout: jest.fn().mockResolvedValue(undefined) })); | ||
| function makeWatchQuery() { | ||
| let subscriber: (result: any) => void = () => {}; | ||
| return { | ||
| subscribe: jest.fn((cb: (result: any) => void) => { | ||
| subscriber = cb; | ||
| return { unsubscribe: jest.fn() }; | ||
| }), | ||
| setVariables: jest.fn(), | ||
| stopPolling: jest.fn(), | ||
| emit: (result: any) => subscriber(result), | ||
| }; | ||
chhavi-mandowara-cstk marked this conversation as resolved.
Uh oh!There was an error while loading. Please reload this page. | ||
| } | ||
| const CONFIG = { | ||
| deployment: 'd1', | ||
| @@ -115,3 +132,66 @@ describe('LogPolling Apollo deprecation regression', () => { | ||
| expect(watchQuery).toHaveBeenCalledTimes(1); | ||
| }); | ||
| }); | ||
| describe('cancelled deployment stops log polling', () => { | ||
| function buildInstance(deploymentStatus: string[]) { | ||
| const statusWatchQuery = makeWatchQuery(); | ||
| const logsWatchQuery = makeWatchQuery(); | ||
| const config = { | ||
| deployment: 'd1', | ||
| environment: 'e1', | ||
| pollingInterval: 1000, | ||
| deploymentStatus, | ||
| }; | ||
| const instance = new LogPolling({ | ||
| apolloManageClient: { watchQuery: jest.fn().mockReturnValue(statusWatchQuery) } as any, | ||
| apolloLogsClient: { watchQuery: jest.fn().mockReturnValue(logsWatchQuery) } as any, | ||
| config: config as any, | ||
| $event: new EventEmitter(), | ||
| }); | ||
| return { instance, statusWatchQuery, logsWatchQuery, config }; | ||
| } | ||
| it('stops status polling once the deployment status is CANCELLED', async () => { | ||
| const { instance, statusWatchQuery } = buildInstance(['LIVE', 'FAILED', 'SKIPPED', 'DEPLOYED', 'CANCELLED']); | ||
| await instance.deploymentLogs(); | ||
| statusWatchQuery.emit({ data: { Deployment: { status: 'CANCELLED' } } }); | ||
| expect(instance.deploymentStatus).toBe('CANCELLED'); | ||
| expect(statusWatchQuery.stopPolling).toHaveBeenCalledTimes(1); | ||
| }); | ||
| it('stops deployment-logs polling and emits DONE once status is CANCELLED', async () => { | ||
| const { instance, statusWatchQuery, logsWatchQuery } = buildInstance([ | ||
| 'LIVE', | ||
| 'FAILED', | ||
| 'SKIPPED', | ||
| 'DEPLOYED', | ||
| 'CANCELLED', | ||
| ]); | ||
| const events: string[] = []; | ||
| (instance as any).$event.on('deployment-logs', (e: any) => events.push(e.message)); | ||
| await instance.deploymentLogs(); | ||
| statusWatchQuery.emit({ data: { Deployment: { status: 'CANCELLED' } } }); | ||
| await logsWatchQuery.emit({ data: { getLogs: [] } }); | ||
| expect(logsWatchQuery.stopPolling).toHaveBeenCalledTimes(1); | ||
| expect(events).toContain('DONE'); | ||
| }); | ||
| it('regression guard: keeps polling forever if CANCELLED is missing from deploymentStatus', async () => { | ||
| const { instance, statusWatchQuery } = buildInstance(['LIVE', 'FAILED', 'SKIPPED', 'DEPLOYED']); | ||
| await instance.deploymentLogs(); | ||
| statusWatchQuery.emit({ data: { Deployment: { status: 'CANCELLED' } } }); | ||
| expect(instance.deploymentStatus).toBe('CANCELLED'); | ||
| expect(statusWatchQuery.stopPolling).not.toHaveBeenCalled(); | ||
| }); | ||
| it('real app config (src/config) lists CANCELLED as a terminal deployment status', () => { | ||
| expect(defaultConfig.deploymentStatus).toContain('CANCELLED'); | ||
| }); | ||
| }); | ||
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.