Skip to content

Commit

Permalink
test(logic): add locked_coins unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
bdeneux committed Jan 19, 2023
1 parent 48b10e5 commit 8e7251d
Showing 1 changed file with 152 additions and 0 deletions.
152 changes: 152 additions & 0 deletions x/logic/predicate/bank_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ func TestBank(t *testing.T) {
cases := []struct {
balances []bank.Balance
spendableCoins []bank.Balance
lockedCoins []bank.Balance
program string
query string
wantResult []types.TermResults
Expand Down Expand Up @@ -268,6 +269,150 @@ func TestBank(t *testing.T) {
wantResult: []types.TermResults{{"X": "[uknow-100]"}},
wantError: fmt.Errorf("bank_spendable_coins/2: decoding bech32 failed: invalid bech32 string length 3"),
},

{
balances: []bank.Balance{
{
Address: "okp41ffd5wx65l407yvm478cxzlgygw07h79sq0m3fm",
Coins: sdk.NewCoins(sdk.NewCoin("uknow", sdk.NewInt(1000))),
},
},
spendableCoins: []bank.Balance{
{
Address: "okp41ffd5wx65l407yvm478cxzlgygw07h79sq0m3fm",
Coins: sdk.NewCoins(sdk.NewCoin("uknow", sdk.NewInt(100))),
},
},
lockedCoins: []bank.Balance{
{
Address: "okp41ffd5wx65l407yvm478cxzlgygw07h79sq0m3fm",
Coins: sdk.NewCoins(sdk.NewCoin("uknow", sdk.NewInt(900))),
},
},
query: `bank_locked_coins('okp41ffd5wx65l407yvm478cxzlgygw07h79sq0m3fm', X).`,
wantResult: []types.TermResults{{"X": "[uknow-900]"}},
},
{
lockedCoins: []bank.Balance{
{
Address: "okp41ffd5wx65l407yvm478cxzlgygw07h79sq0m3fm",
Coins: sdk.NewCoins(sdk.NewCoin("uatom", sdk.NewInt(100))),
},
},
query: `bank_locked_coins('okp41ffd5wx65l407yvm478cxzlgygw07h79sq0m3fm', [X]).`,
wantResult: []types.TermResults{{"X": "uatom-100"}},
},
{
lockedCoins: []bank.Balance{
{
Address: "okp41ffd5wx65l407yvm478cxzlgygw07h79sq0m3fm",
Coins: sdk.NewCoins(sdk.NewCoin("uknow", sdk.NewInt(420)), sdk.NewCoin("uatom", sdk.NewInt(589))),
},
},
query: `bank_locked_coins('okp41ffd5wx65l407yvm478cxzlgygw07h79sq0m3fm', [X, Y]).`,
wantResult: []types.TermResults{{"X": "uatom-589", "Y": "uknow-420"}},
},
{
lockedCoins: []bank.Balance{
{
Address: "okp41ffd5wx65l407yvm478cxzlgygw07h79sq0m3fm",
Coins: sdk.NewCoins(sdk.NewCoin("uknow", sdk.NewInt(420)), sdk.NewCoin("uatom", sdk.NewInt(589))),
},
},
query: `bank_locked_coins('okp41ffd5wx65l407yvm478cxzlgygw07h79sq0m3fm', [-(D, A) | _]).`,
wantResult: []types.TermResults{{"D": "uatom", "A": "589"}},
},
{
lockedCoins: []bank.Balance{
{
Address: "okp41ffd5wx65l407yvm478cxzlgygw07h79sq0m3fm",
Coins: sdk.NewCoins(sdk.NewCoin("uknow", sdk.NewInt(420)), sdk.NewCoin("uatom", sdk.NewInt(493))),
},
{
Address: "okp41wze8mn5nsgl9qrgazq6a92fvh7m5e6pslyrz38",
Coins: sdk.NewCoins(sdk.NewCoin("uknow", sdk.NewInt(589)), sdk.NewCoin("uatom", sdk.NewInt(693))),
},
},
query: `bank_locked_coins('okp41wze8mn5nsgl9qrgazq6a92fvh7m5e6pslyrz38', [_, X]).`,
wantResult: []types.TermResults{{"X": "uknow-589"}},
},
{
lockedCoins: []bank.Balance{
{
Address: "okp41ffd5wx65l407yvm478cxzlgygw07h79sq0m3fm",
Coins: sdk.NewCoins(sdk.NewCoin("uknow", sdk.NewInt(420)), sdk.NewCoin("uatom", sdk.NewInt(493))),
},
{
Address: "okp41wze8mn5nsgl9qrgazq6a92fvh7m5e6pslyrz38",
Coins: sdk.NewCoins(sdk.NewCoin("uknow", sdk.NewInt(589)), sdk.NewCoin("uatom", sdk.NewInt(693))),
},
},
program: `bank_locked_has_coin(A, D, V) :- bank_locked_coins(A, R), member(D-V, R).`,
query: `bank_locked_has_coin('okp41wze8mn5nsgl9qrgazq6a92fvh7m5e6pslyrz38', 'uknow', V).`,
wantResult: []types.TermResults{{"V": "589"}},
},
{
lockedCoins: []bank.Balance{
{
Address: "okp41wze8mn5nsgl9qrgazq6a92fvh7m5e6pslyrz38",
Coins: sdk.NewCoins(
sdk.NewCoin("uknow", sdk.NewInt(589)),
sdk.NewCoin("uatom", sdk.NewInt(693)),
sdk.NewCoin("uband", sdk.NewInt(4282)),
sdk.NewCoin("uakt", sdk.NewInt(4099)),
sdk.NewCoin("ukava", sdk.NewInt(836)),
sdk.NewCoin("uscrt", sdk.NewInt(599)),
),
},
},
program: `bank_locked_has_sufficient_coin(A, C, S) :- bank_locked_coins(A, R), member(C, R),
-(_, V) = C, compare(>, V, S).`,
query: `bank_locked_has_sufficient_coin('okp41wze8mn5nsgl9qrgazq6a92fvh7m5e6pslyrz38', C, 600).`,
wantResult: []types.TermResults{{"C": "uakt-4099"}, {"C": "uatom-693"}, {"C": "uband-4282"}, {"C": "ukava-836"}},
},
{
balances: []bank.Balance{
{
Address: "okp41ffd5wx65l407yvm478cxzlgygw07h79sq0m3fm",
Coins: sdk.NewCoins(sdk.NewCoin("uknow", sdk.NewInt(1220))),
},
{
Address: "okp41wze8mn5nsgl9qrgazq6a92fvh7m5e6pslyrz38",
Coins: sdk.NewCoins(sdk.NewCoin("uatom", sdk.NewInt(8000))),
},
},
spendableCoins: []bank.Balance{
{
Address: "okp41ffd5wx65l407yvm478cxzlgygw07h79sq0m3fm",
Coins: sdk.NewCoins(sdk.NewCoin("uknow", sdk.NewInt(420))),
},
{
Address: "okp41wze8mn5nsgl9qrgazq6a92fvh7m5e6pslyrz38",
Coins: sdk.NewCoins(sdk.NewCoin("uatom", sdk.NewInt(589))),
},
},
lockedCoins: []bank.Balance{
{
Address: "okp41ffd5wx65l407yvm478cxzlgygw07h79sq0m3fm",
Coins: sdk.NewCoins(sdk.NewCoin("uknow", sdk.NewInt(800))),
},
{
Address: "okp41wze8mn5nsgl9qrgazq6a92fvh7m5e6pslyrz38",
Coins: sdk.NewCoins(sdk.NewCoin("uatom", sdk.NewInt(7411))),
},
},
query: `bank_locked_coins(Accounts, SpendableCoins).`,
wantResult: []types.TermResults{
{"Accounts": "okp41ffd5wx65l407yvm478cxzlgygw07h79sq0m3fm", "SpendableCoins": "[uknow-420]"},
{"Accounts": "okp41wze8mn5nsgl9qrgazq6a92fvh7m5e6pslyrz38", "SpendableCoins": "[uatom-589]"},
},
},
{
lockedCoins: []bank.Balance{},
query: `bank_locked_coins('foo', X).`,
wantResult: []types.TermResults{{"X": "[uknow-100]"}},
wantError: fmt.Errorf("bank_locked_coins/2: decoding bech32 failed: invalid bech32 string length 3"),
},
}
for nc, tc := range cases {
Convey(fmt.Sprintf("Given the query #%d: %s", nc, tc.query), func() {
Expand Down Expand Up @@ -295,6 +440,13 @@ func TestBank(t *testing.T) {
AnyTimes().
Return(balance.Coins)
}
for _, balance := range tc.lockedCoins {
bankKeeper.
EXPECT().
LockedCoins(ctx, sdk.MustAccAddressFromBech32(balance.Address)).
AnyTimes().
Return(balance.Coins)
}
bankKeeper.
EXPECT().
GetAccountsBalances(ctx).
Expand Down

0 comments on commit 8e7251d

Please sign in to comment.