guestShopRoutes.spec.js 1.7 KB

12345678910111213141516171819202122232425262728293031
  1. /* eslint-env jest */
  2. import router from '@/router'
  3. import usersInfo from '@/utils/usersInfo'
  4. import { guestPaths, guestRoutes } from '@/ui-refactor/views/guest-shop/routes'
  5. import '@/permission'
  6. jest.mock('@/router', () => ({ beforeEach: jest.fn(), afterEach: jest.fn(), resetRouter: jest.fn() }))
  7. jest.mock('@/store', () => ({ dispatch: jest.fn() }))
  8. jest.mock('@/utils/usersInfo', () => ({ hasLogin: () => false }))
  9. jest.mock('@/utils/get-page-title', () => title => title || '')
  10. jest.mock('nprogress', () => ({ configure: jest.fn(), start: jest.fn(), done: jest.fn() }))
  11. jest.mock('nprogress/nprogress.css', () => ({}))
  12. const guard = router.beforeEach.mock.calls[0][0]
  13. it.each(guestPaths)('allows the exact public route %s without login', async path => {
  14. expect(usersInfo.hasLogin()).toBe(false)
  15. const next = jest.fn()
  16. await guard({ path, meta: {}}, {}, next)
  17. expect(next).toHaveBeenCalledWith()
  18. })
  19. it.each(['/dashboard/cart', '/dashboard/checkout', '/shop/member-order', '/guest-shop/ng/private', '/guest-shop/xx'])('continues to protect %s', async path => {
  20. const next = jest.fn()
  21. await guard({ path, meta: {}}, {}, next)
  22. expect(next).toHaveBeenCalledWith('/login?redirect=' + path)
  23. })
  24. it('hides the header on every guest route and sets country-specific catalog heroes only', () => {
  25. expect(guestPaths).toHaveLength(7)
  26. guestRoutes.forEach(route => expect(route.meta.publicLayout.showHeader).toBe(false))
  27. const hero = guestRoutes.find(route => route.path === '/guest-shop/ae').meta.publicLayout.hero
  28. expect(hero.titleParts.map(part => part.text).join('')).toBe('Shop Elken UAE.')
  29. expect(guestRoutes.find(route => route.path.endsWith('/cart')).meta.publicLayout.hero).toBeUndefined()
  30. })