From 329595312746c9b9c623751ee19fe44b77229732 Mon Sep 17 00:00:00 2001 From: Apr Team Date: Fri, 18 May 2018 18:26:47 +0300 Subject: [PATCH] Fixes after Fabian review. Added tests for non proposal delete operations. Added logic for checking of sport and event existence before its updating. --- libraries/chain/event_group_evaluator.cpp | 10 ++++--- .../graphene/chain/event_group_evaluator.hpp | 5 ++++ .../graphene/chain/sport_evaluator.hpp | 5 ++++ libraries/chain/sport_evaluator.cpp | 7 +++-- tests/betting/betting_tests.cpp | 27 +++++++++++++++++++ 5 files changed, 48 insertions(+), 6 deletions(-) diff --git a/libraries/chain/event_group_evaluator.cpp b/libraries/chain/event_group_evaluator.cpp index ef7ad18f..92cad92b 100644 --- a/libraries/chain/event_group_evaluator.cpp +++ b/libraries/chain/event_group_evaluator.cpp @@ -101,6 +101,10 @@ void_result event_group_update_evaluator::do_apply(const event_group_update_oper void_result event_group_delete_evaluator::do_evaluate(const event_group_delete_operation& op) { try { FC_ASSERT(trx_state->_is_proposed_trx); + + //check for event group existence + _event_group = &op.event_group_id(db()); + return void_result(); } FC_CAPTURE_AND_RETHROW( (op) ) } @@ -108,10 +112,8 @@ void_result event_group_delete_evaluator::do_apply(const event_group_delete_oper { try { database& _db = db(); - const auto& event_group = _db.get(op.event_group_id); - event_group.cancel_events(_db); - - _db.remove(event_group); + _event_group->cancel_events(_db); + _db.remove(*_event_group); return void_result(); } FC_CAPTURE_AND_RETHROW( (op) ) } diff --git a/libraries/chain/include/graphene/chain/event_group_evaluator.hpp b/libraries/chain/include/graphene/chain/event_group_evaluator.hpp index 52eecbec..ff207ef3 100644 --- a/libraries/chain/include/graphene/chain/event_group_evaluator.hpp +++ b/libraries/chain/include/graphene/chain/event_group_evaluator.hpp @@ -28,6 +28,8 @@ #include namespace graphene { namespace chain { + + class event_group_object; class event_group_create_evaluator : public evaluator { @@ -60,5 +62,8 @@ namespace graphene { namespace chain { void_result do_evaluate( const event_group_delete_operation& o ); void_result do_apply( const event_group_delete_operation& o ); + + private: + const event_group_object* _event_group = nullptr; }; } } // graphene::chain diff --git a/libraries/chain/include/graphene/chain/sport_evaluator.hpp b/libraries/chain/include/graphene/chain/sport_evaluator.hpp index d1371751..e5e53746 100644 --- a/libraries/chain/include/graphene/chain/sport_evaluator.hpp +++ b/libraries/chain/include/graphene/chain/sport_evaluator.hpp @@ -29,6 +29,8 @@ namespace graphene { namespace chain { + class sport_object; + class sport_create_evaluator : public evaluator { public: @@ -54,6 +56,9 @@ namespace graphene { namespace chain { void_result do_evaluate( const sport_delete_operation& o ); void_result do_apply( const sport_delete_operation& o ); + + private: + const sport_object* _sport = nullptr; }; } } // graphene::chain diff --git a/libraries/chain/sport_evaluator.cpp b/libraries/chain/sport_evaluator.cpp index c073fed4..4582be3e 100644 --- a/libraries/chain/sport_evaluator.cpp +++ b/libraries/chain/sport_evaluator.cpp @@ -75,6 +75,10 @@ void_result sport_update_evaluator::do_apply(const sport_update_operation& op) void_result sport_delete_evaluator::do_evaluate( const sport_delete_operation& op ) { try { FC_ASSERT(trx_state->_is_proposed_trx); + + //check for sport existence + _sport = &op.sport_id(db()); + return void_result(); } FC_CAPTURE_AND_RETHROW( (op) ) } @@ -91,7 +95,6 @@ void_result sport_delete_evaluator::do_apply( const sport_delete_operation& op ) { event_group_it->cancel_events(_db); event_groups_to_remove.push_back(&*event_group_it); - } for (auto event_group: event_groups_to_remove) @@ -99,7 +102,7 @@ void_result sport_delete_evaluator::do_apply( const sport_delete_operation& op ) _db.remove(*event_group); } - _db.remove(_db.get(op.sport_id)); + _db.remove(*_sport); return void_result(); } FC_CAPTURE_AND_RETHROW( (op) ) } diff --git a/tests/betting/betting_tests.cpp b/tests/betting/betting_tests.cpp index 0d23b6d3..de4e0d1a 100644 --- a/tests/betting/betting_tests.cpp +++ b/tests/betting/betting_tests.cpp @@ -1547,6 +1547,19 @@ BOOST_AUTO_TEST_CASE(sport_delete_test) } FC_LOG_AND_RETHROW() } +BOOST_AUTO_TEST_CASE(sport_delete_test_not_proposal) +{ + try + { + CREATE_ICE_HOCKEY_BETTING_MARKET(false, 0); + + sport_delete_operation sport_delete_op; + sport_delete_op.sport_id = ice_hockey.id; + + BOOST_CHECK_THROW(force_operation_by_witnesses(sport_delete_op), fc::exception); + } FC_LOG_AND_RETHROW() +} + BOOST_AUTO_TEST_CASE(event_group_update_test) { try @@ -1646,6 +1659,20 @@ BOOST_AUTO_TEST_CASE(event_group_delete_test) } FC_LOG_AND_RETHROW() } + +BOOST_AUTO_TEST_CASE(event_group_delete_test_not_proposal) +{ + try + { + CREATE_ICE_HOCKEY_BETTING_MARKET(false, 0); + + event_group_delete_operation event_group_delete_op; + event_group_delete_op.event_group_id = nhl.id; + + BOOST_CHECK_THROW(force_operation_by_witnesses(event_group_delete_op), fc::exception); + } FC_LOG_AND_RETHROW() +} + BOOST_AUTO_TEST_CASE(event_update_test) { try