diff options
Diffstat (limited to 'spec/frontend/jira_connect')
4 files changed, 160 insertions, 49 deletions
diff --git a/spec/frontend/jira_connect/subscriptions/components/app_spec.js b/spec/frontend/jira_connect/subscriptions/components/app_spec.js index 57e1b8fb90c..aa0f1440b20 100644 --- a/spec/frontend/jira_connect/subscriptions/components/app_spec.js +++ b/spec/frontend/jira_connect/subscriptions/components/app_spec.js @@ -1,11 +1,10 @@ -import { GlLink, GlEmptyState } from '@gitlab/ui'; +import { GlLink } from '@gitlab/ui'; import { nextTick } from 'vue'; import { mountExtended, shallowMountExtended } from 'helpers/vue_test_utils_helper'; import JiraConnectApp from '~/jira_connect/subscriptions/components/app.vue'; -import AddNamespaceButton from '~/jira_connect/subscriptions/components/add_namespace_button.vue'; -import SignInButton from '~/jira_connect/subscriptions/components/sign_in_button.vue'; -import SubscriptionsList from '~/jira_connect/subscriptions/components/subscriptions_list.vue'; +import SignInPage from '~/jira_connect/subscriptions/pages/sign_in.vue'; +import SubscriptionsPage from '~/jira_connect/subscriptions/pages/subscriptions.vue'; import UserLink from '~/jira_connect/subscriptions/components/user_link.vue'; import createStore from '~/jira_connect/subscriptions/store'; import { SET_ALERT } from '~/jira_connect/subscriptions/store/mutation_types'; @@ -23,10 +22,8 @@ describe('JiraConnectApp', () => { const findAlert = () => wrapper.findByTestId('jira-connect-persisted-alert'); const findAlertLink = () => findAlert().findComponent(GlLink); - const findSignInButton = () => wrapper.findComponent(SignInButton); - const findAddNamespaceButton = () => wrapper.findComponent(AddNamespaceButton); - const findSubscriptionsList = () => wrapper.findComponent(SubscriptionsList); - const findEmptyState = () => wrapper.findComponent(GlEmptyState); + const findSignInPage = () => wrapper.findComponent(SignInPage); + const findSubscriptionsPage = () => wrapper.findComponent(SubscriptionsPage); const createComponent = ({ provide, mountFn = shallowMountExtended } = {}) => { store = createStore(); @@ -43,49 +40,35 @@ describe('JiraConnectApp', () => { describe('template', () => { describe.each` - scenario | usersPath | subscriptions | expectSignInButton | expectEmptyState | expectNamespaceButton | expectSubscriptionsList - ${'user is not signed in with subscriptions'} | ${'/users'} | ${[mockSubscription]} | ${true} | ${false} | ${false} | ${true} - ${'user is not signed in without subscriptions'} | ${'/users'} | ${undefined} | ${true} | ${false} | ${false} | ${false} - ${'user is signed in with subscriptions'} | ${undefined} | ${[mockSubscription]} | ${false} | ${false} | ${true} | ${true} - ${'user is signed in without subscriptions'} | ${undefined} | ${undefined} | ${false} | ${true} | ${false} | ${false} - `( - 'when $scenario', - ({ - usersPath, - expectSignInButton, - subscriptions, - expectEmptyState, - expectNamespaceButton, - expectSubscriptionsList, - }) => { - beforeEach(() => { - createComponent({ - provide: { - usersPath, - subscriptions, - }, - }); - }); - - it(`${expectSignInButton ? 'renders' : 'does not render'} sign in button`, () => { - expect(findSignInButton().exists()).toBe(expectSignInButton); - }); - - it(`${expectEmptyState ? 'renders' : 'does not render'} empty state`, () => { - expect(findEmptyState().exists()).toBe(expectEmptyState); + scenario | usersPath | shouldRenderSignInPage | shouldRenderSubscriptionsPage + ${'user is not signed in'} | ${'/users'} | ${true} | ${false} + ${'user is signed in'} | ${undefined} | ${false} | ${true} + `('when $scenario', ({ usersPath, shouldRenderSignInPage, shouldRenderSubscriptionsPage }) => { + beforeEach(() => { + createComponent({ + provide: { + usersPath, + subscriptions: [mockSubscription], + }, }); + }); - it(`${ - expectNamespaceButton ? 'renders' : 'does not render' - } button to add namespace`, () => { - expect(findAddNamespaceButton().exists()).toBe(expectNamespaceButton); - }); + it(`${shouldRenderSignInPage ? 'renders' : 'does not render'} sign in page`, () => { + expect(findSignInPage().exists()).toBe(shouldRenderSignInPage); + if (shouldRenderSignInPage) { + expect(findSignInPage().props('hasSubscriptions')).toBe(true); + } + }); - it(`${expectSubscriptionsList ? 'renders' : 'does not render'} subscriptions list`, () => { - expect(findSubscriptionsList().exists()).toBe(expectSubscriptionsList); - }); - }, - ); + it(`${ + shouldRenderSubscriptionsPage ? 'renders' : 'does not render' + } subscriptions page`, () => { + expect(findSubscriptionsPage().exists()).toBe(shouldRenderSubscriptionsPage); + if (shouldRenderSubscriptionsPage) { + expect(findSubscriptionsPage().props('hasSubscriptions')).toBe(true); + } + }); + }); it('renders UserLink component', () => { createComponent({ diff --git a/spec/frontend/jira_connect/subscriptions/components/sign_in_button_spec.js b/spec/frontend/jira_connect/subscriptions/components/sign_in_button_spec.js index cb5ae877c47..94dcf9decec 100644 --- a/spec/frontend/jira_connect/subscriptions/components/sign_in_button_spec.js +++ b/spec/frontend/jira_connect/subscriptions/components/sign_in_button_spec.js @@ -11,11 +11,12 @@ jest.mock('~/jira_connect/subscriptions/utils'); describe('SignInButton', () => { let wrapper; - const createComponent = () => { + const createComponent = ({ slots } = {}) => { wrapper = shallowMount(SignInButton, { propsData: { usersPath: MOCK_USERS_PATH, }, + slots, }); }; @@ -29,6 +30,7 @@ describe('SignInButton', () => { createComponent(); expect(findButton().exists()).toBe(true); + expect(findButton().text()).toBe(SignInButton.i18n.defaultButtonText); }); describe.each` @@ -45,4 +47,12 @@ describe('SignInButton', () => { expect(findButton().attributes('href')).toBe(expectedHref); }); }); + + describe('with slot', () => { + const mockSlotContent = 'custom button content!'; + it('renders slot content in button', () => { + createComponent({ slots: { default: mockSlotContent } }); + expect(wrapper.text()).toMatchInterpolatedText(mockSlotContent); + }); + }); }); diff --git a/spec/frontend/jira_connect/subscriptions/pages/sign_in_spec.js b/spec/frontend/jira_connect/subscriptions/pages/sign_in_spec.js new file mode 100644 index 00000000000..4e3297506f1 --- /dev/null +++ b/spec/frontend/jira_connect/subscriptions/pages/sign_in_spec.js @@ -0,0 +1,62 @@ +import { mount } from '@vue/test-utils'; + +import SignInPage from '~/jira_connect/subscriptions/pages/sign_in.vue'; +import SignInButton from '~/jira_connect/subscriptions/components/sign_in_button.vue'; +import SubscriptionsList from '~/jira_connect/subscriptions/components/subscriptions_list.vue'; +import createStore from '~/jira_connect/subscriptions/store'; + +jest.mock('~/jira_connect/subscriptions/utils'); + +describe('SignInPage', () => { + let wrapper; + let store; + + const findSignInButton = () => wrapper.findComponent(SignInButton); + const findSubscriptionsList = () => wrapper.findComponent(SubscriptionsList); + + const createComponent = ({ provide, props } = {}) => { + store = createStore(); + + wrapper = mount(SignInPage, { + store, + provide, + propsData: props, + }); + }; + + afterEach(() => { + wrapper.destroy(); + }); + + describe('template', () => { + const mockUsersPath = '/test'; + describe.each` + scenario | expectSubscriptionsList | signInButtonText + ${'with subscriptions'} | ${true} | ${SignInPage.i18n.signinButtonTextWithSubscriptions} + ${'without subscriptions'} | ${false} | ${SignInButton.i18n.defaultButtonText} + `('$scenario', ({ expectSubscriptionsList, signInButtonText }) => { + beforeEach(() => { + createComponent({ + provide: { + usersPath: mockUsersPath, + }, + props: { + hasSubscriptions: expectSubscriptionsList, + }, + }); + }); + + it(`renders sign in button with text ${signInButtonText}`, () => { + expect(findSignInButton().text()).toMatchInterpolatedText(signInButtonText); + }); + + it('renders sign in button with `usersPath` prop', () => { + expect(findSignInButton().props('usersPath')).toBe(mockUsersPath); + }); + + it(`${expectSubscriptionsList ? 'renders' : 'does not render'} subscriptions list`, () => { + expect(findSubscriptionsList().exists()).toBe(expectSubscriptionsList); + }); + }); + }); +}); diff --git a/spec/frontend/jira_connect/subscriptions/pages/subscriptions_spec.js b/spec/frontend/jira_connect/subscriptions/pages/subscriptions_spec.js new file mode 100644 index 00000000000..198278efc1f --- /dev/null +++ b/spec/frontend/jira_connect/subscriptions/pages/subscriptions_spec.js @@ -0,0 +1,56 @@ +import { GlEmptyState } from '@gitlab/ui'; +import { shallowMount } from '@vue/test-utils'; +import SubscriptionsPage from '~/jira_connect/subscriptions/pages/subscriptions.vue'; +import AddNamespaceButton from '~/jira_connect/subscriptions/components/add_namespace_button.vue'; +import SubscriptionsList from '~/jira_connect/subscriptions/components/subscriptions_list.vue'; +import createStore from '~/jira_connect/subscriptions/store'; + +describe('SubscriptionsPage', () => { + let wrapper; + let store; + + const findAddNamespaceButton = () => wrapper.findComponent(AddNamespaceButton); + const findSubscriptionsList = () => wrapper.findComponent(SubscriptionsList); + const findEmptyState = () => wrapper.findComponent(GlEmptyState); + + const createComponent = ({ props } = {}) => { + store = createStore(); + + wrapper = shallowMount(SubscriptionsPage, { + store, + propsData: props, + }); + }; + + afterEach(() => { + wrapper.destroy(); + }); + + describe('template', () => { + describe.each` + scenario | expectSubscriptionsList | expectEmptyState + ${'with subscriptions'} | ${true} | ${false} + ${'without subscriptions'} | ${false} | ${true} + `('$scenario', ({ expectEmptyState, expectSubscriptionsList }) => { + beforeEach(() => { + createComponent({ + props: { + hasSubscriptions: expectSubscriptionsList, + }, + }); + }); + + it('renders button to add namespace', () => { + expect(findAddNamespaceButton().exists()).toBe(true); + }); + + it(`${expectEmptyState ? 'renders' : 'does not render'} empty state`, () => { + expect(findEmptyState().exists()).toBe(expectEmptyState); + }); + + it(`${expectSubscriptionsList ? 'renders' : 'does not render'} subscriptions list`, () => { + expect(findSubscriptionsList().exists()).toBe(expectSubscriptionsList); + }); + }); + }); +}); |