Example #1
0
def test_cds_sync_record_when_there_is_already_correct_cds_identifier(
    inspire_app_for_cds_sync, ):
    expected_external_identifiers = [{"schema": "CDS", "value": "1273173"}]
    LiteratureRecord.create(
        faker.record(
            "lit",
            data={
                "control_number":
                1203988,
                "external_system_identifiers": [{
                    "schema": "CDS",
                    "value": "1273173"
                }],
            },
        ))
    db.session.commit()

    sync_identifiers("2020-07-01")

    runs = CDSRun.query.all()
    assert len(runs) == 1
    assert runs[0].status == CDSRunStatus.FINISHED
    assert runs[0].message == ""

    record = LiteratureRecord.get_record_by_pid_value("1203988")
    assert record[
        "external_system_identifiers"] == expected_external_identifiers
Example #2
0
def sync(since=None):
    """Starts sync form CDS server"""
    if not current_app.config.get("FEATURE_FLAG_ENABLE_CDS_SYNC"):
        click.echo("Feature flag for CDS sync is not enabled.")
        exit(-1)
    if not since:
        last_run = CDSRun.get_last_successful_run()
        since = last_run.date.date() if last_run else None
    elif isinstance(since, datetime):
        since = since.date()
    elif not isinstance(since, date):
        try:
            since = datetime.strptime(since, "%Y-%m-%d").date()
        except ValueError:
            raise WrongDateFormat(
                f"`since`: {since} is in wrong format. Should be in ISO format: YYYY-MM-DD."
            )
    try:
        click.echo("Starting CDS Sync.")
        sync_identifiers(since)
    except Exception as exc:
        click.echo("Task didn't finish correctly.")
        click.echo(exc)
        exit(1)
    else:
        click.echo("CDS Sync finished successfully.")
Example #3
0
def test_cds_sync_task_fail(inspire_app_for_cds_sync):
    with pytest.raises(requests.exceptions.HTTPError):
        sync_identifiers("2022-09-15")

    runs = CDSRun.query.all()
    assert len(runs) == 1
    assert runs[0].status == CDSRunStatus.ERROR
    assert "500 Server Error" in runs[0].message
Example #4
0
def test_cds_sync_continues_when_some_records_fails(inspire_app_for_cds_sync):
    expected_1203988_external_system_identifiers = [{
        "value": "1273173",
        "schema": "CDS"
    }]
    expected_1314109_external_system_identifiers = [{
        "value": "1742265",
        "schema": "CDS"
    }]
    expected_1314110_external_system_identifiers = [{
        "value": "2003162",
        "schema": "CDS"
    }]
    LiteratureRecord.create(
        faker.record("lit", data={"control_number": 1203988}))
    LiteratureRecord.create(
        faker.record(
            "lit",
            data={
                "control_number":
                1314109,
                "external_system_identifiers": [{
                    "schema": "CDS",
                    "value": "1742265"
                }],
            },
        ))
    LiteratureRecord.create(
        faker.record("lit", data={"control_number": 1314110}))

    db.session.commit()

    sync_identifiers("2020-07-01")

    runs = CDSRun.query.all()
    assert len(runs) == 1
    assert runs[0].status == CDSRunStatus.FINISHED
    assert runs[0].message == ""

    assert (LiteratureRecord.get_record_by_pid_value(
        "1203988")["external_system_identifiers"] ==
            expected_1203988_external_system_identifiers)

    assert (LiteratureRecord.get_record_by_pid_value(
        "1314109")["external_system_identifiers"] ==
            expected_1314109_external_system_identifiers)
    assert (LiteratureRecord.get_record_by_pid_value(
        "1314110")["external_system_identifiers"] ==
            expected_1314110_external_system_identifiers)