def test_update_taa_aml(taa_aml_handler, taa_aml_input_data, taa_handler,
                        write_manager, taa_aml_expected_state_data,
                        taa_aml_expected_data):
    """ `update_txn_author_agreement` updates state properly """
    state = write_manager.database_manager.get_state(CONFIG_LEDGER_ID)
    written = []

    def _check_state(version):
        expected_data = taa_aml_expected_data[version]

        _data = state.get(
            WriteRequestManager._state_path_taa_aml_version(version),
            isCommitted=False)

        if version in written:
            assert (config_state_serializer.deserialize(_data)[VALUE] ==
                    config_state_serializer.deserialize(expected_data))
        else:
            assert _data is None

    for data in taa_aml_input_data:
        taa_aml_handler._update_txn_author_agreement_acceptance_mechanisms(
            {
                AML_VERSION: data.version,
                AML: data.aml,
                AML_CONTEXT: data.amlContext
            }, data.seq_no, data.txn_time)
        written.append(data.version)

        data_d = data._asdict()
        assert state.get(WriteRequestManager._state_path_taa_aml_latest(),
                         isCommitted=False) == encode_state_value(
                             {
                                 AML_CONTEXT: data_d[AML_CONTEXT],
                                 AML: data_d[AML],
                                 AML_VERSION: data_d[AML_VERSION]
                             }, data_d['seq_no'], data_d['txn_time'])

        for version in taa_aml_expected_state_data:
            _check_state(version)
def test_state_path_taa_aml_latest():
    assert WriteRequestManager._state_path_taa_aml_latest() == b'3:latest'