def test_update_budget_invalid_meta(wallet_3hf: Wallet, budget, json_metadata):
    update_budget_time(wallet_3hf, budget)
    wallet_3hf.create_budget(**budget)
    update_budget_balance(wallet_3hf, budget)
    response = wallet_3hf.update_budget(budget['uuid'], budget['owner'],
                                        json_metadata, budget['type'])
    validate_error_response(response, wallet_3hf.update_budget.__name__,
                            RE_PARSE_ERROR)
    budget_obj = wallet_3hf.get_budget(budget['uuid'], budget['type'])
    assert budget_obj['json_metadata'] == budget["json_metadata"]
def test_update_budget(wallet_3hf: Wallet, budget, json_metadata):
    update_budget_time(wallet_3hf, budget)
    wallet_3hf.create_budget(**budget)
    update_budget_balance(wallet_3hf, budget)
    response = wallet_3hf.update_budget(budget['uuid'], budget['owner'],
                                        json_metadata, budget['type'])
    validate_response(response, wallet_3hf.update_budget.__name__,
                      [('block_num', int)])
    check_virt_ops(wallet_3hf, response["block_num"], response["block_num"],
                   {'update_budget'})
    budget_obj = wallet_3hf.get_budget(budget['uuid'], budget['type'])
    assert budget_obj['json_metadata'] == json_metadata
    assert Amount(budget_obj['balance']) == Amount(budget['balance']) - Amount(
        budget['per_block'])
    assert Amount(budget_obj['budget_pending_outgo']) == Amount(budget['budget_pending_outgo']) + \
        Amount(budget['per_block'])
    changed = {"json_metadata", 'balance', 'budget_pending_outgo'}
    assert all(budget[k] == budget_obj[k] for k in set(budget.keys()).difference(changed)), \
        'Not only budget metadata changed after update\n' \
        'before: {}\n' \
        'after: {}'.format(budget, budget_obj)