diff --git a/src/components/Answer/index.test.tsx b/src/components/Answer/index.test.tsx index 3a76e8e..724510c 100644 --- a/src/components/Answer/index.test.tsx +++ b/src/components/Answer/index.test.tsx @@ -2,175 +2,111 @@ import React from 'react'; import { render, screen } from '@testing-library/react'; -import { Question } from 'types/question'; +import { appSliderDataTestIds } from 'components/AppSlider'; +import { dropdownDataTestIds } from 'components/Dropdown'; +import { multiChoiceDataTestIds } from 'components/MultiChoice'; +import { multiInputsDataTestIds } from 'components/MultiInputs'; +import { npsDataTestIds } from 'components/Nps'; +import { ratingDataTestIds } from 'components/Rating'; +import { textAreaDataTestIds } from 'components/TextArea'; +import { questionFabricator } from 'tests/fabricator'; -import Answer from '.'; +import Answer, { answerDataTestIds } from '.'; describe('Answer', () => { describe('given the display type is star', () => { it('renders Rating component', () => { - const question: Question = { - id: 'id', - resourceType: 'question', - displayType: 'star', - answers: [], - }; - const dataTestId = 'answer'; - render(); + const question = questionFabricator(); - const star = screen.getByTestId(dataTestId); + render(); + + const star = screen.getByTestId(ratingDataTestIds.base); expect(star).toBeVisible(); - expect(star).toHaveAttribute('id', 'rating-id'); }); }); describe('given the display type is choice', () => { it('renders MultiChoice component', () => { - const question: Question = { - id: 'id', - resourceType: 'question', - displayType: 'choice', - answers: [], - }; - const dataTestId = 'answer'; - render(); + const question = questionFabricator({ displayType: 'choice' }); + + render(); - const multiChoice = screen.getByTestId(dataTestId); + const multiChoice = screen.getByTestId(multiChoiceDataTestIds.base); expect(multiChoice).toBeVisible(); - expect(multiChoice).toHaveAttribute('id', 'multi-choice-id'); }); }); describe('given the display type is nps', () => { it('renders Nps component', () => { - const question: Question = { - id: 'id', - resourceType: 'question', - displayType: 'nps', - answers: [], - }; - const dataTestId = 'answer'; - render(); + const question = questionFabricator({ displayType: 'nps' }); - const nps = screen.getByTestId(dataTestId); + render(); + + const nps = screen.getByTestId(npsDataTestIds.base); expect(nps).toBeVisible(); - expect(nps).toHaveAttribute('id', 'nps-id'); }); }); describe('given the display type is textarea', () => { it('renders TextArea component', () => { - const question: Question = { - id: 'id', - resourceType: 'question', - displayType: 'textarea', - answers: [ - { - id: 'id', - resourceType: 'answer', - text: '', - }, - ], - }; - const dataTestId = 'answer'; - render(); - - const textArea = screen.getByTestId(dataTestId); + const question = questionFabricator({ displayType: 'textarea' }); + + render(); + + const textArea = screen.getByTestId(textAreaDataTestIds.base); expect(textArea).toBeVisible(); - expect(textArea).toHaveAttribute('id', 'text-area-id'); }); }); describe('given the display type is textfield', () => { it('renders MultiInputs component', () => { - const question: Question = { - id: 'id', - resourceType: 'question', - displayType: 'textfield', - answers: [ - { - id: 'id', - resourceType: 'answer', - text: '', - }, - ], - }; - const dataTestId = 'answer'; - render(); - - const multiInputs = screen.getByTestId(dataTestId); + const question = questionFabricator({ displayType: 'textfield' }); + + render(); + + const multiInputs = screen.getByTestId(multiInputsDataTestIds.base); expect(multiInputs).toBeVisible(); - expect(multiInputs).toHaveAttribute('id', 'multi-inputs-id'); }); }); describe('given the display type is dropdown', () => { it('renders Dropdown component', () => { - const question: Question = { - id: 'id', - resourceType: 'question', - displayType: 'dropdown', - answers: [ - { - id: 'id', - resourceType: 'answer', - text: '', - }, - ], - }; - const dataTestId = 'answer'; - render(); - - const dropdown = screen.getByTestId(dataTestId); + const question = questionFabricator({ displayType: 'dropdown' }); + + render(); + + const dropdown = screen.getByTestId(dropdownDataTestIds.base); expect(dropdown).toBeVisible(); - expect(dropdown).toHaveAttribute('id', 'dropdown-id'); }); }); describe('given the display type is slider', () => { it('renders Dropdown component', () => { - const question: Question = { - id: 'id', - resourceType: 'question', - displayType: 'slider', - answers: [ - { - id: 'id', - resourceType: 'answer', - text: '', - }, - ], - }; - const dataTestId = 'answer'; - render(); - - const slider = screen.getByTestId(dataTestId); + const question = questionFabricator({ displayType: 'slider' }); + + render(); + + const slider = screen.getByTestId(appSliderDataTestIds.base); expect(slider).toBeVisible(); - expect(slider).toHaveAttribute('id', 'slider-id'); }); }); describe('given the display type is intro', () => { - it('renders Dropdown component', () => { - const question: Question = { - id: 'id', - resourceType: 'question', - displayType: 'intro', - answers: [], - }; - const dataTestId = 'answer'; - render(); - - const intro = screen.getByTestId(dataTestId); - - expect(intro).toBeVisible(); + it('does NOT render any components', () => { + const question = questionFabricator({ displayType: 'intro' }); + + render(); + + const intro = screen.getByTestId(answerDataTestIds.base); + + expect(intro).toBeEmptyDOMElement(); }); }); }); diff --git a/src/components/Answer/index.tsx b/src/components/Answer/index.tsx index 880127c..16baa15 100644 --- a/src/components/Answer/index.tsx +++ b/src/components/Answer/index.tsx @@ -9,83 +9,94 @@ import Rating from 'components/Rating'; import TextArea from 'components/TextArea'; import { DisplayType, Question, getDisplayTypeEnum } from 'types/question'; +export const answerDataTestIds = { + base: 'answer__base', +}; + interface AnswerProps { question: Question; - 'data-test-id'?: string; } -const Answer = ({ question, ...rest }: AnswerProps): JSX.Element => { +const Answer = ({ question }: AnswerProps): JSX.Element => { const displayTypeEnum = getDisplayTypeEnum(question); - switch (displayTypeEnum) { - case DisplayType.Heart: - case DisplayType.Smiley: - case DisplayType.Thumbs: - case DisplayType.Star: - return ( - { - // TODO - }} - /> - ); - case DisplayType.Choice: - return ( - { - // TODO - }} - /> - ); - case DisplayType.Nps: - return ( - { - // TODO - }} - /> - ); - case DisplayType.Textarea: - return ( -