Skip to content

Commit

Permalink
update project fee tests
Browse files Browse the repository at this point in the history
  • Loading branch information
aaronc committed Mar 28, 2024
1 parent 7279a19 commit 17362c0
Show file tree
Hide file tree
Showing 3 changed files with 124 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ Feature: Msg/UpdateProjectEnrollment
* class issuer "I02" for "C01"

Rule: valid state transitions performed by issuers which don't remove enrollment entries are:
UNSPECIFIED -> CHANGES_REQUESTED or ACCEPTED
CHANGES_REQUESTED -> ACCEPTED
ACCEPTED -> ACCEPTED with new metadata
Scenario Outline:
UNSPECIFIED -> CHANGES_REQUESTED or ACCEPTED
CHANGES_REQUESTED -> ACCEPTED
ACCEPTED -> ACCEPTED with new metadata
Scenario Outline: <scenario>
Given enrollment for "P001" to "C01" is "<cur_status>" with metadata "<cur_metadata>"
When "<issuer>" updates enrollment for "P001" to "C01" with status "<new_status>" and metadata "<new_metadata>"
Then expect error contains "<err>"
Expand All @@ -25,19 +25,19 @@ Feature: Msg/UpdateProjectEnrollment
}
"""
Examples:
| cur_status | cur_metadata | issuer | new_status | new_metadata | err | expected_status | expected_metadata |
| UNSPECIFIED | abc | I01 | ACCEPTED | foo123 | | ACCEPTED | foo123 |
| UNSPECIFIED | abc | Bob | ACCEPTED | foo123 | unauthorized | UNSPECIFIED | abc |
| CHANGES_REQUESTED | bar456 | I01 | ACCEPTED | foo123 | | ACCEPTED | foo123 |
| CHANGES_REQUESTED | bar456 | Bob | ACCEPTED | foo123 | unauthorized | CHANGES_REQUESTED | bar456 |
| ACCEPTED | foo123 | I01 | ACCEPTED | bar357 | | ACCEPTED | bar357 |
| ACCEPTED | foo123 | Bob | ACCEPTED | bar357 | unauthorized | ACCEPTED | foo123 |
| scenario | cur_status | cur_metadata | issuer | new_status | new_metadata | err | expected_status | expected_metadata |
| I01 unspecified to accepted | UNSPECIFIED | abc | I01 | ACCEPTED | foo123 | | ACCEPTED | foo123 |
| Bob unspecified to accepted | UNSPECIFIED | abc | Bob | ACCEPTED | foo123 | unauthorized | UNSPECIFIED | abc |
| I01 changes requested to accepted | CHANGES_REQUESTED | bar456 | I01 | ACCEPTED | foo123 | | ACCEPTED | foo123 |
| Bob changes requested to accepted | CHANGES_REQUESTED | bar456 | Bob | ACCEPTED | foo123 | unauthorized | CHANGES_REQUESTED | bar456 |
| I01 update accepted metadata | ACCEPTED | foo123 | I01 | ACCEPTED | bar357 | | ACCEPTED | bar357 |
| Bob updated accepted metadata | ACCEPTED | foo123 | Bob | ACCEPTED | bar357 | unauthorized | ACCEPTED | foo123 |

Rule: valid state transitions performed by issuers which remove enrollment entries are:
UNSPECIFIED -> REJECTED
CHANGES_REQUESTED -> REJECTED
ACCEPTED -> TERMINATED
Scenario Outline:
UNSPECIFIED -> REJECTED
CHANGES_REQUESTED -> REJECTED
ACCEPTED -> TERMINATED
Scenario Outline: <scenario>
Given enrollment for "P001" to "C01" is "<cur_status>" with metadata "<cur_metadata>"
When "<issuer>" updates enrollment for "P001" to "C01" with status "<new_status>" and metadata "<new_metadata>"
Then expect error contains "<err>"
Expand All @@ -52,19 +52,19 @@ Feature: Msg/UpdateProjectEnrollment
}
"""
Examples:
| cur_status | cur_metadata | issuer | new_status | new_metadata | err | exists |
| UNSPECIFIED | abc | I01 | REJECTED | baz789 | | false |
| UNSPECIFIED | abc | Bob | REJECTED | baz789 | unauthorized | true |
| CHANGES_REQUESTED | bar456 | I01 | REJECTED | baz789 | | false |
| CHANGES_REQUESTED | bar456 | Bob | REJECTED | baz789 | unauthorized | true |
| ACCEPTED | foo123 | I01 | REJECTED | baz789 | invalid | true |
| ACCEPTED | foo123 | Bob | REJECTED | baz789 | unauthorized | true |
| UNSPECIFIED | abc | I01 | TERMINATED | baz789 | invalid | true |
| UNSPECIFIED | abc | Bob | TERMINATED | baz789 | unauthorized | true |
| CHANGES_REQUESTED | bar456 | I01 | TERMINATED | baz789 | invalid | true |
| CHANGES_REQUESTED | bar456 | Bob | TERMINATED | baz789 | unauthorized | true |
| ACCEPTED | foo123 | I01 | TERMINATED | baz789 | | false |
| ACCEPTED | foo123 | Bob | TERMINATED | baz789 | unauthorized | true |
| scenario | cur_status | cur_metadata | issuer | new_status | new_metadata | err | exists |
| IO1 unspecified to rejected | UNSPECIFIED | abc | I01 | REJECTED | baz789 | | false |
| Bob unspecified to rejected | UNSPECIFIED | abc | Bob | REJECTED | baz789 | unauthorized | true |
| I01 changes requested to rejected | CHANGES_REQUESTED | bar456 | I01 | REJECTED | baz789 | | false |
| Bob changes requested to rejected | CHANGES_REQUESTED | bar456 | Bob | REJECTED | baz789 | unauthorized | true |
| I01 accepted to rejected | ACCEPTED | foo123 | I01 | REJECTED | baz789 | invalid | true |
| Bob accepted to rejected | ACCEPTED | foo123 | Bob | REJECTED | baz789 | unauthorized | true |
| I01 unspecified to terminated | UNSPECIFIED | abc | I01 | TERMINATED | baz789 | invalid | true |
| Bob unspecified to terminated | UNSPECIFIED | abc | Bob | TERMINATED | baz789 | unauthorized | true |
| I01 changes requested to terminated | CHANGES_REQUESTED | bar456 | I01 | TERMINATED | baz789 | invalid | true |
| Bob changes requested to terminated | CHANGES_REQUESTED | bar456 | Bob | TERMINATED | baz789 | unauthorized | true |
| I01 accepted to terminated | ACCEPTED | foo123 | I01 | TERMINATED | baz789 | | false |
| Bob accepted to terminated | ACCEPTED | foo123 | Bob | TERMINATED | baz789 | unauthorized | true |

Rule: any issuer can transition states
Scenario: Issuer 1 requests changes, issuer 2 accepts
Expand Down
16 changes: 15 additions & 1 deletion x/ecocredit/base/keeper/features/msg_update_project_fee.feature
Original file line number Diff line number Diff line change
@@ -1,2 +1,16 @@
Feature: Msg/UpdateProjectFee
TODO
Rule: the authority can update the project fee
Scenario Outline: <scenario>
Given current fee "<cur_fee>"
When "<authority>" updates the fee to "<new_fee>"
Then expect error contains "<err>"
And expect project fee is "<expected_fee>"
Examples:
| scenario | authority | cur_fee | new_fee | expected_fee | err |
| gov creates | gov | | 200 | 200 | |
| gov updates | gov | 100 | 200 | 200 | |
| gov sets zero | gov | 100 | 0 | | |
| gov sets empty | gov | 100 | | | |
| bob creates | bob | | 200 | | invalid authority |
| bob updates | bob | 100 | 200 | 100 | invalid authority |
| bob sets zero | bob | 100 | 0 | 100 | invalid authority |
81 changes: 81 additions & 0 deletions x/ecocredit/base/keeper/msg_update_project_fee_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package keeper

import (
"testing"

basev1beta1 "github.com/cosmos/cosmos-sdk/api/cosmos/base/v1beta1"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/regen-network/gocuke"
"github.com/stretchr/testify/require"

api "github.com/regen-network/regen-ledger/api/v2/regen/ecocredit/v1"
v1 "github.com/regen-network/regen-ledger/x/ecocredit/v3/base/types/v1"
)

type updateProjectFeeSuite struct {
*baseSuite
err error
addrs map[string]sdk.AccAddress
}

func TestUpdateProjectFee(t *testing.T) {
gocuke.NewRunner(t, &updateProjectFeeSuite{}).
Path("./features/msg_update_project_fee.feature").
Run()
}

func (s *updateProjectFeeSuite) Before(t gocuke.TestingT) {
s.baseSuite = setupBase(t)
s.addrs = map[string]sdk.AccAddress{
"gov": s.k.authority,
"bob": s.addr,
}
}

func (s *updateProjectFeeSuite) CurrentFee(amount string) {
if amount != "" {
require.NoError(s.t, s.stateStore.ProjectFeeTable().Save(s.ctx, &api.ProjectFee{
Fee: &basev1beta1.Coin{
Denom: "regen",
Amount: amount,
},
}))
}
}

func (s *updateProjectFeeSuite) UpdatesTheFeeTo(auth, fee string) {
if fee == "" {
_, s.err = s.k.UpdateProjectFee(s.ctx, &v1.MsgUpdateProjectFee{
Authority: s.addrs[auth].String(),
})
} else {
amount, ok := sdk.NewIntFromString(fee)
require.True(s.t, ok, "invalid fee amount")
_, s.err = s.k.UpdateProjectFee(s.ctx, &v1.MsgUpdateProjectFee{
Authority: s.addrs[auth].String(),
Fee: &sdk.Coin{Denom: "regen", Amount: amount},
})
}
}

func (s *updateProjectFeeSuite) ExpectErrorContains(a string) {
if a == "" {
require.NoError(s.t, s.err)
} else {
require.ErrorContains(s.t, s.err, a)
}
}

func (s *updateProjectFeeSuite) ExpectProjectFeeIs(a string) {
actual, err := s.stateStore.ProjectFeeTable().Get(s.ctx)
require.NoError(s.t, err)
require.NotNil(s.t, actual)
if a == "" {
if actual.Fee == nil || actual.Fee.Amount == "" || actual.Fee.Amount == "0" {
return
}
s.t.Fatalf("expected no fee, got %s", actual.Fee.Amount)
} else {
require.Equal(s.t, a, actual.Fee.Amount)
}
}

0 comments on commit 17362c0

Please sign in to comment.