login-maintenance.spec.ts 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. // Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. import useApplicationStore from '@shared/stores/application'
  3. import { visitView } from '@tests/support/components/visitView'
  4. import { mockApplicationConfig } from '@tests/support/mock-applicationConfig'
  5. import { mockAuthentication } from '@tests/support/mock-authentication'
  6. import {
  7. mockGraphQLApi,
  8. mockGraphQLSubscription,
  9. } from '@tests/support/mock-graphql-api'
  10. import { ConfigUpdatesDocument } from '@shared/graphql/subscriptions/configUpdates.api'
  11. import { LogoutDocument } from '@shared/graphql/mutations/logout.api'
  12. import { ApplicationConfigDocument } from '@shared/graphql/queries/applicationConfig.api'
  13. import { waitFor } from '@testing-library/vue'
  14. import useAuthenticationStore from '@shared/stores/authentication'
  15. import { mockPermissions } from '@tests/support/mock-permissions'
  16. vi.mock('@shared/server/apollo/client', () => {
  17. return {
  18. clearApolloClientStore: () => {
  19. return Promise.resolve()
  20. },
  21. }
  22. })
  23. describe('testing login maintenance mode', () => {
  24. it('check not visible maintenance mode message, when maintenance mode is not active', async () => {
  25. mockApplicationConfig({
  26. maintenance_mode: false,
  27. })
  28. const view = await visitView('/login')
  29. const maintenanceModeMessage = view.queryByText(
  30. 'Zammad is currently in maintenance mode. Only administrators can log in. Please wait until the maintenance window is over.',
  31. )
  32. expect(maintenanceModeMessage).not.toBeInTheDocument()
  33. })
  34. it('check for maintenance mode message', async () => {
  35. mockApplicationConfig({
  36. maintenance_mode: true,
  37. })
  38. const view = await visitView('/login')
  39. const maintenanceModeMessage = view.queryByText(
  40. 'Zammad is currently in maintenance mode. Only administrators can log in. Please wait until the maintenance window is over.',
  41. )
  42. expect(maintenanceModeMessage).toBeInTheDocument()
  43. })
  44. it('check for maintenance mode login custom message (e.g. to announce maintenance)', async () => {
  45. mockApplicationConfig({
  46. maintenance_login: true,
  47. maintenance_login_message: 'Custom maintenance login message.',
  48. })
  49. const view = await visitView('/login')
  50. const maintenanceModeCustomMessage = view.queryByText(
  51. 'Custom maintenance login message.',
  52. )
  53. expect(maintenanceModeCustomMessage).toBeInTheDocument()
  54. })
  55. it('does not logout for admin user after maintenance mode switch', async () => {
  56. mockApplicationConfig({
  57. maintenance_mode: false,
  58. })
  59. mockAuthentication(true)
  60. mockPermissions(['admin.maintenance'])
  61. const mockSubscription = mockGraphQLSubscription(ConfigUpdatesDocument)
  62. const application = useApplicationStore()
  63. application.initializeConfigUpdateSubscription()
  64. await visitView('/')
  65. // Change maintenance mode to trigger the logout for non admin user.
  66. await mockSubscription.next({
  67. data: {
  68. configUpdates: {
  69. setting: {
  70. key: 'maintenance_mode',
  71. value: true,
  72. },
  73. },
  74. },
  75. })
  76. expect(useAuthenticationStore().authenticated).toBe(true)
  77. })
  78. it('check logout for non admin user after maintenance mode switch', async () => {
  79. mockApplicationConfig({
  80. maintenance_mode: false,
  81. })
  82. mockAuthentication(true)
  83. mockPermissions(['agent'])
  84. mockGraphQLApi(LogoutDocument).willResolve({
  85. logout: {
  86. success: true,
  87. errors: null,
  88. },
  89. })
  90. const mockSubscription = mockGraphQLSubscription(ConfigUpdatesDocument)
  91. const application = useApplicationStore()
  92. application.initializeConfigUpdateSubscription()
  93. mockGraphQLApi(ApplicationConfigDocument).willResolve({
  94. applicationConfig: [
  95. {
  96. key: 'maintenance_mode',
  97. value: true,
  98. },
  99. ],
  100. })
  101. const view = await visitView('/')
  102. // Change maintenance mode to trigger the logout for non admin user.
  103. await mockSubscription.next({
  104. data: {
  105. configUpdates: {
  106. setting: {
  107. key: 'maintenance_mode',
  108. value: true,
  109. },
  110. },
  111. },
  112. })
  113. expect(useAuthenticationStore().authenticated).toBe(false)
  114. await waitFor(() => {
  115. const maintenanceModeMessage = view.queryByText(
  116. 'Zammad is currently in maintenance mode. Only administrators can log in. Please wait until the maintenance window is over.',
  117. )
  118. expect(maintenanceModeMessage).toBeInTheDocument()
  119. })
  120. })
  121. })