def test_should_raise_exception_if_empty_field_in_header(self):
     csv_data = """
                             FORM_CODE,ID,    ,DIRECTOR,MEDS
                             CLF1,CL001,11,Dr. A1,201
                             CLF1,CL002,12,Dr. A2,202
                             CLF1,CL003,13,Dr. A3,203
                             CLF1,CL004,14,Dr. A4,204
                             CLF1,CL005,15,Dr. A5,205
     """
     csv_parser = CsvParser()
     with self.assertRaises(CSVParserInvalidHeaderFormatException):
         csv_parser.parse(csv_data)
 def test_should_raise_exception_if_empty_field_in_header(self):
     csv_data = """
                             FORM_CODE,ID,    ,DIRECTOR,MEDS
                             CLF1,CL001,11,Dr. A1,201
                             CLF1,CL002,12,Dr. A2,202
                             CLF1,CL003,13,Dr. A3,203
                             CLF1,CL004,14,Dr. A4,204
                             CLF1,CL005,15,Dr. A5,205
     """
     csv_parser = CsvParser()
     with self.assertRaises(CSVParserInvalidHeaderFormatException):
         csv_parser.parse(csv_data)
    def test_should_parse_csv_string_with_partial_values(self):
        csv_data = """FORM_CODE,ID,BEDS,DIRECTOR,MEDS
        CLF1, CL001, 11, Dr. A1,201

        CLF1, CL001,, Dr. A1,201

        CLF1,CL002,12,"Dr. LastName,Firstname" """

        csv_parser = CsvParser()
        results = csv_parser.parse(csv_data)

        self.assertEqual(3, len(results))

        form_code, values = results[0]
        self.assertEqual("clf1", form_code)
        self.assertEqual(
                {"id": "CL001", "beds": "11",
                 "director": "Dr. A1",
                 "meds": "201"
            }, values)
        form_code, values = results[1]
        self.assertEqual("clf1", form_code)
        self.assertEqual(
                {"id": "CL001", "beds": "",
                 "director": "Dr. A1",
                 "meds": "201"
            }, values)

        form_code, values = results[2]
        self.assertEqual("clf1", form_code)
        self.assertEqual(
                {"id": "CL002", "beds": "12",
                 "director": "Dr. LastName,Firstname",
                 "meds": None
            }, values)
    def test_should_raise_exception_for_invalid_format(self):
        empty_csv_data = """


     """

        csv_parser = CsvParser()
        with self.assertRaises(CSVParserInvalidHeaderFormatException):
            results = csv_parser.parse(empty_csv_data)
    def test_should_raise_exception_for_invalid_format(self):
        empty_csv_data = """


     """

        csv_parser = CsvParser()
        with self.assertRaises(CSVParserInvalidHeaderFormatException):
            results = csv_parser.parse(empty_csv_data)
    def test_should_import_csv_string_with_extra_field_values(self):
        csv_data = """FORM_CODE,ID,BEDS,DIRECTOR,MEDS
                                CLF1,CL001,11,Dr. A1,201
                                CLF1,CL002,12,Dr. A2,202,extra field
                                CLF1,CL003,13,Dr. A3,203,
                                CLF1,CL004,14,Dr. A4,204,extra field1, extra field 2
                                CLF1,CL005,15,Dr. A5,205,
        """
        csv_parser = CsvParser()
        results = csv_parser.parse(csv_data)

        self.assertEqual(5, len(results))

        self._assert_results(results)
    def test_should_import_csv_string_with_extra_field_values(self):
        csv_data = """FORM_CODE,ID,BEDS,DIRECTOR,MEDS
                                CLF1,CL001,11,Dr. A1,201
                                CLF1,CL002,12,Dr. A2,202,extra field
                                CLF1,CL003,13,Dr. A3,203,
                                CLF1,CL004,14,Dr. A4,204,extra field1, extra field 2
                                CLF1,CL005,15,Dr. A5,205,
        """
        csv_parser = CsvParser()
        results = csv_parser.parse(csv_data)

        self.assertEqual(5, len(results))

        self._assert_results(results)
    def test_should_parse_csv_string_with_partial_values(self):
        csv_data = """FORM_CODE,ID,BEDS,DIRECTOR,MEDS
        CLF1, CL001, 11, Dr. A1,201

        CLF1, CL001,, Dr. A1,201

        CLF1,CL002,12,"Dr. LastName,Firstname" """

        csv_parser = CsvParser()
        results = csv_parser.parse(csv_data)

        self.assertEqual(3, len(results))

        form_code, values = results[0]
        self.assertEqual("clf1", form_code)
        self.assertEqual(
            {
                "id": "CL001",
                "beds": "11",
                "director": "Dr. A1",
                "meds": "201"
            }, values)
        form_code, values = results[1]
        self.assertEqual("clf1", form_code)
        self.assertEqual(
            {
                "id": "CL001",
                "beds": "",
                "director": "Dr. A1",
                "meds": "201"
            }, values)

        form_code, values = results[2]
        self.assertEqual("clf1", form_code)
        self.assertEqual(
            {
                "id": "CL002",
                "beds": "12",
                "director": "Dr. LastName,Firstname",
                "meds": None
            }, values)
    def test_should_parse_csv_string_with_empty_lines(self):
        csv_data = """


        FORM_CODE,ID,BEDS,DIRECTOR,MEDS

        CLF1, CL001, 11, Dr. A1,201
        CLF1,CL002,12,Dr. A2,202

        CLF1,CL003,13,Dr. A3,203

        CLF1,CL004,14,Dr. A4,204
        CLF1,CL005,15,Dr. A5,205

        """

        csv_parser = CsvParser()
        results = csv_parser.parse(csv_data)

        self.assertEqual(5, len(results))

        self._assert_results(results)
    def test_should_parse_csv_string(self):
        csv_data = """FORM_CODE,ID,BEDS,DIRECTOR,MEDS
        CLF1, CL001, 11, Dr. A1,201
        CLF1,CL002,12,Dr. A2,202
        CLF1,CL003,13,Dr. A3,203
        CLF1,CL004,14,Dr. A4,204
        CLF1,CL005,15,Dr. A5,205"""

        csv_parser = CsvParser()
        results = csv_parser.parse(csv_data)

        self.assertEqual(5, len(results))

        for index, result in enumerate(results):
            form_code, values = results[index]
            self.assertEqual("clf1", form_code)
            offset = index + 1
            self.assertEqual(
                    {"id": "CL%03d" % (offset,), "beds": "%d" % (10 + offset,),
                     "director": "Dr. A%d" % (offset,),
                     "meds": "%d" % (200 + offset,)
                }, values)
    def test_should_parse_csv_string_with_empty_lines(self):
        csv_data = """


        FORM_CODE,ID,BEDS,DIRECTOR,MEDS

        CLF1, CL001, 11, Dr. A1,201
        CLF1,CL002,12,Dr. A2,202

        CLF1,CL003,13,Dr. A3,203

        CLF1,CL004,14,Dr. A4,204
        CLF1,CL005,15,Dr. A5,205

        """

        csv_parser = CsvParser()
        results = csv_parser.parse(csv_data)

        self.assertEqual(5, len(results))

        self._assert_results(results)
    def test_should_parse_csv_string(self):
        csv_data = """FORM_CODE,ID,BEDS,DIRECTOR,MEDS
        CLF1, CL001, 11, Dr. A1,201
        CLF1,CL002,12,Dr. A2,202
        CLF1,CL003,13,Dr. A3,203
        CLF1,CL004,14,Dr. A4,204
        CLF1,CL005,15,Dr. A5,205"""

        csv_parser = CsvParser()
        results = csv_parser.parse(csv_data)

        self.assertEqual(5, len(results))

        for index, result in enumerate(results):
            form_code, values = results[index]
            self.assertEqual("clf1", form_code)
            offset = index + 1
            self.assertEqual(
                {
                    "id": "CL%03d" % (offset, ),
                    "beds": "%d" % (10 + offset, ),
                    "director": "Dr. A%d" % (offset, ),
                    "meds": "%d" % (200 + offset, )
                }, values)