From 2c88de5a9a0d800575d6a29443a02ab50918f641 Mon Sep 17 00:00:00 2001 From: Benjamin DENEUX Date: Tue, 13 Aug 2024 12:35:17 +0200 Subject: [PATCH] test(auth): proxy authenticate --- auth/proxy.go | 6 ++-- auth/proxy_test.go | 77 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 auth/proxy_test.go diff --git a/auth/proxy.go b/auth/proxy.go index 81880ca..b909969 100644 --- a/auth/proxy.go +++ b/auth/proxy.go @@ -4,8 +4,6 @@ import ( "context" "fmt" "github.com/axone-protocol/axone-sdk/credential" - "github.com/piprate/json-gold/ld" - "github.com/axone-protocol/axone-sdk/dataverse" ) @@ -27,11 +25,11 @@ type authProxy struct { authParser credential.Parser[*credential.AuthClaim] } -func NewProxy(govAddr string, dvClient dataverse.Client, serviceID string) Proxy { +func NewProxy(govAddr string, dvClient dataverse.Client, authParser credential.Parser[*credential.AuthClaim]) Proxy { return &authProxy{ dvClient: dvClient, govAddr: govAddr, - authParser: credential.NewAuthParser(serviceID, ld.NewDefaultDocumentLoader(nil)), + authParser: authParser, } } diff --git a/auth/proxy_test.go b/auth/proxy_test.go new file mode 100644 index 0000000..9c68483 --- /dev/null +++ b/auth/proxy_test.go @@ -0,0 +1,77 @@ +package auth_test + +import ( + ctx "context" + "fmt" + "github.com/axone-protocol/axone-sdk/auth" + "github.com/axone-protocol/axone-sdk/credential" + "github.com/axone-protocol/axone-sdk/testutil" + . "github.com/smartystreets/goconvey/convey" + "go.uber.org/mock/gomock" + "testing" +) + +func TestAuthProxy_Authenticate(t *testing.T) { + tests := []struct { + name string + credential []byte + expectedIdentity *auth.Identity + wantErr error + }{ + { + name: "valid token", + credential: []byte("valid"), + expectedIdentity: &auth.Identity{ + DID: "did:key:zQ3shpoUHzwcgdt2gxjqHHnJnNkBVd4uX3ZBhmPiM7J93yqCr", + AuthorizedActions: nil, + }, + }, + { + name: "valid token", + credential: nil, + wantErr: fmt.Errorf("failed to parse credential: nil"), + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + Convey("Given a mock auth parser and AuthProxy", t, func() { + controller := gomock.NewController(t) + mockAuthParser := testutil.NewMockParser[*credential.AuthClaim](controller) + + if test.credential != nil { + mockAuthParser.EXPECT(). + ParseSigned([]byte("valid")). + Return(&credential.AuthClaim{ + ID: "did:key:zQ3shpoUHzwcgdt2gxjqHHnJnNkBVd4uX3ZBhmPiM7J93yqCr", + ToService: "did:key:zQ3shZxyDoD3QorxHJrFS68EjzDgQZSqZcj3wQqc1ngbF1vgz", + }, nil). + Times(1) + } else { + mockAuthParser.EXPECT().ParseSigned(nil).Return(nil, fmt.Errorf("nil")).Times(1) + } + + mockDataverse := testutil.NewMockClient(controller) + mockDataverse.EXPECT().ExecGov(gomock.Any(), gomock.Any(), gomock.Any()).Return([]string(nil), nil).MaxTimes(1) + + aProxy := auth.NewProxy( + "did:key:zQ3shZxyDoD3QorxHJrFS68EjzDgQZSqZcj3wQqc1ngbF1vgz", + mockDataverse, + mockAuthParser) + + Convey("When authenticating", func() { + identity, err := aProxy.Authenticate(ctx.Background(), test.credential) + + Convey("Then the result should be as expected", func() { + if test.wantErr != nil { + So(err.Error(), ShouldEqual, test.wantErr.Error()) + } else { + So(err, ShouldBeNil) + } + So(identity, ShouldResemble, test.expectedIdentity) + }) + }) + }) + }) + } +}