def _parse(self, request): sms_parser = SMSParser() form_code, values = sms_parser.parse(request.message) return form_code, values
def setUp(self): self.sms_parser = SMSParser()
class TestSMSParser(TestCase): def setUp(self): self.sms_parser = SMSParser() def test_should_return_all_field_codes_in_lower_case(self): form_code, values = self.sms_parser.parse("WP +id 1 +Name FirstName +aGe 10") self.assertEqual({"id": "1", "name": "FirstName", "age": "10"}, values) def test_should_preserve_non_leading_white_spaces_in_answer(self): form_code, values = self.sms_parser.parse("WP +ID 1 +NAME FirstName LastName +AGE 10") self.assertEqual({"id": "1", "name": "FirstName LastName", "age": "10"}, values) def test_should_parse_incomplete_messages_with_no_answer_values(self): form_code, values = self.sms_parser.parse("WP +ID 1 +BC ") self.assertEqual({"id": "1", "bc": ""}, values) def test_should_raise_error_if_invalid_sms_format(self): with self.assertRaises(SubmissionParseException): form_code, values = self.sms_parser.parse("+") with self.assertRaises(SubmissionParseException): form_code, values = self.sms_parser.parse(" + ") with self.assertRaises(SubmissionParseException): form_code, values = self.sms_parser.parse(" + +") with self.assertRaises(SubmissionParseException): form_code, values = self.sms_parser.parse("+WP ") with self.assertRaises(SubmissionParseException): form_code, values = self.sms_parser.parse("WP") with self.assertRaises(SubmissionParseException): form_code, values = self.sms_parser.parse("WP+") with self.assertRaises(SubmissionParseException): form_code, values = self.sms_parser.parse(" WP ") with self.assertRaises(SubmissionParseException): form_code, values = self.sms_parser.parse("WP ID") with self.assertRaises(SubmissionParseException): form_code, values = self.sms_parser.parse("WP +ID") def test_should_accept_only_strings(self): with self.assertRaises(AssertionError): self.sms_parser.parse(10) with self.assertRaises(AssertionError): self.sms_parser.parse(None) def test_should_accept_unicode(self): form_code, values = self.sms_parser.parse(u"reg +s Āgra +n شصلكقم +m 080 +t clinic") self.assertEqual({u"s": u"Āgra", u"n": u"شصلكقم", u"m": u"080", u"t": u"clinic"}, values) def test_should_convert_input_to_unicode(self): form_code, values = self.sms_parser.parse("reg +s Āgra +n شصلكقم +m 080 +t clinic") self.assertEqual({u"s": u"Āgra", u"n": u"شصلكقم", u"m": u"080", u"t": u"clinic"}, values) def test_should_ignore_additional_separators(self): form_code, values = self.sms_parser.parse("WP +ID 1 + ++ +NAME FirstName LastName ++ +AGE 10 ++ ") self.assertEqual({"id": "1", "name": "FirstName LastName", "age": "10"}, values) self.assertEqual("wp", form_code) def test_should_return_form_code_and_message_as_dict(self): parser = WebParser() message = {'form_code': 'X1', 'q1': 'a1', 'q2': 'a2'} form_code, values = parser.parse(message) self.assertEquals(form_code, 'X1') self.assertEquals(values, {'q1': 'a1', 'q2': 'a2'})
class TestSMSParser(TestCase): def setUp(self): self.sms_parser = SMSParser() def test_should_return_all_field_codes_in_lower_case(self): form_code, values = self.sms_parser.parse( "WP +id 1 +Name FirstName +aGe 10") self.assertEqual({"id": "1", "name": "FirstName", "age": "10"}, values) def test_should_preserve_non_leading_white_spaces_in_answer(self): form_code, values = self.sms_parser.parse( "WP +ID 1 +NAME FirstName LastName +AGE 10") self.assertEqual({ "id": "1", "name": "FirstName LastName", "age": "10" }, values) def test_should_parse_incomplete_messages_with_no_answer_values(self): form_code, values = self.sms_parser.parse("WP +ID 1 +BC ") self.assertEqual({"id": "1", "bc": ""}, values) def test_should_raise_error_if_invalid_sms_format(self): with self.assertRaises(SubmissionParseException): form_code, values = self.sms_parser.parse("+") with self.assertRaises(SubmissionParseException): form_code, values = self.sms_parser.parse(" + ") with self.assertRaises(SubmissionParseException): form_code, values = self.sms_parser.parse(" + +") with self.assertRaises(SubmissionParseException): form_code, values = self.sms_parser.parse("+WP ") with self.assertRaises(SubmissionParseException): form_code, values = self.sms_parser.parse("WP") with self.assertRaises(SubmissionParseException): form_code, values = self.sms_parser.parse("WP+") with self.assertRaises(SubmissionParseException): form_code, values = self.sms_parser.parse(" WP ") with self.assertRaises(SubmissionParseException): form_code, values = self.sms_parser.parse("WP ID") with self.assertRaises(SubmissionParseException): form_code, values = self.sms_parser.parse("WP +ID") def test_should_accept_only_strings(self): with self.assertRaises(AssertionError): self.sms_parser.parse(10) with self.assertRaises(AssertionError): self.sms_parser.parse(None) def test_should_accept_unicode(self): form_code, values = self.sms_parser.parse( u"reg +s Āgra +n شصلكقم +m 080 +t clinic") self.assertEqual( { u"s": u"Āgra", u"n": u"شصلكقم", u"m": u"080", u"t": u"clinic" }, values) def test_should_convert_input_to_unicode(self): form_code, values = self.sms_parser.parse( "reg +s Āgra +n شصلكقم +m 080 +t clinic") self.assertEqual( { u"s": u"Āgra", u"n": u"شصلكقم", u"m": u"080", u"t": u"clinic" }, values) def test_should_ignore_additional_separators(self): form_code, values = self.sms_parser.parse( "WP +ID 1 + ++ +NAME FirstName LastName ++ +AGE 10 ++ ") self.assertEqual({ "id": "1", "name": "FirstName LastName", "age": "10" }, values) self.assertEqual("wp", form_code) def test_should_return_form_code_and_message_as_dict(self): parser = WebParser() message = {'form_code': 'X1', 'q1': 'a1', 'q2': 'a2'} form_code, values = parser.parse(message) self.assertEquals(form_code, 'X1') self.assertEquals(values, {'q1': 'a1', 'q2': 'a2'})