Skip to content

Commit

Permalink
Update unit tests and dereferencing structure
Browse files Browse the repository at this point in the history
  • Loading branch information
Toktar committed Jul 16, 2022
1 parent f2dc3f3 commit d73873a
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 52 deletions.
2 changes: 1 addition & 1 deletion services/ledger_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import (
type LedgerServiceI interface {
QueryDIDDoc(did string) (cheqd.Did, cheqd.Metadata, bool, error)
QueryResource(collectionDid string, resourceId string) (resource.Resource, bool, error)
QueryCollectionResources(did string) ([]resource.ResourceHeader, error)
QueryCollectionResources(did string) ([]*resource.ResourceHeader, error)
GetNamespaces() []string
}

Expand Down
36 changes: 11 additions & 25 deletions services/request_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"github.com/rs/zerolog/log"

cheqdTypes "github.com/cheqd/cheqd-node/x/cheqd/types"
resourceTypes "github.com/cheqd/cheqd-node/x/resource/types"
cheqdUtils "github.com/cheqd/cheqd-node/x/cheqd/utils"
"github.com/cheqd/did-resolver/types"
"github.com/cheqd/did-resolver/utils"
Expand Down Expand Up @@ -89,12 +90,12 @@ func (rs RequestService) prepareDereferencingResult(did string, dereferencingOpt
return createJsonDereferencing(nil, "", string(dereferencingMetadata))
}

metadata, err := rs.didDocService.MarshallProto(&didDereferencing.Metadata)
metadata, err := json.Marshal(didDereferencing.Metadata)
if err != nil {
return "", err
}

return createJsonDereferencing(didDereferencing.ContentStream, metadata, string(dereferencingMetadata))
return createJsonDereferencing(didDereferencing.ContentStream, string(metadata), string(dereferencingMetadata))
}

// https://w3c-ccg.github.io/did-resolution/#resolving
Expand Down Expand Up @@ -196,6 +197,7 @@ func (rs RequestService) dereferenceSecondary(did string, fragmentId string, did
if err != nil {
return types.DidDereferencing{}, err
}
metadata := didResolution.Metadata
dereferencingMetadata := types.DereferencingMetadata(didResolution.ResolutionMetadata)
if dereferencingMetadata.ResolutionError != "" {
return types.DidDereferencing{DereferencingMetadata: dereferencingMetadata}, nil
Expand All @@ -204,6 +206,7 @@ func (rs RequestService) dereferenceSecondary(did string, fragmentId string, did
var protoContent protoiface.MessageV1
if fragmentId != "" {
protoContent = rs.didDocService.GetDIDFragment(fragmentId, didResolution.Did)
metadata = types.TransformToFragmentMetadata(metadata)
} else {
protoContent = &didResolution.Did
}
Expand All @@ -219,35 +222,18 @@ func (rs RequestService) dereferenceSecondary(did string, fragmentId string, did
}
contentStream := json.RawMessage(jsonFragment)

return types.DidDereferencing{ContentStream: contentStream, Metadata: didResolution.Metadata, DereferencingMetadata: dereferencingMetadata}, nil
return types.DidDereferencing{ContentStream: contentStream, Metadata: metadata, DereferencingMetadata: dereferencingMetadata}, nil
}

func (rs RequestService) ResolveMetadata(did string, metadata cheqdTypes.Metadata) (types.ResolutionDidDocMetadata, error) {
newMetadata := types.ResolutionDidDocMetadata{
metadata.Created,
metadata.Updated,
metadata.Deactivated,
metadata.VersionId,
[]types.ResourcePreview{},
}
if metadata.Resources != nil {
return newMetadata, nil
if metadata.Resources == nil {
return types.NewResolutionDidDocMetadata(metadata, []*resourceTypes.ResourceHeader{}), nil
}
resources, err := rs.ledgerService.QueryCollectionResources(did)
if err != nil {
return newMetadata, err
}
for _, r := range resources {
resourcePreview := types.ResourcePreview {
r.Id,
r.Name,
r.ResourceType,
r.MediaType,
r.Created,
}
newMetadata.Resources = append(newMetadata.Resources, resourcePreview)
}
return newMetadata, nil
return types.ResolutionDidDocMetadata{}, err
}
return types.NewResolutionDidDocMetadata(metadata, resources), nil

}

Expand Down
54 changes: 33 additions & 21 deletions services/request_service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,12 +103,22 @@ func (ls MockLedgerService) QueryResource(collectionDid string, resourceId strin
return ls.Resource, isFound, nil
}


func (ls MockLedgerService) QueryCollectionResources(did string) ([]*resource.ResourceHeader, error) {
if ls.Metadata.Resources == nil {
return []*resource.ResourceHeader{}, nil
}
return []*resource.ResourceHeader{ls.Resource.Header}, nil
}

func (ls MockLedgerService) GetNamespaces() []string {
return []string{"testnet", "mainnet"}
}

func TestResolve(t *testing.T) {
validDIDDoc := validDIDDoc()
validMetadata := validMetadata()
validResource := validResource()
subtests := []struct {
name string
ledgerService MockLedgerService
Expand All @@ -117,18 +127,18 @@ func TestResolve(t *testing.T) {
method string
namespace string
expectedDID cheqd.Did
expectedMetadata cheqd.Metadata
expectedMetadata types.ResolutionDidDocMetadata
expectedError types.ErrorType
}{
{
name: "successful resolution",
ledgerService: NewMockLedgerService(validDIDDoc, validMetadata(), resource.Resource{}),
ledgerService: NewMockLedgerService(validDIDDoc, validMetadata, validResource),
resolutionType: types.DIDJSONLD,
identifier: validIdentifier,
method: validMethod,
namespace: validNamespace,
expectedDID: validDIDDoc,
expectedMetadata: validMetadata(),
expectedMetadata: types.NewResolutionDidDocMetadata(validMetadata, []*resource.ResourceHeader{validResource.Header}),
expectedError: "",
},
{
Expand All @@ -139,7 +149,7 @@ func TestResolve(t *testing.T) {
method: validMethod,
namespace: validNamespace,
expectedDID: cheqd.Did{},
expectedMetadata: cheqd.Metadata{},
expectedMetadata: types.ResolutionDidDocMetadata{},
expectedError: types.ResolutionNotFound,
},
{
Expand All @@ -150,7 +160,7 @@ func TestResolve(t *testing.T) {
method: validMethod,
namespace: validNamespace,
expectedDID: cheqd.Did{},
expectedMetadata: cheqd.Metadata{},
expectedMetadata: types.ResolutionDidDocMetadata{},
expectedError: types.ResolutionInvalidDID,
},
{
Expand All @@ -161,7 +171,7 @@ func TestResolve(t *testing.T) {
method: "not_supported_method",
namespace: validNamespace,
expectedDID: cheqd.Did{},
expectedMetadata: cheqd.Metadata{},
expectedMetadata: types.ResolutionDidDocMetadata{},
expectedError: types.ResolutionMethodNotSupported,
},
{
Expand All @@ -172,7 +182,7 @@ func TestResolve(t *testing.T) {
method: validMethod,
namespace: "invalid_namespace",
expectedDID: cheqd.Did{},
expectedMetadata: cheqd.Metadata{},
expectedMetadata: types.ResolutionDidDocMetadata{},
expectedError: types.ResolutionInvalidDID,
},
}
Expand Down Expand Up @@ -212,93 +222,95 @@ func TestDereferencing(t *testing.T) {
validResource := validResource()
validChecksum, _ := json.Marshal(validResource.Header.Checksum)
validData, _ := json.Marshal(validResource.Data)
validMetadata := validMetadata()
validFragmentMetadata := types.NewResolutionDidDocMetadata(validMetadata, []*resource.ResourceHeader{})
subtests := []struct {
name string
ledgerService MockLedgerService
dereferencingType types.ContentType
didUrl string
expectedContentStream string
expectedMetadata cheqd.Metadata
expectedMetadata types.ResolutionDidDocMetadata
expectedError types.ErrorType
}{
{
name: "successful resolution",
ledgerService: NewMockLedgerService(validDIDDoc, validMetadata(), validResource),
ledgerService: NewMockLedgerService(validDIDDoc, validMetadata, validResource),
dereferencingType: types.DIDJSONLD,
didUrl: validDid,
expectedContentStream: fmt.Sprintf("{\"@context\":[\"%s\"],\"id\":\"%s\",\"verificationMethod\":[{\"id\":\"%s\",\"type\":\"%s\",\"controller\":\"%s\",\"publicKeyJwk\":%s}],\"service\":[{\"id\":\"%s\",\"type\":\"%s\",\"serviceEndpoint\":\"%s\"}]}",
types.DIDSchemaJSONLD, validDid, validVerificationMethod.Id, validVerificationMethod.Type, validVerificationMethod.Controller, validPubKeyJWK, validService.Id, validService.Type, validService.ServiceEndpoint),
expectedMetadata: validMetadata(),
expectedMetadata: types.NewResolutionDidDocMetadata(validMetadata, []*resource.ResourceHeader{validResource.Header}),
expectedError: "",
},
{
name: "successful Secondary dereferencing (key)",
ledgerService: NewMockLedgerService(validDIDDoc, validMetadata(), validResource),
ledgerService: NewMockLedgerService(validDIDDoc, validMetadata, validResource),
dereferencingType: types.DIDJSONLD,
didUrl: validVerificationMethod.Id,
expectedContentStream: fmt.Sprintf("{\"@context\":\"%s\",\"id\":\"%s\",\"type\":\"%s\",\"controller\":\"%s\",\"publicKeyJwk\":%s}",
types.DIDSchemaJSONLD, validVerificationMethod.Id, validVerificationMethod.Type, validVerificationMethod.Controller, validPubKeyJWK),
expectedMetadata: validMetadata(),
expectedMetadata: validFragmentMetadata,
expectedError: "",
},
{
name: "successful Secondary dereferencing (service)",
ledgerService: NewMockLedgerService(validDIDDoc, validMetadata(), validResource),
ledgerService: NewMockLedgerService(validDIDDoc, validMetadata, validResource),
dereferencingType: types.DIDJSONLD,
didUrl: validService.Id,
expectedContentStream: fmt.Sprintf("{\"@context\":\"%s\",\"id\":\"%s\",\"type\":\"%s\",\"serviceEndpoint\":\"%s\"}",
types.DIDSchemaJSONLD, validService.Id, validService.Type, validService.ServiceEndpoint),
expectedMetadata: validMetadata(),
expectedMetadata: validFragmentMetadata,
expectedError: "",
},
{
name: "successful Primary dereferencing (resource)",
ledgerService: NewMockLedgerService(validDIDDoc, validMetadata(), validResource),
ledgerService: NewMockLedgerService(validDIDDoc, validMetadata, validResource),
dereferencingType: types.DIDJSONLD,
didUrl: validDid + "/resource/" + validResourceId,
expectedContentStream: fmt.Sprintf("{\"@context\":[\"%s\"],\"collectionId\":\"%s\",\"id\":\"%s\",\"name\":\"%s\",\"resourceType\":\"%s\",\"mediaType\":\"%s\",\"checksum\":%s,\"data\":%s}",
types.DIDSchemaJSONLD, validResource.Header.CollectionId, validResource.Header.Id, validResource.Header.Name, validResource.Header.ResourceType, validResource.Header.MediaType, validChecksum, validData),
expectedMetadata: cheqd.Metadata{},
expectedMetadata: types.ResolutionDidDocMetadata{},
expectedError: "",
},
{
name: "invalid URL",
ledgerService: NewMockLedgerService(cheqd.Did{}, cheqd.Metadata{}, resource.Resource{}),
didUrl: "unvalid_url",
dereferencingType: types.DIDJSONLD,
expectedMetadata: cheqd.Metadata{},
expectedMetadata: types.ResolutionDidDocMetadata{},
expectedError: types.DereferencingInvalidDIDUrl,
},
{
name: "not supported path",
ledgerService: NewMockLedgerService(cheqd.Did{}, cheqd.Metadata{}, resource.Resource{}),
dereferencingType: types.DIDJSONLD,
didUrl: validDid + "/unknown_path",
expectedMetadata: cheqd.Metadata{},
expectedMetadata: types.ResolutionDidDocMetadata{},
expectedError: types.DereferencingNotSupported,
},
{
name: "not supported query",
ledgerService: NewMockLedgerService(cheqd.Did{}, cheqd.Metadata{}, resource.Resource{}),
dereferencingType: types.DIDJSONLD,
didUrl: validDid + "?unknown_query",
expectedMetadata: cheqd.Metadata{},
expectedMetadata: types.ResolutionDidDocMetadata{},
expectedError: types.DereferencingNotSupported,
},
{
name: "key not found",
ledgerService: NewMockLedgerService(cheqd.Did{}, cheqd.Metadata{}, resource.Resource{}),
dereferencingType: types.DIDJSONLD,
didUrl: validDid + "#notFoundKey",
expectedMetadata: cheqd.Metadata{},
expectedMetadata: types.ResolutionDidDocMetadata{},
expectedError: types.DereferencingNotFound,
},
{
name: "resource not found",
ledgerService: NewMockLedgerService(cheqd.Did{}, cheqd.Metadata{}, resource.Resource{}),
dereferencingType: types.DIDJSONLD,
didUrl: validDid + "/resource/00000000-0000-0000-0000-000000000000",
expectedMetadata: cheqd.Metadata{},
expectedMetadata: types.ResolutionDidDocMetadata{},
expectedError: types.DereferencingNotFound,
},
}
Expand Down
8 changes: 3 additions & 5 deletions types/dereferecing_metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,16 @@ package types

import (
"encoding/json"

cheqd "github.com/cheqd/cheqd-node/x/cheqd/types"
)

type DereferencingOption ResolutionOption

type DereferencingMetadata ResolutionMetadata

type DidDereferencing struct {
ContentStream json.RawMessage `json:"contentStream,omitempty"`
Metadata cheqd.Metadata `json:"contentMetadata,omitempty"`
DereferencingMetadata DereferencingMetadata `json:"dereferencingMetadata,omitempty"`
ContentStream json.RawMessage `json:"contentStream,omitempty"`
Metadata ResolutionDidDocMetadata `json:"contentMetadata,omitempty"`
DereferencingMetadata DereferencingMetadata `json:"dereferencingMetadata,omitempty"`
}

func NewDereferencingMetadata(did string, contentType ContentType, resolutionError ErrorType) DereferencingMetadata {
Expand Down

0 comments on commit d73873a

Please sign in to comment.