From 43ae0a8eab265ecbc166560f3ec054a7a3acabc7 Mon Sep 17 00:00:00 2001 From: Alexander Devitsky Date: Thu, 12 May 2022 16:17:42 +0300 Subject: [PATCH 1/2] test: category-breadcrumbs component --- .../__tests__/CategoryBreadcrumbs.spec.ts | 71 +++++++ .../breadcrumbs/CategoryBreadcrumbs.vue | 6 +- .../mocks/useTraverseCategoryMock.ts | 193 ++++++++++++++++++ 3 files changed, 268 insertions(+), 2 deletions(-) create mode 100644 packages/theme/modules/catalog/category/components/__tests__/CategoryBreadcrumbs.spec.ts create mode 100644 packages/theme/test-utils/mocks/useTraverseCategoryMock.ts diff --git a/packages/theme/modules/catalog/category/components/__tests__/CategoryBreadcrumbs.spec.ts b/packages/theme/modules/catalog/category/components/__tests__/CategoryBreadcrumbs.spec.ts new file mode 100644 index 000000000..7b4f8dce6 --- /dev/null +++ b/packages/theme/modules/catalog/category/components/__tests__/CategoryBreadcrumbs.spec.ts @@ -0,0 +1,71 @@ +import { mount } from '@vue/test-utils'; +import * as composables from '@nuxtjs/composition-api'; +import { + categoryAncestorsFirstLevelMock, + categoryAncestorsSecondLevelMock, + categoryAncestorsThirdLevelMock, + useTraverseCategoryMock, +} from '~/test-utils/mocks/useTraverseCategoryMock'; +import { useUiHelpers } from '~/composables'; +import { useTraverseCategory } from '~/modules/catalog/category/helpers/useTraverseCategory'; +import CategoryBreadcrumbs from '~/modules/catalog/category/components/breadcrumbs/CategoryBreadcrumbs.vue'; +import type { CategoryTree } from '~/modules/GraphQL/types'; + +jest.mock('@nuxtjs/composition-api', () => { + const originalComposables = jest.requireActual('@nuxtjs/composition-api'); + return { + ...originalComposables, + useContext: jest.fn(), + }; +}); +jest.mock('~/composables'); +jest.mock('~/modules/catalog/category/helpers/useTraverseCategory'); + +describe('CategoryBreadcrumbs.vue', () => { + beforeEach(() => { + const { useContext } = composables; + jest.resetAllMocks(); + (useContext as jest.Mock).mockReturnValue({ + localePath: jest.fn((path: string) => path), + }); + (useUiHelpers as jest.Mock).mockReturnValue({ + getCatLink: jest.fn( + (category: CategoryTree): string => `/c/${category.url_path}${category.url_suffix || ''}`, + ), + }); + }); + + it('Breadcrumbs should not render if there is only a first level category', () => { + (useTraverseCategory as jest.Mock).mockReturnValue(useTraverseCategoryMock(categoryAncestorsFirstLevelMock)); + const wrapper = mount(CategoryBreadcrumbs); + expect(wrapper).toBeDefined(); + expect(wrapper.find('li').exists()).toBeFalsy(); + }); + + it('Breadcrumbs must have one item for the second level category', () => { + (useTraverseCategory as jest.Mock).mockReturnValue(useTraverseCategoryMock(categoryAncestorsSecondLevelMock)); + const wrapper = mount(CategoryBreadcrumbs); + expect(wrapper.findAll('li')).toHaveLength(1); + }); + + it('Breadcrumbs must have two item for the third level category', () => { + (useTraverseCategory as jest.Mock).mockReturnValue(useTraverseCategoryMock(categoryAncestorsThirdLevelMock)); + const wrapper = mount(CategoryBreadcrumbs); + expect(wrapper.findAll('li')).toHaveLength(2); + }); + + it('Breadcrumb must have link that should have href attribute', () => { + (useTraverseCategory as jest.Mock).mockReturnValue(useTraverseCategoryMock(categoryAncestorsSecondLevelMock)); + const wrapper = mount(CategoryBreadcrumbs); + const link = wrapper.find('a'); + expect(link).toBeDefined(); + expect(link.attributes('href')).toBeDefined(); + }); + + it('The last breadcrumb must have \'current\' class', () => { + (useTraverseCategory as jest.Mock).mockReturnValue(useTraverseCategoryMock(categoryAncestorsThirdLevelMock)); + const wrapper = mount(CategoryBreadcrumbs); + const links = wrapper.findAll('a'); + expect(links.at(-1).classes()).toContain('current'); + }); +}); diff --git a/packages/theme/modules/catalog/category/components/breadcrumbs/CategoryBreadcrumbs.vue b/packages/theme/modules/catalog/category/components/breadcrumbs/CategoryBreadcrumbs.vue index e338741e5..d1390b7cf 100644 --- a/packages/theme/modules/catalog/category/components/breadcrumbs/CategoryBreadcrumbs.vue +++ b/packages/theme/modules/catalog/category/components/breadcrumbs/CategoryBreadcrumbs.vue @@ -2,12 +2,13 @@