diff --git a/awx/ui/src/screens/Template/Survey/SurveyQuestionAdd.js b/awx/ui/src/screens/Template/Survey/SurveyQuestionAdd.js index 5e5e594514..753439b3de 100644 --- a/awx/ui/src/screens/Template/Survey/SurveyQuestionAdd.js +++ b/awx/ui/src/screens/Template/Survey/SurveyQuestionAdd.js @@ -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 diff --git a/awx/ui/src/screens/Template/Survey/SurveyQuestionEdit.test.js b/awx/ui/src/screens/Template/Survey/SurveyQuestionEdit.test.js index ab7ea59d55..11d6db38c7 100644 --- a/awx/ui/src/screens/Template/Survey/SurveyQuestionEdit.test.js +++ b/awx/ui/src/screens/Template/Survey/SurveyQuestionEdit.test.js @@ -41,18 +41,16 @@ describe('', () => { ], }); updateSurvey = jest.fn(); - act(() => { - wrapper = mountWithContexts( - - - - - , - { - context: { router: { history } }, - } - ); - }); + wrapper = mountWithContexts( + + + + + , + { + context: { router: { history } }, + } + ); }); test('should render form', () => { @@ -147,4 +145,164 @@ describe('', () => { ); }); }); + + 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( + + + + + , + { + 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( + + + + + , + { + 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( + + + + + , + { + 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( + + + + + , + { + 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'); + }); }); diff --git a/awx/ui/src/screens/Template/Survey/SurveyReorderModal.js b/awx/ui/src/screens/Template/Survey/SurveyReorderModal.js index 1707644962..0415a60c8a 100644 --- a/awx/ui/src/screens/Template/Survey/SurveyReorderModal.js +++ b/awx/ui/src/screens/Template/Survey/SurveyReorderModal.js @@ -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 = (