From a4bcbbc37d6a0e065f62de64453106348f37f366 Mon Sep 17 00:00:00 2001 From: Akhil Kumar P <36399231+akhilkumarpilli@users.noreply.github.com> Date: Sat, 20 Jun 2020 01:20:56 +0530 Subject: [PATCH] Allow to close bid when bid state is open (#676) * Allow to close bid when bid state is open * Fix handler tests * Add test for close bid with state open Co-authored-by: Adam Bozanich --- x/market/handler/handler.go | 15 +++++++++++---- x/market/handler/handler_test.go | 25 +++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/x/market/handler/handler.go b/x/market/handler/handler.go index 29a91fe6aa..6ec2286c51 100644 --- a/x/market/handler/handler.go +++ b/x/market/handler/handler.go @@ -66,14 +66,21 @@ func handleMsgCloseBid(ctx sdk.Context, keepers Keepers, msg types.MsgCloseBid) return nil, types.ErrUnknownBid } - lease, found := keepers.Market.GetLease(ctx, types.LeaseID(msg.BidID)) + order, found := keepers.Market.GetOrder(ctx, msg.OrderID()) if !found { - return nil, types.ErrUnknownLeaseForBid + return nil, types.ErrUnknownOrderForBid } - order, found := keepers.Market.GetOrder(ctx, msg.OrderID()) + if bid.State == types.BidOpen { + keepers.Market.OnBidClosed(ctx, bid) + return &sdk.Result{ + Events: ctx.EventManager().Events(), + }, nil + } + + lease, found := keepers.Market.GetLease(ctx, types.LeaseID(msg.BidID)) if !found { - return nil, types.ErrUnknownOrderForBid + return nil, types.ErrUnknownLeaseForBid } if lease.State != types.LeaseActive { diff --git a/x/market/handler/handler_test.go b/x/market/handler/handler_test.go index fb170fa779..282939b747 100644 --- a/x/market/handler/handler_test.go +++ b/x/market/handler/handler_test.go @@ -312,6 +312,8 @@ func TestCloseBidUnknownLease(t *testing.T) { bid, _ := suite.createBid() + suite.mkeeper.OnBidMatched(suite.ctx, bid) + msg := types.MsgCloseBid{ BidID: bid.ID(), } @@ -344,6 +346,29 @@ func TestCloseBidValid(t *testing.T) { }) } +func TestCloseBidWithStateOpen(t *testing.T) { + suite := setupTestSuite(t) + + bid, _ := suite.createBid() + + msg := types.MsgCloseBid{ + BidID: bid.ID(), + } + + res, err := suite.handler(suite.ctx, msg) + require.NotNil(t, res) + require.NoError(t, err) + + t.Run("ensure event created", func(t *testing.T) { + iev := testutil.ParseMarketEvent(t, res.Events[2:]) + require.IsType(t, types.EventBidClosed{}, iev) + + dev := iev.(types.EventBidClosed) + + require.Equal(t, msg.BidID, dev.ID) + }) +} + func TestCloseBidNotActiveLease(t *testing.T) { suite := setupTestSuite(t)