From 8a24328db2c6e8fbe417bcc4e470c041659cb2fb Mon Sep 17 00:00:00 2001 From: zhixzhan Date: Wed, 19 Aug 2020 18:24:56 +0800 Subject: [PATCH 1/2] add triggerCreattionModal test --- .../components/triggerCreationModal.test.tsx | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 Composer/packages/client/__tests__/components/triggerCreationModal.test.tsx diff --git a/Composer/packages/client/__tests__/components/triggerCreationModal.test.tsx b/Composer/packages/client/__tests__/components/triggerCreationModal.test.tsx new file mode 100644 index 0000000000..750ebdb423 --- /dev/null +++ b/Composer/packages/client/__tests__/components/triggerCreationModal.test.tsx @@ -0,0 +1,47 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import * as React from 'react'; +import { fireEvent, act, waitFor } from '@bfc/test-utils'; + +import { TriggerCreationModal } from '../../src/components/ProjectTree/TriggerCreationModal'; +import { renderWithRecoil } from '../testUtils'; + +describe('', () => { + const onSubmitMock = jest.fn(); + const onDismissMock = jest.fn(); + + function renderComponent() { + return renderWithRecoil( + + ); + } + + it('should render the component', () => { + const component = renderComponent(); + expect(component.container).toBeDefined(); + }); + + it('hould create a Luis Intent recognized', async () => { + const component = renderComponent(); + const triggerType = component.getByTestId('triggerTypeDropDown'); + fireEvent.click(triggerType); + + const luisOption = component.getByTitle('Intent recognized'); + fireEvent.click(luisOption); + const node = await waitFor(() => component.getByTestId('triggerFormSubmit')); + expect(node).toBeDisabled(); + }); + + it('should create a QnA Intent recognized', async () => { + const component = renderComponent(); + const triggerType = component.getByTestId('triggerTypeDropDown'); + fireEvent.click(triggerType); + + const qnaOption = component.getByTitle('QnA Intent recognized'); + fireEvent.click(qnaOption); + + const node = await waitFor(() => component.getByTestId('triggerFormSubmit')); + expect(node).toBeEnabled(); + }); +}); From 112d636693161602f2ca098954b36ee3cc301fa7 Mon Sep 17 00:00:00 2001 From: zhixzhan Date: Wed, 19 Aug 2020 19:04:08 +0800 Subject: [PATCH 2/2] triggerApi test --- .../__tests__/shell/triggerApi.test.tsx | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 Composer/packages/client/__tests__/shell/triggerApi.test.tsx diff --git a/Composer/packages/client/__tests__/shell/triggerApi.test.tsx b/Composer/packages/client/__tests__/shell/triggerApi.test.tsx new file mode 100644 index 0000000000..d1739b945f --- /dev/null +++ b/Composer/packages/client/__tests__/shell/triggerApi.test.tsx @@ -0,0 +1,97 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +import { renderHook } from '@bfc/test-utils/lib/hooks'; +import * as React from 'react'; +import { RecoilRoot } from 'recoil'; + +import { useTriggerApi } from '../../src/shell/triggerApi'; +import { + projectIdState, + localeState, + luFilesState, + lgFilesState, + dialogsState, + schemasState, + dispatcherState, +} from '../../src/recoilModel'; +import { Dispatcher } from '../../src/recoilModel/dispatchers'; + +const state = { + dialogs: [ + { + id: 'test', + content: {}, + }, + ], + luFiles: [ + { + content: 'test', + id: 'test.en-us', + intents: [], + }, + ], + lgFiles: [ + { + content: 'test', + id: 'test.en-us', + templates: [], + }, + ], + schemas: { sdk: { content: {} } }, + focusPath: '', + locale: 'en-us', + projectId: 'test', +}; + +describe('use triggerApi hooks', () => { + let selectToMock, updateDialogMock, createLgTemplatesMock, createLuIntentMock, result; + beforeEach(() => { + selectToMock = jest.fn(); + updateDialogMock = jest.fn(); + createLgTemplatesMock = jest.fn(); + createLuIntentMock = jest.fn(); + + const initRecoilState = ({ set }) => { + set(projectIdState, state.projectId); + set(localeState, 'en-us'); + set(luFilesState, state.luFiles); + set(lgFilesState, state.lgFiles); + set(dialogsState, state.dialogs); + set(schemasState, state.schemas); + set(dispatcherState, (current: Dispatcher) => ({ + ...current, + selectTo: selectToMock, + updateDialog: updateDialogMock, + createLgTemplates: createLgTemplatesMock, + createLuIntent: createLuIntentMock, + })); + }; + + const wrapper = (props: { children?: React.ReactNode }) => { + const { children } = props; + return {children}; + }; + const rendered = renderHook(() => useTriggerApi(), { + wrapper, + }); + result = rendered.result; + }); + + it('should create QnA trigger', async () => { + const dialogId = 'test'; + const formData = { + $kind: 'Microsoft.OnQnAMatch', + errors: { $kind: '', intent: '', event: '', triggerPhrases: '', regEx: '', activity: '' }, + event: '', + intent: '', + regEx: '', + triggerPhrases: '', + }; + await result.current.createTrigger(dialogId, formData); + expect(createLgTemplatesMock).toBeCalledTimes(1); + expect(updateDialogMock).toBeCalledTimes(1); + expect(createLgTemplatesMock).toBeCalledTimes(1); + expect(updateDialogMock).toBeCalledTimes(1); + }); +});