From 9de8c27368ba4da91f4416403108934f257cea9c Mon Sep 17 00:00:00 2001 From: Pranav Date: Wed, 10 Jul 2024 08:32:16 -0700 Subject: [PATCH] feat: Use vitest instead of jest, run all the specs anywhere in app/ folder in the CI (#9722) Due to the pattern `**/specs/*.spec.js` defined in CircleCI, none of the frontend spec in the folders such as `specs//getters.spec.js` were not executed in Circle CI. This PR fixes the issue, along with the following changes: - Use vitest instead of jest - Remove jest dependancies - Update tests to work with vitest --------- Co-authored-by: Muhsin Keloth --- .circleci/config.yml | 5 +- .eslintrc.js | 2 +- app/javascript/dashboard/App.Vue.spec.js | 11 - .../api/enterprise/specs/account.spec.js | 8 +- .../dashboard/api/specs/account.spec.js | 8 +- .../api/specs/accountActions.spec.js | 8 +- .../dashboard/api/specs/agents.spec.js | 2 +- .../dashboard/api/specs/article.spec.js | 40 +- .../api/specs/assignableAgents.spec.js | 8 +- .../api/specs/channel/fbChannel.spec.js | 8 +- .../dashboard/api/specs/contacts.spec.js | 8 +- .../dashboard/api/specs/conversations.spec.js | 8 +- .../dashboard/api/specs/csatReports.spec.js | 8 +- .../api/specs/inbox/conversation.spec.js | 8 +- .../dashboard/api/specs/inbox/message.spec.js | 8 +- .../dashboard/api/specs/inboxes.spec.js | 8 +- .../dashboard/api/specs/integrations.spec.js | 8 +- .../api/specs/integrations/dyte.spec.js | 16 +- .../api/specs/integrations/linear.spec.js | 56 +- .../dashboard/api/specs/notifications.spec.js | 8 +- .../dashboard/api/specs/reports.spec.js | 8 +- .../dashboard/api/specs/slaReports.spec.js | 8 +- .../dashboard/api/specs/teams.spec.js | 8 +- .../specs/AccountSelector.spec.js | 8 +- .../specs/AgentDetails.spec.js | 6 +- .../specs/NotificationBell.spec.js | 6 +- .../layout/specs/AvailabilityStatus.spec.js | 21 +- .../components/specs/SidemenuIcon.spec.js | 2 +- .../__snapshots__/SidemenuIcon.spec.js.snap | 4 +- .../helpers/specs/DatePickerHelper.spec.js | 14 +- .../widgets/conversation/ReplyBox.vue | 2 +- .../conversation/specs/MoreActions.spec.js | 24 +- .../mentionSelectionKeyboardMixin.spec.js | 8 +- .../composables/spec/emitter.spec.js | 12 +- .../AnalyticsHelper/specs/helper.spec.js | 16 +- .../AnalyticsHelper/specs/plugin.spec.js | 31 +- .../specs/CacheHelper/DataManger.spec.js | 2 +- .../helper/specs/ReconnectService.spec.js | 62 +- .../dashboard/helper/specs/commons.spec.js | 41 +- .../helper/specs/directives/resize.spec.js | 14 +- .../helper/specs/editorHelper.spec.js | 14 +- .../helper/specs/themeHelper.spec.js | 2 +- .../helper/specs/uploadHelper.spec.js | 3 +- .../dashboard/mixins/specs/aiMixin.spec.js | 18 +- .../mixins/specs/attributeMixin.spec.js | 2 +- .../mixins/specs/fileUploadMixin.spec.js | 24 +- .../dashboard/mixins/specs/time.spec.js | 8 +- .../dashboard/mixins/specs/uiSettings.spec.js | 2 +- .../dashboard/routes/dashboard/Dashboard.vue | 2 +- .../components/specs/AddReminder.spec.js | 6 +- .../conversation/conversation.routes.js | 2 +- .../components/HelpCenterLayout.vue | 5 +- .../dashboard/helpcenter/helpcenter.routes.js | 38 +- .../pages/categories/NameEmojiInput.vue | 2 +- .../settings/inbox/channel-factory.js | 18 +- .../specs/Filters/FiltersAgents.spec.js | 6 +- .../specs/Filters/FiltersDateGroupBy.spec.js | 2 +- .../specs/Filters/FiltersDateRange.spec.js | 2 +- .../specs/Filters/FiltersInboxes.spec.js | 4 +- .../specs/Filters/FiltersLabels.spec.js | 4 +- .../specs/Filters/FiltersRatings.spec.js | 2 +- .../specs/Filters/FiltersTeams.spec.js | 2 +- .../__snapshots__/CSATMetrics.spec.js.snap | 8 +- app/javascript/dashboard/routes/index.spec.js | 31 +- .../helpCenterArticles/specs/action.spec.js | 8 +- .../specs/actions.spec.js | 4 +- .../helpCenterPortals/specs/actions.spec.js | 6 +- .../modules/specs/account/actions.spec.js | 4 +- .../modules/specs/account/getters.spec.js | 10 +- .../modules/specs/agentBots/agentBots.spec.js | 4 +- .../modules/specs/agents/actions.spec.js | 6 +- .../modules/specs/attributes/actions.spec.js | 4 +- .../store/modules/specs/auth/actions.spec.js | 25 +- .../store/modules/specs/auth/getters.spec.js | 3 - .../modules/specs/automations/actions.spec.js | 4 +- .../modules/specs/bulkActions/actions.spec.js | 4 +- .../modules/specs/campaigns/actions.spec.js | 4 +- .../contactConversations/actions.spec.js | 4 +- .../specs/contactLabels/actions.spec.js | 4 +- .../specs/contactNotes/actions.spec.js | 4 +- .../modules/specs/contacts/actions.spec.js | 4 +- .../specs/conversationLabels/actions.spec.js | 4 +- .../specs/conversationPage/actions.spec.js | 2 +- .../specs/conversationSearch/actions.spec.js | 4 +- .../specs/conversationStats/actions.spec.js | 4 +- .../conversationTypingStatus/actions.spec.js | 2 +- .../conversationWatchers/actions.spec.js | 4 +- .../specs/conversations/actions.spec.js | 12 +- .../specs/conversations/mutations.spec.js | 14 +- .../store/modules/specs/csat/actions.spec.js | 4 +- .../modules/specs/customViews/actions.spec.js | 4 +- .../specs/dashboardApps/actions.spec.js | 4 +- .../specs/draftMessages/actions.spec.js | 4 +- .../inboxAssignableMembers/actions.spec.js | 4 +- .../modules/specs/inboxes/actions.spec.js | 6 +- .../specs/integrations/actions.spec.js | 4 +- .../modules/specs/labels/actions.spec.js | 6 +- .../modules/specs/macros/actions.spec.js | 4 +- .../specs/notifications/actions.spec.js | 4 +- .../modules/specs/reports/actions.spec.js | 13 +- .../store/modules/specs/sla/actions.spec.js | 6 +- .../modules/specs/slaReports/actions.spec.js | 4 +- .../modules/specs/teamMembers/actions.spec.js | 4 +- .../store/modules/specs/teams/actions.spec.js | 6 +- .../userNotificationSettings/actions.spec.js | 4 +- .../modules/specs/webhooks/actions.spec.js | 4 +- app/javascript/portal/specs/portal.spec.js | 47 +- .../portal/specs/portalTheme.spec.js | 18 +- .../sdk/specs/cookieHelpers.spec.js | 72 +- .../components/specs/DateSeparator.spec.js | 2 +- .../shared/components/specs/Spinner.spec.js | 2 +- .../__snapshots__/DateSeparator.spec.js.snap | 9 +- .../specs/__snapshots__/Spinner.spec.js.snap | 5 +- .../shared/helpers/specs/CustomErrors.spec.js | 2 +- .../helpers/specs/CustomEventHelper.spec.js | 2 +- .../shared/helpers/specs/mitt.spec.js | 2 +- .../shared/mixins/specs/rtlMixin.spec.js | 29 +- .../v3/helpers/specs/RouteHelper.spec.js | 24 +- .../widget/api/specs/endPoints.spec.js | 44 +- .../widget/components/ChatInputWrap.vue | 2 +- .../helpers/specs/urlParamsHelper.spec.js | 2 +- .../widget/helpers/specs/utils.spec.js | 2 +- .../mixins/specs/availabilityMixin.spec.js | 26 +- .../mixins/specs/nextAvailabilityTime.spec.js | 73 +- .../store/modules/specs/agent/actions.spec.js | 10 +- .../modules/specs/appConfig/actions.spec.js | 2 +- .../modules/specs/article/actions.spec.js | 10 +- .../modules/specs/campaign/actions.spec.js | 12 +- .../modules/specs/campaign/getters.spec.js | 5 +- .../modules/specs/campaign/mutations.spec.js | 5 +- .../modules/specs/contact/actions.spec.js | 18 +- .../specs/conversation/actions.spec.js | 16 +- .../conversationAttributes/actions.spec.js | 4 +- .../modules/specs/message/actions.spec.js | 4 +- app/test-matchers.js | 423 --- jest.config.js | 49 - jest.setup.js | 3 - package.json | 21 +- vite.config.ts | 42 + yarn.lock | 2528 ++++++----------- 140 files changed, 1678 insertions(+), 2810 deletions(-) delete mode 100644 app/javascript/dashboard/App.Vue.spec.js delete mode 100644 app/test-matchers.js delete mode 100644 jest.config.js delete mode 100644 jest.setup.js create mode 100644 vite.config.ts diff --git a/.circleci/config.yml b/.circleci/config.yml index cdddc4a06..15c40dc77 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -130,10 +130,7 @@ jobs: command: | mkdir -p ~/tmp/test-results/frontend_specs ~/tmp/cc-test-reporter before-build - TESTFILES=$(circleci tests glob **/specs/*.spec.js | circleci tests split --split-by=timings) - yarn test:coverage --profile 10 \ - --out ~/tmp/test-results/yarn.xml \ - -- ${TESTFILES} + yarn test:coverage - run: name: Code Climate Test Coverage command: | diff --git a/.eslintrc.js b/.eslintrc.js index 03e7e995b..18162ee76 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -65,10 +65,10 @@ module.exports = { }, env: { browser: true, - jest: true, node: true, }, globals: { bus: true, + vi: true, }, }; diff --git a/app/javascript/dashboard/App.Vue.spec.js b/app/javascript/dashboard/App.Vue.spec.js deleted file mode 100644 index 43c6a74ed..000000000 --- a/app/javascript/dashboard/App.Vue.spec.js +++ /dev/null @@ -1,11 +0,0 @@ -import App from './App'; -import '../../test-matchers'; - -describe(`App component`, () => { - it(`should be a component`, () => { - // Arrange - // Act - expect(App).toBeVueComponent('App'); - // Assert - }); -}); diff --git a/app/javascript/dashboard/api/enterprise/specs/account.spec.js b/app/javascript/dashboard/api/enterprise/specs/account.spec.js index 6c9dca986..4fb1bd0ee 100644 --- a/app/javascript/dashboard/api/enterprise/specs/account.spec.js +++ b/app/javascript/dashboard/api/enterprise/specs/account.spec.js @@ -15,10 +15,10 @@ describe('#enterpriseAccountAPI', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/api/specs/account.spec.js b/app/javascript/dashboard/api/specs/account.spec.js index 7e213b2a8..4da8b3a46 100644 --- a/app/javascript/dashboard/api/specs/account.spec.js +++ b/app/javascript/dashboard/api/specs/account.spec.js @@ -15,10 +15,10 @@ describe('#accountAPI', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/api/specs/accountActions.spec.js b/app/javascript/dashboard/api/specs/accountActions.spec.js index 330c117ff..dc73e4948 100644 --- a/app/javascript/dashboard/api/specs/accountActions.spec.js +++ b/app/javascript/dashboard/api/specs/accountActions.spec.js @@ -10,10 +10,10 @@ describe('#ContactsAPI', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/api/specs/agents.spec.js b/app/javascript/dashboard/api/specs/agents.spec.js index 20dd36688..0df0fd8d9 100644 --- a/app/javascript/dashboard/api/specs/agents.spec.js +++ b/app/javascript/dashboard/api/specs/agents.spec.js @@ -14,7 +14,7 @@ describe('#AgentAPI', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/api/specs/article.spec.js b/app/javascript/dashboard/api/specs/article.spec.js index 02c0f82d8..71128682c 100644 --- a/app/javascript/dashboard/api/specs/article.spec.js +++ b/app/javascript/dashboard/api/specs/article.spec.js @@ -14,10 +14,10 @@ describe('#PortalAPI', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { @@ -44,10 +44,10 @@ describe('#PortalAPI', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { @@ -71,10 +71,10 @@ describe('#PortalAPI', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { @@ -98,10 +98,10 @@ describe('#PortalAPI', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { @@ -129,10 +129,10 @@ describe('#PortalAPI', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/api/specs/assignableAgents.spec.js b/app/javascript/dashboard/api/specs/assignableAgents.spec.js index 5280162b3..d553d55cb 100644 --- a/app/javascript/dashboard/api/specs/assignableAgents.spec.js +++ b/app/javascript/dashboard/api/specs/assignableAgents.spec.js @@ -4,10 +4,10 @@ describe('#AssignableAgentsAPI', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/api/specs/channel/fbChannel.spec.js b/app/javascript/dashboard/api/specs/channel/fbChannel.spec.js index 2cdcec56e..c79051977 100644 --- a/app/javascript/dashboard/api/specs/channel/fbChannel.spec.js +++ b/app/javascript/dashboard/api/specs/channel/fbChannel.spec.js @@ -13,10 +13,10 @@ describe('#FBChannel', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/api/specs/contacts.spec.js b/app/javascript/dashboard/api/specs/contacts.spec.js index b4eaf7333..0059518b0 100644 --- a/app/javascript/dashboard/api/specs/contacts.spec.js +++ b/app/javascript/dashboard/api/specs/contacts.spec.js @@ -17,10 +17,10 @@ describe('#ContactsAPI', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/api/specs/conversations.spec.js b/app/javascript/dashboard/api/specs/conversations.spec.js index 6b3db7404..7ae4eb774 100644 --- a/app/javascript/dashboard/api/specs/conversations.spec.js +++ b/app/javascript/dashboard/api/specs/conversations.spec.js @@ -16,10 +16,10 @@ describe('#ConversationApi', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/api/specs/csatReports.spec.js b/app/javascript/dashboard/api/specs/csatReports.spec.js index 7c1707e1e..788f0eba2 100644 --- a/app/javascript/dashboard/api/specs/csatReports.spec.js +++ b/app/javascript/dashboard/api/specs/csatReports.spec.js @@ -11,10 +11,10 @@ describe('#Reports API', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/api/specs/inbox/conversation.spec.js b/app/javascript/dashboard/api/specs/inbox/conversation.spec.js index 3287d7477..dd1615802 100644 --- a/app/javascript/dashboard/api/specs/inbox/conversation.spec.js +++ b/app/javascript/dashboard/api/specs/inbox/conversation.spec.js @@ -24,10 +24,10 @@ describe('#ConversationAPI', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/api/specs/inbox/message.spec.js b/app/javascript/dashboard/api/specs/inbox/message.spec.js index 0d45b2157..941f5c99c 100644 --- a/app/javascript/dashboard/api/specs/inbox/message.spec.js +++ b/app/javascript/dashboard/api/specs/inbox/message.spec.js @@ -15,10 +15,10 @@ describe('#ConversationAPI', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/api/specs/inboxes.spec.js b/app/javascript/dashboard/api/specs/inboxes.spec.js index 8834ceb07..628ce0f34 100644 --- a/app/javascript/dashboard/api/specs/inboxes.spec.js +++ b/app/javascript/dashboard/api/specs/inboxes.spec.js @@ -17,10 +17,10 @@ describe('#InboxesAPI', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/api/specs/integrations.spec.js b/app/javascript/dashboard/api/specs/integrations.spec.js index 5ccbda436..cc20fd8f6 100644 --- a/app/javascript/dashboard/api/specs/integrations.spec.js +++ b/app/javascript/dashboard/api/specs/integrations.spec.js @@ -18,10 +18,10 @@ describe('#integrationAPI', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/api/specs/integrations/dyte.spec.js b/app/javascript/dashboard/api/specs/integrations/dyte.spec.js index 4bbe0484a..1c544f976 100644 --- a/app/javascript/dashboard/api/specs/integrations/dyte.spec.js +++ b/app/javascript/dashboard/api/specs/integrations/dyte.spec.js @@ -11,10 +11,10 @@ describe('#accountAPI', () => { describe('createAMeeting', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { @@ -39,10 +39,10 @@ describe('#accountAPI', () => { describe('addParticipantToMeeting', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/api/specs/integrations/linear.spec.js b/app/javascript/dashboard/api/specs/integrations/linear.spec.js index cc16feb16..e4bf679a6 100644 --- a/app/javascript/dashboard/api/specs/integrations/linear.spec.js +++ b/app/javascript/dashboard/api/specs/integrations/linear.spec.js @@ -16,10 +16,10 @@ describe('#linearAPI', () => { describe('getTeams', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { @@ -41,10 +41,10 @@ describe('#linearAPI', () => { describe('getTeamEntities', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { @@ -66,10 +66,10 @@ describe('#linearAPI', () => { describe('createIssue', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { @@ -96,10 +96,10 @@ describe('#linearAPI', () => { describe('link_issue', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { @@ -125,10 +125,10 @@ describe('#linearAPI', () => { describe('getLinkedIssue', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { @@ -150,10 +150,10 @@ describe('#linearAPI', () => { describe('unlinkIssue', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { @@ -178,10 +178,10 @@ describe('#linearAPI', () => { describe('searchIssues', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/api/specs/notifications.spec.js b/app/javascript/dashboard/api/specs/notifications.spec.js index fe748fe19..770a6840d 100644 --- a/app/javascript/dashboard/api/specs/notifications.spec.js +++ b/app/javascript/dashboard/api/specs/notifications.spec.js @@ -13,10 +13,10 @@ describe('#NotificationAPI', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/api/specs/reports.spec.js b/app/javascript/dashboard/api/specs/reports.spec.js index 05d4a152c..e458633d0 100644 --- a/app/javascript/dashboard/api/specs/reports.spec.js +++ b/app/javascript/dashboard/api/specs/reports.spec.js @@ -20,10 +20,10 @@ describe('#Reports API', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/api/specs/slaReports.spec.js b/app/javascript/dashboard/api/specs/slaReports.spec.js index f540b6acc..827b44cad 100644 --- a/app/javascript/dashboard/api/specs/slaReports.spec.js +++ b/app/javascript/dashboard/api/specs/slaReports.spec.js @@ -12,10 +12,10 @@ describe('#SLAReports API', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/api/specs/teams.spec.js b/app/javascript/dashboard/api/specs/teams.spec.js index 3a59f2c51..c7bfc4d1c 100644 --- a/app/javascript/dashboard/api/specs/teams.spec.js +++ b/app/javascript/dashboard/api/specs/teams.spec.js @@ -16,10 +16,10 @@ describe('#TeamsAPI', () => { describe('API calls', () => { const originalAxios = window.axios; const axiosMock = { - post: jest.fn(() => Promise.resolve()), - get: jest.fn(() => Promise.resolve()), - patch: jest.fn(() => Promise.resolve()), - delete: jest.fn(() => Promise.resolve()), + post: vi.fn(() => Promise.resolve()), + get: vi.fn(() => Promise.resolve()), + patch: vi.fn(() => Promise.resolve()), + delete: vi.fn(() => Promise.resolve()), }; beforeEach(() => { diff --git a/app/javascript/dashboard/components/layout/sidebarComponents/specs/AccountSelector.spec.js b/app/javascript/dashboard/components/layout/sidebarComponents/specs/AccountSelector.spec.js index b10ba9a57..fb76e0ff4 100644 --- a/app/javascript/dashboard/components/layout/sidebarComponents/specs/AccountSelector.spec.js +++ b/app/javascript/dashboard/components/layout/sidebarComponents/specs/AccountSelector.spec.js @@ -1,12 +1,12 @@ -import AccountSelector from '../AccountSelector'; +import AccountSelector from '../AccountSelector.vue'; import { createLocalVue, mount } from '@vue/test-utils'; import Vuex from 'vuex'; import VueI18n from 'vue-i18n'; import i18n from 'dashboard/i18n'; -import WootModal from 'dashboard/components/Modal'; -import WootModalHeader from 'dashboard/components/ModalHeader'; -import FluentIcon from 'shared/components/FluentIcon/DashboardIcon'; +import WootModal from 'dashboard/components/Modal.vue'; +import WootModalHeader from 'dashboard/components/ModalHeader.vue'; +import FluentIcon from 'shared/components/FluentIcon/DashboardIcon.vue'; const localVue = createLocalVue(); localVue.component('woot-modal', WootModal); diff --git a/app/javascript/dashboard/components/layout/sidebarComponents/specs/AgentDetails.spec.js b/app/javascript/dashboard/components/layout/sidebarComponents/specs/AgentDetails.spec.js index 073881a58..ca6c00a43 100644 --- a/app/javascript/dashboard/components/layout/sidebarComponents/specs/AgentDetails.spec.js +++ b/app/javascript/dashboard/components/layout/sidebarComponents/specs/AgentDetails.spec.js @@ -1,12 +1,12 @@ -import AgentDetails from '../AgentDetails'; +import AgentDetails from '../AgentDetails.vue'; import { createLocalVue, shallowMount } from '@vue/test-utils'; import Vuex from 'vuex'; import VueI18n from 'vue-i18n'; import VTooltip from 'v-tooltip'; import i18n from 'dashboard/i18n'; -import Thumbnail from 'dashboard/components/widgets/Thumbnail'; -import WootButton from 'dashboard/components/ui/WootButton'; +import Thumbnail from 'dashboard/components/widgets/Thumbnail.vue'; +import WootButton from 'dashboard/components/ui/WootButton.vue'; const localVue = createLocalVue(); localVue.use(Vuex); localVue.use(VueI18n); diff --git a/app/javascript/dashboard/components/layout/sidebarComponents/specs/NotificationBell.spec.js b/app/javascript/dashboard/components/layout/sidebarComponents/specs/NotificationBell.spec.js index 64d1fe791..85596bb3e 100644 --- a/app/javascript/dashboard/components/layout/sidebarComponents/specs/NotificationBell.spec.js +++ b/app/javascript/dashboard/components/layout/sidebarComponents/specs/NotificationBell.spec.js @@ -1,13 +1,15 @@ -import NotificationBell from '../NotificationBell'; +import NotificationBell from '../NotificationBell.vue'; import { createLocalVue, shallowMount } from '@vue/test-utils'; import Vuex from 'vuex'; import VueI18n from 'vue-i18n'; +import FluentIcon from 'shared/components/FluentIcon/DashboardIcon.vue'; import i18n from 'dashboard/i18n'; const localVue = createLocalVue(); localVue.use(Vuex); localVue.use(VueI18n); +localVue.component('fluent-icon', FluentIcon); const i18nConfig = new VueI18n({ locale: 'en', @@ -27,7 +29,7 @@ describe('notificationBell', () => { beforeEach(() => { actions = { - showNotification: jest.fn(), + showNotification: vi.fn(), }; modules = { auth: { diff --git a/app/javascript/dashboard/components/layout/specs/AvailabilityStatus.spec.js b/app/javascript/dashboard/components/layout/specs/AvailabilityStatus.spec.js index 50d959b33..e6864d052 100644 --- a/app/javascript/dashboard/components/layout/specs/AvailabilityStatus.spec.js +++ b/app/javascript/dashboard/components/layout/specs/AvailabilityStatus.spec.js @@ -2,15 +2,21 @@ import AvailabilityStatus from '../AvailabilityStatus.vue'; import { createLocalVue, mount } from '@vue/test-utils'; import Vuex from 'vuex'; import VueI18n from 'vue-i18n'; +import VTooltip from 'v-tooltip'; + +import WootButton from 'dashboard/components/ui/WootButton.vue'; +import WootDropdownItem from 'shared/components/ui/dropdown/DropdownItem.vue'; +import WootDropdownMenu from 'shared/components/ui/dropdown/DropdownMenu.vue'; +import WootDropdownHeader from 'shared/components/ui/dropdown/DropdownHeader.vue'; +import WootDropdownDivider from 'shared/components/ui/dropdown/DropdownDivider.vue'; +import FluentIcon from 'shared/components/FluentIcon/DashboardIcon.vue'; -import WootButton from 'dashboard/components/ui/WootButton'; -import WootDropdownItem from 'shared/components/ui/dropdown/DropdownItem'; -import WootDropdownMenu from 'shared/components/ui/dropdown/DropdownMenu'; -import WootDropdownHeader from 'shared/components/ui/dropdown/DropdownHeader'; -import WootDropdownDivider from 'shared/components/ui/dropdown/DropdownDivider'; import i18n from 'dashboard/i18n'; const localVue = createLocalVue(); +localVue.use(VTooltip, { + defaultHtml: false, +}); localVue.use(Vuex); localVue.use(VueI18n); localVue.component('woot-button', WootButton); @@ -18,12 +24,14 @@ localVue.component('woot-dropdown-header', WootDropdownHeader); localVue.component('woot-dropdown-menu', WootDropdownMenu); localVue.component('woot-dropdown-divider', WootDropdownDivider); localVue.component('woot-dropdown-item', WootDropdownItem); +localVue.component('fluent-icon', FluentIcon); const i18nConfig = new VueI18n({ locale: 'en', messages: i18n }); describe('AvailabilityStatus', () => { const currentAvailability = 'online'; const currentAccountId = '1'; + const currentUserAutoOffline = false; let store = null; let actions = null; let modules = null; @@ -31,7 +39,7 @@ describe('AvailabilityStatus', () => { beforeEach(() => { actions = { - updateAvailability: jest.fn(() => { + updateAvailability: vi.fn(() => { return Promise.resolve(); }), }; @@ -41,6 +49,7 @@ describe('AvailabilityStatus', () => { getters: { getCurrentUserAvailability: () => currentAvailability, getCurrentAccountId: () => currentAccountId, + getCurrentUserAutoOffline: () => currentUserAutoOffline, }, }, }; diff --git a/app/javascript/dashboard/components/specs/SidemenuIcon.spec.js b/app/javascript/dashboard/components/specs/SidemenuIcon.spec.js index fea394572..5029eed48 100644 --- a/app/javascript/dashboard/components/specs/SidemenuIcon.spec.js +++ b/app/javascript/dashboard/components/specs/SidemenuIcon.spec.js @@ -1,5 +1,5 @@ import { shallowMount } from '@vue/test-utils'; -import SidemenuIcon from '../SidemenuIcon'; +import SidemenuIcon from '../SidemenuIcon.vue'; describe('SidemenuIcon', () => { test('matches snapshot', () => { diff --git a/app/javascript/dashboard/components/specs/__snapshots__/SidemenuIcon.spec.js.snap b/app/javascript/dashboard/components/specs/__snapshots__/SidemenuIcon.spec.js.snap index 577dbb3aa..0229af06e 100644 --- a/app/javascript/dashboard/components/specs/__snapshots__/SidemenuIcon.spec.js.snap +++ b/app/javascript/dashboard/components/specs/__snapshots__/SidemenuIcon.spec.js.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`SidemenuIcon matches snapshot 1`] = ` +exports[`SidemenuIcon > matches snapshot 1`] = `