diff --git a/packages/editor-ui/src/components/Projects/ProjectMoveResourceConfirmModal.test.ts b/packages/editor-ui/src/components/Projects/ProjectMoveResourceConfirmModal.test.ts new file mode 100644 index 0000000000..c3d33f14e2 --- /dev/null +++ b/packages/editor-ui/src/components/Projects/ProjectMoveResourceConfirmModal.test.ts @@ -0,0 +1,65 @@ +import { createPinia, setActivePinia } from 'pinia'; +import userEvent from '@testing-library/user-event'; +import { createComponentRenderer } from '@/__tests__/render'; +import { PROJECT_MOVE_RESOURCE_CONFIRM_MODAL } from '@/constants'; +import ProjectMoveResourceConfirmModal from '@/components/Projects/ProjectMoveResourceConfirmModal.vue'; +import { useProjectsStore } from '@/stores/projects.store'; +import { useTelemetry } from '@/composables/useTelemetry'; + +vi.mock('@/stores/ui.store', () => ({ + useUIStore: vi.fn().mockReturnValue({ + isModalOpen: vi.fn().mockReturnValue(() => true), + closeModal: vi.fn(), + }), +})); + +const renderComponent = createComponentRenderer(ProjectMoveResourceConfirmModal, { + global: { + stubs: { + Modal: { + template: + '
', + }, + }, + }, +}); + +let projectsStore: ReturnType; +let telemetry: ReturnType; + +describe('ProjectMoveResourceConfirmModal', () => { + beforeEach(() => { + setActivePinia(createPinia()); + projectsStore = useProjectsStore(); + telemetry = useTelemetry(); + }); + + it('should send telemetry when resource moving is confirmed', async () => { + vi.spyOn(projectsStore, 'moveResourceToProject').mockResolvedValue(); + + const telemetryTrackSpy = vi.spyOn(telemetry, 'track'); + + const props = { + modalName: PROJECT_MOVE_RESOURCE_CONFIRM_MODAL, + data: { + resourceType: 'workflow', + resource: { + id: '1', + }, + projectId: '1', + }, + }; + const { getByRole, getAllByRole } = renderComponent({ props }); + const confirmBtn = getByRole('button', { name: /confirm/i }); + expect(confirmBtn).toBeDisabled(); + await Promise.all( + getAllByRole('checkbox').map(async (checkbox) => await userEvent.click(checkbox)), + ); + expect(confirmBtn).toBeEnabled(); + await userEvent.click(confirmBtn); + expect(telemetryTrackSpy).toHaveBeenCalledWith( + 'User successfully moved workflow', + expect.objectContaining({ workflow_id: '1' }), + ); + }); +}); diff --git a/packages/editor-ui/src/components/Projects/ProjectMoveResourceModal.test.ts b/packages/editor-ui/src/components/Projects/ProjectMoveResourceModal.test.ts new file mode 100644 index 0000000000..566bedfc18 --- /dev/null +++ b/packages/editor-ui/src/components/Projects/ProjectMoveResourceModal.test.ts @@ -0,0 +1,45 @@ +import { createPinia, setActivePinia } from 'pinia'; +import { createComponentRenderer } from '@/__tests__/render'; +import { PROJECT_MOVE_RESOURCE_CONFIRM_MODAL } from '@/constants'; +import ProjectMoveResourceModal from '@/components/Projects/ProjectMoveResourceModal.vue'; +import { useTelemetry } from '@/composables/useTelemetry'; + +const renderComponent = createComponentRenderer(ProjectMoveResourceModal, { + global: { + stubs: { + Modal: { + template: + '
', + }, + }, + }, +}); + +let telemetry: ReturnType; + +describe('ProjectMoveResourceModal', () => { + beforeEach(() => { + setActivePinia(createPinia()); + telemetry = useTelemetry(); + }); + + it('should send telemetry when mounted', async () => { + const telemetryTrackSpy = vi.spyOn(telemetry, 'track'); + + const props = { + modalName: PROJECT_MOVE_RESOURCE_CONFIRM_MODAL, + data: { + resourceType: 'workflow', + resource: { + id: '1', + }, + projectId: '1', + }, + }; + renderComponent({ props }); + expect(telemetryTrackSpy).toHaveBeenCalledWith( + 'User clicked to move a workflow', + expect.objectContaining({ workflow_id: '1' }), + ); + }); +});