from unittest import TestCase from redash.query_runner.jql import FieldMapping, parse_issue class TestFieldMapping(TestCase): def test_empty(self): field_mapping = FieldMapping({}) self.assertEqual(field_mapping.get_output_field_name("field1"), "field1") self.assertEqual(field_mapping.get_dict_output_field_name("field1", "member1"), None) self.assertEqual(field_mapping.get_dict_members("field1"), []) def test_with_mappings(self): field_mapping = FieldMapping( { "field1": "output_name_1", "field2.member1": "output_name_2", "field2.member2": "output_name_3", } ) self.assertEqual(field_mapping.get_output_field_name("field1"), "output_name_1") self.assertEqual(field_mapping.get_dict_output_field_name("field1", "member1"), None) self.assertEqual(field_mapping.get_dict_members("field1"), []) self.assertEqual(field_mapping.get_output_field_name("field2"), "field2") self.assertEqual( field_mapping.get_dict_output_field_name("field2", "member1"), "output_name_2", ) self.assertEqual( field_mapping.get_dict_output_field_name("field2", "member2"), "output_name_3", ) self.assertEqual(field_mapping.get_dict_output_field_name("field2", "member3"), None) self.assertEqual(field_mapping.get_dict_members("field2"), ["member1", "member2"]) class TestParseIssue(TestCase): issue = { "key": "KEY-1", "fields": { "string_field": "value1", "int_field": 123, "string_list_field": ["value1", "value2"], "dict_field": {"member1": "value1", "member2": "value2"}, "dict_list_field": [ {"member1": "value1a", "member2": "value2a"}, {"member1": "value1b", "member2": "value2b"}, ], "dict_legacy": { "key": "legacyKey", "name": "legacyName", "dict_legacy": "legacyValue", }, "watchers": {"watchCount": 10}, }, } def test_no_mapping(self): result = parse_issue(self.issue, FieldMapping({})) self.assertEqual(result["key"], "KEY-1") self.assertEqual(result["string_field"], "value1") self.assertEqual(result["int_field"], 123) self.assertEqual(result["string_list_field"], "value1,value2") self.assertEqual("dict_field" in result, False) self.assertEqual("dict_list_field" in result, False) self.assertEqual(result["dict_legacy"], "legacyValue") self.assertEqual(result["dict_legacy_key"], "legacyKey") self.assertEqual(result["dict_legacy_name"], "legacyName") self.assertEqual(result["watchers"], 10) def test_mapping(self): result = parse_issue( self.issue, FieldMapping( { "string_field": "string_output_field", "string_list_field": "string_output_list_field", "dict_field.member1": "dict_field_1", "dict_field.member2": "dict_field_2", "dict_list_field.member1": "dict_list_field_1", "dict_legacy.key": "dict_legacy", "watchers.watchCount": "watchCount", } ), ) self.assertEqual(result["key"], "KEY-1") self.assertEqual(result["string_output_field"], "value1") self.assertEqual(result["int_field"], 123) self.assertEqual(result["string_output_list_field"], "value1,value2") self.assertEqual(result["dict_field_1"], "value1") self.assertEqual(result["dict_field_2"], "value2") self.assertEqual(result["dict_list_field_1"], "value1a,value1b") self.assertEqual(result["dict_legacy"], "legacyKey") self.assertEqual("dict_legacy_key" in result, False) self.assertEqual("dict_legacy_name" in result, False) self.assertEqual("watchers" in result, False) self.assertEqual(result["watchCount"], 10) def test_mapping_nonexisting_field(self): result = parse_issue( self.issue, FieldMapping( { "non_existing_field": "output_name1", "dict_field.non_existing_member": "output_name2", "dict_list_field.non_existing_member": "output_name3", } ), ) self.assertEqual(result["key"], "KEY-1") self.assertEqual(result["string_field"], "value1") self.assertEqual(result["int_field"], 123) self.assertEqual(result["string_list_field"], "value1,value2") self.assertEqual("dict_field" in result, False) self.assertEqual("dict_list_field" in result, False) self.assertEqual(result["dict_legacy"], "legacyValue") self.assertEqual(result["dict_legacy_key"], "legacyKey") self.assertEqual(result["dict_legacy_name"], "legacyName") self.assertEqual(result["watchers"], 10)