def test_parse_contents(self): conf = Configuration() JSON_TEST = ('{"key1": "value1"}', {'key1': 'value1'}) YAML_TEST = ('key1: value1', {'key1': 'value1'}) INI_TEST = ('[Section]\nkey1 = value1', {'Section': {'key1': 'value1'}, 'defaults': {}}) json_value, _ = conf._parse_contents(JSON_TEST[0], 'json') self.assertEqual(json_value, JSON_TEST[1]) yaml_value, _ = conf._parse_contents(YAML_TEST[0], 'yaml') self.assertEqual(yaml_value, YAML_TEST[1]) ini_value, _ = conf._parse_contents(INI_TEST[0], 'ini') self.assertEqual(ini_value, INI_TEST[1]) # Make sure it doesn't support invalid extensions ;) with self.assertRaises(ValueError): conf._parse_contents('foobar', 'xml') # Make sure a parse error returns None with mock.patch('json.loads') as m: m.side_effect = ValueError value, message = conf._parse_contents(JSON_TEST[0], 'json') self.assertEqual(value, None)
def test_load_source(self): conf = Configuration() test_file_type = 'json' test_contents = 'test contents' test_parsed = {'foo': 'bar'} conf._get_file_type = mock.Mock(return_value=test_file_type) conf._get_file_contents = mock.Mock(return_value=test_contents) conf._parse_contents = mock.Mock(return_value=(test_parsed, None)) conf.load_source(self.test_origin) self.assertEqual(len(conf.sources), 1) built_source = conf.sources[0] self.assertEqual(built_source['origin'], self.test_origin) self.assertEqual(built_source['location'], self.test_origin) self.assertEqual(built_source['type'], test_file_type) self.assertEqual(built_source['contents'], test_contents) self.assertEqual(built_source['data'], test_parsed)