@instructure/quiz-interactions
Version:
A React UI component Library for quiz interaction types.
120 lines (110 loc) • 3.98 kB
JavaScript
import React from 'react'
import {accessible, expect, mount, within} from '@instructure/ui-test-utils'
import EssayResult from '../index'
const merge = (objA, objB) => {
return Object.assign({}, objA, objB)
}
const interactionData = {
rce: false,
spellCheck: true,
wordCount: true,
wordLimitEnabled: true,
wordLimitMax: 10,
wordLimitMin: 1,
}
describe('Essay Result', async () => {
describe('rendering', async () => {
it('renders basic content with notes', async () => {
const subject = await mount(
<EssayResult
interactionData={interactionData}
itemBody="This is an essay question:"
scoringData={{value: 'grading notes'}}
scoredData={{gradeStatus: 'graded', value: '& an essay by me'}}
/>,
)
const essay = within(subject.getDOMNode())
expect(essay).to.exist()
expect(await essay.find(':textContent(& an essay by me)')).to.exist()
expect(await essay.find(':textContent(Grading Notes)')).to.exist()
})
it('renders rich content with no notes', async () => {
const subject = await mount(
<EssayResult
interactionData={merge(interactionData, {rce: true})}
itemBody="This is an essay question:"
scoredData={{gradeStatus: 'graded', value: '& an essay <b>by</b> <i>me</i>'}}
/>,
)
const essay = within(subject.getDOMNode())
expect(essay).to.exist()
const essayBody = await essay.find(':textContent(& an essay by me)', {exact: false})
expect(essayBody).to.exist()
expect(await essay.find(':textContent(Grading Notes)', {expectEmpty: true})).to.not.exist()
})
it('renders when response is missing', async () => {
const subject = await mount(
<EssayResult
interactionData={merge(interactionData, {rce: true})}
itemBody="This is an essay question:"
scoredData={{gradeStatus: 'correct'}}
/>,
)
const essay = within(subject.getDOMNode())
expect(essay).to.exist()
expect(await essay.find(':textContent((response not displayed))')).to.exist()
})
it('renders when response is empty', async () => {
const subject = await mount(
<EssayResult
interactionData={merge(interactionData, {rce: true})}
itemBody="This is an essay question:"
scoredData={{gradeStatus: 'waiting', value: ''}}
/>,
)
const essay = within(subject.getDOMNode())
expect(essay).to.exist()
expect(await essay.find(':textContent((no answer))')).to.exist()
})
})
describe('getGradeStatus', async () => {
it('uses the scoredData value', async () => {
let essayRef
await mount(
<EssayResult
componentRef={ref => (essayRef = ref)}
interactionData={interactionData}
itemBody="This is an essay question:"
scoredData={{gradeStatus: 'graded'}}
/>,
)
expect(essayRef.getGradeStatus()).to.equal('graded')
})
it('uses itemResultsModifications if provided', async () => {
let essayRef
await mount(
<EssayResult
componentRef={ref => (essayRef = ref)}
interactionData={interactionData}
itemBody="This is an essay question:"
scoredData={{gradeStatus: 'incorrect'}}
itemResultsModifications={{scoredData: {gradeStatus: 'correct'}}}
/>,
)
expect(essayRef.getGradeStatus()).to.equal('correct')
})
})
describe('a11y tests', async () => {
it('should meet a11y standards', async () => {
await mount(
<EssayResult
interactionData={interactionData}
itemBody="This is an essay question:"
scoringData={{value: 'grading notes'}}
scoredData={{gradeStatus: 'graded', value: 'an essay by me'}}
/>,
)
expect(await accessible(document.body, {ignores: ['region']})).to.be.true()
})
})
})