Skip to content

Commit e4d308d

Browse files
committed
feat(dataverse): convert credential to rdf
1 parent d01db98 commit e4d308d

File tree

2 files changed

+87
-5
lines changed

2 files changed

+87
-5
lines changed

dataverse/client.go

+26-5
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ package dataverse
22

33
import (
44
"context"
5+
"encoding/json"
56
"fmt"
67
"github.com/hyperledger/aries-framework-go/pkg/doc/verifiable"
8+
"github.com/piprate/json-gold/ld"
79

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

35-
SubmitClaims(ctx context.Context, credential *verifiable.Credential)
37+
SubmitClaims(ctx context.Context, credential *verifiable.Credential) error
3638
}
3739

3840
type LawStoneFactory func(string) (lsschema.QueryClient, error)
@@ -43,10 +45,6 @@ type client struct {
4345
lawStoneFactory LawStoneFactory
4446
}
4547

46-
func (c *client) SubmitClaims(_ context.Context, _ *verifiable.Credential) {
47-
panic("implement me")
48-
}
49-
5048
func NewClient(ctx context.Context,
5149
grpcAddr, contractAddr string,
5250
opts ...grpc.DialOption,
@@ -75,6 +73,29 @@ func NewClient(ctx context.Context,
7573
}, nil
7674
}
7775

76+
func (c *client) SubmitClaims(_ context.Context, vc *verifiable.Credential) error {
77+
proc := ld.NewJsonLdProcessor()
78+
options := ld.NewJsonLdOptions("")
79+
options.Format = "application/n-quads"
80+
81+
vcRaw, err := json.Marshal(vc)
82+
if err != nil {
83+
return err
84+
}
85+
86+
var vcJSON interface{}
87+
err = json.Unmarshal(vcRaw, &vcJSON)
88+
if err != nil {
89+
return err
90+
}
91+
rdf, err := proc.ToRDF(vcJSON, options)
92+
if err != nil {
93+
return err
94+
}
95+
fmt.Printf("rdf: %s\n", rdf)
96+
return nil
97+
}
98+
7899
func getCognitariumAddr(ctx context.Context, dvClient dvschema.QueryClient) (string, error) {
79100
query := dvschema.QueryMsg_Dataverse{}
80101
resp, err := dvClient.Dataverse(ctx, &query)

dataverse/client_test.go

+61
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@ package dataverse_test
33
import (
44
"context"
55
"fmt"
6+
"github.com/axone-protocol/axone-sdk/credential"
7+
"github.com/axone-protocol/axone-sdk/credential/template"
8+
"github.com/hyperledger/aries-framework-go/pkg/doc/verifiable"
69
"testing"
710

811
dvschema "github.com/axone-protocol/axone-contract-schema/go/dataverse-schema/v5"
@@ -106,3 +109,61 @@ func Test_GetCognitariumAddr(t *testing.T) {
106109
})
107110
}
108111
}
112+
113+
func TestClient_SubmitClaims(t *testing.T) {
114+
tests := []struct {
115+
name string
116+
credential *verifiable.Credential
117+
wantErr error
118+
}{
119+
{
120+
name: "valid credential",
121+
credential: generateVC(),
122+
wantErr: nil,
123+
},
124+
}
125+
126+
for _, test := range tests {
127+
t.Run(test.name, func(t *testing.T) {
128+
Convey("Given a client", t, func() {
129+
controller := gomock.NewController(t)
130+
defer controller.Finish()
131+
132+
mockDataverseClient := testutil.NewMockDataverseQueryClient(controller)
133+
134+
mockCognitarium := testutil.NewMockCognitariumQueryClient(controller)
135+
136+
client := dataverse.NewDataverseClient(
137+
mockDataverseClient,
138+
mockCognitarium,
139+
)
140+
141+
Convey("When SubmitClaims is called", func() {
142+
err := client.SubmitClaims(context.Background(), test.credential)
143+
144+
Convey("Then should return expected error", func() {
145+
if test.wantErr == nil {
146+
So(err, ShouldBeNil)
147+
} else {
148+
So(err, ShouldNotBeNil)
149+
So(err.Error(), ShouldEqual, test.wantErr.Error())
150+
}
151+
})
152+
})
153+
})
154+
})
155+
}
156+
}
157+
158+
func generateVC() *verifiable.Credential {
159+
loader, _ := testutil.MockDocumentLoader()
160+
vc, err := credential.New(
161+
template.NewGovernance("datasetID", "addr"),
162+
credential.WithParser(credential.NewDefaultParser(loader)),
163+
).
164+
Generate()
165+
if err != nil {
166+
panic(err)
167+
}
168+
return vc
169+
}

0 commit comments

Comments
 (0)