summaryrefslogtreecommitdiff
path: root/spec/frontend/issuable/popover/components/issue_popover_spec.js
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/issuable/popover/components/issue_popover_spec.js')
-rw-r--r--spec/frontend/issuable/popover/components/issue_popover_spec.js81
1 files changed, 81 insertions, 0 deletions
diff --git a/spec/frontend/issuable/popover/components/issue_popover_spec.js b/spec/frontend/issuable/popover/components/issue_popover_spec.js
new file mode 100644
index 00000000000..3e77e750f3a
--- /dev/null
+++ b/spec/frontend/issuable/popover/components/issue_popover_spec.js
@@ -0,0 +1,81 @@
+import { GlSkeletonLoader } from '@gitlab/ui';
+import { shallowMount } from '@vue/test-utils';
+import Vue from 'vue';
+import VueApollo from 'vue-apollo';
+import createMockApollo from 'helpers/mock_apollo_helper';
+import waitForPromises from 'helpers/wait_for_promises';
+import StatusBox from '~/issuable/components/status_box.vue';
+import IssuePopover from '~/issuable/popover/components/issue_popover.vue';
+import issueQuery from '~/issuable/popover/queries/issue.query.graphql';
+
+describe('Issue Popover', () => {
+ let wrapper;
+
+ Vue.use(VueApollo);
+
+ const issueQueryResponse = {
+ data: {
+ project: {
+ __typename: 'Project',
+ id: '1',
+ issue: {
+ __typename: 'Issue',
+ id: 'gid://gitlab/Issue/1',
+ createdAt: '2020-07-01T04:08:01Z',
+ state: 'opened',
+ title: 'Issue title',
+ },
+ },
+ },
+ };
+
+ const mountComponent = ({
+ queryResponse = jest.fn().mockResolvedValue(issueQueryResponse),
+ } = {}) => {
+ wrapper = shallowMount(IssuePopover, {
+ apolloProvider: createMockApollo([[issueQuery, queryResponse]]),
+ propsData: {
+ target: document.createElement('a'),
+ projectPath: 'foo/bar',
+ iid: '1',
+ cachedTitle: 'Cached title',
+ },
+ });
+ };
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ it('shows skeleton-loader while apollo is loading', () => {
+ mountComponent();
+
+ expect(wrapper.findComponent(GlSkeletonLoader).exists()).toBe(true);
+ });
+
+ describe('when loaded', () => {
+ beforeEach(() => {
+ mountComponent();
+ return waitForPromises();
+ });
+
+ it('shows status badge', () => {
+ expect(wrapper.findComponent(StatusBox).props()).toEqual({
+ issuableType: 'issue',
+ initialState: issueQueryResponse.data.project.issue.state,
+ });
+ });
+
+ it('shows opened time', () => {
+ expect(wrapper.text()).toContain('Opened 4 days ago');
+ });
+
+ it('shows title', () => {
+ expect(wrapper.find('h5').text()).toBe(issueQueryResponse.data.project.issue.title);
+ });
+
+ it('shows reference', () => {
+ expect(wrapper.text()).toContain('foo/bar#1');
+ });
+ });
+});