80 lines
2.3 KiB
JavaScript
80 lines
2.3 KiB
JavaScript
|
import { GlBanner } from '@gitlab/ui';
|
||
|
import { createLocalVue, shallowMount } from '@vue/test-utils';
|
||
|
import { nextTick } from 'vue';
|
||
|
import VueApollo from 'vue-apollo';
|
||
|
import createMockApollo from 'helpers/mock_apollo_helper';
|
||
|
import PipelineNotification from '~/pipelines/components/notification/pipeline_notification.vue';
|
||
|
import getUserCallouts from '~/pipelines/graphql/queries/get_user_callouts.query.graphql';
|
||
|
|
||
|
describe('Pipeline notification', () => {
|
||
|
const localVue = createLocalVue();
|
||
|
|
||
|
let wrapper;
|
||
|
const dagDocPath = 'my/dag/path';
|
||
|
|
||
|
const createWrapper = (apolloProvider) => {
|
||
|
return shallowMount(PipelineNotification, {
|
||
|
localVue,
|
||
|
provide: {
|
||
|
dagDocPath,
|
||
|
},
|
||
|
apolloProvider,
|
||
|
});
|
||
|
};
|
||
|
|
||
|
const createWrapperWithApollo = async ({ callouts = [], isLoading = false } = {}) => {
|
||
|
localVue.use(VueApollo);
|
||
|
|
||
|
const mappedCallouts = callouts.map((callout) => {
|
||
|
return { featureName: callout, __typename: 'UserCallout' };
|
||
|
});
|
||
|
|
||
|
const mockCalloutsResponse = {
|
||
|
data: {
|
||
|
currentUser: {
|
||
|
id: 45,
|
||
|
__typename: 'User',
|
||
|
callouts: {
|
||
|
id: 5,
|
||
|
__typename: 'UserCalloutConnection',
|
||
|
nodes: mappedCallouts,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
};
|
||
|
const getUserCalloutsHandler = jest.fn().mockResolvedValue(mockCalloutsResponse);
|
||
|
const requestHandlers = [[getUserCallouts, getUserCalloutsHandler]];
|
||
|
|
||
|
const apolloWrapper = createWrapper(createMockApollo(requestHandlers));
|
||
|
if (!isLoading) {
|
||
|
await nextTick();
|
||
|
}
|
||
|
|
||
|
return apolloWrapper;
|
||
|
};
|
||
|
|
||
|
const findBanner = () => wrapper.findComponent(GlBanner);
|
||
|
|
||
|
afterEach(() => {
|
||
|
wrapper.destroy();
|
||
|
});
|
||
|
|
||
|
it('shows the banner if the user has never seen it', async () => {
|
||
|
wrapper = await createWrapperWithApollo({ callouts: ['random'] });
|
||
|
|
||
|
expect(findBanner().exists()).toBe(true);
|
||
|
});
|
||
|
|
||
|
it('does not show the banner while the user callout query is loading', async () => {
|
||
|
wrapper = await createWrapperWithApollo({ callouts: ['random'], isLoading: true });
|
||
|
|
||
|
expect(findBanner().exists()).toBe(false);
|
||
|
});
|
||
|
|
||
|
it('does not show the banner if the user has previously dismissed it', async () => {
|
||
|
wrapper = await createWrapperWithApollo({ callouts: ['pipeline_needs_banner'.toUpperCase()] });
|
||
|
|
||
|
expect(findBanner().exists()).toBe(false);
|
||
|
});
|
||
|
});
|