add tests for array/string survey multi-select

This commit is contained in:
Keith J. Grant 2022-04-12 10:08:20 -07:00
parent a324753180
commit f4b0bd68bd
3 changed files with 171 additions and 16 deletions

View File

@ -27,9 +27,6 @@ export default function SurveyQuestionAdd({ survey, updateSurvey }) {
let defaultAnswers = '';
formData.formattedChoices.forEach(({ choice, isDefault }, i) => {
choices.push(choice);
// i === formData.formattedChoices.length - 1
// ? choices.concat(`${choice}`)
// : choices.concat(`${choice}\n`);
if (isDefault) {
defaultAnswers =
i === formData.formattedChoices.length - 1

View File

@ -41,18 +41,16 @@ describe('<SurveyQuestionEdit />', () => {
],
});
updateSurvey = jest.fn();
act(() => {
wrapper = mountWithContexts(
<Switch>
<Route path="/templates/:templateType/:id/survey/edit">
<SurveyQuestionEdit survey={survey} updateSurvey={updateSurvey} />
</Route>
</Switch>,
{
context: { router: { history } },
}
);
});
wrapper = mountWithContexts(
<Switch>
<Route path="/templates/:templateType/:id/survey/edit">
<SurveyQuestionEdit survey={survey} updateSurvey={updateSurvey} />
</Route>
</Switch>,
{
context: { router: { history } },
}
);
});
test('should render form', () => {
@ -147,4 +145,164 @@ describe('<SurveyQuestionEdit />', () => {
);
});
});
test('should handle multiplechoice as array', () => {
const survey = {
spec: [
{
question_name: 'What is the foo?',
question_description: 'more about the foo',
variable: 'foo',
required: true,
type: 'multiplechoice',
choices: ['one', 'two', 'three'],
default: '',
min: 0,
max: 1024,
},
],
};
history = createMemoryHistory({
initialEntries: [
'/templates/job_templates/1/survey/edit?question_variable=foo',
],
});
updateSurvey = jest.fn();
wrapper = mountWithContexts(
<Switch>
<Route path="/templates/:templateType/:id/survey/edit">
<SurveyQuestionEdit survey={survey} updateSurvey={updateSurvey} />
</Route>
</Switch>,
{
context: { router: { history } },
}
);
const inputs = wrapper.find('MultipleChoiceField TextInput');
expect(inputs).toHaveLength(3);
expect(inputs.at(0).prop('value')).toEqual('one');
expect(inputs.at(1).prop('value')).toEqual('two');
expect(inputs.at(2).prop('value')).toEqual('three');
});
test('should handle multiplechoice as string', () => {
const survey = {
spec: [
{
question_name: 'What is the foo?',
question_description: 'more about the foo',
variable: 'foo',
required: true,
type: 'multiplechoice',
choices: 'one\ntwo\nthree',
default: '',
min: 0,
max: 1024,
},
],
};
history = createMemoryHistory({
initialEntries: [
'/templates/job_templates/1/survey/edit?question_variable=foo',
],
});
updateSurvey = jest.fn();
wrapper = mountWithContexts(
<Switch>
<Route path="/templates/:templateType/:id/survey/edit">
<SurveyQuestionEdit survey={survey} updateSurvey={updateSurvey} />
</Route>
</Switch>,
{
context: { router: { history } },
}
);
const inputs = wrapper.find('MultipleChoiceField TextInput');
expect(inputs).toHaveLength(3);
expect(inputs.at(0).prop('value')).toEqual('one');
expect(inputs.at(1).prop('value')).toEqual('two');
expect(inputs.at(2).prop('value')).toEqual('three');
});
test('should handle multiselect as array', () => {
const survey = {
spec: [
{
question_name: 'What is the foo?',
question_description: 'more about the foo',
variable: 'foo',
required: true,
type: 'multiselect',
choices: ['one', 'two', 'three'],
default: '',
min: 0,
max: 1024,
},
],
};
history = createMemoryHistory({
initialEntries: [
'/templates/job_templates/1/survey/edit?question_variable=foo',
],
});
updateSurvey = jest.fn();
wrapper = mountWithContexts(
<Switch>
<Route path="/templates/:templateType/:id/survey/edit">
<SurveyQuestionEdit survey={survey} updateSurvey={updateSurvey} />
</Route>
</Switch>,
{
context: { router: { history } },
}
);
const inputs = wrapper.find('MultipleChoiceField TextInput');
expect(inputs).toHaveLength(3);
expect(inputs.at(0).prop('value')).toEqual('one');
expect(inputs.at(1).prop('value')).toEqual('two');
expect(inputs.at(2).prop('value')).toEqual('three');
});
test('should handle multiselect as string', () => {
const survey = {
spec: [
{
question_name: 'What is the foo?',
question_description: 'more about the foo',
variable: 'foo',
required: true,
type: 'multiselect',
choices: 'one\ntwo\nthree',
default: '',
min: 0,
max: 1024,
},
],
};
history = createMemoryHistory({
initialEntries: [
'/templates/job_templates/1/survey/edit?question_variable=foo',
],
});
updateSurvey = jest.fn();
wrapper = mountWithContexts(
<Switch>
<Route path="/templates/:templateType/:id/survey/edit">
<SurveyQuestionEdit survey={survey} updateSurvey={updateSurvey} />
</Route>
</Switch>,
{
context: { router: { history } },
}
);
const inputs = wrapper.find('MultipleChoiceField TextInput');
expect(inputs).toHaveLength(3);
expect(inputs.at(0).prop('value')).toEqual('one');
expect(inputs.at(1).prop('value')).toEqual('two');
expect(inputs.at(2).prop('value')).toEqual('three');
});
});

View File

@ -117,7 +117,7 @@ function SurveyReorderModal({
let component = null;
const choices = Array.isArray(q.choices)
? q.choices
: q.choices.split('\n');
: (q.choices || '').split('\n');
switch (q.type) {
case 'password':
component = (