def test_deserialisation():
    store = ListStore()
    # pylint: disable=protected-access
    first_id = store._generate_identifier()
    second_id = store._generate_identifier()
    additional_id = store._generate_identifier()

    serialized = [
        {"name": "people", "primary_person": second_id, "items": [first_id, second_id]},
        {"name": "pets", "items": [additional_id]},
    ]

    deserialized = ListStore.deserialize(serialized)

    assert deserialized["people"].items == [first_id, second_id]
    assert deserialized["people"].primary_person == second_id
    assert deserialized["pets"].items == [additional_id]
def test_unique_id_generation():
    """
    Ensure that every id generated is unique per questionnaire.
    """
    # Mock the app.data_models.list_store.random_string method to return duplicates.
    with patch(
        "app.data_models.list_store.random_string",
        side_effect=["first", "first", "second"],
    ):
        store = ListStore()
        # pylint: disable=protected-access
        store._lists["test"] = ListModel(name="test", items=["first"])
        result = store._generate_identifier()

    assert result == "second"