def setUp(self): super(ProvTranslatorConverterTestCase, self).setUp() self.provtranslator = ProvTranslatorConverter() self.in_file = None self.out_file = None self.config = {} self.config[ProvTranslatorConverter.URL] = \ "https://" + self.__class__.__name__ self.config[ProvTranslatorConverter.INPUT_FORMATS] = standards.FORMATS self.config[ProvTranslatorConverter.OUTPUT_FORMATS] = standards.FORMATS
class ProvTranslatorConverterTestCase(unittest.TestCase): def setUp(self): super(ProvTranslatorConverterTestCase, self).setUp() self.provtranslator = ProvTranslatorConverter() self.in_file = None self.out_file = None self.config = {} self.config[ProvTranslatorConverter.URL] = \ "https://" + self.__class__.__name__ self.config[ProvTranslatorConverter.INPUT_FORMATS] = standards.FORMATS self.config[ProvTranslatorConverter.OUTPUT_FORMATS] = standards.FORMATS def tearDown(self): super(ProvTranslatorConverterTestCase, self).tearDown() for f in [self.in_file, self.out_file]: if f != None and os.path.isfile(f): os.remove(f) def test_init(self): self.assertEqual("", self.provtranslator.url) self.assertEqual([], self.provtranslator.input_formats) self.assertEqual([], self.provtranslator.output_formats) def test_configure(self): self.provtranslator.configure(self.config) self.assertEqual(self.config[ProvTranslatorConverter.URL], self.provtranslator.url) self.assertEqual(self.config[ProvTranslatorConverter.INPUT_FORMATS], self.provtranslator.input_formats) self.assertEqual(self.config[ProvTranslatorConverter.OUTPUT_FORMATS], self.provtranslator.output_formats) def test_convert_missing_input_file(self): self.provtranslator.configure(self.config) self.in_file = "nosuchfile.json" self.out_file = "convert_missing_input_file." + standards.JSON with self.assertRaises(ConversionError): self.provtranslator.convert(self.in_file, self.out_file) def test_convert_invalid_input_format(self): self.provtranslator.configure(self.config) (_, self.in_file) = tempfile.mkstemp(suffix=".nosuchformat") self.out_file = "convert_invalid_input_format." + standards.PROVX with self.assertRaises(ConversionError): self.provtranslator.convert(self.in_file, self.out_file) def test_convert_invalid_output_format(self): self.provtranslator.configure(self.config) (_, self.in_file) = tempfile.mkstemp(suffix="." + standards.JSON) self.out_file = "convert_invalid_output_format.nosuchformat" with self.assertRaises(ConversionError): self.provtranslator.convert(self.in_file, self.out_file) @parameterized.expand(standards.FORMATS) def test_convert(self, format): content_type = ProvTranslatorConverter.CONTENT_TYPES[format] self.provtranslator.configure(self.config) (_, self.in_file) = tempfile.mkstemp(suffix="." + format) (_, self.out_file) = tempfile.mkstemp(suffix="." + format) doc = "mockDocument" # Set up mock service response. headers={http.CONTENT_TYPE: content_type, http.ACCEPT: content_type} with requests_mock.Mocker(real_http=False) as mocker: mocker.register_uri("POST", self.config[ProvTranslatorConverter.URL], request_headers=headers, text=doc) self.provtranslator.convert(self.in_file, self.out_file) with open(self.out_file, "r") as f: self.assertEqual(doc, f.read(), "Unexpected output file content") def test_convert_server_error(self): self.provtranslator.configure(self.config) (_, self.in_file) = tempfile.mkstemp(suffix="." + standards.JSON) (_, self.out_file) = tempfile.mkstemp(suffix="." + standards.JSON) # Set up mock service response with server error. with requests_mock.Mocker(real_http=False) as mocker: mocker.register_uri("POST", self.config[ProvTranslatorConverter.URL], status_code=requests.codes.internal_server_error) with self.assertRaises(ConversionError): self.provtranslator.convert(self.in_file, self.out_file)