Skip to content

Commit

Permalink
feat(dataverse): convert credential to rdf
Browse files Browse the repository at this point in the history
  • Loading branch information
bdeneux committed Sep 11, 2024
1 parent d01db98 commit e4d308d
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 5 deletions.
31 changes: 26 additions & 5 deletions dataverse/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ package dataverse

import (
"context"
"encoding/json"
"fmt"
"github.com/hyperledger/aries-framework-go/pkg/doc/verifiable"
"github.com/piprate/json-gold/ld"

cgschema "github.com/axone-protocol/axone-contract-schema/go/cognitarium-schema/v5"
dvschema "github.com/axone-protocol/axone-contract-schema/go/dataverse-schema/v5"
Expand Down Expand Up @@ -32,7 +34,7 @@ type Client interface {
// The function returns true if Result is 'permitted', false otherwise.
AskGovTellAction(context.Context, string, string, string) (bool, error)

SubmitClaims(ctx context.Context, credential *verifiable.Credential)
SubmitClaims(ctx context.Context, credential *verifiable.Credential) error
}

type LawStoneFactory func(string) (lsschema.QueryClient, error)
Expand All @@ -43,10 +45,6 @@ type client struct {
lawStoneFactory LawStoneFactory
}

func (c *client) SubmitClaims(_ context.Context, _ *verifiable.Credential) {
panic("implement me")
}

func NewClient(ctx context.Context,
grpcAddr, contractAddr string,
opts ...grpc.DialOption,
Expand Down Expand Up @@ -75,6 +73,29 @@ func NewClient(ctx context.Context,
}, nil
}

func (c *client) SubmitClaims(_ context.Context, vc *verifiable.Credential) error {
proc := ld.NewJsonLdProcessor()
options := ld.NewJsonLdOptions("")
options.Format = "application/n-quads"

vcRaw, err := json.Marshal(vc)
if err != nil {
return err
}

var vcJSON interface{}
err = json.Unmarshal(vcRaw, &vcJSON)
if err != nil {
return err
}
rdf, err := proc.ToRDF(vcJSON, options)
if err != nil {
return err
}
fmt.Printf("rdf: %s\n", rdf)
return nil
}

func getCognitariumAddr(ctx context.Context, dvClient dvschema.QueryClient) (string, error) {
query := dvschema.QueryMsg_Dataverse{}
resp, err := dvClient.Dataverse(ctx, &query)
Expand Down
61 changes: 61 additions & 0 deletions dataverse/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ package dataverse_test
import (
"context"
"fmt"
"github.com/axone-protocol/axone-sdk/credential"
"github.com/axone-protocol/axone-sdk/credential/template"
"github.com/hyperledger/aries-framework-go/pkg/doc/verifiable"
"testing"

dvschema "github.com/axone-protocol/axone-contract-schema/go/dataverse-schema/v5"
Expand Down Expand Up @@ -106,3 +109,61 @@ func Test_GetCognitariumAddr(t *testing.T) {
})
}
}

func TestClient_SubmitClaims(t *testing.T) {
tests := []struct {
name string
credential *verifiable.Credential
wantErr error
}{
{
name: "valid credential",
credential: generateVC(),
wantErr: nil,
},
}

for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
Convey("Given a client", t, func() {
controller := gomock.NewController(t)
defer controller.Finish()

mockDataverseClient := testutil.NewMockDataverseQueryClient(controller)

mockCognitarium := testutil.NewMockCognitariumQueryClient(controller)

client := dataverse.NewDataverseClient(
mockDataverseClient,
mockCognitarium,
)

Convey("When SubmitClaims is called", func() {
err := client.SubmitClaims(context.Background(), test.credential)

Convey("Then should return expected error", func() {
if test.wantErr == nil {
So(err, ShouldBeNil)
} else {
So(err, ShouldNotBeNil)
So(err.Error(), ShouldEqual, test.wantErr.Error())
}
})
})
})
})
}
}

func generateVC() *verifiable.Credential {
loader, _ := testutil.MockDocumentLoader()
vc, err := credential.New(
template.NewGovernance("datasetID", "addr"),
credential.WithParser(credential.NewDefaultParser(loader)),
).
Generate()
if err != nil {
panic(err)
}
return vc
}

0 comments on commit e4d308d

Please sign in to comment.