From 36473402694d15e1e378fef15282f965a7859013 Mon Sep 17 00:00:00 2001 From: Bjarte Stien Karlsen Date: Tue, 14 Jun 2022 13:39:16 +0200 Subject: [PATCH 1/6] improve test coverage --- Makefile | 2 +- go.mod | 1 + go.sum | 5 +++++ overflow/account.go | 6 +++++- overflow/account_test.go | 20 ++++++++++++-------- overflow/setup.go | 20 +++++++++++++++++--- 6 files changed, 41 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index a40d7d9..9d36415 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ .PHONY: coveralls cover install-gotestsum test-report coveralls: - go test -coverprofile=profile.cov -covermode=atomic -coverpkg=github.com/bjartek/overflow/overflow -v ./... + go test -coverprofile=profile.cov -covermode=atomic -coverpkg=github.com/bjartek/overflow -v ./... cover: test go tool cover -html=profile.cov diff --git a/go.mod b/go.mod index 38f91b5..ec4a13a 100644 --- a/go.mod +++ b/go.mod @@ -90,6 +90,7 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/psiemens/sconfig v0.1.0 // indirect github.com/rivo/uniseg v0.2.1-0.20211004051800-57c86be7915a // indirect + github.com/sanity-io/litter v1.5.5 // indirect github.com/sethvargo/go-retry v0.2.3 // indirect github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect diff --git a/go.sum b/go.sum index e1593c9..732c7eb 100644 --- a/go.sum +++ b/go.sum @@ -283,6 +283,7 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/cskr/pubsub v1.0.2/go.mod h1:/8MzYXk/NJAz782G8RPkFzXTZVu63VotefPnR9TIRis= github.com/dapperlabs/testingdock v0.4.2/go.mod h1:S45YfB1J1mbOeLHhJROx3dFZfMCVSxTgSU9vZ15Oq18= github.com/dapperlabs/testingdock v0.4.4/go.mod h1:HeTbuHG1J4yt4n7NlZSyuk5c5fmyz6hECbyV+36Ku7Q= +github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -1520,6 +1521,7 @@ github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6J github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/polydawn/refmt v0.0.0-20190807091052-3d65705ee9f1/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= @@ -1617,6 +1619,8 @@ github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFo github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +github.com/sanity-io/litter v1.5.5 h1:iE+sBxPBzoK6uaEP5Lt3fHNgpKcHXc/A2HGETy0uJQo= +github.com/sanity-io/litter v1.5.5/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF7bU2UI5U= github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/schollz/progressbar/v3 v3.7.6/go.mod h1:Y9mmL2knZj3LUaBDyBEzFdPrymIr08hnlFMZmfxwbx4= github.com/schollz/progressbar/v3 v3.8.3/go.mod h1:pWnVCjSBZsT2X3nx9HfRdnCDrpbevliMeoEVhStwHko= @@ -1721,6 +1725,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v0.0.0-20161117074351-18a02ba4a312/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= diff --git a/overflow/account.go b/overflow/account.go index 2272a94..02b4386 100644 --- a/overflow/account.go +++ b/overflow/account.go @@ -60,6 +60,10 @@ func (f *Overflow) InitializeContracts() *Overflow { // GetAccount takes the account name and returns the state of that account on the given network. func (f *Overflow) GetAccount(key string) (*flow.Account, error) { - rawAddress := f.Account(key).Address() + account, err := f.AccountE(key) + if err != nil { + return nil, err + } + rawAddress := account.Address() return f.Services.Accounts.Get(rawAddress) } diff --git a/overflow/account_test.go b/overflow/account_test.go index a929bc6..2044728 100644 --- a/overflow/account_test.go +++ b/overflow/account_test.go @@ -25,14 +25,18 @@ func TestGetAccount(t *testing.T) { assert.Equal(t, "f8d6e0586b0a20c7", account.Address.String()) }) - // TODO: test case for non-existent account - // For some reason, when fetching an account that doesnt exist, - // flowkit's Services.Accounts.Get() method throws an error & exits, rather than just returning an error. + t.Run("Should return an error if account doesn't exist", func(t *testing.T) { + g, _ := NewTestingEmulator().StartE() + _, err := g.GetAccount("doesnotexist") + assert.ErrorContains(t, err, "could not find account with name emulator-doesnotexist in the configuration") + + }) - // t.Run("Should return an error if account doesn't exist", func(t *testing.T) { - // g, _ := NewTestingEmulator().StartE() - // account, _ := g.GetAccount("doesnotexist") + t.Run("Should return an error if sa does not exist", func(t *testing.T) { + _, err := NewTestingEmulator().SetServiceSuffix("dummy").StartE() + + assert.ErrorContains(t, err, "could not find account with name emulator-dummy in the configuration") + + }) - // assert.Nil(t, account) - // }) } diff --git a/overflow/setup.go b/overflow/setup.go index 5e24c41..cd3fab2 100644 --- a/overflow/setup.go +++ b/overflow/setup.go @@ -39,20 +39,29 @@ func (o *Overflow) ServiceAccountName() string { } //Account fetch an account from flow.json, prefixing the name with network- as default (can be turned off) -func (f *Overflow) Account(key string) *flowkit.Account { +func (f *Overflow) AccountE(key string) (*flowkit.Account, error) { if f.PrependNetworkToAccountNames { key = fmt.Sprintf("%s-%s", f.Network, key) } account, err := f.State.Accounts().ByName(key) if err != nil { - log.Fatal(err) + return nil, err } - return account + return account, nil } +//Account fetch an account from flow.json, prefixing the name with network- as default (can be turned off) +func (f *Overflow) Account(key string) *flowkit.Account { + a, err := f.AccountE(key) + if err != nil { + log.Fatal(err) + } + return a +} + type OverflowBuilder struct { Network string InMemory bool @@ -129,6 +138,11 @@ func (o *OverflowBuilder) DoNotPrependNetworkToAccountNames() *OverflowBuilder { return o } +func (o *OverflowBuilder) SetServiceSuffix(suffix string) *OverflowBuilder { + o.ServiceSuffix = suffix + return o +} + func (o *OverflowBuilder) NoneLog() *OverflowBuilder { o.LogLevel = output.NoneLog return o From f0d55c6deed37c283b9dd229448841f9df52a2f0 Mon Sep 17 00:00:00 2001 From: Bjarte Stien Karlsen Date: Tue, 14 Jun 2022 13:41:14 +0200 Subject: [PATCH 2/6] tidy fix --- go.mod | 1 - go.sum | 5 ----- 2 files changed, 6 deletions(-) diff --git a/go.mod b/go.mod index ec4a13a..38f91b5 100644 --- a/go.mod +++ b/go.mod @@ -90,7 +90,6 @@ require ( github.com/pmezard/go-difflib v1.0.0 // indirect github.com/psiemens/sconfig v0.1.0 // indirect github.com/rivo/uniseg v0.2.1-0.20211004051800-57c86be7915a // indirect - github.com/sanity-io/litter v1.5.5 // indirect github.com/sethvargo/go-retry v0.2.3 // indirect github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect diff --git a/go.sum b/go.sum index 732c7eb..e1593c9 100644 --- a/go.sum +++ b/go.sum @@ -283,7 +283,6 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/cskr/pubsub v1.0.2/go.mod h1:/8MzYXk/NJAz782G8RPkFzXTZVu63VotefPnR9TIRis= github.com/dapperlabs/testingdock v0.4.2/go.mod h1:S45YfB1J1mbOeLHhJROx3dFZfMCVSxTgSU9vZ15Oq18= github.com/dapperlabs/testingdock v0.4.4/go.mod h1:HeTbuHG1J4yt4n7NlZSyuk5c5fmyz6hECbyV+36Ku7Q= -github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -1521,7 +1520,6 @@ github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6J github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/polydawn/refmt v0.0.0-20190807091052-3d65705ee9f1/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= @@ -1619,8 +1617,6 @@ github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFo github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sanity-io/litter v1.5.5 h1:iE+sBxPBzoK6uaEP5Lt3fHNgpKcHXc/A2HGETy0uJQo= -github.com/sanity-io/litter v1.5.5/go.mod h1:9gzJgR2i4ZpjZHsKvUXIRQVk7P+yM3e+jAF7bU2UI5U= github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/schollz/progressbar/v3 v3.7.6/go.mod h1:Y9mmL2knZj3LUaBDyBEzFdPrymIr08hnlFMZmfxwbx4= github.com/schollz/progressbar/v3 v3.8.3/go.mod h1:pWnVCjSBZsT2X3nx9HfRdnCDrpbevliMeoEVhStwHko= @@ -1725,7 +1721,6 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v0.0.0-20161117074351-18a02ba4a312/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= From e919c678ccb47a1a1b56515de3f7e7e9e89f5591 Mon Sep 17 00:00:00 2001 From: Bjarte Stien Karlsen Date: Tue, 14 Jun 2022 13:44:14 +0200 Subject: [PATCH 3/6] reverse coveralls fix --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 9d36415..a40d7d9 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ .PHONY: coveralls cover install-gotestsum test-report coveralls: - go test -coverprofile=profile.cov -covermode=atomic -coverpkg=github.com/bjartek/overflow -v ./... + go test -coverprofile=profile.cov -covermode=atomic -coverpkg=github.com/bjartek/overflow/overflow -v ./... cover: test go tool cover -html=profile.cov From e47addef893572501462bd1319fddd12bff20668 Mon Sep 17 00:00:00 2001 From: Bjarte Stien Karlsen Date: Tue, 14 Jun 2022 14:21:12 +0200 Subject: [PATCH 4/6] started on better tests --- examples/script_integration_test.go | 17 ++++++++++ examples/transaction_integration_test.go | 19 +++++++++++ overflow/argument.go | 17 ++++++++-- overflow/transaction.go | 43 +++++++++++++++++------- 4 files changed, 80 insertions(+), 16 deletions(-) diff --git a/examples/script_integration_test.go b/examples/script_integration_test.go index efcc1ac..735df8c 100644 --- a/examples/script_integration_test.go +++ b/examples/script_integration_test.go @@ -77,6 +77,23 @@ func TestScript(t *testing.T) { assert.Contains(t, err.Error(), "json: cannot unmarshal array into Go value of type main.TestReturn") }) + t.Run("Named arguments", func(t *testing.T) { + value := g.ScriptFromFile("test"). + NamedArguments(map[string]string{ + "account": "first", + }).RunReturnsInterface() + + assert.Equal(t, "0x01cf0e2f2f715450", value) + }) + + t.Run("Named arguments blank", func(t *testing.T) { + value := g.ScriptFromFile("block"). + NamedArguments(map[string]string{}). + RunReturnsInterface() + + assert.Equal(t, "4", value) + }) + } type TestReturn struct { diff --git a/examples/transaction_integration_test.go b/examples/transaction_integration_test.go index b07c0a7..74a1a09 100644 --- a/examples/transaction_integration_test.go +++ b/examples/transaction_integration_test.go @@ -134,4 +134,23 @@ transaction(user:Address) { assert.NotContains(t, str.String(), "0x1cf0e2f2f715450") }) + + t.Run("Named arguments", func(t *testing.T) { + g.TransactionFromFile("mint_tokens"). + SignProposeAndPayAsService(). + NamedArguments(map[string]string{ + "recipient": "first", + "amount": "100.0", + }). + Test(t).AssertSuccess() + }) + t.Run("Named arguments error if not all arguments", func(t *testing.T) { + g.TransactionFromFile("mint_tokens"). + SignProposeAndPayAsService(). + NamedArguments(map[string]string{ + "recipient": "first", + }). + Test(t).AssertFailure("the following arguments where not present [amount]") + }) + } diff --git a/overflow/argument.go b/overflow/argument.go index c27c1fb..25febe8 100644 --- a/overflow/argument.go +++ b/overflow/argument.go @@ -21,8 +21,7 @@ type FlowArgumentsBuilder struct { Arguments []cadence.Value } -func (f *Overflow) ParseArgumentsWithoutType(fileName string, code []byte, inputArgs map[string]string) (scriptArgs []cadence.Value, err error) { - +func (f *Overflow) ParseArgumentsWithoutType(fileName string, code []byte, inputArgs map[string]string) ([]cadence.Value, error) { var resultArgs []cadence.Value = make([]cadence.Value, 0) codes := map[common.LocationID]string{} @@ -50,9 +49,21 @@ func (f *Overflow) ParseArgumentsWithoutType(fileName string, code []byte, input return resultArgs, nil } + argumentNotPresent := []string{} args := []string{} for _, parameter := range parameterList { - args = append(args, inputArgs[parameter.Identifier.Identifier]) + parameterName := parameter.Identifier.Identifier + value, ok := inputArgs[parameterName] + if !ok { + argumentNotPresent = append(argumentNotPresent, parameterName) + } else { + args = append(args, value) + } + } + + if len(argumentNotPresent) > 0 { + err := fmt.Errorf("the following arguments where not present %v", argumentNotPresent) + return nil, err } if len(parameterList) != len(args) { diff --git a/overflow/transaction.go b/overflow/transaction.go index ec774f1..90c0741 100644 --- a/overflow/transaction.go +++ b/overflow/transaction.go @@ -4,7 +4,6 @@ import ( "encoding/json" "fmt" "io" - "log" "os" "time" @@ -50,11 +49,12 @@ func (t FlowTransactionBuilder) NamedArguments(args map[string]string) FlowTrans codeFileName := fmt.Sprintf("%s/%s.cdc", t.BasePath, t.FileName) code, err := t.getContractCode(codeFileName) if err != nil { - panic(err) + t.Error = err } parseArgs, err := t.Overflow.ParseArgumentsWithoutType(t.FileName, code, args) if err != nil { - panic(err) + fmt.Println(err.Error()) + t.Error = err } t.Arguments = parseArgs return t @@ -102,7 +102,7 @@ func (t FlowTransactionBuilder) SignProposeAndPayAsService() FlowTransactionBuil key := t.Overflow.ServiceAccountName() account, err := t.Overflow.State.Accounts().ByName(key) if err != nil { - log.Fatal(err) + t.Error = err } t.MainSigner = account return t @@ -142,27 +142,37 @@ func (t FlowTransactionBuilder) RunGetIdFromEventPrintAll(eventName string, fiel } PrintEvents(result, map[string][]string{}) - return getUInt64FieldFromEvent(result, eventName, fieldName) + number, err := getUInt64FieldFromEvent(result, eventName, fieldName) + if err != nil { + panic(err) + } + return number } -func getUInt64FieldFromEvent(result []flow.Event, eventName string, fieldName string) uint64 { +func getUInt64FieldFromEvent(result []flow.Event, eventName string, fieldName string) (uint64, error) { for _, event := range result { ev := ParseEvent(event, uint64(0), time.Unix(0, 0), []string{}) if ev.Name == eventName { - return ev.GetFieldAsUInt64(fieldName) + return ev.GetFieldAsUInt64(fieldName), nil } } - panic("did not find field") + return 0, fmt.Errorf("did not find field %s", fieldName) } func (t FlowTransactionBuilder) RunGetIdFromEvent(eventName string, fieldName string) uint64 { result, err := t.RunE() if err != nil { - panic(err) + t.Error = err + return 0 } - return getUInt64FieldFromEvent(result, eventName, fieldName) + value, err := getUInt64FieldFromEvent(result, eventName, fieldName) + if err != nil { + t.Error = err + return 0 + } + return value } func (t FlowTransactionBuilder) RunGetIds(eventName string, fieldName string) ([]uint64, error) { @@ -215,15 +225,17 @@ func (t FlowTransactionBuilder) RunGetEventsWithName(eventName string) []Formate // RunE runs returns events and error func (t FlowTransactionBuilder) RunE() ([]flow.Event, error) { - result := t.Send() return result.RawEvents, result.Err } // The new main way of running an overflow transaction func (t FlowTransactionBuilder) Send() *OverflowResult { - result := &OverflowResult{} + if t.Error != nil { + result.Err = t.Error + return result + } if t.MainSigner == nil { fmt.Println("err") @@ -359,6 +371,7 @@ type FlowTransactionBuilder struct { PayloadSigners []*flowkit.Account GasLimit uint64 BasePath string + Error error } type OverflowResult struct { @@ -372,7 +385,11 @@ type OverflowResult struct { } func (o OverflowResult) GetIdFromEvent(eventName string, fieldName string) uint64 { - return getUInt64FieldFromEvent(o.RawEvents, eventName, fieldName) + number, err := getUInt64FieldFromEvent(o.RawEvents, eventName, fieldName) + if err != nil { + panic(err) + } + return number } func (o OverflowResult) GetIdsFromEvent(eventName string, fieldName string) []uint64 { From 4347f3258ad2af6ba387be076d7752bb83f9ec08 Mon Sep 17 00:00:00 2001 From: Bjarte Karlsen Date: Tue, 14 Jun 2022 17:23:10 +0200 Subject: [PATCH 5/6] tested more in transaction --- examples/transaction_integration_test.go | 9 +++++++++ overflow/transaction.go | 8 ++++++-- overflow/transaction_test.go | 5 +++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/examples/transaction_integration_test.go b/examples/transaction_integration_test.go index 74a1a09..b8b8ee2 100644 --- a/examples/transaction_integration_test.go +++ b/examples/transaction_integration_test.go @@ -153,4 +153,13 @@ transaction(user:Address) { Test(t).AssertFailure("the following arguments where not present [amount]") }) + t.Run("Named arguments error if file not correct", func(t *testing.T) { + g.TransactionFromFile("mint_tokens2"). + SignProposeAndPayAsService(). + NamedArguments(map[string]string{ + "recipient": "first", + }). + Test(t).AssertFailure("Could not read transaction file from path=./transactions/mint_tokens2.cdc") + }) + } diff --git a/overflow/transaction.go b/overflow/transaction.go index 90c0741..73f9dc2 100644 --- a/overflow/transaction.go +++ b/overflow/transaction.go @@ -49,11 +49,11 @@ func (t FlowTransactionBuilder) NamedArguments(args map[string]string) FlowTrans codeFileName := fmt.Sprintf("%s/%s.cdc", t.BasePath, t.FileName) code, err := t.getContractCode(codeFileName) if err != nil { + fmt.Println(err.Error()) t.Error = err } parseArgs, err := t.Overflow.ParseArgumentsWithoutType(t.FileName, code, args) if err != nil { - fmt.Println(err.Error()) t.Error = err } t.Arguments = parseArgs @@ -93,7 +93,11 @@ func (t FlowTransactionBuilder) Gas(limit uint64) FlowTransactionBuilder { // SignProposeAndPayAs set the payer, proposer and envelope signer func (t FlowTransactionBuilder) SignProposeAndPayAs(signer string) FlowTransactionBuilder { - t.MainSigner = t.Overflow.Account(signer) + account, err := t.Overflow.AccountE(signer) + if err != nil { + t.Error = err + } + t.MainSigner = account return t } diff --git a/overflow/transaction_test.go b/overflow/transaction_test.go index 2d479a8..33c3795 100644 --- a/overflow/transaction_test.go +++ b/overflow/transaction_test.go @@ -19,6 +19,11 @@ func TestTransactionArguments(t *testing.T) { assert.Equal(t, uint64(100), builder.GasLimit) }) + t.Run("Signer", func(t *testing.T) { + builder := g.Transaction("").SignProposeAndPayAs("asd") + assert.ErrorContains(t, builder.Error, "asd") + }) + t.Run("Argument test builder", func(t *testing.T) { ufix, _ := cadence.NewUFix64("1.0") builder := g.Transaction("").Args(g.Arguments().UFix64(1.0)) From 1aff232344e7452816a16aba5db41b858ac9a70f Mon Sep 17 00:00:00 2001 From: Bjarte Karlsen Date: Tue, 14 Jun 2022 17:43:49 +0200 Subject: [PATCH 6/6] test setup --- overflow/setup.go | 6 +--- overflow/setup_test.go | 69 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 5 deletions(-) create mode 100644 overflow/setup_test.go diff --git a/overflow/setup.go b/overflow/setup.go index cd3fab2..044d539 100644 --- a/overflow/setup.go +++ b/overflow/setup.go @@ -94,15 +94,11 @@ func NewOverflow() *OverflowBuilder { } func NewOverflowBuilder(network string, newEmulator bool, logLevel int) *OverflowBuilder { - if network == "" { - network = "embedded" - } - inMemory := false deployContracts := newEmulator initializeAccounts := newEmulator - if network == "embedded" { + if network == "embedded" || network == "" { inMemory = true network = "emulator" } diff --git a/overflow/setup_test.go b/overflow/setup_test.go new file mode 100644 index 0000000..3175b9e --- /dev/null +++ b/overflow/setup_test.go @@ -0,0 +1,69 @@ +package overflow + +import ( + "testing" + + "github.com/onflow/flow-cli/pkg/flowkit/output" + "github.com/stretchr/testify/assert" +) + +func TestSetup(t *testing.T) { + t.Parallel() + + t.Run("default builder", func(t *testing.T) { + o := NewOverflow() + assert.Equal(t, output.InfoLog, o.LogLevel) + }) + + t.Run("default builder with loglevel fro env", func(t *testing.T) { + t.Setenv("OVERFLOW_LOGGING", "2") + o := NewOverflow() + assert.Equal(t, output.DebugLog, o.LogLevel) + }) + + t.Run("new overflow builder for network", func(t *testing.T) { + o := NewOverflowForNetwork("testnet") + assert.Equal(t, "testnet", o.Network) + }) + + t.Run("new overflow testnet", func(t *testing.T) { + o := NewOverflowTestnet() + assert.Equal(t, "testnet", o.Network) + }) + t.Run("new overflow mainnet", func(t *testing.T) { + o := NewOverflowMainnet() + assert.Equal(t, "mainnet", o.Network) + }) + + t.Run("new overflow emulator", func(t *testing.T) { + o := NewOverflowEmulator() + assert.Equal(t, "emulator", o.Network) + }) + + t.Run("new overflow builder without network", func(t *testing.T) { + o := NewOverflowBuilder("", false, 1) + assert.Equal(t, "emulator", o.Network) + }) + + t.Run("existing emulator", func(t *testing.T) { + o := NewOverflow().ExistingEmulator() + assert.Equal(t, false, o.DeployContracts) + assert.Equal(t, false, o.InitializeAccounts) + }) + + t.Run("do not prepend network names", func(t *testing.T) { + o := NewOverflow().DoNotPrependNetworkToAccountNames() + assert.Equal(t, false, o.PrependNetworkName) + }) + + t.Run("default gas", func(t *testing.T) { + o := NewOverflow().DefaultGas(100) + assert.Equal(t, 100, o.GasLimit) + }) + + t.Run("base path", func(t *testing.T) { + o := NewOverflow().BasePath("../") + assert.Equal(t, "../", o.Path) + }) + +}