Example #1
0
class CSVParserTests(unittest.TestCase):
    def setUp(self):
        self.parser = Parser()

    def test_find_operation_for_sqaure_field(self):
        days = ['mon', 'tue', 'wed']
        for day in days:
            result = self.parser.find_operation(day)
            self.assertEqual('square', result)

    def test_find_operation_for_double_field(self):
        days = ['thu', 'fri']
        for day in days:
            result = self.parser.find_operation(day)
            self.assertEqual('double', result)

    def test_find_operation_for_day_name_misspelled(self):
        self.assertRaises(ValueError, self.parser.find_operation, 'abcd1234')

    def test_parse_single_day_data(self):
        result = self.parser.parse_single_day_data('fifth_desc', 'thu', '4')
        expected_output = OrderedDict([('day', 'thu'),
                                       ('description', 'fifth_desc 8'),
                                       ('double', '8'), ('value', '4')])
        self.assertEqual(expected_output, result)

    def test_csv_reader_for_existing_file_name(self):
        file_name = "files/1.csv"
        self.assertIsInstance(self.parser.read_csv(file_name), object)

    def test_csv_reader_for_non_existing_file_name(self):
        file_name = "files/abc.csv"
        self.assertRaises(IOError, self.parser.read_csv, '../files/abc.csv')

    def test_parse_csv_for_multiple_days_with_processed_output(self):
        test_file = open('test.csv', 'w')
        test_file.write('description,tue-wed,thu-fri,mon,some_columnnth\n')
        test_file.write('nth_desc,12,1,2,data\n')
        test_file.close()
        file_obj, reader = self.parser.read_csv('test.csv')
        parsed_data = self.parser.parse_csv(reader)
        result = self.parser.process_output(parsed_data)
        expected_output = [OrderedDict([('day', 'mon'), ('description', 'nth_desc 4'), ('square', '4'), ('value', '2')]),\
                           OrderedDict([('day', 'tue'), ('description', 'nth_desc 144'), ('square', '144'), ('value', '12')]), \
                           OrderedDict([('day', 'wed'), ('description', 'nth_desc 144'), ('square', '144'), ('value', '12')]),\
                           OrderedDict([('day', 'thu'), ('description', 'nth_desc 2'), ('double', '2'), ('value', '1')]),\
                           OrderedDict([('day', 'fri'), ('description', 'nth_desc 2'), ('double', '2'), ('value', '1')])]
        os.remove('test.csv')
        self.assertEqual(result, json.dumps(expected_output))