def test_update_section_status():
    completed = [
        {
            "section_id": "s1",
            "list_item_id": None,
            "status": CompletionStatus.COMPLETED,
            "block_ids": ["one"],
        },
        {
            "section_id": "s2",
            "list_item_id": "abc123",
            "status": CompletionStatus.COMPLETED,
            "block_ids": ["three"],
        },
    ]
    store = ProgressStore(completed)

    store.update_section_status(section_status=CompletionStatus.IN_PROGRESS,
                                section_id="s1")
    store.update_section_status(
        section_status=CompletionStatus.IN_PROGRESS,
        section_id="s2",
        list_item_id="abc123",
    )

    assert store.get_section_status(
        section_id="s1") == CompletionStatus.IN_PROGRESS
    assert (store.get_section_status(
        section_id="s2",
        list_item_id="abc123") == CompletionStatus.IN_PROGRESS)
    assert store.is_dirty
def test_update_non_existing_section_status():
    completed = [{
        "section_id": "s1",
        "list_item_id": None,
        "status": CompletionStatus.COMPLETED,
        "block_ids": ["one"],
    }]
    store = ProgressStore(completed)

    store.update_section_status("s2", CompletionStatus.IN_PROGRESS)

    assert store.get_section_status("s1") == CompletionStatus.COMPLETED

    assert "s2" not in store
    assert store.get_completed_block_ids(section_id="s2") == []

    assert not store.is_dirty
def test_serialisation():
    store = ProgressStore()

    store.add_completed_location(Location(section_id="s1", block_id="one"))
    store.add_completed_location(Location(section_id="s1", block_id="two"))
    store.update_section_status(section_status=CompletionStatus.COMPLETED,
                                section_id="s1")

    store.add_completed_location(
        Location(
            section_id="s2",
            block_id="another-one",
            list_name="people",
            list_item_id="abc123",
        ))
    store.update_section_status(
        section_status=CompletionStatus.IN_PROGRESS,
        section_id="s2",
        list_item_id="abc123",
    )

    serialized = store.serialize()

    assert serialized == [
        Progress.from_dict({
            "section_id": "s1",
            "list_item_id": None,
            "status": CompletionStatus.COMPLETED,
            "block_ids": ["one", "two"],
        }),
        Progress.from_dict({
            "section_id": "s2",
            "list_item_id": "abc123",
            "status": CompletionStatus.IN_PROGRESS,
            "block_ids": ["another-one"],
        }),
    ]