From c829228aca248719d40f8755a21476f3b68b9c35 Mon Sep 17 00:00:00 2001 From: Apr Team Date: Mon, 14 May 2018 11:41:01 +0300 Subject: [PATCH] Fixed deleteting of sport with related event_groups. --- libraries/chain/sport_evaluator.cpp | 15 +++++++++++++++ tests/betting/betting_tests.cpp | 18 +++++++++++------- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/libraries/chain/sport_evaluator.cpp b/libraries/chain/sport_evaluator.cpp index b9d6287d..43329e10 100644 --- a/libraries/chain/sport_evaluator.cpp +++ b/libraries/chain/sport_evaluator.cpp @@ -23,6 +23,7 @@ */ #include #include +#include #include #include #include @@ -80,7 +81,21 @@ void_result sport_delete_evaluator::do_evaluate( const sport_delete_operation& o void_result sport_delete_evaluator::do_apply( const sport_delete_operation& op ) { try { database& _db = db(); + + const auto& event_group_by_sport_id = _db.get_index_type().indices().get(); + auto event_group_it = event_group_by_sport_id.lower_bound(op.sport_id); + auto event_group_end_it = event_group_by_sport_id.upper_bound(op.sport_id); + for (; event_group_it != event_group_end_it; ++event_group_it) + { + _db.modify(*event_group_it, [&](event_group_object& event_group) { + event_group.cancel_events(_db); + }); + + _db.remove(*event_group_it); + } + _db.remove(_db.get(op.sport_id)); + return void_result(); } FC_CAPTURE_AND_RETHROW( (op) ) } diff --git a/tests/betting/betting_tests.cpp b/tests/betting/betting_tests.cpp index eb2c68e2..1e6d97b5 100644 --- a/tests/betting/betting_tests.cpp +++ b/tests/betting/betting_tests.cpp @@ -1531,11 +1531,15 @@ BOOST_AUTO_TEST_CASE(sport_delete_test) { try { - ACTORS( (alice) ); CREATE_ICE_HOCKEY_BETTING_MARKET(false, 0); + delete_sport(ice_hockey.id); + const auto& sport_by_id = db.get_index_type().indices().get(); + const auto& event_group_by_id = db.get_index_type().indices().get(); + BOOST_CHECK(sport_by_id.end() == sport_by_id.find(ice_hockey.id)); + BOOST_CHECK(event_group_by_id.end() == event_group_by_id.find(nhl.id)); } FC_LOG_AND_RETHROW() } @@ -1589,13 +1593,13 @@ BOOST_AUTO_TEST_CASE(event_group_delete_test) { 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& event_1 = create_event({{"en", "event 1"}}, {{"en", "2016-17"}}, nhl.id); + const auto& event_2 = create_event({{"en", "event 2"}}, {{"en", "2016-17"}}, nhl.id); + const auto& event_3 = create_event({{"en", "event 3"}}, {{"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"}}); + const auto& market_group = create_betting_market_group({{"en", "market group 1"}}, event_1.id, betting_market_rules.id, asset_id_type(), false, 0); + const auto& market_1 = create_betting_market(market_group.id, {{"en", "market 1"}}); + const auto& market_2 = create_betting_market(market_group.id, {{"en", "market 2"}}); delete_event_group(nhl.id);