From a2cb932d541a71b0384fb9c6df95c5ce5143929a Mon Sep 17 00:00:00 2001 From: Pranav Date: Tue, 9 Jul 2024 09:03:05 -0700 Subject: [PATCH 1/4] chore: Upgrade csv-safe to the latest version (#9739) The following error starting is shown on the console after the ruby upgrade. csv.rb was loaded from the standard library, but will no longer be part of the default gems since Ruby 3.4.0. Add csv to your Gemfile or gemspec. Also contact author of csv-safe-3.2.1 to add csv into its gemspec. Csv-safe has already added a patch via https://github.com/zvory/csv-safe/pull/20. This PR updates the version to the latest version of csv-safe (3.3.1) --- Gemfile.lock | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index 98a1e9345..91d3b3d8b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -174,7 +174,9 @@ GEM crack (0.4.5) rexml crass (1.0.6) - csv-safe (3.2.1) + csv (3.3.0) + csv-safe (3.3.1) + csv (~> 3.0) cypress-on-rails (1.16.0) rack database_cleaner (2.0.2) From 9498d1f0036f6e08fe47eb7448a65e8a0a307719 Mon Sep 17 00:00:00 2001 From: wudi Date: Wed, 10 Jul 2024 13:16:45 +0800 Subject: [PATCH 2/4] fix: Localize 'Social Profiles' text in ContactForm (#9745) --- .../routes/dashboard/conversation/contact/ContactForm.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactForm.vue b/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactForm.vue index b958d4211..cf4028976 100644 --- a/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactForm.vue +++ b/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactForm.vue @@ -117,7 +117,7 @@ />
- +
From 9de8c27368ba4da91f4416403108934f257cea9c Mon Sep 17 00:00:00 2001 From: Pranav Date: Wed, 10 Jul 2024 08:32:16 -0700 Subject: [PATCH 3/4] 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`] = `