def test_update_txn_author_agreement(taa_handler, write_manager,
                                     taa_input_data, taa_expected_state_data,
                                     taa_expected_digests):
    """ `update_txn_author_agreement` updates state properly """
    state = write_manager.database_manager.get_state(CONFIG_LEDGER_ID)
    written = []

    def _check_state(version):
        digest = taa_expected_digests[version]

        _digest = state.get(
            WriteRequestManager._state_path_taa_version(version),
            isCommitted=False)
        _data = state.get(WriteRequestManager._state_path_taa_digest(digest),
                          isCommitted=False)

        if version in written:
            assert _digest == digest.encode()
            assert (config_state_serializer.deserialize(_data) ==
                    taa_expected_state_data[version])
        else:
            assert _digest is None
            assert _data is None

    for data in taa_input_data:
        taa_handler._update_txn_author_agreement(data.text, data.version,
                                                 data.seq_no, data.txn_time)
        written.append(data.version)

        digest = taa_expected_digests[data.version]
        assert state.get(WriteRequestManager._state_path_taa_latest(),
                         isCommitted=False) == digest.encode()

        for version in taa_expected_state_data:
            _check_state(version)
def test_state_path_taa_latest():
    assert WriteRequestManager._state_path_taa_latest() == b'2:latest'