def test_driver_nonstrict_get_with_incorrect_prefix():
    """
    Tests retrieval of a record fails if default prefix is set and request uses a different prefix with same uuid
    """
    with sqlite3.connect("index.sq3") as conn:

        driver = SQLAlchemyIndexDriver(
            "sqlite:///index.sq3",
            index_config={
                "DEFAULT_PREFIX": "testprefix/",
                "PREPEND_PREFIX": True,
                "ADD_PREFIX_ALIAS": False,
            },
        )

        did = str(uuid.uuid4())
        baseid = str(uuid.uuid4())
        rev = str(uuid.uuid4())[:8]
        size = 512
        form = "object"
        baseid = str(uuid.uuid4())
        created_date = datetime.now()
        updated_date = datetime.now()

        conn.execute(
            """
            INSERT INTO index_record(did, baseid, rev, form, size, created_date, updated_date) VALUES (?,?,?,?,?,?,?)
        """,
            ("testprefix/" + did, baseid, rev, form, size, created_date, updated_date),
        )

        conn.commit()

        with pytest.raises(NoRecordFound):
            driver.get_with_nonstrict_prefix("wrongprefix/" + did)
def test_driver_nonstrict_get_with_no_default_prefix():
    """
    Tests retrieval of a record fails as expected if no default prefix is set
    """
    driver = SQLAlchemyIndexDriver(
        "sqlite:///index.sq3",
        index_config={
            "DEFAULT_PREFIX": None,
            "PREPEND_PREFIX": False,
            "ADD_PREFIX_ALIAS": False,
        },
    )

    with pytest.raises(NoRecordFound):
        driver.get_with_nonstrict_prefix("fake_id_without_prefix")
def test_driver_nonstrict_get_with_prefix():
    """
    Tests retrieval of a record when a default prefix is set and supplied by the request,
    but records are stored without prefixes.
    """
    with sqlite3.connect("index.sq3") as conn:

        driver = SQLAlchemyIndexDriver(
            "sqlite:///index.sq3",
            index_config={
                "DEFAULT_PREFIX": "testprefix/",
                "PREPEND_PREFIX": False,
                "ADD_PREFIX_ALIAS": True,
            },
        )

        did = str(uuid.uuid4())
        baseid = str(uuid.uuid4())
        rev = str(uuid.uuid4())[:8]
        size = 512
        form = "object"
        baseid = str(uuid.uuid4())
        created_date = datetime.now()
        updated_date = datetime.now()

        conn.execute(
            """
            INSERT INTO index_record(did, baseid, rev, form, size, created_date, updated_date) VALUES (?,?,?,?,?,?,?)
        """,
            (did, baseid, rev, form, size, created_date, updated_date),
        )

        conn.commit()

        record = driver.get_with_nonstrict_prefix("testprefix/" + did)

        assert record["did"] == did, "record id does not match"
        assert record["baseid"] == baseid, "record baseid does not match"
        assert record["rev"] == rev, "record revision does not match"
        assert record["size"] == size, "record size does not match"
        assert record["form"] == form, "record form does not match"
        assert (
            record["created_date"] == created_date.isoformat()
        ), "created date does not match"
        assert (
            record["updated_date"] == updated_date.isoformat()
        ), "updated date does not match"