mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-11-02 20:18:08 +00:00 
			
		
		
		
	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/<domain-name>/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 <muhsinkeramam@gmail.com>
This commit is contained in:
		@@ -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: |
 | 
			
		||||
 
 | 
			
		||||
@@ -65,10 +65,10 @@ module.exports = {
 | 
			
		||||
  },
 | 
			
		||||
  env: {
 | 
			
		||||
    browser: true,
 | 
			
		||||
    jest: true,
 | 
			
		||||
    node: true,
 | 
			
		||||
  },
 | 
			
		||||
  globals: {
 | 
			
		||||
    bus: true,
 | 
			
		||||
    vi: true,
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -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: {
 | 
			
		||||
 
 | 
			
		||||
@@ -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,
 | 
			
		||||
        },
 | 
			
		||||
      },
 | 
			
		||||
    };
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
import { shallowMount } from '@vue/test-utils';
 | 
			
		||||
import SidemenuIcon from '../SidemenuIcon';
 | 
			
		||||
import SidemenuIcon from '../SidemenuIcon.vue';
 | 
			
		||||
 | 
			
		||||
describe('SidemenuIcon', () => {
 | 
			
		||||
  test('matches snapshot', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -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`] = `
 | 
			
		||||
<button
 | 
			
		||||
  class="-ml-3 text-black-900 dark:text-slate-300"
 | 
			
		||||
  color-scheme="secondary"
 | 
			
		||||
 
 | 
			
		||||
@@ -18,11 +18,11 @@ describe('Date formatting functions', () => {
 | 
			
		||||
  const testDate = new Date(2020, 4, 15); // May 15, 2020
 | 
			
		||||
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    jest.spyOn(navigator, 'language', 'get').mockReturnValue('en-US');
 | 
			
		||||
    vi.spyOn(navigator, 'language', 'get').mockReturnValue('en-US');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  afterEach(() => {
 | 
			
		||||
    jest.restoreAllMocks();
 | 
			
		||||
    vi.restoreAllMocks();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('returns the correct month name from a date', () => {
 | 
			
		||||
@@ -39,7 +39,7 @@ describe('Date formatting functions', () => {
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('returns the correct date format for the current locale en-IN', () => {
 | 
			
		||||
    jest.spyOn(navigator, 'language', 'get').mockReturnValue('en-IN');
 | 
			
		||||
    vi.spyOn(navigator, 'language', 'get').mockReturnValue('en-IN');
 | 
			
		||||
    const expected = 'dd/MM/yyyy';
 | 
			
		||||
    expect(getIntlDateFormatForLocale()).toBe(expected);
 | 
			
		||||
  });
 | 
			
		||||
@@ -231,13 +231,13 @@ describe('isHoveringNextDayInRange', () => {
 | 
			
		||||
describe('getActiveDateRange', () => {
 | 
			
		||||
  const currentDate = new Date(2020, 5, 15, 12, 0); // May 15, 2020, at noon
 | 
			
		||||
 | 
			
		||||
  beforeAll(() => {
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    // Mocking the current date to ensure consistency in tests
 | 
			
		||||
    jest.useFakeTimers().setSystemTime(currentDate.getTime());
 | 
			
		||||
    vi.useFakeTimers().setSystemTime(currentDate.getTime());
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  afterAll(() => {
 | 
			
		||||
    jest.useRealTimers();
 | 
			
		||||
  afterEach(() => {
 | 
			
		||||
    vi.useRealTimers();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('returns the correct range for "last7days"', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -197,7 +197,7 @@ import {
 | 
			
		||||
import { LOCAL_STORAGE_KEYS } from 'dashboard/constants/localStorage';
 | 
			
		||||
import { LocalStorage } from 'shared/helpers/localStorage';
 | 
			
		||||
 | 
			
		||||
const EmojiInput = () => import('shared/components/emoji/EmojiInput');
 | 
			
		||||
const EmojiInput = () => import('shared/components/emoji/EmojiInput.vue');
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  components: {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,16 +2,16 @@ import { createLocalVue, mount } from '@vue/test-utils';
 | 
			
		||||
import Vuex from 'vuex';
 | 
			
		||||
import VueI18n from 'vue-i18n';
 | 
			
		||||
import VTooltip from 'v-tooltip';
 | 
			
		||||
import Button from 'dashboard/components/buttons/Button';
 | 
			
		||||
import Button from 'dashboard/components/buttons/Button.vue';
 | 
			
		||||
import i18n from 'dashboard/i18n';
 | 
			
		||||
import FluentIcon from 'shared/components/FluentIcon/DashboardIcon';
 | 
			
		||||
import MoreActions from '../MoreActions';
 | 
			
		||||
import FluentIcon from 'shared/components/FluentIcon/DashboardIcon.vue';
 | 
			
		||||
import MoreActions from '../MoreActions.vue';
 | 
			
		||||
 | 
			
		||||
jest.mock('shared/helpers/mitt', () => ({
 | 
			
		||||
vi.mock('shared/helpers/mitt', () => ({
 | 
			
		||||
  emitter: {
 | 
			
		||||
    emit: jest.fn(),
 | 
			
		||||
    on: jest.fn(),
 | 
			
		||||
    off: jest.fn(),
 | 
			
		||||
    emit: vi.fn(),
 | 
			
		||||
    on: vi.fn(),
 | 
			
		||||
    off: vi.fn(),
 | 
			
		||||
  },
 | 
			
		||||
}));
 | 
			
		||||
 | 
			
		||||
@@ -26,9 +26,9 @@ localVue.component('fluent-icon', FluentIcon);
 | 
			
		||||
localVue.component('woot-button', Button);
 | 
			
		||||
 | 
			
		||||
localVue.prototype.$emitter = {
 | 
			
		||||
  emit: jest.fn(),
 | 
			
		||||
  on: jest.fn(),
 | 
			
		||||
  off: jest.fn(),
 | 
			
		||||
  emit: vi.fn(),
 | 
			
		||||
  on: vi.fn(),
 | 
			
		||||
  off: vi.fn(),
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const i18nConfig = new VueI18n({ locale: 'en', messages: i18n });
 | 
			
		||||
@@ -49,8 +49,8 @@ describe('MoveActions', () => {
 | 
			
		||||
      currentChat,
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    muteConversation = jest.fn(() => Promise.resolve());
 | 
			
		||||
    unmuteConversation = jest.fn(() => Promise.resolve());
 | 
			
		||||
    muteConversation = vi.fn(() => Promise.resolve());
 | 
			
		||||
    unmuteConversation = vi.fn(() => Promise.resolve());
 | 
			
		||||
 | 
			
		||||
    modules = {
 | 
			
		||||
      conversations: { actions: { muteConversation, unmuteConversation } },
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ const buildComponent = ({ data = {}, methods = {} }) => ({
 | 
			
		||||
  data() {
 | 
			
		||||
    return { ...data, selectedIndex: 0, items: [1, 2, 3] };
 | 
			
		||||
  },
 | 
			
		||||
  methods: { ...methods, onSelect: jest.fn(), adjustScroll: jest.fn() },
 | 
			
		||||
  methods: { ...methods, onSelect: vi.fn(), adjustScroll: vi.fn() },
 | 
			
		||||
  mixins: [keyboardEventListenerMixins],
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
@@ -21,7 +21,7 @@ describe('mentionSelectionKeyboardMixin', () => {
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('ArrowUp and Control+KeyP update selectedIndex correctly', () => {
 | 
			
		||||
    const preventDefault = jest.fn();
 | 
			
		||||
    const preventDefault = vi.fn();
 | 
			
		||||
    const keyboardEvents = wrapper.vm.getKeyboardEvents();
 | 
			
		||||
 | 
			
		||||
    if (keyboardEvents && keyboardEvents.ArrowUp) {
 | 
			
		||||
@@ -39,7 +39,7 @@ describe('mentionSelectionKeyboardMixin', () => {
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('ArrowDown and Control+KeyN update selectedIndex correctly', () => {
 | 
			
		||||
    const preventDefault = jest.fn();
 | 
			
		||||
    const preventDefault = vi.fn();
 | 
			
		||||
    const keyboardEvents = wrapper.vm.getKeyboardEvents();
 | 
			
		||||
 | 
			
		||||
    if (keyboardEvents && keyboardEvents.ArrowDown) {
 | 
			
		||||
@@ -57,7 +57,7 @@ describe('mentionSelectionKeyboardMixin', () => {
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('Enter key triggers onSelect method', () => {
 | 
			
		||||
    const preventDefault = jest.fn();
 | 
			
		||||
    const preventDefault = vi.fn();
 | 
			
		||||
    const keyboardEvents = wrapper.vm.getKeyboardEvents();
 | 
			
		||||
 | 
			
		||||
    if (keyboardEvents && keyboardEvents.Enter) {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,17 +2,17 @@ import { shallowMount } from '@vue/test-utils';
 | 
			
		||||
import { emitter } from 'shared/helpers/mitt';
 | 
			
		||||
import { useEmitter } from '../emitter';
 | 
			
		||||
 | 
			
		||||
jest.mock('shared/helpers/mitt', () => ({
 | 
			
		||||
vi.mock('shared/helpers/mitt', () => ({
 | 
			
		||||
  emitter: {
 | 
			
		||||
    on: jest.fn(),
 | 
			
		||||
    off: jest.fn(),
 | 
			
		||||
    on: vi.fn(),
 | 
			
		||||
    off: vi.fn(),
 | 
			
		||||
  },
 | 
			
		||||
}));
 | 
			
		||||
 | 
			
		||||
describe('useEmitter', () => {
 | 
			
		||||
  let wrapper;
 | 
			
		||||
  const eventName = 'my-event';
 | 
			
		||||
  const callback = jest.fn();
 | 
			
		||||
  const callback = vi.fn();
 | 
			
		||||
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    wrapper = shallowMount({
 | 
			
		||||
@@ -29,10 +29,6 @@ describe('useEmitter', () => {
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  afterEach(() => {
 | 
			
		||||
    jest.resetAllMocks();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should add an event listener on mount', () => {
 | 
			
		||||
    expect(emitter.on).toHaveBeenCalledWith(eventName, callback);
 | 
			
		||||
  });
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,13 @@
 | 
			
		||||
import helperObject, { AnalyticsHelper } from '../';
 | 
			
		||||
 | 
			
		||||
jest.mock('@june-so/analytics-next', () => ({
 | 
			
		||||
vi.mock('@june-so/analytics-next', () => ({
 | 
			
		||||
  AnalyticsBrowser: {
 | 
			
		||||
    load: () => [
 | 
			
		||||
      {
 | 
			
		||||
        identify: jest.fn(),
 | 
			
		||||
        track: jest.fn(),
 | 
			
		||||
        page: jest.fn(),
 | 
			
		||||
        group: jest.fn(),
 | 
			
		||||
        identify: vi.fn(),
 | 
			
		||||
        track: vi.fn(),
 | 
			
		||||
        page: vi.fn(),
 | 
			
		||||
        group: vi.fn(),
 | 
			
		||||
      },
 | 
			
		||||
    ],
 | 
			
		||||
  },
 | 
			
		||||
@@ -40,7 +40,7 @@ describe('AnalyticsHelper', () => {
 | 
			
		||||
 | 
			
		||||
  describe('identify', () => {
 | 
			
		||||
    beforeEach(() => {
 | 
			
		||||
      analyticsHelper.analytics = { identify: jest.fn(), group: jest.fn() };
 | 
			
		||||
      analyticsHelper.analytics = { identify: vi.fn(), group: vi.fn() };
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('should call identify on analytics browser with correct arguments', () => {
 | 
			
		||||
@@ -87,7 +87,7 @@ describe('AnalyticsHelper', () => {
 | 
			
		||||
 | 
			
		||||
  describe('track', () => {
 | 
			
		||||
    beforeEach(() => {
 | 
			
		||||
      analyticsHelper.analytics = { track: jest.fn() };
 | 
			
		||||
      analyticsHelper.analytics = { track: vi.fn() };
 | 
			
		||||
      analyticsHelper.user = { id: '123' };
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@@ -118,7 +118,7 @@ describe('AnalyticsHelper', () => {
 | 
			
		||||
 | 
			
		||||
  describe('page', () => {
 | 
			
		||||
    beforeEach(() => {
 | 
			
		||||
      analyticsHelper.analytics = { page: jest.fn() };
 | 
			
		||||
      analyticsHelper.analytics = { page: vi.fn() };
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('should call the analytics.page method with the correct arguments', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,34 +2,35 @@ import Vue from 'vue';
 | 
			
		||||
import plugin from '../plugin';
 | 
			
		||||
import analyticsHelper from '../index';
 | 
			
		||||
 | 
			
		||||
vi.spyOn(analyticsHelper, 'init');
 | 
			
		||||
vi.spyOn(analyticsHelper, 'track');
 | 
			
		||||
 | 
			
		||||
describe('Vue Analytics Plugin', () => {
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    jest.spyOn(analyticsHelper, 'init');
 | 
			
		||||
    jest.spyOn(analyticsHelper, 'track');
 | 
			
		||||
    Vue.use(plugin);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  afterEach(() => {
 | 
			
		||||
    jest.resetModules();
 | 
			
		||||
    jest.clearAllMocks();
 | 
			
		||||
  it('should call the init method on analyticsHelper once during plugin installation', () => {
 | 
			
		||||
    expect(analyticsHelper.init).toHaveBeenCalledTimes(1);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should call the init method on the analyticsHelper', () => {
 | 
			
		||||
    expect(analyticsHelper.init).toHaveBeenCalled();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should add the analyticsHelper to the Vue prototype', () => {
 | 
			
		||||
  it('should add the analyticsHelper to the Vue prototype as $analytics', () => {
 | 
			
		||||
    expect(Vue.prototype.$analytics).toBe(analyticsHelper);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should add the track method to the Vue prototype', () => {
 | 
			
		||||
  it('should add a track method to the Vue prototype as $track', () => {
 | 
			
		||||
    expect(typeof Vue.prototype.$track).toBe('function');
 | 
			
		||||
    Vue.prototype.$track('eventName');
 | 
			
		||||
    expect(analyticsHelper.track).toHaveBeenCalledWith('eventName');
 | 
			
		||||
    expect(analyticsHelper.track)
 | 
			
		||||
      .toHaveBeenCalledTimes(1)
 | 
			
		||||
      .toHaveBeenCalledWith('eventName');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should call the track method on the analyticsHelper when $track is called', () => {
 | 
			
		||||
    Vue.prototype.$track('eventName');
 | 
			
		||||
    expect(analyticsHelper.track).toHaveBeenCalledWith('eventName');
 | 
			
		||||
  it('should call the track method on analyticsHelper with the correct event name when $track is called', () => {
 | 
			
		||||
    const eventName = 'testEvent';
 | 
			
		||||
    Vue.prototype.$track(eventName);
 | 
			
		||||
    expect(analyticsHelper.track)
 | 
			
		||||
      .toHaveBeenCalledTimes(1)
 | 
			
		||||
      .toHaveBeenCalledWith(eventName);
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@ describe('DataManager', () => {
 | 
			
		||||
  const accountId = 'test-account';
 | 
			
		||||
  let dataManager;
 | 
			
		||||
 | 
			
		||||
  beforeAll(async () => {
 | 
			
		||||
  beforeEach(async () => {
 | 
			
		||||
    dataManager = new DataManager(accountId);
 | 
			
		||||
    await dataManager.initDb();
 | 
			
		||||
  });
 | 
			
		||||
 
 | 
			
		||||
@@ -8,26 +8,26 @@ import {
 | 
			
		||||
} from 'dashboard/helper/routeHelpers';
 | 
			
		||||
import ReconnectService from 'dashboard/helper/ReconnectService';
 | 
			
		||||
 | 
			
		||||
jest.mock('shared/helpers/mitt', () => ({
 | 
			
		||||
vi.mock('shared/helpers/mitt', () => ({
 | 
			
		||||
  emitter: {
 | 
			
		||||
    on: jest.fn(),
 | 
			
		||||
    off: jest.fn(),
 | 
			
		||||
    emit: jest.fn(),
 | 
			
		||||
    on: vi.fn(),
 | 
			
		||||
    off: vi.fn(),
 | 
			
		||||
    emit: vi.fn(),
 | 
			
		||||
  },
 | 
			
		||||
}));
 | 
			
		||||
 | 
			
		||||
jest.mock('date-fns', () => ({
 | 
			
		||||
  differenceInSeconds: jest.fn(),
 | 
			
		||||
vi.mock('date-fns', () => ({
 | 
			
		||||
  differenceInSeconds: vi.fn(),
 | 
			
		||||
}));
 | 
			
		||||
 | 
			
		||||
jest.mock('dashboard/helper/routeHelpers', () => ({
 | 
			
		||||
  isAConversationRoute: jest.fn(),
 | 
			
		||||
  isAInboxViewRoute: jest.fn(),
 | 
			
		||||
  isNotificationRoute: jest.fn(),
 | 
			
		||||
vi.mock('dashboard/helper/routeHelpers', () => ({
 | 
			
		||||
  isAConversationRoute: vi.fn(),
 | 
			
		||||
  isAInboxViewRoute: vi.fn(),
 | 
			
		||||
  isNotificationRoute: vi.fn(),
 | 
			
		||||
}));
 | 
			
		||||
 | 
			
		||||
const storeMock = {
 | 
			
		||||
  dispatch: jest.fn(),
 | 
			
		||||
  dispatch: vi.fn(),
 | 
			
		||||
  getters: {
 | 
			
		||||
    getAppliedConversationFiltersQuery: [],
 | 
			
		||||
    'customViews/getActiveConversationFolder': { query: {} },
 | 
			
		||||
@@ -46,17 +46,17 @@ describe('ReconnectService', () => {
 | 
			
		||||
  let reconnectService;
 | 
			
		||||
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    window.addEventListener = jest.fn();
 | 
			
		||||
    window.removeEventListener = jest.fn();
 | 
			
		||||
    window.addEventListener = vi.fn();
 | 
			
		||||
    window.removeEventListener = vi.fn();
 | 
			
		||||
    Object.defineProperty(window, 'location', {
 | 
			
		||||
      configurable: true,
 | 
			
		||||
      value: { reload: jest.fn() },
 | 
			
		||||
      value: { reload: vi.fn() },
 | 
			
		||||
    });
 | 
			
		||||
    reconnectService = new ReconnectService(storeMock, routerMock);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  afterEach(() => {
 | 
			
		||||
    jest.clearAllMocks();
 | 
			
		||||
    vi.clearAllMocks();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  describe('constructor', () => {
 | 
			
		||||
@@ -111,7 +111,7 @@ describe('ReconnectService', () => {
 | 
			
		||||
 | 
			
		||||
  describe('handleOnlineEvent', () => {
 | 
			
		||||
    it('should reload the page if disconnected for more than 3 hours', () => {
 | 
			
		||||
      reconnectService.getSecondsSinceDisconnect = jest
 | 
			
		||||
      reconnectService.getSecondsSinceDisconnect = vi
 | 
			
		||||
        .fn()
 | 
			
		||||
        .mockReturnValue(10801);
 | 
			
		||||
      reconnectService.handleOnlineEvent();
 | 
			
		||||
@@ -119,7 +119,7 @@ describe('ReconnectService', () => {
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('should not reload the page if disconnected for less than 3 hours', () => {
 | 
			
		||||
      reconnectService.getSecondsSinceDisconnect = jest
 | 
			
		||||
      reconnectService.getSecondsSinceDisconnect = vi
 | 
			
		||||
        .fn()
 | 
			
		||||
        .mockReturnValue(10799);
 | 
			
		||||
      reconnectService.handleOnlineEvent();
 | 
			
		||||
@@ -129,9 +129,7 @@ describe('ReconnectService', () => {
 | 
			
		||||
 | 
			
		||||
  describe('fetchConversations', () => {
 | 
			
		||||
    it('should dispatch updateChatListFilters and fetchAllConversations', async () => {
 | 
			
		||||
      reconnectService.getSecondsSinceDisconnect = jest
 | 
			
		||||
        .fn()
 | 
			
		||||
        .mockReturnValue(100);
 | 
			
		||||
      reconnectService.getSecondsSinceDisconnect = vi.fn().mockReturnValue(100);
 | 
			
		||||
      await reconnectService.fetchConversations();
 | 
			
		||||
      expect(storeMock.dispatch).toHaveBeenCalledWith('updateChatListFilters', {
 | 
			
		||||
        page: null,
 | 
			
		||||
@@ -141,9 +139,7 @@ describe('ReconnectService', () => {
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('should dispatch updateChatListFilters and reset updatedWithin', async () => {
 | 
			
		||||
      reconnectService.getSecondsSinceDisconnect = jest
 | 
			
		||||
        .fn()
 | 
			
		||||
        .mockReturnValue(100);
 | 
			
		||||
      reconnectService.getSecondsSinceDisconnect = vi.fn().mockReturnValue(100);
 | 
			
		||||
      await reconnectService.fetchConversations();
 | 
			
		||||
      expect(storeMock.dispatch).toHaveBeenCalledWith('updateChatListFilters', {
 | 
			
		||||
        updatedWithin: null,
 | 
			
		||||
@@ -173,7 +169,7 @@ describe('ReconnectService', () => {
 | 
			
		||||
          },
 | 
			
		||||
        ],
 | 
			
		||||
      };
 | 
			
		||||
      const spy = jest.spyOn(
 | 
			
		||||
      const spy = vi.spyOn(
 | 
			
		||||
        reconnectService,
 | 
			
		||||
        'fetchFilteredOrSavedConversations'
 | 
			
		||||
      );
 | 
			
		||||
@@ -191,7 +187,7 @@ describe('ReconnectService', () => {
 | 
			
		||||
        query: null,
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      const spy = jest.spyOn(reconnectService, 'fetchConversations');
 | 
			
		||||
      const spy = vi.spyOn(reconnectService, 'fetchConversations');
 | 
			
		||||
 | 
			
		||||
      await reconnectService.fetchConversationsOnReconnect();
 | 
			
		||||
 | 
			
		||||
@@ -204,7 +200,7 @@ describe('ReconnectService', () => {
 | 
			
		||||
        query: { test: 'activeFolderQuery' },
 | 
			
		||||
      };
 | 
			
		||||
 | 
			
		||||
      const spy = jest.spyOn(
 | 
			
		||||
      const spy = vi.spyOn(
 | 
			
		||||
        reconnectService,
 | 
			
		||||
        'fetchFilteredOrSavedConversations'
 | 
			
		||||
      );
 | 
			
		||||
@@ -270,11 +266,11 @@ describe('ReconnectService', () => {
 | 
			
		||||
  describe('handleRouteSpecificFetch', () => {
 | 
			
		||||
    it('should fetch conversations and messages if current route is a conversation route', async () => {
 | 
			
		||||
      isAConversationRoute.mockReturnValue(true);
 | 
			
		||||
      const spyConversations = jest.spyOn(
 | 
			
		||||
      const spyConversations = vi.spyOn(
 | 
			
		||||
        reconnectService,
 | 
			
		||||
        'fetchConversationsOnReconnect'
 | 
			
		||||
      );
 | 
			
		||||
      const spyMessages = jest.spyOn(
 | 
			
		||||
      const spyMessages = vi.spyOn(
 | 
			
		||||
        reconnectService,
 | 
			
		||||
        'fetchConversationMessagesOnReconnect'
 | 
			
		||||
      );
 | 
			
		||||
@@ -285,14 +281,14 @@ describe('ReconnectService', () => {
 | 
			
		||||
 | 
			
		||||
    it('should fetch notifications if current route is an inbox view route', async () => {
 | 
			
		||||
      isAInboxViewRoute.mockReturnValue(true);
 | 
			
		||||
      const spy = jest.spyOn(reconnectService, 'fetchNotificationsOnReconnect');
 | 
			
		||||
      const spy = vi.spyOn(reconnectService, 'fetchNotificationsOnReconnect');
 | 
			
		||||
      await reconnectService.handleRouteSpecificFetch();
 | 
			
		||||
      expect(spy).toHaveBeenCalled();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('should fetch notifications if current route is a notification route', async () => {
 | 
			
		||||
      isNotificationRoute.mockReturnValue(true);
 | 
			
		||||
      const spy = jest.spyOn(reconnectService, 'fetchNotificationsOnReconnect');
 | 
			
		||||
      const spy = vi.spyOn(reconnectService, 'fetchNotificationsOnReconnect');
 | 
			
		||||
      await reconnectService.handleRouteSpecificFetch();
 | 
			
		||||
      expect(spy).toHaveBeenCalled();
 | 
			
		||||
    });
 | 
			
		||||
@@ -320,7 +316,7 @@ describe('ReconnectService', () => {
 | 
			
		||||
 | 
			
		||||
  describe('onDisconnect', () => {
 | 
			
		||||
    it('should set disconnectTime and call setConversationLastMessageId', () => {
 | 
			
		||||
      reconnectService.setConversationLastMessageId = jest.fn();
 | 
			
		||||
      reconnectService.setConversationLastMessageId = vi.fn();
 | 
			
		||||
      reconnectService.onDisconnect();
 | 
			
		||||
      expect(reconnectService.disconnectTime).toBeInstanceOf(Date);
 | 
			
		||||
      expect(reconnectService.setConversationLastMessageId).toHaveBeenCalled();
 | 
			
		||||
@@ -329,8 +325,8 @@ describe('ReconnectService', () => {
 | 
			
		||||
 | 
			
		||||
  describe('onReconnect', () => {
 | 
			
		||||
    it('should handle route-specific fetch, revalidate caches, and emit WEBSOCKET_RECONNECT_COMPLETED event', async () => {
 | 
			
		||||
      reconnectService.handleRouteSpecificFetch = jest.fn();
 | 
			
		||||
      reconnectService.revalidateCaches = jest.fn();
 | 
			
		||||
      reconnectService.handleRouteSpecificFetch = vi.fn();
 | 
			
		||||
      reconnectService.revalidateCaches = vi.fn();
 | 
			
		||||
      await reconnectService.onReconnect();
 | 
			
		||||
      expect(reconnectService.handleRouteSpecificFetch).toHaveBeenCalled();
 | 
			
		||||
      expect(reconnectService.revalidateCaches).toHaveBeenCalled();
 | 
			
		||||
 
 | 
			
		||||
@@ -36,16 +36,14 @@ describe('#createPendingMessage', () => {
 | 
			
		||||
    message: 'hi',
 | 
			
		||||
  };
 | 
			
		||||
  it('returns the pending message with expected new keys', () => {
 | 
			
		||||
    expect(createPendingMessage(message)).toHaveProperty(
 | 
			
		||||
      'content',
 | 
			
		||||
      'id',
 | 
			
		||||
      'status',
 | 
			
		||||
      'echo_id',
 | 
			
		||||
      'status',
 | 
			
		||||
      'created_at',
 | 
			
		||||
      'message_type',
 | 
			
		||||
      'conversation_id'
 | 
			
		||||
    );
 | 
			
		||||
    expect(createPendingMessage(message)).toMatchObject({
 | 
			
		||||
      content: expect.anything(),
 | 
			
		||||
      id: expect.anything(),
 | 
			
		||||
      status: expect.anything(),
 | 
			
		||||
      echo_id: expect.anything(),
 | 
			
		||||
      created_at: expect.anything(),
 | 
			
		||||
      message_type: expect.anything(),
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('returns the pending message with status progress', () => {
 | 
			
		||||
@@ -61,23 +59,20 @@ describe('#createPendingMessage', () => {
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('returns the pending message with attachmnet key if file is passed', () => {
 | 
			
		||||
  it('returns the pending message with attachment key if file is passed', () => {
 | 
			
		||||
    const messageWithFile = {
 | 
			
		||||
      message: 'hi',
 | 
			
		||||
      file: {},
 | 
			
		||||
    };
 | 
			
		||||
    expect(createPendingMessage(messageWithFile)).toHaveProperty(
 | 
			
		||||
      'content',
 | 
			
		||||
      'id',
 | 
			
		||||
      'status',
 | 
			
		||||
      'echo_id',
 | 
			
		||||
      'status',
 | 
			
		||||
      'created_at',
 | 
			
		||||
      'message_type',
 | 
			
		||||
      'conversation_id',
 | 
			
		||||
      'attachments',
 | 
			
		||||
      'private'
 | 
			
		||||
    );
 | 
			
		||||
    expect(createPendingMessage(messageWithFile)).toMatchObject({
 | 
			
		||||
      content: expect.anything(),
 | 
			
		||||
      id: expect.anything(),
 | 
			
		||||
      status: expect.anything(),
 | 
			
		||||
      echo_id: expect.anything(),
 | 
			
		||||
      created_at: expect.anything(),
 | 
			
		||||
      message_type: expect.anything(),
 | 
			
		||||
      attachments: [{ id: expect.anything() }],
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('returns the pending message to have one attachment', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,19 +19,19 @@ describe('resize directive', () => {
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    el = document.createElement('div');
 | 
			
		||||
    binding = {
 | 
			
		||||
      value: jest.fn(),
 | 
			
		||||
      value: vi.fn(),
 | 
			
		||||
    };
 | 
			
		||||
    observer = {
 | 
			
		||||
      observe: jest.fn(),
 | 
			
		||||
      unobserve: jest.fn(),
 | 
			
		||||
      disconnect: jest.fn(),
 | 
			
		||||
      observe: vi.fn(),
 | 
			
		||||
      unobserve: vi.fn(),
 | 
			
		||||
      disconnect: vi.fn(),
 | 
			
		||||
    };
 | 
			
		||||
    window.ResizeObserver = ResizeObserverMock;
 | 
			
		||||
    jest.spyOn(window, 'ResizeObserver').mockImplementation(() => observer);
 | 
			
		||||
    vi.spyOn(window, 'ResizeObserver').mockImplementation(() => observer);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  afterEach(() => {
 | 
			
		||||
    jest.clearAllMocks();
 | 
			
		||||
    vi.clearAllMocks();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should create ResizeObserver on bind', () => {
 | 
			
		||||
@@ -44,7 +44,7 @@ describe('resize directive', () => {
 | 
			
		||||
  it('should call callback on observer callback', () => {
 | 
			
		||||
    el = document.createElement('div');
 | 
			
		||||
    binding = {
 | 
			
		||||
      value: jest.fn(),
 | 
			
		||||
      value: vi.fn(),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    resize.bind(el, binding);
 | 
			
		||||
 
 | 
			
		||||
@@ -283,17 +283,17 @@ describe('findNodeToInsertImage', () => {
 | 
			
		||||
    mockEditorState = {
 | 
			
		||||
      selection: {
 | 
			
		||||
        $from: {
 | 
			
		||||
          node: jest.fn(() => ({})),
 | 
			
		||||
          node: vi.fn(() => ({})),
 | 
			
		||||
        },
 | 
			
		||||
        from: 0,
 | 
			
		||||
      },
 | 
			
		||||
      schema: {
 | 
			
		||||
        nodes: {
 | 
			
		||||
          image: {
 | 
			
		||||
            create: jest.fn(attrs => ({ type: { name: 'image' }, attrs })),
 | 
			
		||||
            create: vi.fn(attrs => ({ type: { name: 'image' }, attrs })),
 | 
			
		||||
          },
 | 
			
		||||
          paragraph: {
 | 
			
		||||
            create: jest.fn((_, node) => ({
 | 
			
		||||
            create: vi.fn((_, node) => ({
 | 
			
		||||
              type: { name: 'paragraph' },
 | 
			
		||||
              content: [node],
 | 
			
		||||
            })),
 | 
			
		||||
@@ -381,11 +381,11 @@ describe('setURLWithQueryAndSize', () => {
 | 
			
		||||
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    selectedNode = {
 | 
			
		||||
      setAttribute: jest.fn(),
 | 
			
		||||
      setAttribute: vi.fn(),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const tr = {
 | 
			
		||||
      setNodeMarkup: jest.fn().mockReturnValue({
 | 
			
		||||
      setNodeMarkup: vi.fn().mockReturnValue({
 | 
			
		||||
        docChanged: true,
 | 
			
		||||
      }),
 | 
			
		||||
    };
 | 
			
		||||
@@ -397,7 +397,7 @@ describe('setURLWithQueryAndSize', () => {
 | 
			
		||||
 | 
			
		||||
    editorView = {
 | 
			
		||||
      state,
 | 
			
		||||
      dispatch: jest.fn(),
 | 
			
		||||
      dispatch: vi.fn(),
 | 
			
		||||
    };
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
@@ -420,7 +420,7 @@ describe('setURLWithQueryAndSize', () => {
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('does not update the editor view if the document has not changed', () => {
 | 
			
		||||
    editorView.state.tr.setNodeMarkup = jest.fn().mockReturnValue({
 | 
			
		||||
    editorView.state.tr.setNodeMarkup = vi.fn().mockReturnValue({
 | 
			
		||||
      docChanged: false,
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
import { setColorTheme } from 'dashboard/helper/themeHelper.js';
 | 
			
		||||
import { LocalStorage } from 'shared/helpers/localStorage';
 | 
			
		||||
 | 
			
		||||
jest.mock('shared/helpers/localStorage');
 | 
			
		||||
vi.mock('shared/helpers/localStorage');
 | 
			
		||||
 | 
			
		||||
describe('setColorTheme', () => {
 | 
			
		||||
  it('should set body class to dark if selectedColorScheme is dark', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,8 @@
 | 
			
		||||
import { uploadFile } from '../uploadHelper';
 | 
			
		||||
import axios from 'axios';
 | 
			
		||||
 | 
			
		||||
// Mocking axios using jest-mock-axios
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#Upload Helpers', () => {
 | 
			
		||||
  afterEach(() => {
 | 
			
		||||
 
 | 
			
		||||
@@ -4,8 +4,8 @@ import Vuex from 'vuex';
 | 
			
		||||
import OpenAPI from '../../api/integrations/openapi';
 | 
			
		||||
import { LocalStorage } from '../../../shared/helpers/localStorage';
 | 
			
		||||
 | 
			
		||||
jest.mock('../../api/integrations/openapi');
 | 
			
		||||
jest.mock('../../../shared/helpers/localStorage');
 | 
			
		||||
vi.mock('../../api/integrations/openapi');
 | 
			
		||||
vi.mock('../../../shared/helpers/localStorage');
 | 
			
		||||
 | 
			
		||||
const localVue = createLocalVue();
 | 
			
		||||
localVue.use(Vuex);
 | 
			
		||||
@@ -18,12 +18,12 @@ describe('aiMixin', () => {
 | 
			
		||||
  let actions;
 | 
			
		||||
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    OpenAPI.processEvent = jest.fn();
 | 
			
		||||
    LocalStorage.set = jest.fn();
 | 
			
		||||
    LocalStorage.get = jest.fn();
 | 
			
		||||
    OpenAPI.processEvent = vi.fn();
 | 
			
		||||
    LocalStorage.set = vi.fn();
 | 
			
		||||
    LocalStorage.get = vi.fn();
 | 
			
		||||
 | 
			
		||||
    actions = {
 | 
			
		||||
      ['integrations/get']: jest.fn(),
 | 
			
		||||
      ['integrations/get']: vi.fn(),
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    getters = {
 | 
			
		||||
@@ -63,20 +63,20 @@ describe('aiMixin', () => {
 | 
			
		||||
      localVue,
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    const dispatchSpy = jest.spyOn(wrapper.vm.$store, 'dispatch');
 | 
			
		||||
    const dispatchSpy = vi.spyOn(wrapper.vm.$store, 'dispatch');
 | 
			
		||||
    await wrapper.vm.fetchIntegrationsIfRequired();
 | 
			
		||||
    expect(dispatchSpy).toHaveBeenCalledWith('integrations/get');
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('does not fetch integrations', async () => {
 | 
			
		||||
    const dispatchSpy = jest.spyOn(wrapper.vm.$store, 'dispatch');
 | 
			
		||||
    const dispatchSpy = vi.spyOn(wrapper.vm.$store, 'dispatch');
 | 
			
		||||
    await wrapper.vm.fetchIntegrationsIfRequired();
 | 
			
		||||
    expect(dispatchSpy).not.toHaveBeenCalledWith('integrations/get');
 | 
			
		||||
    expect(wrapper.vm.isAIIntegrationEnabled).toBeTruthy();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('fetches label suggestions', async () => {
 | 
			
		||||
    const processEventSpy = jest.spyOn(OpenAPI, 'processEvent');
 | 
			
		||||
    const processEventSpy = vi.spyOn(OpenAPI, 'processEvent');
 | 
			
		||||
    await wrapper.vm.fetchLabelSuggestions({
 | 
			
		||||
      conversationId: '123',
 | 
			
		||||
    });
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ describe('attributeMixin', () => {
 | 
			
		||||
  let store;
 | 
			
		||||
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    actions = { updateUISettings: jest.fn(), toggleSidebarUIState: jest.fn() };
 | 
			
		||||
    actions = { updateUISettings: vi.fn(), toggleSidebarUIState: vi.fn() };
 | 
			
		||||
    getters = {
 | 
			
		||||
      getSelectedChat: () => ({
 | 
			
		||||
        id: 7165,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,13 @@
 | 
			
		||||
import fileUploadMixin from 'dashboard/mixins/fileUploadMixin';
 | 
			
		||||
import Vue from 'vue';
 | 
			
		||||
 | 
			
		||||
jest.mock('shared/helpers/FileHelper', () => ({
 | 
			
		||||
  checkFileSizeLimit: jest.fn(),
 | 
			
		||||
vi.mock('shared/helpers/FileHelper', () => ({
 | 
			
		||||
  checkFileSizeLimit: vi.fn(),
 | 
			
		||||
}));
 | 
			
		||||
 | 
			
		||||
jest.mock('activestorage', () => ({
 | 
			
		||||
  DirectUpload: jest.fn().mockImplementation(() => ({
 | 
			
		||||
    create: jest.fn(),
 | 
			
		||||
vi.mock('activestorage', () => ({
 | 
			
		||||
  DirectUpload: vi.fn().mockImplementation(() => ({
 | 
			
		||||
    create: vi.fn(),
 | 
			
		||||
  })),
 | 
			
		||||
}));
 | 
			
		||||
 | 
			
		||||
@@ -27,20 +27,20 @@ describe('FileUploadMixin', () => {
 | 
			
		||||
    vm.currentUser = {
 | 
			
		||||
      access_token: 'token',
 | 
			
		||||
    };
 | 
			
		||||
    vm.$t = jest.fn(message => message);
 | 
			
		||||
    vm.showAlert = jest.fn();
 | 
			
		||||
    vm.attachFile = jest.fn();
 | 
			
		||||
    vm.$t = vi.fn(message => message);
 | 
			
		||||
    vm.showAlert = vi.fn();
 | 
			
		||||
    vm.attachFile = vi.fn();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should call onDirectFileUpload when direct uploads are enabled', () => {
 | 
			
		||||
    vm.onDirectFileUpload = jest.fn();
 | 
			
		||||
    vm.onDirectFileUpload = vi.fn();
 | 
			
		||||
    vm.onFileUpload({});
 | 
			
		||||
    expect(vm.onDirectFileUpload).toHaveBeenCalledWith({});
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should call onIndirectFileUpload when direct uploads are disabled', () => {
 | 
			
		||||
    vm.globalConfig.directUploadsEnabled = false;
 | 
			
		||||
    vm.onIndirectFileUpload = jest.fn();
 | 
			
		||||
    vm.onIndirectFileUpload = vi.fn();
 | 
			
		||||
    vm.onFileUpload({});
 | 
			
		||||
    expect(vm.onIndirectFileUpload).toHaveBeenCalledWith({});
 | 
			
		||||
  });
 | 
			
		||||
@@ -53,7 +53,7 @@ describe('FileUploadMixin', () => {
 | 
			
		||||
 | 
			
		||||
    it('shows an alert if the file size exceeds the maximum limit', () => {
 | 
			
		||||
      const fakeFile = { size: 999999999 };
 | 
			
		||||
      vm.showAlert = jest.fn();
 | 
			
		||||
      vm.showAlert = vi.fn();
 | 
			
		||||
      vm.onDirectFileUpload(fakeFile);
 | 
			
		||||
      expect(vm.showAlert).toHaveBeenCalledWith(expect.any(String));
 | 
			
		||||
    });
 | 
			
		||||
@@ -67,7 +67,7 @@ describe('FileUploadMixin', () => {
 | 
			
		||||
 | 
			
		||||
    it('shows an alert if the file size exceeds the maximum limit', () => {
 | 
			
		||||
      const fakeFile = { size: 999999999 };
 | 
			
		||||
      vm.showAlert = jest.fn();
 | 
			
		||||
      vm.showAlert = vi.fn();
 | 
			
		||||
      vm.onIndirectFileUpload(fakeFile);
 | 
			
		||||
      expect(vm.showAlert).toHaveBeenCalledWith(expect.any(String));
 | 
			
		||||
    });
 | 
			
		||||
 
 | 
			
		||||
@@ -11,14 +11,14 @@ describe('#messageStamp', () => {
 | 
			
		||||
 | 
			
		||||
describe('#messageTimestamp', () => {
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    jest.useFakeTimers('modern');
 | 
			
		||||
    vi.useFakeTimers('modern');
 | 
			
		||||
 | 
			
		||||
    const mockDate = new Date(2023, 4, 5);
 | 
			
		||||
    jest.setSystemTime(mockDate);
 | 
			
		||||
    vi.setSystemTime(mockDate);
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  afterEach(() => {
 | 
			
		||||
    jest.useRealTimers();
 | 
			
		||||
    vi.useRealTimers();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should return the message date in the specified format if the message was sent in the current year', () => {
 | 
			
		||||
@@ -35,7 +35,7 @@ describe('#messageTimestamp', () => {
 | 
			
		||||
 | 
			
		||||
describe('#dynamicTime', () => {
 | 
			
		||||
  it('returns correct value', () => {
 | 
			
		||||
    Date.now = jest.fn(() => new Date(Date.UTC(2023, 1, 14)).valueOf());
 | 
			
		||||
    Date.now = vi.fn(() => new Date(Date.UTC(2023, 1, 14)).valueOf());
 | 
			
		||||
    expect(TimeMixin.methods.dynamicTime(1612971343)).toEqual(
 | 
			
		||||
      'about 2 years ago'
 | 
			
		||||
    );
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@ describe('uiSettingsMixin', () => {
 | 
			
		||||
  let store;
 | 
			
		||||
 | 
			
		||||
  beforeEach(() => {
 | 
			
		||||
    actions = { updateUISettings: jest.fn(), toggleSidebarUIState: jest.fn() };
 | 
			
		||||
    actions = { updateUISettings: vi.fn(), toggleSidebarUIState: vi.fn() };
 | 
			
		||||
    getters = {
 | 
			
		||||
      getUISettings: () => ({
 | 
			
		||||
        enter_to_send_enabled: false,
 | 
			
		||||
 
 | 
			
		||||
@@ -41,7 +41,6 @@
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
import Sidebar from '../../components/layout/Sidebar.vue';
 | 
			
		||||
import CommandBar from './commands/commandbar.vue';
 | 
			
		||||
import { BUS_EVENTS } from 'shared/constants/busEvents';
 | 
			
		||||
import WootKeyShortcutModal from 'dashboard/components/widgets/modal/WootKeyShortcutModal.vue';
 | 
			
		||||
import AddAccountModal from 'dashboard/components/layout/sidebarComponents/AddAccountModal.vue';
 | 
			
		||||
@@ -50,6 +49,7 @@ import AddLabelModal from 'dashboard/routes/dashboard/settings/labels/AddLabel.v
 | 
			
		||||
import NotificationPanel from 'dashboard/routes/dashboard/notifications/components/NotificationPanel.vue';
 | 
			
		||||
import uiSettingsMixin from 'dashboard/mixins/uiSettings';
 | 
			
		||||
import wootConstants from 'dashboard/constants/globals';
 | 
			
		||||
const CommandBar = () => import('./commands/commandbar.vue');
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  components: {
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,7 @@ describe('AddReminder', () => {
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('tests resetValue', () => {
 | 
			
		||||
    const resetValue = jest.spyOn(wrapper.vm, 'resetValue');
 | 
			
		||||
    const resetValue = vi.spyOn(wrapper.vm, 'resetValue');
 | 
			
		||||
    wrapper.vm.content = 'test';
 | 
			
		||||
    wrapper.vm.date = '08/11/2022';
 | 
			
		||||
    wrapper.vm.resetValue();
 | 
			
		||||
@@ -25,7 +25,7 @@ describe('AddReminder', () => {
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('tests optionSelected', () => {
 | 
			
		||||
    const optionSelected = jest.spyOn(wrapper.vm, 'optionSelected');
 | 
			
		||||
    const optionSelected = vi.spyOn(wrapper.vm, 'optionSelected');
 | 
			
		||||
    wrapper.vm.label = '';
 | 
			
		||||
    wrapper.vm.optionSelected({ target: { value: 'test' } });
 | 
			
		||||
    expect(wrapper.vm.label).toEqual('test');
 | 
			
		||||
@@ -33,7 +33,7 @@ describe('AddReminder', () => {
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('tests onAdd', () => {
 | 
			
		||||
    const onAdd = jest.spyOn(wrapper.vm, 'onAdd');
 | 
			
		||||
    const onAdd = vi.spyOn(wrapper.vm, 'onAdd');
 | 
			
		||||
    wrapper.vm.label = 'label';
 | 
			
		||||
    wrapper.vm.content = 'content';
 | 
			
		||||
    wrapper.vm.date = '08/11/2022';
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
/* eslint arrow-body-style: 0 */
 | 
			
		||||
import { frontendURL } from '../../../helper/URLHelper';
 | 
			
		||||
const ConversationView = () => import('./ConversationView');
 | 
			
		||||
const ConversationView = () => import('./ConversationView.vue');
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  routes: [
 | 
			
		||||
 
 | 
			
		||||
@@ -59,13 +59,12 @@
 | 
			
		||||
</template>
 | 
			
		||||
<script>
 | 
			
		||||
import { mapGetters } from 'vuex';
 | 
			
		||||
import UpgradePage from './UpgradePage';
 | 
			
		||||
import UpgradePage from './UpgradePage.vue';
 | 
			
		||||
import { frontendURL } from '../../../../helper/URLHelper';
 | 
			
		||||
import Sidebar from 'dashboard/components/layout/Sidebar.vue';
 | 
			
		||||
import { BUS_EVENTS } from 'shared/constants/busEvents';
 | 
			
		||||
import PortalPopover from '../components/PortalPopover.vue';
 | 
			
		||||
import HelpCenterSidebar from '../components/Sidebar/Sidebar.vue';
 | 
			
		||||
import CommandBar from 'dashboard/routes/dashboard/commands/commandbar.vue';
 | 
			
		||||
import WootKeyShortcutModal from 'dashboard/components/widgets/modal/WootKeyShortcutModal.vue';
 | 
			
		||||
import AccountSelector from 'dashboard/components/layout/sidebarComponents/AccountSelector.vue';
 | 
			
		||||
import NotificationPanel from 'dashboard/routes/dashboard/notifications/components/NotificationPanel.vue';
 | 
			
		||||
@@ -73,6 +72,8 @@ import uiSettingsMixin from 'dashboard/mixins/uiSettings';
 | 
			
		||||
import portalMixin from '../mixins/portalMixin';
 | 
			
		||||
import AddCategory from '../pages/categories/AddCategory.vue';
 | 
			
		||||
import { FEATURE_FLAGS } from 'dashboard/featureFlags';
 | 
			
		||||
const CommandBar = () =>
 | 
			
		||||
  import('dashboard/routes/dashboard/commands/commandbar.vue');
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  components: {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,30 +1,32 @@
 | 
			
		||||
import HelpCenterLayout from './components/HelpCenterLayout';
 | 
			
		||||
import HelpCenterLayout from './components/HelpCenterLayout.vue';
 | 
			
		||||
import { getPortalRoute } from './helpers/routeHelper';
 | 
			
		||||
 | 
			
		||||
const ListAllPortals = () => import('./pages/portals/ListAllPortals');
 | 
			
		||||
const NewPortal = () => import('./pages/portals/NewPortal');
 | 
			
		||||
const ListAllPortals = () => import('./pages/portals/ListAllPortals.vue');
 | 
			
		||||
const NewPortal = () => import('./pages/portals/NewPortal.vue');
 | 
			
		||||
 | 
			
		||||
const EditPortal = () => import('./pages/portals/EditPortal');
 | 
			
		||||
const EditPortalBasic = () => import('./pages/portals/EditPortalBasic');
 | 
			
		||||
const EditPortal = () => import('./pages/portals/EditPortal.vue');
 | 
			
		||||
const EditPortalBasic = () => import('./pages/portals/EditPortalBasic.vue');
 | 
			
		||||
const EditPortalCustomization = () =>
 | 
			
		||||
  import('./pages/portals/EditPortalCustomization');
 | 
			
		||||
  import('./pages/portals/EditPortalCustomization.vue');
 | 
			
		||||
const EditPortalLocales = () => import('./pages/portals/EditPortalLocales.vue');
 | 
			
		||||
const ShowPortal = () => import('./pages/portals/ShowPortal');
 | 
			
		||||
const PortalDetails = () => import('./pages/portals/PortalDetails');
 | 
			
		||||
const PortalCustomization = () => import('./pages/portals/PortalCustomization');
 | 
			
		||||
const ShowPortal = () => import('./pages/portals/ShowPortal.vue');
 | 
			
		||||
const PortalDetails = () => import('./pages/portals/PortalDetails.vue');
 | 
			
		||||
const PortalCustomization = () =>
 | 
			
		||||
  import('./pages/portals/PortalCustomization.vue');
 | 
			
		||||
const PortalSettingsFinish = () =>
 | 
			
		||||
  import('./pages/portals/PortalSettingsFinish');
 | 
			
		||||
  import('./pages/portals/PortalSettingsFinish.vue');
 | 
			
		||||
 | 
			
		||||
const ListAllCategories = () => import('./pages/categories/ListAllCategories');
 | 
			
		||||
const NewCategory = () => import('./pages/categories/NewCategory');
 | 
			
		||||
const EditCategory = () => import('./pages/categories/EditCategory');
 | 
			
		||||
const ListAllCategories = () =>
 | 
			
		||||
  import('./pages/categories/ListAllCategories.vue');
 | 
			
		||||
const NewCategory = () => import('./pages/categories/NewCategory.vue');
 | 
			
		||||
const EditCategory = () => import('./pages/categories/EditCategory.vue');
 | 
			
		||||
const ListCategoryArticles = () =>
 | 
			
		||||
  import('./pages/articles/ListCategoryArticles');
 | 
			
		||||
const ListAllArticles = () => import('./pages/articles/ListAllArticles');
 | 
			
		||||
  import('./pages/articles/ListCategoryArticles.vue');
 | 
			
		||||
const ListAllArticles = () => import('./pages/articles/ListAllArticles.vue');
 | 
			
		||||
const DefaultPortalArticles = () =>
 | 
			
		||||
  import('./pages/articles/DefaultPortalArticles');
 | 
			
		||||
const NewArticle = () => import('./pages/articles/NewArticle');
 | 
			
		||||
const EditArticle = () => import('./pages/articles/EditArticle');
 | 
			
		||||
  import('./pages/articles/DefaultPortalArticles.vue');
 | 
			
		||||
const NewArticle = () => import('./pages/articles/NewArticle.vue');
 | 
			
		||||
const EditArticle = () => import('./pages/articles/EditArticle.vue');
 | 
			
		||||
 | 
			
		||||
const portalRoutes = [
 | 
			
		||||
  {
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script>
 | 
			
		||||
const EmojiInput = () => import('shared/components/emoji/EmojiInput');
 | 
			
		||||
const EmojiInput = () => import('shared/components/emoji/EmojiInput.vue');
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  components: { EmojiInput },
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +1,12 @@
 | 
			
		||||
import Facebook from './channels/Facebook';
 | 
			
		||||
import Website from './channels/Website';
 | 
			
		||||
import Twitter from './channels/Twitter';
 | 
			
		||||
import Api from './channels/Api';
 | 
			
		||||
import Email from './channels/Email';
 | 
			
		||||
import Sms from './channels/Sms';
 | 
			
		||||
import Whatsapp from './channels/Whatsapp';
 | 
			
		||||
import Line from './channels/Line';
 | 
			
		||||
import Telegram from './channels/Telegram';
 | 
			
		||||
import Facebook from './channels/Facebook.vue';
 | 
			
		||||
import Website from './channels/Website.vue';
 | 
			
		||||
import Twitter from './channels/Twitter.vue';
 | 
			
		||||
import Api from './channels/Api.vue';
 | 
			
		||||
import Email from './channels/Email.vue';
 | 
			
		||||
import Sms from './channels/Sms.vue';
 | 
			
		||||
import Whatsapp from './channels/Whatsapp.vue';
 | 
			
		||||
import Line from './channels/Line.vue';
 | 
			
		||||
import Telegram from './channels/Telegram.vue';
 | 
			
		||||
 | 
			
		||||
const channelViewList = {
 | 
			
		||||
  facebook: Facebook,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
import { shallowMount, createLocalVue } from '@vue/test-utils';
 | 
			
		||||
import Vuex from 'vuex';
 | 
			
		||||
import ReportsFiltersAgents from '../../Filters/Agents';
 | 
			
		||||
import ReportsFiltersAgents from '../../Filters/Agents.vue';
 | 
			
		||||
 | 
			
		||||
const localVue = createLocalVue();
 | 
			
		||||
localVue.use(Vuex);
 | 
			
		||||
@@ -16,7 +16,7 @@ const mockStore = new Vuex.Store({
 | 
			
		||||
        getAgents: state => state.agents,
 | 
			
		||||
      },
 | 
			
		||||
      actions: {
 | 
			
		||||
        get: jest.fn(),
 | 
			
		||||
        get: vi.fn(),
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
@@ -50,7 +50,7 @@ describe('ReportsFiltersAgents.vue', () => {
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('dispatches the "agents/get" action when the component is mounted', () => {
 | 
			
		||||
    const dispatchSpy = jest.spyOn(mockStore, 'dispatch');
 | 
			
		||||
    const dispatchSpy = vi.spyOn(mockStore, 'dispatch');
 | 
			
		||||
 | 
			
		||||
    shallowMount(ReportsFiltersAgents, mountParams);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
import { shallowMount } from '@vue/test-utils';
 | 
			
		||||
import ReportsFiltersDateGroupBy from '../../Filters/DateGroupBy';
 | 
			
		||||
import ReportsFiltersDateGroupBy from '../../Filters/DateGroupBy.vue';
 | 
			
		||||
import { GROUP_BY_OPTIONS } from '../../../constants';
 | 
			
		||||
 | 
			
		||||
const mountParams = {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
import { shallowMount } from '@vue/test-utils';
 | 
			
		||||
import ReportFiltersDateRange from '../../Filters/DateRange';
 | 
			
		||||
import ReportFiltersDateRange from '../../Filters/DateRange.vue';
 | 
			
		||||
import { DATE_RANGE_OPTIONS } from '../../../constants';
 | 
			
		||||
 | 
			
		||||
const mountParams = {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
import { shallowMount, createLocalVue } from '@vue/test-utils';
 | 
			
		||||
import Vuex from 'vuex';
 | 
			
		||||
import ReportsFiltersInboxes from '../../Filters/Inboxes';
 | 
			
		||||
import ReportsFiltersInboxes from '../../Filters/Inboxes.vue';
 | 
			
		||||
 | 
			
		||||
const localVue = createLocalVue();
 | 
			
		||||
localVue.use(Vuex);
 | 
			
		||||
@@ -26,7 +26,7 @@ describe('ReportsFiltersInboxes.vue', () => {
 | 
			
		||||
        ],
 | 
			
		||||
      },
 | 
			
		||||
      actions: {
 | 
			
		||||
        get: jest.fn(),
 | 
			
		||||
        get: vi.fn(),
 | 
			
		||||
      },
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
import { shallowMount, createLocalVue } from '@vue/test-utils';
 | 
			
		||||
import Vuex from 'vuex';
 | 
			
		||||
import ReportsFiltersLabels from '../../Filters/Labels';
 | 
			
		||||
import ReportsFiltersLabels from '../../Filters/Labels.vue';
 | 
			
		||||
 | 
			
		||||
const localVue = createLocalVue();
 | 
			
		||||
localVue.use(Vuex);
 | 
			
		||||
@@ -26,7 +26,7 @@ describe('ReportsFiltersLabels.vue', () => {
 | 
			
		||||
        ],
 | 
			
		||||
      },
 | 
			
		||||
      actions: {
 | 
			
		||||
        get: jest.fn(),
 | 
			
		||||
        get: vi.fn(),
 | 
			
		||||
      },
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
import { shallowMount, createLocalVue } from '@vue/test-utils';
 | 
			
		||||
import ReportFiltersRatings from '../../Filters/Ratings';
 | 
			
		||||
import ReportFiltersRatings from '../../Filters/Ratings.vue';
 | 
			
		||||
import { CSAT_RATINGS } from 'shared/constants/messages';
 | 
			
		||||
 | 
			
		||||
const mountParams = {
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ describe('ReportsFiltersTeams.vue', () => {
 | 
			
		||||
        ],
 | 
			
		||||
      },
 | 
			
		||||
      actions: {
 | 
			
		||||
        get: jest.fn(),
 | 
			
		||||
        get: vi.fn(),
 | 
			
		||||
      },
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
 | 
			
		||||
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
 | 
			
		||||
 | 
			
		||||
exports[`CsatMetrics.vue computes response count correctly 1`] = `
 | 
			
		||||
<div class="flex-col lg:flex-row flex flex-wrap mx-0 bg-white dark:bg-slate-800 rounded-[4px] p-4 mb-5 border border-solid border-slate-75 dark:border-slate-700">
 | 
			
		||||
exports[`CsatMetrics.vue > computes response count correctly 1`] = `
 | 
			
		||||
"<div class="flex-col lg:flex-row flex flex-wrap mx-0 bg-white dark:bg-slate-800 rounded-[4px] p-4 mb-5 border border-solid border-slate-75 dark:border-slate-700">
 | 
			
		||||
  <csat-metric-card-stub label="CSAT_REPORTS.METRIC.TOTAL_RESPONSES.LABEL" value="100" infotext="CSAT_REPORTS.METRIC.TOTAL_RESPONSES.TOOLTIP" class="xs:w-full sm:max-w-[50%] lg:w-1/6 lg:max-w-[16%]"></csat-metric-card-stub>
 | 
			
		||||
  <csat-metric-card-stub label="CSAT_REPORTS.METRIC.SATISFACTION_SCORE.LABEL" value="--" infotext="CSAT_REPORTS.METRIC.SATISFACTION_SCORE.TOOLTIP" disabled="true" class="xs:w-full sm:max-w-[50%] lg:w-1/6 lg:max-w-[16%]"></csat-metric-card-stub>
 | 
			
		||||
  <csat-metric-card-stub label="CSAT_REPORTS.METRIC.RESPONSE_RATE.LABEL" value="90%" infotext="CSAT_REPORTS.METRIC.RESPONSE_RATE.TOOLTIP" class="xs:w-full sm:max-w-[50%] lg:w-1/6 lg:max-w-[16%]"></csat-metric-card-stub>
 | 
			
		||||
  <!---->
 | 
			
		||||
</div>
 | 
			
		||||
</div>"
 | 
			
		||||
`;
 | 
			
		||||
 
 | 
			
		||||
@@ -1,18 +1,11 @@
 | 
			
		||||
import 'expect-more-jest';
 | 
			
		||||
import { validateAuthenticateRoutePermission } from './index';
 | 
			
		||||
 | 
			
		||||
jest.mock('./dashboard/dashboard.routes', () => ({
 | 
			
		||||
  routes: [],
 | 
			
		||||
}));
 | 
			
		||||
window.roleWiseRoutes = {};
 | 
			
		||||
 | 
			
		||||
describe('#validateAuthenticateRoutePermission', () => {
 | 
			
		||||
  describe(`when route is protected`, () => {
 | 
			
		||||
    describe(`when user not logged in`, () => {
 | 
			
		||||
      it(`should redirect to login`, () => {
 | 
			
		||||
        // Arrange
 | 
			
		||||
        const to = { name: 'some-protected-route', params: { accountId: 1 } };
 | 
			
		||||
        const next = jest.fn();
 | 
			
		||||
        const next = vi.fn();
 | 
			
		||||
        const getters = {
 | 
			
		||||
          isLoggedIn: false,
 | 
			
		||||
          getCurrentUser: {
 | 
			
		||||
@@ -30,14 +23,18 @@ describe('#validateAuthenticateRoutePermission', () => {
 | 
			
		||||
    describe(`when user is logged in`, () => {
 | 
			
		||||
      describe(`when route is not accessible to current user`, () => {
 | 
			
		||||
        it(`should redirect to dashboard`, () => {
 | 
			
		||||
          window.roleWiseRoutes.agent = ['dashboard'];
 | 
			
		||||
          const to = { name: 'admin', params: { accountId: 1 } };
 | 
			
		||||
          const next = jest.fn();
 | 
			
		||||
          const to = {
 | 
			
		||||
            name: 'general_settings_index',
 | 
			
		||||
            params: { accountId: 1 },
 | 
			
		||||
            meta: { permissions: ['administrator'] },
 | 
			
		||||
          };
 | 
			
		||||
          const next = vi.fn();
 | 
			
		||||
          const getters = {
 | 
			
		||||
            isLoggedIn: true,
 | 
			
		||||
            getCurrentUser: {
 | 
			
		||||
              account_id: 1,
 | 
			
		||||
              id: 1,
 | 
			
		||||
              permissions: ['agent'],
 | 
			
		||||
              accounts: [{ id: 1, role: 'agent', status: 'active' }],
 | 
			
		||||
            },
 | 
			
		||||
          };
 | 
			
		||||
@@ -47,15 +44,19 @@ describe('#validateAuthenticateRoutePermission', () => {
 | 
			
		||||
      });
 | 
			
		||||
      describe(`when route is accessible to current user`, () => {
 | 
			
		||||
        it(`should go there`, () => {
 | 
			
		||||
          window.roleWiseRoutes.agent = ['dashboard', 'admin'];
 | 
			
		||||
          const to = { name: 'admin', params: { accountId: 1 } };
 | 
			
		||||
          const next = jest.fn();
 | 
			
		||||
          const to = {
 | 
			
		||||
            name: 'general_settings_index',
 | 
			
		||||
            params: { accountId: 1 },
 | 
			
		||||
            meta: { permissions: ['administrator'] },
 | 
			
		||||
          };
 | 
			
		||||
          const next = vi.fn();
 | 
			
		||||
          const getters = {
 | 
			
		||||
            isLoggedIn: true,
 | 
			
		||||
            getCurrentUser: {
 | 
			
		||||
              account_id: 1,
 | 
			
		||||
              id: 1,
 | 
			
		||||
              accounts: [{ id: 1, role: 'agent', status: 'active' }],
 | 
			
		||||
              permissions: ['administrator'],
 | 
			
		||||
              accounts: [{ id: 1, role: 'administrator', status: 'active' }],
 | 
			
		||||
            },
 | 
			
		||||
          };
 | 
			
		||||
          validateAuthenticateRoutePermission(to, next, { getters });
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@ import { actions } from '../actions';
 | 
			
		||||
import * as types from '../../../mutation-types';
 | 
			
		||||
import { uploadFile } from 'dashboard/helper/uploadHelper';
 | 
			
		||||
 | 
			
		||||
jest.mock('dashboard/helper/uploadHelper');
 | 
			
		||||
vi.mock('dashboard/helper/uploadHelper');
 | 
			
		||||
 | 
			
		||||
const articleList = [
 | 
			
		||||
  {
 | 
			
		||||
@@ -12,10 +12,10 @@ const articleList = [
 | 
			
		||||
    title: 'Documents are required to complete KYC',
 | 
			
		||||
  },
 | 
			
		||||
];
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const dispatch = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
const dispatch = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#index', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,9 @@ import axios from 'axios';
 | 
			
		||||
import { actions } from '../actions';
 | 
			
		||||
import * as types from '../../../mutation-types';
 | 
			
		||||
import { categoriesPayload } from './fixtures';
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#index', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,10 +3,10 @@ import { actions } from '../actions';
 | 
			
		||||
import { types } from '../mutations';
 | 
			
		||||
import { apiResponse } from './fixtures';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const dispatch = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
const dispatch = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#index', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -12,9 +12,9 @@ const newAccountInfo = {
 | 
			
		||||
  accountName: 'Company two',
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@ const accountData = {
 | 
			
		||||
  name: 'Company one',
 | 
			
		||||
  locale: 'en',
 | 
			
		||||
  features: {
 | 
			
		||||
    auto_resolve_conversations: false,
 | 
			
		||||
    auto_resolve_conversations: true,
 | 
			
		||||
    agent_management: false,
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
@@ -38,17 +38,11 @@ describe('#getters', () => {
 | 
			
		||||
    const state = {
 | 
			
		||||
      records: [accountData],
 | 
			
		||||
    };
 | 
			
		||||
    const rootGetters = {
 | 
			
		||||
      getCurrentUser: {
 | 
			
		||||
        type: 'SuperAdmin',
 | 
			
		||||
      },
 | 
			
		||||
    };
 | 
			
		||||
    expect(
 | 
			
		||||
      getters.isFeatureEnabledonAccount(
 | 
			
		||||
        state,
 | 
			
		||||
        null,
 | 
			
		||||
        null,
 | 
			
		||||
        rootGetters
 | 
			
		||||
        null
 | 
			
		||||
      )(1, 'auto_resolve_conversations')
 | 
			
		||||
    ).toEqual(true);
 | 
			
		||||
  });
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,9 @@ import { actions } from '../../agentBots';
 | 
			
		||||
import types from '../../../mutation-types';
 | 
			
		||||
import { agentBotRecords } from './fixtures';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,10 +3,10 @@ import { actions } from '../../agents';
 | 
			
		||||
import * as types from '../../../mutation-types';
 | 
			
		||||
import agentList from './fixtures';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const dispatch = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
const dispatch = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,9 @@ import { actions } from '../../attributes';
 | 
			
		||||
import * as types from '../../../mutation-types';
 | 
			
		||||
import attributesList from './fixtures';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,23 +2,18 @@ import axios from 'axios';
 | 
			
		||||
import Cookies from 'js-cookie';
 | 
			
		||||
import { actions } from '../../auth';
 | 
			
		||||
import * as types from '../../../mutation-types';
 | 
			
		||||
import { setUser, clearCookiesOnLogout } from '../../../utils/api';
 | 
			
		||||
import * as APIHelpers from '../../../utils/api';
 | 
			
		||||
import '../../../../routes';
 | 
			
		||||
 | 
			
		||||
jest.mock('../../../../routes', () => {});
 | 
			
		||||
jest.mock('../../../utils/api', () => ({
 | 
			
		||||
  setUser: jest.fn(),
 | 
			
		||||
  clearCookiesOnLogout: jest.fn(),
 | 
			
		||||
  getHeaderExpiry: jest.fn(),
 | 
			
		||||
}));
 | 
			
		||||
jest.mock('js-cookie', () => ({
 | 
			
		||||
  get: jest.fn(),
 | 
			
		||||
}));
 | 
			
		||||
vi.spyOn(APIHelpers, 'setUser');
 | 
			
		||||
vi.spyOn(APIHelpers, 'clearCookiesOnLogout');
 | 
			
		||||
vi.spyOn(APIHelpers, 'getHeaderExpiry');
 | 
			
		||||
vi.spyOn(Cookies, 'get');
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const dispatch = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
const dispatch = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#validityCheck', () => {
 | 
			
		||||
@@ -28,7 +23,7 @@ describe('#actions', () => {
 | 
			
		||||
        headers: { expiry: 581842904 },
 | 
			
		||||
      });
 | 
			
		||||
      await actions.validityCheck({ commit });
 | 
			
		||||
      expect(setUser).toHaveBeenCalledTimes(1);
 | 
			
		||||
      expect(APIHelpers.setUser).toHaveBeenCalledTimes(1);
 | 
			
		||||
      expect(commit.mock.calls).toEqual([
 | 
			
		||||
        [types.default.SET_CURRENT_USER, { id: 1, name: 'John' }],
 | 
			
		||||
      ]);
 | 
			
		||||
@@ -38,7 +33,7 @@ describe('#actions', () => {
 | 
			
		||||
        response: { status: 401 },
 | 
			
		||||
      });
 | 
			
		||||
      await actions.validityCheck({ commit });
 | 
			
		||||
      expect(clearCookiesOnLogout);
 | 
			
		||||
      expect(APIHelpers.clearCookiesOnLogout);
 | 
			
		||||
    });
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,5 @@
 | 
			
		||||
import { getters } from '../../auth';
 | 
			
		||||
 | 
			
		||||
import '../../../../routes';
 | 
			
		||||
 | 
			
		||||
jest.mock('../../../../routes', () => {});
 | 
			
		||||
describe('#getters', () => {
 | 
			
		||||
  describe('#isLoggedIn', () => {
 | 
			
		||||
    it('return correct value if user data is available', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,9 @@ import { actions } from '../../automations';
 | 
			
		||||
import * as types from '../../../mutation-types';
 | 
			
		||||
import automationsList from './fixtures';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,9 @@ import axios from 'axios';
 | 
			
		||||
import { actions } from '../../bulkActions';
 | 
			
		||||
import * as types from '../../../mutation-types';
 | 
			
		||||
import payload from './fixtures';
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#create', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,9 @@ import { actions } from '../../campaigns';
 | 
			
		||||
import * as types from '../../../mutation-types';
 | 
			
		||||
import campaignList from './fixtures';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -8,9 +8,9 @@ import {
 | 
			
		||||
import * as types from '../../../mutation-types';
 | 
			
		||||
import conversationList from './fixtures';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,9 @@ import axios from 'axios';
 | 
			
		||||
import { actions } from '../../contactLabels';
 | 
			
		||||
import * as types from '../../../mutation-types';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,9 @@ import { actions } from '../../contactNotes';
 | 
			
		||||
import * as types from '../../../mutation-types';
 | 
			
		||||
import notesData from './fixtures';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -21,9 +21,9 @@ const filterQueryData = {
 | 
			
		||||
  ],
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,9 @@ import axios from 'axios';
 | 
			
		||||
import { actions } from '../../conversationLabels';
 | 
			
		||||
import * as types from '../../../mutation-types';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
import { actions } from '../../conversationPage';
 | 
			
		||||
import * as types from '../../../mutation-types';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#setCurrentPage', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
import { actions } from '../../conversationSearch';
 | 
			
		||||
import types from '../../../mutation-types';
 | 
			
		||||
import axios from 'axios';
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,9 @@ import axios from 'axios';
 | 
			
		||||
import { actions } from '../../conversationStats';
 | 
			
		||||
import * as types from '../../../mutation-types';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
import { actions } from '../../conversationTypingStatus';
 | 
			
		||||
import * as types from '../../../mutation-types';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#create', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,9 @@ import axios from 'axios';
 | 
			
		||||
import { actions } from '../../conversationWatchers';
 | 
			
		||||
import types from '../../../mutation-types';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -15,10 +15,10 @@ const dataToSend = {
 | 
			
		||||
};
 | 
			
		||||
import { dataReceived } from './testConversationResponse';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const dispatch = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
const dispatch = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#hasMessageFailedWithExternalError', () => {
 | 
			
		||||
  it('returns false if message is sent', () => {
 | 
			
		||||
@@ -292,7 +292,7 @@ describe('#actions', () => {
 | 
			
		||||
 | 
			
		||||
  describe('#markMessagesRead', () => {
 | 
			
		||||
    beforeEach(() => {
 | 
			
		||||
      jest.useFakeTimers();
 | 
			
		||||
      vi.useFakeTimers();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('sends correct mutations if api is successful', async () => {
 | 
			
		||||
@@ -301,7 +301,7 @@ describe('#actions', () => {
 | 
			
		||||
        data: { id: 1, agent_last_seen_at: lastSeen },
 | 
			
		||||
      });
 | 
			
		||||
      await actions.markMessagesRead({ commit }, { id: 1 });
 | 
			
		||||
      jest.runAllTimers();
 | 
			
		||||
      vi.runAllTimers();
 | 
			
		||||
      expect(commit).toHaveBeenCalledTimes(1);
 | 
			
		||||
      expect(commit.mock.calls).toEqual([
 | 
			
		||||
        [types.UPDATE_MESSAGE_UNREAD_COUNT, { id: 1, lastSeen }],
 | 
			
		||||
@@ -321,7 +321,7 @@ describe('#actions', () => {
 | 
			
		||||
        data: { id: 1, agent_last_seen_at: lastSeen, unread_count: 1 },
 | 
			
		||||
      });
 | 
			
		||||
      await actions.markMessagesUnread({ commit }, { id: 1 });
 | 
			
		||||
      jest.runAllTimers();
 | 
			
		||||
      vi.runAllTimers();
 | 
			
		||||
      expect(commit).toHaveBeenCalledTimes(1);
 | 
			
		||||
      expect(commit.mock.calls).toEqual([
 | 
			
		||||
        [
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
import types from '../../../mutation-types';
 | 
			
		||||
import { mutations } from '../../conversations';
 | 
			
		||||
 | 
			
		||||
jest.mock('shared/helpers/mitt', () => ({
 | 
			
		||||
vi.mock('shared/helpers/mitt', () => ({
 | 
			
		||||
  emitter: {
 | 
			
		||||
    emit: jest.fn(),
 | 
			
		||||
    on: jest.fn(),
 | 
			
		||||
    off: jest.fn(),
 | 
			
		||||
    emit: vi.fn(),
 | 
			
		||||
    on: vi.fn(),
 | 
			
		||||
    off: vi.fn(),
 | 
			
		||||
  },
 | 
			
		||||
}));
 | 
			
		||||
 | 
			
		||||
@@ -116,7 +116,7 @@ describe('#mutations', () => {
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('add message to the conversation if it does not exist in the store', () => {
 | 
			
		||||
      global.bus = { $emit: jest.fn() };
 | 
			
		||||
      global.bus = { $emit: vi.fn() };
 | 
			
		||||
      const state = {
 | 
			
		||||
        allConversations: [{ id: 1, messages: [] }],
 | 
			
		||||
        selectedChatId: -1,
 | 
			
		||||
@@ -144,7 +144,7 @@ describe('#mutations', () => {
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('add message to the conversation and emit scrollToMessage if it does not exist in the store', () => {
 | 
			
		||||
      global.bus = { $emit: jest.fn() };
 | 
			
		||||
      global.bus = { $emit: vi.fn() };
 | 
			
		||||
      const state = {
 | 
			
		||||
        allConversations: [{ id: 1, messages: [] }],
 | 
			
		||||
        selectedChatId: 1,
 | 
			
		||||
@@ -172,7 +172,7 @@ describe('#mutations', () => {
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('update message if it exist in the store', () => {
 | 
			
		||||
      global.bus = { $emit: jest.fn() };
 | 
			
		||||
      global.bus = { $emit: vi.fn() };
 | 
			
		||||
      const state = {
 | 
			
		||||
        allConversations: [
 | 
			
		||||
          {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,9 @@ import axios from 'axios';
 | 
			
		||||
import { actions } from '../../csat';
 | 
			
		||||
import types from '../../../mutation-types';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,9 @@ import { actions } from '../../customViews';
 | 
			
		||||
import * as types from '../../../mutation-types';
 | 
			
		||||
import { customViewList, updateCustomViewList } from './fixtures';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,9 @@ import axios from 'axios';
 | 
			
		||||
import { actions } from '../../dashboardApps';
 | 
			
		||||
import types from '../../../mutation-types';
 | 
			
		||||
import { payload, automationsList } from './fixtures';
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,9 @@ import axios from 'axios';
 | 
			
		||||
import { actions } from '../../draftMessages';
 | 
			
		||||
import types from '../../../mutation-types';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#set', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,9 @@ import axios from 'axios';
 | 
			
		||||
import { actions, types } from '../../inboxAssignableAgents';
 | 
			
		||||
import agentsData from './fixtures';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#fetch', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,14 +3,14 @@ import { actions } from '../../inboxes';
 | 
			
		||||
import * as types from '../../../mutation-types';
 | 
			
		||||
import inboxList from './fixtures';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
    it('sends correct actions if API is success', async () => {
 | 
			
		||||
      const mockedGet = jest.fn(url => {
 | 
			
		||||
      const mockedGet = vi.fn(url => {
 | 
			
		||||
        if (url === '/api/v1/inboxes') {
 | 
			
		||||
          return Promise.resolve({ data: { payload: inboxList } });
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,9 @@ import { actions } from '../../integrations';
 | 
			
		||||
import types from '../../../mutation-types';
 | 
			
		||||
import integrationsList from './fixtures';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
const errorMessage = { message: 'Incorrect header' };
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,14 +3,14 @@ import { actions } from '../../labels';
 | 
			
		||||
import * as types from '../../../mutation-types';
 | 
			
		||||
import labelsList from './fixtures';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
    it('sends correct actions if API is success', async () => {
 | 
			
		||||
      const mockedGet = jest.fn(url => {
 | 
			
		||||
      const mockedGet = vi.fn(url => {
 | 
			
		||||
        if (url === '/api/v1/labels') {
 | 
			
		||||
          return Promise.resolve({ data: { payload: labelsList } });
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,9 @@ import { actions } from '../../macros';
 | 
			
		||||
import * as types from '../../../mutation-types';
 | 
			
		||||
import macrosList from './fixtures';
 | 
			
		||||
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,9 @@
 | 
			
		||||
import axios from 'axios';
 | 
			
		||||
import { actions } from '../../notifications/actions';
 | 
			
		||||
import types from '../../../mutation-types';
 | 
			
		||||
const commit = jest.fn();
 | 
			
		||||
const commit = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#get', () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,13 +1,12 @@
 | 
			
		||||
import axios from 'axios';
 | 
			
		||||
import { actions } from '../../reports';
 | 
			
		||||
import DownloadHelper from 'dashboard/helper/downloadHelper';
 | 
			
		||||
global.open = jest.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
jest.mock('axios');
 | 
			
		||||
import * as DownloadHelper from 'dashboard/helper/downloadHelper';
 | 
			
		||||
 | 
			
		||||
jest.mock('dashboard/helper/downloadHelper', () => ({
 | 
			
		||||
  downloadCsvFile: jest.fn(),
 | 
			
		||||
}));
 | 
			
		||||
global.open = vi.fn();
 | 
			
		||||
global.axios = axios;
 | 
			
		||||
 | 
			
		||||
vi.mock('axios');
 | 
			
		||||
vi.spyOn(DownloadHelper, 'downloadCsvFile');
 | 
			
		||||
 | 
			
		||||
describe('#actions', () => {
 | 
			
		||||
  describe('#downloadAgentReports', () => {
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user