Beispiel #1
0
    def setUp(self):
        self.data = [['RegionName', 'DistrictName', 'CountyName'],
                     ['region1', 'district1', 'county1'],
                     ['region2', 'district2', 'county2']]

        self.write_to_csv('wb', self.data)
        self.filename = 'test.csv'
        file = open(self.filename, 'rb')
        self.uploader = UploadLocation(file)
        self.region = LocationType.objects.create(name='Region', slug='region')
        self.district = LocationType.objects.create(name='District',
                                                    slug='district',
                                                    parent=self.region)
        self.county = LocationType.objects.create(name='County',
                                                  slug='county',
                                                  parent=self.district)
        LocationTypeDetails.objects.create(location_type=self.region,
                                           required=True,
                                           has_code=False)
        LocationTypeDetails.objects.create(location_type=self.district,
                                           required=True,
                                           has_code=False)
        LocationTypeDetails.objects.create(location_type=self.county,
                                           required=True,
                                           has_code=False)
Beispiel #2
0
    def test_create_code(self):
        district = LocationTypeDetails.objects.get(location_type=self.district,
                                                   required=True)
        district.has_code = True
        district.length_of_code = 3
        district.save()

        data = [['RegionName', 'DistrictCode', 'DistrictName', 'CountyName'],
                ['region1', '001', 'district1', 'county1'],
                ['region2', '003', 'district2', 'county2']]

        self.write_to_csv('wb', data)
        file = open('test.csv', 'rb')
        uploader = UploadLocation(file)

        uploader.upload()
        types = uploader.remove_trailing('Name', data[0], exclude='Code')
        data_locations = data[1:]
        codes = [locations.pop(1) for locations in data_locations]
        for locations in data_locations:
            [
                self.failUnless(
                    Location.objects.filter(
                        name=location_name,
                        type__name__iexact=types[index].lower()))
                for index, location_name in enumerate(locations)
            ]

        [
            self.failUnless(LocationCode.objects.filter(code=code))
            for code in codes
        ]
Beispiel #3
0
    def test_should_log_error_if_length_of_code_is_not_matched(self):
        district = LocationTypeDetails.objects.get(location_type=self.district,
                                                   required=True)
        district.has_code = True
        district.length_of_code = 3
        district.save()

        some_code_with_length_less_than_3 = '02'
        data = [['RegionName', 'DistrictCode', 'DistrictName', 'CountyName'],
                ['region1', '001', 'district1', 'county1'],
                [
                    'region2', some_code_with_length_less_than_3, 'district2',
                    'county2'
                ]]

        self.write_to_csv('wb', data)
        file = open('test.csv', 'rb')
        uploader = UploadLocation(file)

        uploader.upload()
        error_log = UploadErrorLog.objects.filter(model=self.uploader.MODEL,
                                                  filename=self.filename)
        self.assertEqual(1, error_log.count())
        self.failUnless(
            error_log.filter(
                row_number=3,
                error=
                'DistrictCode is shorter or longer than the required 3 digits.'
            ))
Beispiel #4
0
 def test_should_log_error_if_a_required_location_type_is_left_blank(self):
     missing_fields_data = [['region3', '', 'county3']]
     self.write_to_csv('ab', missing_fields_data)
     file = open('test.csv', 'rb')
     self.uploader = UploadLocation(file)
     self.uploader.upload()
     error_log = UploadErrorLog.objects.filter(model=self.uploader.MODEL,
                                               filename=self.filename)
     self.assertEqual(1, error_log.count())
     self.failUnless(
         error_log.filter(
             row_number=4,
             error='Missing data: DistrictName should not be empty.'))
Beispiel #5
0
    def test_not_csv_file(self):
        Location.objects.all().delete()
        LocationCode.objects.all().delete()
        self.filename = 'not_csv.xls'
        self.generate_non_csv_file(self.filename)
        file = open(self.filename, 'rb')
        uploader = UploadLocation(file)

        uploader.upload()
        error_log = UploadErrorLog.objects.filter(model=self.uploader.MODEL,
                                                  filename=self.filename)
        self.failUnless(
            error_log.filter(
                error='Locations not uploaded. %s is not a valid csv file.' %
                self.filename))
        self.failIf(Location.objects.all())
        self.failIf(LocationCode.objects.all())