def test_create_csv_generates_csv_from_form_data(self):
     form = mommy.make(Form, number=1, version=1, name='Form 1')
     mommy.make(FormField, form=form, kind='info')
     field1 = mommy.make(FormField, form=form, kind='short-answer',
                         details={'question': 'What is the short answer?'})
     field2 = mommy.make(FormField, form=form, kind='long-answer',
                         details={'question': 'What is the long answer?'})
     field3 = mommy.make(FormField, form=form, kind='single-choice',
                         details={'question': 'Which answer is correct?',
                                  'choices': [{'label': 'A'},
                                              {'label': 'B'},
                                              {'label': 'C'}]})
     field4 = mommy.make(FormField, form=form, kind='multiple-choice',
                         details={'question': 'Which answers are correct?',
                                  'choices': [{'label': 'A'},
                                              {'label': 'B'},
                                              {'label': 'C'}]})
     field5 = mommy.make(FormField, form=form, kind='address',
                         details={'question': 'What is your address?'})
     response = mommy.make(FormResponse, form=form)
     mommy.make(FormFieldResponse, form_response=response,
                form_field=field1, details={'answer': 'a'})
     mommy.make(FormFieldResponse, form_response=response,
                form_field=field2, details={'answer': 'b'})
     mommy.make(FormFieldResponse, form_response=response,
                form_field=field3, details={'answer': 'C'})
     mommy.make(
         FormFieldResponse, form_response=response, form_field=field4,
         details={'answers': [{'label': 'A', 'selected': False},
                              {'label': 'B', 'selected': True},
                              {'label': 'C', 'selected': True}]}
     )
     mommy.make(
         FormFieldResponse, form_response=response, form_field=field5,
         details={'addressLine1': 'line1', 'addressLine2': 'line2',
                  'city': 'c', 'state': 's', 'zip': 'z'}
     )
     out = HttpResponse(content_type='text/csv')
     form_responses_csv_service.create_csv(form, out)
     rows = list(csv.reader(StringIO(out.content)))
     self.assertEqual(len(rows), 2)
     self.assertEqual(len(rows[0]), 7)
     self.assertEqual(len(rows[1]), 7)
     self.assertIn('---', rows[1][0])
     self.assertIn(str(response.created.year), rows[1][1])
     self.assertIn('a', rows[1][2])
     self.assertIn('b', rows[1][3])
     self.assertIn('C', rows[1][4])
     self.assertIn('B', rows[1][5])
     self.assertNotIn('A', rows[1][5])
     self.assertIn('B', rows[1][5])
     self.assertIn('line1', rows[1][6])
示例#2
0
def form_with_responses_csv(request, number, version):
    form = forms_service.form_with_responses(number, version)
    response = HttpResponse(content_type='text/csv')
    response['Content-Disposition'] = 'attachment; filename=responses.csv'
    form_responses_csv_service.create_csv(form, response)
    return response