Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/groups/components/overview_tabs_spec.js')
-rw-r--r--spec/frontend/groups/components/overview_tabs_spec.js187
1 files changed, 187 insertions, 0 deletions
diff --git a/spec/frontend/groups/components/overview_tabs_spec.js b/spec/frontend/groups/components/overview_tabs_spec.js
new file mode 100644
index 00000000000..352bf25b84f
--- /dev/null
+++ b/spec/frontend/groups/components/overview_tabs_spec.js
@@ -0,0 +1,187 @@
+import { GlTab } from '@gitlab/ui';
+import { nextTick } from 'vue';
+import AxiosMockAdapter from 'axios-mock-adapter';
+import { mountExtended } from 'helpers/vue_test_utils_helper';
+import OverviewTabs from '~/groups/components/overview_tabs.vue';
+import GroupsApp from '~/groups/components/app.vue';
+import GroupsStore from '~/groups/store/groups_store';
+import GroupsService from '~/groups/service/groups_service';
+import { createRouter } from '~/groups/init_overview_tabs';
+import {
+ ACTIVE_TAB_SUBGROUPS_AND_PROJECTS,
+ ACTIVE_TAB_SHARED,
+ ACTIVE_TAB_ARCHIVED,
+} from '~/groups/constants';
+import axios from '~/lib/utils/axios_utils';
+
+const router = createRouter();
+
+describe('OverviewTabs', () => {
+ let wrapper;
+
+ const endpoints = {
+ subgroups_and_projects: '/groups/foobar/-/children.json',
+ shared: '/groups/foobar/-/shared_projects.json',
+ archived: '/groups/foobar/-/children.json?archived=only',
+ };
+
+ const routerMock = {
+ push: jest.fn(),
+ };
+
+ const createComponent = async ({
+ route = { name: ACTIVE_TAB_SUBGROUPS_AND_PROJECTS, params: { group: 'foo/bar/baz' } },
+ } = {}) => {
+ wrapper = mountExtended(OverviewTabs, {
+ router,
+ provide: {
+ endpoints,
+ },
+ mocks: { $route: route, $router: routerMock },
+ });
+
+ await nextTick();
+ };
+
+ const findTabPanels = () => wrapper.findAllComponents(GlTab);
+ const findTab = (name) => wrapper.findByRole('tab', { name });
+ const findSelectedTab = () => wrapper.findByRole('tab', { selected: true });
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ beforeEach(async () => {
+ // eslint-disable-next-line no-new
+ new AxiosMockAdapter(axios);
+ });
+
+ it('renders `Subgroups and projects` tab with `GroupsApp` component', async () => {
+ await createComponent();
+
+ const tabPanel = findTabPanels().at(0);
+
+ expect(tabPanel.vm.$attrs).toMatchObject({
+ title: OverviewTabs.i18n[ACTIVE_TAB_SUBGROUPS_AND_PROJECTS],
+ lazy: false,
+ });
+ expect(tabPanel.findComponent(GroupsApp).props()).toMatchObject({
+ action: ACTIVE_TAB_SUBGROUPS_AND_PROJECTS,
+ store: new GroupsStore({ showSchemaMarkup: true }),
+ service: new GroupsService(endpoints[ACTIVE_TAB_SUBGROUPS_AND_PROJECTS]),
+ hideProjects: false,
+ renderEmptyState: true,
+ });
+ });
+
+ it('renders `Shared projects` tab and renders `GroupsApp` component after clicking tab', async () => {
+ await createComponent();
+
+ const tabPanel = findTabPanels().at(1);
+
+ expect(tabPanel.vm.$attrs).toMatchObject({
+ title: OverviewTabs.i18n[ACTIVE_TAB_SHARED],
+ lazy: true,
+ });
+
+ await findTab(OverviewTabs.i18n[ACTIVE_TAB_SHARED]).trigger('click');
+
+ expect(tabPanel.findComponent(GroupsApp).props()).toMatchObject({
+ action: ACTIVE_TAB_SHARED,
+ store: new GroupsStore(),
+ service: new GroupsService(endpoints[ACTIVE_TAB_SHARED]),
+ hideProjects: false,
+ renderEmptyState: false,
+ });
+
+ expect(tabPanel.vm.$attrs.lazy).toBe(false);
+ });
+
+ it('renders `Archived projects` tab and renders `GroupsApp` component after clicking tab', async () => {
+ await createComponent();
+
+ const tabPanel = findTabPanels().at(2);
+
+ expect(tabPanel.vm.$attrs).toMatchObject({
+ title: OverviewTabs.i18n[ACTIVE_TAB_ARCHIVED],
+ lazy: true,
+ });
+
+ await findTab(OverviewTabs.i18n[ACTIVE_TAB_ARCHIVED]).trigger('click');
+
+ expect(tabPanel.findComponent(GroupsApp).props()).toMatchObject({
+ action: ACTIVE_TAB_ARCHIVED,
+ store: new GroupsStore(),
+ service: new GroupsService(endpoints[ACTIVE_TAB_ARCHIVED]),
+ hideProjects: false,
+ renderEmptyState: false,
+ });
+
+ expect(tabPanel.vm.$attrs.lazy).toBe(false);
+ });
+
+ describe.each([
+ [
+ { name: ACTIVE_TAB_SUBGROUPS_AND_PROJECTS, params: { group: 'foo/bar/baz' } },
+ OverviewTabs.i18n[ACTIVE_TAB_SHARED],
+ {
+ name: ACTIVE_TAB_SHARED,
+ params: { group: ['foo', 'bar', 'baz'] },
+ },
+ ],
+ [
+ { name: ACTIVE_TAB_SUBGROUPS_AND_PROJECTS, params: { group: ['foo', 'bar', 'baz'] } },
+ OverviewTabs.i18n[ACTIVE_TAB_SHARED],
+ {
+ name: ACTIVE_TAB_SHARED,
+ params: { group: ['foo', 'bar', 'baz'] },
+ },
+ ],
+ [
+ { name: ACTIVE_TAB_SUBGROUPS_AND_PROJECTS, params: { group: 'foo' } },
+ OverviewTabs.i18n[ACTIVE_TAB_SHARED],
+ {
+ name: ACTIVE_TAB_SHARED,
+ params: { group: ['foo'] },
+ },
+ ],
+ [
+ { name: ACTIVE_TAB_SHARED, params: { group: 'foo/bar' } },
+ OverviewTabs.i18n[ACTIVE_TAB_ARCHIVED],
+ {
+ name: ACTIVE_TAB_ARCHIVED,
+ params: { group: ['foo', 'bar'] },
+ },
+ ],
+ [
+ { name: ACTIVE_TAB_SHARED, params: { group: 'foo/bar' } },
+ OverviewTabs.i18n[ACTIVE_TAB_SUBGROUPS_AND_PROJECTS],
+ {
+ name: ACTIVE_TAB_SUBGROUPS_AND_PROJECTS,
+ params: { group: ['foo', 'bar'] },
+ },
+ ],
+ [
+ { name: ACTIVE_TAB_ARCHIVED, params: { group: ['foo'] } },
+ OverviewTabs.i18n[ACTIVE_TAB_SHARED],
+ {
+ name: ACTIVE_TAB_SHARED,
+ params: { group: ['foo'] },
+ },
+ ],
+ ])('when current route is %j', (currentRoute, tabToClick, expectedRoute) => {
+ beforeEach(async () => {
+ await createComponent({ route: currentRoute });
+ });
+
+ it(`sets ${OverviewTabs.i18n[currentRoute.name]} as active tab`, () => {
+ expect(findSelectedTab().text()).toBe(OverviewTabs.i18n[currentRoute.name]);
+ });
+
+ it(`pushes expected route when ${tabToClick} tab is clicked`, async () => {
+ await findTab(tabToClick).trigger('click');
+
+ expect(routerMock.push).toHaveBeenCalledWith(expectedRoute);
+ });
+ });
+});