def test_execute(write_external_value_mock, write_dump_information_mock):
    script_dir = os.path.dirname(__file__)
    dump_file_path = os.path.join(script_dir, "testdata/gnd_dump.xml.gz")
    gnd_converter = GndDumpConverter(True)
    def download_dump_mock(file_prefix):
        dump_file = open(dump_file_path, "rb")
        return dump_file, None, None
    gnd_converter.download_dump = download_dump_mock
    gnd_converter.execute(ResultWriter(StringIO(), StringIO()))

    number_of_dumps = len(gnd_converter.FILE_PREFIXES)
    assert write_external_value_mock.call_count == 11 * number_of_dumps
    assert write_dump_information_mock.call_count == number_of_dumps
    def patched_wrapper(download_file_mock):
        expected_size = 42
        expected_prefix = "foobar"

        gnd_converter = GndDumpConverter()
        def get_dump_url_mock(file_prefix, fallback=False):
            assert expected_prefix == file_prefix
            if fallback:
                return fallback_url
            else:
                return dump_url
        gnd_converter.get_dump_url = get_dump_url_mock
        def download_file_mock_func(url, destination_file,
                               is_quiet=False, progress_message=""):
            if url == "200":
                return expected_size
            else:
                raise DownloadError(int(url))
        download_file_mock.side_effect = download_file_mock_func

        actual_file, actual_url, actual_size = gnd_converter.download_dump(expected_prefix)

        assert expected_size == actual_size
def test_download_dump_error(download_file_mock):
    with pytest.raises(DownloadError):
        gnd_converter = GndDumpConverter()
        gnd_converter.download_dump("foobar")