From 67a1e47c6e124b985a104396f2b12e29677b1790 Mon Sep 17 00:00:00 2001 From: Dev Ojha Date: Wed, 2 Jan 2019 13:14:12 -0600 Subject: [PATCH] Fix is_valid bug (#3211) --- types/coin.go | 7 ++++--- types/coin_test.go | 13 +++++++++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/types/coin.go b/types/coin.go index e1ad00ec2..f269cec5e 100644 --- a/types/coin.go +++ b/types/coin.go @@ -142,12 +142,13 @@ func (coins Coins) IsValid() bool { case 0: return true case 1: - return coins[0].IsPositive() - default: if strings.ToLower(coins[0].Denom) != coins[0].Denom { return false } - if !coins[0].IsPositive() { + return coins[0].IsPositive() + default: + // Check single coin case + if !(Coins{coins[0]}).IsValid() { return false } lowDenom := coins[0].Denom diff --git a/types/coin_test.go b/types/coin_test.go index 14d8925cc..3f69ad2cc 100644 --- a/types/coin_test.go +++ b/types/coin_test.go @@ -255,11 +255,18 @@ func TestCoins(t *testing.T) { {"mineral", NewInt(1)}, {"tree", NewInt(1)}, } - mixedCase := Coins{ + mixedCase1 := Coins{ {"gAs", NewInt(1)}, {"MineraL", NewInt(1)}, {"TREE", NewInt(1)}, } + mixedCase2 := Coins{ + {"gAs", NewInt(1)}, + {"mineral", NewInt(1)}, + } + mixedCase3 := Coins{ + {"gAs", NewInt(1)}, + } empty := Coins{ {"gold", NewInt(0)}, } @@ -292,7 +299,9 @@ func TestCoins(t *testing.T) { } assert.True(t, good.IsValid(), "Coins are valid") - assert.False(t, mixedCase.IsValid(), "Coins denoms contain upper case characters") + assert.False(t, mixedCase1.IsValid(), "Coins denoms contain upper case characters") + assert.False(t, mixedCase2.IsValid(), "First Coins denoms contain upper case characters") + assert.False(t, mixedCase3.IsValid(), "Single denom in Coins contains upper case characters") assert.True(t, good.IsPositive(), "Expected coins to be positive: %v", good) assert.False(t, null.IsPositive(), "Expected coins to not be positive: %v", null) assert.True(t, good.IsAllGTE(empty), "Expected %v to be >= %v", good, empty)