diff --git a/libraries/chain/event_group_evaluator.cpp b/libraries/chain/event_group_evaluator.cpp index bb811d59..9faaf7e4 100644 --- a/libraries/chain/event_group_evaluator.cpp +++ b/libraries/chain/event_group_evaluator.cpp @@ -108,17 +108,12 @@ void_result event_group_delete_evaluator::do_apply(const event_group_delete_oper { try { database& _db = db(); - const auto& events_for_group = _db.get_index_type().indices().get(); - auto event_it = events_for_group.lower_bound(op.event_group_id); - auto event_end_it = events_for_group.upper_bound(op.event_group_id); - for (; event_it != event_end_it; ++event_it) - { - _db.modify( *event_it, [&](event_object& event_obj) { - event_obj.dispatch_new_status(_db, event_status::canceled); - }); - } + const auto& event_group = _db.get(op.event_group_id); + _db.modify(event_group, [&](event_group_object& mutable_event_group) { + mutable_event_group.cancel_events(_db); + }); - _db.remove(_db.get(op.event_group_id)); + _db.remove(event_group); return void_result(); } FC_CAPTURE_AND_RETHROW( (op) ) } diff --git a/libraries/chain/event_group_object.cpp b/libraries/chain/event_group_object.cpp new file mode 100644 index 00000000..c9350724 --- /dev/null +++ b/libraries/chain/event_group_object.cpp @@ -0,0 +1,22 @@ +#define DEFAULT_LOGGER "betting" + +#include +#include +#include + +namespace graphene { namespace chain { + +void event_group_object::cancel_events(database& db) +{ + const auto& events_for_group = db.get_index_type().indices().get(); + auto event_it = events_for_group.lower_bound(id); + auto event_end_it = events_for_group.upper_bound(id); + for (; event_it != event_end_it; ++event_it) + { + db.modify( *event_it, [&](event_object& event_obj) { + event_obj.dispatch_new_status(db, event_status::canceled); + }); + } +} + +}} diff --git a/libraries/chain/include/graphene/chain/event_group_object.hpp b/libraries/chain/include/graphene/chain/event_group_object.hpp index f47eda31..231bf8f0 100644 --- a/libraries/chain/include/graphene/chain/event_group_object.hpp +++ b/libraries/chain/include/graphene/chain/event_group_object.hpp @@ -41,6 +41,8 @@ class event_group_object : public graphene::db::abstract_object< event_group_obj internationalized_string_type name; sport_id_type sport_id; + + void cancel_events(database& db); }; typedef multi_index_container< diff --git a/tests/betting/betting_tests.cpp b/tests/betting/betting_tests.cpp index 2329d0da..eb2c68e2 100644 --- a/tests/betting/betting_tests.cpp +++ b/tests/betting/betting_tests.cpp @@ -1587,13 +1587,16 @@ BOOST_AUTO_TEST_CASE(event_group_delete_test) { try { - ACTORS( (alice)(bob) ); CREATE_ICE_HOCKEY_BETTING_MARKET(false, 0); const auto& event_1 = create_event({{"en", "Washington Capitals/Chicago Blackhawks1"}}, {{"en", "2016-17"}}, nhl.id); const auto& event_2 = create_event({{"en", "Washington Capitals/Chicago Blackhawks2"}}, {{"en", "2016-17"}}, nhl.id); const auto& event_3 = create_event({{"en", "Washington Capitals/Chicago Blackhawks3"}}, {{"en", "2016-17"}}, nhl.id); + const auto& market_group = create_betting_market_group({{"en", "Moneyline1"}}, event_1.id, betting_market_rules.id, asset_id_type(), false, 0); + const auto& market_1 = create_betting_market(market_group.id, {{"en", "M. Cilic defeats R. Federer1"}}); + const auto& market_2 = create_betting_market(market_group.id, {{"en", "M. Cilic defeats R. Federer2"}}); + delete_event_group(nhl.id); const auto& event_group_by_id = db.get_index_type().indices().get(); @@ -1602,6 +1605,11 @@ BOOST_AUTO_TEST_CASE(event_group_delete_test) BOOST_CHECK(event_status::canceled == event_1.get_status()); BOOST_CHECK(event_status::canceled == event_2.get_status()); BOOST_CHECK(event_status::canceled == event_3.get_status()); + + BOOST_CHECK(betting_market_group_status::canceled == market_group.get_status()); + + BOOST_CHECK(betting_market_status::canceled == market_1.get_status()); + BOOST_CHECK(betting_market_status::canceled == market_2.get_status()); } FC_LOG_AND_RETHROW() }