コード例 #1
0
    def test_extra_select(self):
        csv_with_extra = SELECT(self.BASE_CSV, AS('id', 'ID'),
                                AS('name', "Person's name"), 'address',
                                AS('info', 'Info on Person'), 'hobby_id',
                                'born', 'Most Powerful')

        self.assertQuerySetBecomesCsv(self.qs, csv_with_extra)
コード例 #2
0
    def test_extra_select_header_map(self):
        csv_with_extra = SELECT(self.BASE_CSV, AS('id', 'ID'),
                                AS('name', "Person's name"), 'address',
                                AS('info', 'Info on Person'), 'hobby_id',
                                'born', AS('Most Powerful', 'Sturdiest'))

        self.assertQuerySetBecomesCsv(
            self.qs,
            csv_with_extra,
            field_header_map={'Most Powerful': 'Sturdiest'})
コード例 #3
0
    def test_extra_select_ordering(self):
        custom_order_csv = SELECT(self.BASE_CSV, AS('id',
                                                    'ID'), 'Most Powerful',
                                  AS('name', "Person's name"), 'address',
                                  AS('info', 'Info on Person'), 'hobby_id',
                                  'born')

        self.assertQuerySetBecomesCsv(self.qs,
                                      custom_order_csv,
                                      field_order=['id', 'Most Powerful'])
コード例 #4
0
    def test_write_csv_with_related_custom_headers(self):
        overridden_csv = SELECT(self.FULL_PERSON_CSV_WITH_RELATED,
                                'ID', "Person's name",
                                AS('hobby__name', 'Name of Activity'))
        qs = self.qs.values('id', 'name', 'hobby__name')

        self.assertQuerySetBecomesCsv(
            qs, overridden_csv,
            field_header_map={'hobby__name': 'Name of Activity'})
コード例 #5
0
    def test_write_csv_limited_custom_headers(self):
        overridden_info_csv = SELECT(self.LIMITED_PERSON_CSV,
                                     "Person's name", 'address',
                                     AS('Info on Person', 'INFORMATION'))
        qs = self.qs.values('name', 'address', 'info')

        self.assertQuerySetBecomesCsv(
            qs, overridden_info_csv,
            field_header_map={'info': 'INFORMATION'})
コード例 #6
0
    def test_write_csv_full_custom_headers(self):
        overridden_info_csv = SELECT(self.FULL_PERSON_CSV, 'ID',
                                     "Person's name", 'address',
                                     AS('Info on Person',
                                        'INFORMATION'), 'hobby_id', 'born')

        self.assertQuerySetBecomesCsv(self.qs,
                                      overridden_info_csv,
                                      field_header_map={'info': 'INFORMATION'})
コード例 #7
0
class CSVTestCase(TestCase):

    def setUp(self):
        self.qs = create_people_and_get_queryset()

    def csv_match(self, csv_file, expected_data, **csv_kwargs):
        assertion_results = []
        csv_data = csv.reader(csv_file, encoding='utf-8', **csv_kwargs)
        iteration_happened = False
        is_first = True
        test_pairs = list(zip_longest(csv_data, expected_data, fillvalue=[]))
        for csv_row, expected_row in test_pairs:
            if is_first:
                # add the BOM to the data
                expected_row = ([u'\ufeff' + expected_row[0]] +
                                expected_row[1:])
                is_first = False
            iteration_happened = True
            assertion_results.append(csv_row == expected_row)

        assertion_results.append(iteration_happened is True)

        return assertion_results

    def assertMatchesCsv(self, *args, **kwargs):
        assertion_results = self.csv_match(*args, **kwargs)
        self.assertTrue(all(assertion_results))

    def assertNotMatchesCsv(self, *args, **kwargs):
        assertion_results = self.csv_match(*args, **kwargs)
        self.assertFalse(all(assertion_results))

    def assertQuerySetBecomesCsv(self, qs, expected_data, **kwargs):
        obj = BytesIO()
        djqscsv.write_csv(qs, obj, **kwargs)
        csv_file = filter(None, obj.getvalue().splitlines())
        self.assertMatchesCsv(csv_file, expected_data)

    def assertEmptyQuerySetMatches(self, expected_data, **kwargs):
        qs = self.qs.none()
        obj = BytesIO()
        if DJANGO_VERSION[:2] == (1, 5):
            with self.assertRaises(djqscsv.CSVException):
                djqscsv.write_csv(qs, obj)
        else:
            djqscsv.write_csv(qs, obj,
                              **kwargs)
            self.assertEqual(obj.getvalue(), expected_data)

    # the csv data that is returned by the most inclusive query under test.
    # use this data structure to build smaller data sets
    BASE_CSV = [
        ['id', 'name', 'address',
         'info', 'hobby_id', 'born', 'hobby__name', 'Most Powerful'],
        ['1', 'vetch', 'iffish',
         'wizard', '1', '2001-01-01T01:01:00', 'Doing Magic', '0'],
        ['2', 'nemmerle', 'roke',
         'deceased arch mage', '2', '2001-01-01T01:01:00', 'Resting', '1'],
        ['3', 'ged', 'gont',
         'former arch mage', '2', '2001-01-01T01:01:00', 'Resting', '1']]

    FULL_PERSON_CSV_WITH_RELATED = SELECT(BASE_CSV,
                                          AS('id', 'ID'),
                                          AS('name', 'Person\'s name'),
                                          'address',
                                          AS('info', 'Info on Person'),
                                          'hobby_id',
                                          'born',
                                          'hobby__name')

    FULL_PERSON_CSV = EXCLUDE(FULL_PERSON_CSV_WITH_RELATED,
                              'hobby__name')

    FULL_PERSON_CSV_NO_VERBOSE = EXCLUDE(BASE_CSV,
                                         'hobby__name',
                                         'Most Powerful')

    LIMITED_PERSON_CSV = SELECT(FULL_PERSON_CSV,
                                'Person\'s name', 'address', 'Info on Person')

    LIMITED_PERSON_CSV_NO_VERBOSE = SELECT(BASE_CSV,
                                           'name', 'address', 'info')