Example #1
0
    def setUp(self):
        self.data = [[
            'Regiontype', 'Districttype', 'Counttype', 'EA', 'Parishtype', 'EA'
        ],
                     [
                         'region1', 'district1', 'county1',
                         'ea_containing_parish', 'parish_1', ''
                     ],
                     [
                         'region1', 'district1', 'county1',
                         'ea_containing_parish', 'parish_1b', ''
                     ],
                     [
                         'region2', 'district2', 'county2', '', 'parish2',
                         'ea_under_parish'
                     ],
                     [
                         'region2', 'district2', 'county2', '', 'parish2',
                         'ea_under_parish'
                     ]]

        self.write_to_csv('wb', self.data)
        self.filename = 'test.csv'
        _file = open(self.filename, 'rb')
        self.uploader = UploadEA(_file)
        self.survey = Survey.objects.create(name="Survey A")
Example #2
0
    def test_should_return_false__and_message_if_location_is_blank(self):
        EMPTY_PARISH_NAME = ''
        data = [[
            'Regiontype', 'Districttype', 'Counttype', 'EA', 'Parishtype', 'EA'
        ],
                [
                    'region1', 'district1', 'county1', 'ea_containing_parish',
                    EMPTY_PARISH_NAME, ''
                ]]
        self.write_to_csv('wb', data)
        _file = open(self.filename, 'rb')

        rtype = LocationType.objects.create(name="Region", slug="region")
        region = Location.objects.create(name="region1", type=rtype)
        dtype = LocationType.objects.create(name="District",
                                            slug="district",
                                            parent=rtype)
        district = Location.objects.create(name="district1",
                                           parent=region,
                                           type=dtype)
        ctype = LocationType.objects.create(name="County",
                                            slug="county",
                                            parent=dtype)
        Location.objects.create(name="county1", parent=district, type=ctype)

        uploader = UploadEA(_file)
        uploader.upload(self.survey)
        error_log = UploadErrorLog.objects.filter(model=self.uploader.MODEL,
                                                  filename=self.filename)
        self.assertEqual(1, error_log.count())
        self.assertEqual(1, error_log[0].row_number)
        self.assertEqual('There is no parishtype with name: , in county1.',
                         error_log[0].error)
Example #3
0
    def test_should_return_false__and_message_if_no_EA_is_provided(self):
        EMPTY_EA_NAME = ''
        data = [[
            'Regiontype', 'Districttype', 'Counttype', 'EA', 'Parishtype', 'EA'
        ], ['region1', 'district1', 'county1', '', 'parish_1', EMPTY_EA_NAME]]
        self.write_to_csv('wb', data)
        _file = open(self.filename, 'rb')

        rtype1 = LocationType.objects.create(name="Region1", slug="region")
        region = Location.objects.create(name="r1", type=rtype1)
        dtype1 = LocationType.objects.create(name="District",
                                             slug="district",
                                             parent=rtype1)
        district = Location.objects.create(name="district1",
                                           parent=region,
                                           type=dtype1)
        ctype1 = LocationType.objects.create(name="County",
                                             slug="county",
                                             parent=dtype1)
        county = Location.objects.create(name="county1",
                                         parent=district,
                                         type=ctype1)
        ptype1 = LocationType.objects.create(name="Parish",
                                             slug="parish",
                                             parent=ctype1)
        l = Location.objects.create(name="parish_1",
                                    parent=county,
                                    type=ptype1)
        uploader = UploadEA(_file)

        uploader.upload(self.survey)
        error_log = UploadErrorLog.objects.filter(model=self.uploader.MODEL,
                                                  filename=self.filename)
        self.assertEqual(1, error_log.count())
        self.assertEqual(1, error_log[0].row_number)
Example #4
0
    def test_not_csv_file(self):
        EnumerationArea.objects.all().delete()
        self.filename = 'not_csv.xls'
        self.generate_non_csv_file(self.filename)
        file = open(self.filename,'rb')
        uploader = UploadEA(file)

        uploader.upload(self.survey)
        error_log = UploadErrorLog.objects.filter(model=self.uploader.MODEL, filename=self.filename)
        self.failUnless(error_log.filter(error='Enumeration Areas not uploaded. %s is not a valid csv file.' % self.filename))
        self.failIf(EnumerationArea.objects.all())
Example #5
0
    def test_should_return_false__and_message_if_location_is_blank(self):
        EMPTY_PARISH_NAME = ''
        data = [
                ['Regiontype', 'Districttype', 'Counttype', 'EA',                   'Parishtype', 'EA'],
                ['region1',    'district1',    'county1',   'ea_containing_parish', EMPTY_PARISH_NAME,   '']]
        self.write_to_csv('wb', data)
        _file = open(self.filename, 'rb')

        region = Location.objects.create(name="region1")
        district = Location.objects.create(name="district1", tree_parent=region)
        Location.objects.create(name="county1", tree_parent=district)

        uploader = UploadEA(_file)
        uploader.upload(self.survey)
        error_log = UploadErrorLog.objects.filter(model=self.uploader.MODEL, filename=self.filename)
        self.assertEqual(1, error_log.count())
        self.assertEqual(1, error_log[0].row_number)
        self.assertEqual('There is no parishtype with name: , in county1.', error_log[0].error)
Example #6
0
    def test_should_return_false__and_message_if_no_EA_is_provided(self):
        EMPTY_EA_NAME = ''
        data = [
                ['Regiontype', 'Districttype', 'Counttype', 'EA', 'Parishtype', 'EA'],
                ['region1',    'district1',    'county1',   '',   'parish_1',   EMPTY_EA_NAME]]
        self.write_to_csv('wb', data)
        _file = open(self.filename, 'rb')

        region = Location.objects.create(name="region1")
        district = Location.objects.create(name="district1", tree_parent=region)
        county = Location.objects.create(name="county1", tree_parent=district)
        Location.objects.create(name="parish_1", tree_parent=county)

        uploader = UploadEA(_file)

        uploader.upload(self.survey)
        error_log = UploadErrorLog.objects.filter(model=self.uploader.MODEL, filename=self.filename)
        self.assertEqual(1, error_log.count())
        self.assertEqual(1, error_log[0].row_number)
        self.assertEqual('Enumeration Area name required.', error_log[0].error)
Example #7
0
    def test_should_return_true__and_success_message_if_valid_csv_provided(self):
        data = [
                ['Regiontype', 'Districttype', 'Counttype', 'EA',  'Parishtype', 'EA'],
                ['region1',    'district1',    'county1',   '',     'parish_1',   'ea_under_parish']]
        self.write_to_csv('wb', data)
        _file = open(self.filename, 'rb')

        region = Location.objects.create(name="region1")
        district = Location.objects.create(name="district1", tree_parent=region)
        county = Location.objects.create(name="county1", tree_parent=district)
        parish = Location.objects.create(name="parish_1", tree_parent=county)

        uploader = UploadEA(_file)

        uploader.upload(self.survey)
        error_log = UploadErrorLog.objects.filter(model=self.uploader.MODEL, filename=self.filename)
        self.failIf(error_log)

        retrieved_ea = EnumerationArea.objects.filter(name=data[1][-1], survey=self.survey)
        self.failUnless(retrieved_ea)
        self.assertIn(parish, retrieved_ea[0].locations.all())
Example #8
0
    def setUp(self):
        self.data = [
                ['Regiontype', 'Districttype', 'Counttype', 'EA',                   'Parishtype', 'EA'],
                ['region1',    'district1',    'county1',   'ea_containing_parish', 'parish_1',   ''],
                ['region1',    'district1',    'county1',   'ea_containing_parish', 'parish_1b',  ''],
                ['region2',    'district2',    'county2',   '',                     'parish2',    'ea_under_parish'],
                ['region2',    'district2',    'county2',   '',                     'parish2',    'ea_under_parish']]

        self.write_to_csv('wb', self.data)
        self.filename = 'test.csv'
        _file = open(self.filename, 'rb')
        self.uploader = UploadEA(_file)
        self.survey = Survey.objects.create(name="Survey A")
Example #9
0
class EAUploadTest(BaseTest):
    def setUp(self):
        self.data = [
                ['Regiontype', 'Districttype', 'Counttype', 'EA',                   'Parishtype', 'EA'],
                ['region1',    'district1',    'county1',   'ea_containing_parish', 'parish_1',   ''],
                ['region1',    'district1',    'county1',   'ea_containing_parish', 'parish_1b',  ''],
                ['region2',    'district2',    'county2',   '',                     'parish2',    'ea_under_parish'],
                ['region2',    'district2',    'county2',   '',                     'parish2',    'ea_under_parish']]

        self.write_to_csv('wb', self.data)
        self.filename = 'test.csv'
        _file = open(self.filename, 'rb')
        self.uploader = UploadEA(_file)
        self.survey = Survey.objects.create(name="Survey A")

    def tearDown(self):
        os.system("rm -rf %s" % self.filename)

    def test_should_return_false__and_message_if_location_not_found(self):
        Location.objects.all().delete()
        self.uploader.upload(self.survey)
        error_log = UploadErrorLog.objects.filter(model=self.uploader.MODEL, filename=self.filename)
        self.assertEqual(4, error_log.count())
        self.failUnless(error_log.filter(row_number=1,
                                         error='There is no parishtype with name: parish_1, in county1.'))
        self.failUnless(error_log.filter(row_number=2,
                                         error='There is no parishtype with name: parish_1b, in county1.'))
        self.failUnless(error_log.filter(row_number=3,
                                         error='There is no parishtype with name: parish2, in county2.'))
        self.failUnless(error_log.filter(row_number=4,
                                         error='There is no parishtype with name: parish2, in county2.'))

    def test_should_return_false__and_message_if_location_is_blank(self):
        EMPTY_PARISH_NAME = ''
        data = [
                ['Regiontype', 'Districttype', 'Counttype', 'EA',                   'Parishtype', 'EA'],
                ['region1',    'district1',    'county1',   'ea_containing_parish', EMPTY_PARISH_NAME,   '']]
        self.write_to_csv('wb', data)
        _file = open(self.filename, 'rb')

        region = Location.objects.create(name="region1")
        district = Location.objects.create(name="district1", tree_parent=region)
        Location.objects.create(name="county1", tree_parent=district)

        uploader = UploadEA(_file)
        uploader.upload(self.survey)
        error_log = UploadErrorLog.objects.filter(model=self.uploader.MODEL, filename=self.filename)
        self.assertEqual(1, error_log.count())
        self.assertEqual(1, error_log[0].row_number)
        self.assertEqual('There is no parishtype with name: , in county1.', error_log[0].error)

    def test_should_return_false__and_message_if_location_tree_parent_does_not_match_one_provided(self):
        region = Location.objects.create(name="region name not matching the one in first row of file")
        district = Location.objects.create(name="district1", tree_parent=region)
        county = Location.objects.create(name="county1", tree_parent=district)
        l = Location.objects.create(name="parish_1", tree_parent=county)
        self.uploader.upload(self.survey)
        error_log = UploadErrorLog.objects.filter(model=self.uploader.MODEL, filename=self.filename)
        self.assertEqual(4, error_log.count())
        self.assertEqual('The location hierarchy region1 >> district1 >> county1 >> parish_1 does not exist.', error_log.get(row_number=1).error)

    def test_should_return_false__and_message_if_no_EA_is_provided(self):
        EMPTY_EA_NAME = ''
        data = [
                ['Regiontype', 'Districttype', 'Counttype', 'EA', 'Parishtype', 'EA'],
                ['region1',    'district1',    'county1',   '',   'parish_1',   EMPTY_EA_NAME]]
        self.write_to_csv('wb', data)
        _file = open(self.filename, 'rb')

        region = Location.objects.create(name="region1")
        district = Location.objects.create(name="district1", tree_parent=region)
        county = Location.objects.create(name="county1", tree_parent=district)
        Location.objects.create(name="parish_1", tree_parent=county)

        uploader = UploadEA(_file)

        uploader.upload(self.survey)
        error_log = UploadErrorLog.objects.filter(model=self.uploader.MODEL, filename=self.filename)
        self.assertEqual(1, error_log.count())
        self.assertEqual(1, error_log[0].row_number)
        self.assertEqual('Enumeration Area name required.', error_log[0].error)

    def test_should_return_true__and_success_message_if_valid_csv_provided(self):
        data = [
                ['Regiontype', 'Districttype', 'Counttype', 'EA',  'Parishtype', 'EA'],
                ['region1',    'district1',    'county1',   '',     'parish_1',   'ea_under_parish']]
        self.write_to_csv('wb', data)
        _file = open(self.filename, 'rb')

        region = Location.objects.create(name="region1")
        district = Location.objects.create(name="district1", tree_parent=region)
        county = Location.objects.create(name="county1", tree_parent=district)
        parish = Location.objects.create(name="parish_1", tree_parent=county)

        uploader = UploadEA(_file)

        uploader.upload(self.survey)
        error_log = UploadErrorLog.objects.filter(model=self.uploader.MODEL, filename=self.filename)
        self.failIf(error_log)

        retrieved_ea = EnumerationArea.objects.filter(name=data[1][-1], survey=self.survey)
        self.failUnless(retrieved_ea)
        self.assertIn(parish, retrieved_ea[0].locations.all())

    def test_not_csv_file(self):
        EnumerationArea.objects.all().delete()
        self.filename = 'not_csv.xls'
        self.generate_non_csv_file(self.filename)
        file = open(self.filename,'rb')
        uploader = UploadEA(file)

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