コード例 #1
0
def test_remove_files_on_finish(
    monkeypatch: Any,
    db: Session,
    project_details: dict,
    basic_job: dict,
    exporter: WikifactoryExporter,
    items_count: int,
) -> None:
    def mock_get_project_details(*args: List, **kwargs: Dict) -> Dict:
        return project_details

    monkeypatch.setattr(exporter, "get_project_details",
                        mock_get_project_details)

    def mock_on_file_cb(*args: List, **kwargs: Dict) -> None:
        crud.job.increment_exported_items(db=db, job_id=exporter.job_id)

    monkeypatch.setattr(exporter, "on_file_cb", mock_on_file_cb)

    def mock_on_finished_cb(*args: List, **kwargs: Dict) -> None:
        pass

    monkeypatch.setattr(exporter, "on_finished_cb", mock_on_finished_cb)

    job: Job = basic_job["db_job"]

    exporter.process()

    assert job.status == JobStatus.FINISHED_SUCCESSFULLY

    assert os.path.exists(job.path) is False
コード例 #2
0
def test_upload_file_error(
    monkeypatch: Any,
    exporter: WikifactoryExporter,
    basic_job: dict,
) -> None:
    def mock_put_status_error(*args: List,
                              **kwargs: Dict) -> requests.Response:
        response = requests.Response()
        response.status_code = requests.codes["expectation_failed"]
        return response

    monkeypatch.setattr(requests, "put", mock_put_status_error)

    job = basic_job["db_job"]

    exporter.project_details = {
        "space_id": "space-id",
        "project_id": "project-id",
        "private": False,
    }

    file_url = "http://upload-domain/upload-endpoint"
    file_path = os.path.join(job.path, "README.md")

    with open(file_path, "rb") as file_handle, pytest.raises(FileUploadFailed):
        exporter.upload_file(file_handle, file_url)
コード例 #3
0
def test_upload_file_headers(
    monkeypatch: Any,
    exporter: WikifactoryExporter,
    project_details: Dict,
    expected_headers: Dict,
    basic_job: dict,
) -> None:
    def mock_put_assert_headers(*args: List,
                                **kwargs: Dict) -> requests.Response:
        headers = kwargs.get("headers")
        assert headers == expected_headers
        response = requests.Response()
        response.status_code = requests.codes["ok"]
        return response

    monkeypatch.setattr(requests, "put", mock_put_assert_headers)

    job = basic_job["db_job"]

    exporter.project_details = project_details

    file_url = "http://upload-domain/upload-endpoint"
    file_path = os.path.join(job.path, "README.md")
    with open(file_path, "rb") as file_handle:
        exporter.upload_file(file_handle, file_url)
コード例 #4
0
def test_on_file_cb_no_file_id(monkeypatch: Any,
                               exporter: WikifactoryExporter) -> None:
    def mock_process_file(*args: List, **kwargs: Dict) -> Dict:
        return {"id": None, "uploadUrl": None}

    monkeypatch.setattr(exporter, "process_file", mock_process_file)

    with pytest.raises(FileUploadFailed):
        exporter.on_file_cb("")
コード例 #5
0
def test_on_file_cb_user_errors(monkeypatch: Any,
                                exporter: WikifactoryExporter) -> None:
    def mock_process_file(*args: List, **kwargs: Dict) -> None:
        raise UserErrors()

    monkeypatch.setattr(exporter, "process_file", mock_process_file)

    with pytest.raises(FileUploadFailed):
        exporter.on_file_cb("")
コード例 #6
0
def test_process_element_mutation_variables(
    basic_job: Dict,
    exporter: WikifactoryExporter,
    project_details: Dict,
) -> None:
    job = basic_job["db_job"]

    exporter.project_details = project_details
    exporter.process_file(os.path.join(job.path, "README.md"))
コード例 #7
0
def test_perform_mutation_operation_variables(
    basic_job: Dict,
    exporter: WikifactoryExporter,
    project_details: Dict,
    file_id: str,
) -> None:
    job = basic_job["db_job"]
    file_path = os.path.join(job.path, "README.md")
    exporter.project_details = project_details
    exporter.perform_mutation_operation(file_path, file_id)
コード例 #8
0
def test_wikifactory_exporter(
    monkeypatch: Any,
    db: Session,
    project_details: dict,
    basic_job: dict,
    exporter: WikifactoryExporter,
    items_count: int,
) -> None:
    def mock_get_project_details(*args: List, **kwargs: Dict) -> Dict:
        return project_details

    monkeypatch.setattr(exporter, "get_project_details",
                        mock_get_project_details)

    def mock_on_file_cb(*args: List, **kwargs: Dict) -> None:
        crud.job.increment_exported_items(db=db, job_id=exporter.job_id)

    monkeypatch.setattr(exporter, "on_file_cb", mock_on_file_cb)

    def mock_on_finished_cb(*args: List, **kwargs: Dict) -> None:
        pass

    monkeypatch.setattr(exporter, "on_finished_cb", mock_on_finished_cb)

    job = basic_job["db_job"]

    exporter.process()

    # TODO check that on_file_cb has been called for each file

    # TODO check that on_finished_cb has been called

    # check log
    exporting_status_log = (db.query(JobLog).filter_by(
        job_id=job.id, to_status=JobStatus.EXPORTING).one())
    assert exporting_status_log
    exporting_successfully_status_log = (db.query(JobLog).filter_by(
        job_id=job.id,
        from_status=JobStatus.EXPORTING,
        to_status=JobStatus.EXPORTING_SUCCESSFULLY,
    ).one())
    assert exporting_successfully_status_log
    finished_successfully_status_log = (db.query(JobLog).filter_by(
        job_id=job.id,
        from_status=JobStatus.EXPORTING_SUCCESSFULLY,
        to_status=JobStatus.FINISHED_SUCCESSFULLY,
    ).one())
    assert finished_successfully_status_log
    assert items_count == job.exported_items
コード例 #9
0
def exporter(db: Session, basic_job: dict) -> WikifactoryExporter:
    return WikifactoryExporter(db, basic_job["db_job"].id)
コード例 #10
0
def test_on_finished_cb_mutation_variables(exporter: WikifactoryExporter,
                                           project_details: Dict) -> None:
    exporter.project_details = project_details
    exporter.on_finished_cb()
コード例 #11
0
def test_complete_file_mutation_variables(exporter: WikifactoryExporter,
                                          project_details: Dict,
                                          file_id: str) -> None:
    exporter.project_details = project_details
    exporter.complete_file(file_id)
コード例 #12
0
def test_get_project_details(exporter: WikifactoryExporter,
                             expected_details: Dict) -> None:
    project_details = exporter.get_project_details()
    assert project_details == expected_details