def assert_disambiguation_on_update():
     db.session.close()
     literature_record = LiteratureRecord.get_record(literature_record_uuid)
     literature_record_from_es = InspireSearch.get_record_data_from_es(
         literature_record)
     assert literature_record["authors"][0]["record"]["$ref"]
     assert literature_record_from_es["authors"][0]["record"]["$ref"]
def test_disambiguation_runs_after_lit_record_update(inspire_app,
                                                     clean_celery_session,
                                                     enable_disambiguation):
    author_data = faker.record("aut")
    author_data.update({
        "control_number":
        1,
        "name": {
            "value": "Brian Gross"
        },
        "ids": [{
            "schema": "INSPIRE BAI",
            "value": "J.M.Maldacena.1"
        }],
        "email_addresses": [{
            "current": True,
            "value": "*****@*****.**"
        }],
    })
    author_record = InspireRecord.create(author_data)

    author_data_2 = faker.record("aut")
    author_data_2.update({
        "control_number":
        2,
        "name": {
            "value": "Test Author"
        },
        "email_addresses": [{
            "current": True,
            "value": "*****@*****.**"
        }],
    })
    author_record_2 = InspireRecord.create(author_data_2)
    author_data_3 = faker.record("aut")
    author_data_3.update({
        "control_number":
        3,
        "name": {
            "value": "Another Author"
        },
        "email_addresses": [
            {
                "current": True,
                "value": "*****@*****.**"
            },
            {
                "current": True,
                "hidden": True,
                "value": "*****@*****.**"
            },
        ],
    })
    author_record_3 = InspireRecord.create(author_data_3)
    db.session.commit()

    def assert_authors_records_exist_in_es():
        author_record_from_es = InspireSearch.get_record_data_from_es(
            author_record)
        author_2_from_es = InspireSearch.get_record_data_from_es(
            author_record_2)
        author_3_from_es = InspireSearch.get_record_data_from_es(
            author_record_3)
        assert author_record_from_es
        assert author_2_from_es
        assert author_3_from_es

    retry_until_pass(assert_authors_records_exist_in_es, retry_interval=5)

    literature_data = faker.record("lit")
    literature_data.update({
        "control_number":
        4,
        "authors": [{
            "full_name":
            "Brian Gross",
            "ids": [{
                "schema": "INSPIRE BAI",
                "value": "J.M.Maldacena.1"
            }],
            "emails": ["*****@*****.**"],
            "uuid":
            "798d9afe-d3c2-479e-b384-f0aee2573076",
        }],
    })
    literature_record = LiteratureRecord.create(literature_data)
    literature_record_uuid = literature_record.id
    db.session.commit()

    def assert_disambiguation_on_update():
        db.session.close()
        literature_record = LiteratureRecord.get_record(literature_record_uuid)
        literature_record_from_es = InspireSearch.get_record_data_from_es(
            literature_record)
        assert literature_record["authors"][0]["record"]["$ref"]
        assert literature_record_from_es["authors"][0]["record"]["$ref"]

    retry_until_pass(assert_disambiguation_on_update, retry_interval=5)

    literature_record = LiteratureRecord.get_record(literature_record_uuid)
    literature_record["authors"].append({
        "full_name": "Test Author",
        "emails": ["*****@*****.**"]
    })
    literature_record.update(dict(literature_record))
    db.session.commit()

    def assert_disambiguation_on_update():
        db.session.close()
        literature_record = LiteratureRecord.get_record(literature_record_uuid)
        literature_record_from_es = InspireSearch.get_record_data_from_es(
            literature_record)
        assert literature_record["authors"][0]["record"]["$ref"]
        assert literature_record["authors"][1]["record"]["$ref"]
        assert literature_record_from_es["authors"][0]["record"]["$ref"]
        assert literature_record_from_es["authors"][1]["record"]["$ref"]

    retry_until_pass(assert_disambiguation_on_update, retry_interval=5)