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' }),
+ );
+ });
+});