Skip to content

Commit

Permalink
added tests
Browse files Browse the repository at this point in the history
Signed-off-by: Sownak Roy <sownak@cheqd.io>
  • Loading branch information
sownak committed Dec 9, 2024
1 parent 6364c09 commit d3a0723
Show file tree
Hide file tree
Showing 4 changed files with 283 additions and 18 deletions.
45 changes: 30 additions & 15 deletions src/controllers/resource.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,13 @@ export class ResourceController {
check('did').exists().isString().contains('did:cheqd').withMessage(Messages.InvalidDid),
check('jobId')
.custom((value, { req }) => {
if (!value && !(req.body.name && req.body.type && req.body.data)) return false;
if (!value && !(req.body.name && req.body.type && req.body.content)) return false;
return true;
})
.withMessage('name, type and data are required'),
.withMessage('name, type and content are required'),
check('name').optional().isString().withMessage(Messages.Invalid),
check('type').optional().isString().withMessage(Messages.Invalid),
check('content').optional().isString().withMessage(Messages.Invalid),
check('content').exists().isString().withMessage(Messages.Invalid),
check('relativeDidUrl').optional().isString().contains('/resources/').withMessage(Messages.InvalidDidUrl),
check('alsoKnownAs').optional().isArray().withMessage(Messages.Invalid),
check('alsoKnownAs.*.uri').isString().withMessage(Messages.Invalid),
Expand All @@ -51,7 +51,7 @@ export class ResourceController {
if (!result.isEmpty()) {
return response
.status(400)
.json(Responses.GetInvalidResourceResponse({}, request.body.secret, result.array()[0].msg));
.json(Responses.GetInvalidResourceResponseV1({}, request.body.secret, result.array()[0].msg));
}

const { did } = request.params;
Expand Down Expand Up @@ -100,7 +100,7 @@ export class ResourceController {
} else if (!data) {
return response
.status(400)
.json(Responses.GetInvalidResourceResponse({}, secret, Messages.InvalidResource));
.json(Responses.GetInvalidResourceResponseV1({}, secret, Messages.InvalidResource));
} else {
jobId = v4();

Expand All @@ -124,7 +124,7 @@ export class ResourceController {
return response
.status(200)
.json(
Responses.GetResourceActionSignatureResponse(
Responses.GetResourceActionSignatureResponseV1(
jobId,
resolvedDocument.verificationMethod,
resourcePayload
Expand All @@ -136,11 +136,13 @@ export class ResourceController {
await CheqdRegistrar.instance.connect(options);
const result = await CheqdRegistrar.instance.createResource(signInputs, resourcePayload);
if (result.code == 0) {
return response.status(201).json(Responses.GetResourceSuccessResponse(jobId, secret, resourcePayload));
return response
.status(201)
.json(Responses.GetResourceSuccessResponseV1(jobId, secret, resourcePayload));
} else {
return response
.status(400)
.json(Responses.GetInvalidResourceResponse(resourcePayload, secret, Messages.InvalidResource));
.json(Responses.GetInvalidResourceResponseV1(resourcePayload, secret, Messages.InvalidResource));
}
} catch (error) {
return response.status(500).json({
Expand All @@ -160,10 +162,19 @@ export class ResourceController {
if (!result.isEmpty()) {
return response
.status(400)
.json(Responses.GetInvalidResourceResponse({}, request.body.secret, result.array()[0].msg));
.json(Responses.GetInvalidResourceResponse('', {}, request.body.secret, result.array()[0].msg));
}

let { did, jobId, content, name, type, secret = {}, options = {} } = request.body as IResourceCreateRequest;
let {
did,
jobId,
content,
name,
type,
version,
secret = {},
options = {},
} = request.body as IResourceCreateRequest;

let resourcePayload: Partial<MsgCreateResourcePayload> = {};
try {
Expand All @@ -185,7 +196,7 @@ export class ResourceController {
} else if (storeData.state == IState.Finished) {
return response.status(201).json({
jobId,
resourceState: {
didUrlState: {
resourceId: storeData.resource.id,
state: IState.Finished,
secret,
Expand All @@ -199,7 +210,7 @@ export class ResourceController {
} else if (!content) {
return response
.status(400)
.json(Responses.GetInvalidResourceResponse({}, secret, Messages.InvalidContent));
.json(Responses.GetInvalidResourceResponse('', {}, secret, Messages.InvalidContent));
} else {
jobId = v4();

Expand All @@ -208,6 +219,7 @@ export class ResourceController {
id: v4(),
name,
resourceType: type,
version: version,
data: fromString(content, 'base64'),
};
}
Expand All @@ -224,6 +236,7 @@ export class ResourceController {
Responses.GetResourceActionSignatureResponse(
jobId,
resolvedDocument.verificationMethod,
did,
resourcePayload
)
);
Expand All @@ -233,16 +246,18 @@ export class ResourceController {
await CheqdRegistrar.instance.connect(options);
const result = await CheqdRegistrar.instance.createResource(signInputs, resourcePayload);
if (result.code == 0) {
return response.status(201).json(Responses.GetResourceSuccessResponse(jobId, secret, resourcePayload));
return response
.status(201)
.json(Responses.GetResourceSuccessResponse(jobId, secret, did, resourcePayload));
} else {
return response
.status(400)
.json(Responses.GetInvalidResourceResponse(resourcePayload, secret, Messages.InvalidResource));
.json(Responses.GetInvalidResourceResponse(did, resourcePayload, secret, Messages.InvalidResource));
}
} catch (error) {
return response.status(500).json({
jobId,
resourceState: {
didUrlState: {
state: IState.Failed,
reason: Messages.Internal,
description: Messages.TryAgain + error,
Expand Down
77 changes: 74 additions & 3 deletions src/helpers/response.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ export class Responses {
};
}

static GetResourceActionSignatureResponse(
static GetResourceActionSignatureResponseV1(
jobId: string,
verificationMethod: VerificationMethod[],
resource: Partial<MsgCreateResourcePayload>
Expand Down Expand Up @@ -129,6 +129,38 @@ export class Responses {
},
};
}
static GetResourceActionSignatureResponse(
jobId: string,
verificationMethod: VerificationMethod[],
did: string,
resource: Partial<MsgCreateResourcePayload>
) {
const signingRequest = verificationMethod.map((method) => {
return {
kid: method.id,
type: method.type,
alg: 'EdDSA',
serializedPayload: toString(
MsgCreateResourcePayload.encode(MsgCreateResourcePayload.fromPartial(resource)).finish(),
'base64pad'
),
};
});

return {
jobId,
didUrlState: {
didUrl: did + '/resources/' + resource.id,
state: IState.Action,
action: IAction.GetSignature,
description: Messages.GetSignature,
signingRequest,
secret: {
signingResponse: [Messages.SigingResponse],
},
},
};
}

static GetInvalidResponse(didDocument: DIDDocument | undefined, secret: Record<string, any> = {}, error: string) {
return {
Expand Down Expand Up @@ -167,7 +199,7 @@ export class Responses {
};
}

static GetResourceSuccessResponse(
static GetResourceSuccessResponseV1(
jobId: string,
secret: Record<string, any>,
resourcePayload: Partial<MsgCreateResourcePayload>
Expand All @@ -182,8 +214,29 @@ export class Responses {
},
};
}
static GetResourceSuccessResponse(
jobId: string,
secret: Record<string, any>,
did: string,
resourcePayload: Partial<MsgCreateResourcePayload>
) {
return {
jobId,
didUrlState: {
didUrl: did + '/resources/' + resourcePayload.id || '',
state: IState.Finished,
secret,
content: resourcePayload.data,
name: resourcePayload.name,
type: resourcePayload.resourceType,
version: resourcePayload.version,
},
didRegistrationMetadata: {},
contentMetadata: {},
};
}

static GetInvalidResourceResponse(
static GetInvalidResourceResponseV1(
resourcePayload: Partial<MsgCreateResourcePayload> = {},
secret: Record<string, any> = {},
error: string
Expand All @@ -200,4 +253,22 @@ export class Responses {
},
};
}
static GetInvalidResourceResponse(
did: string,
resourcePayload: Partial<MsgCreateResourcePayload> = {},
secret: Record<string, any> = {},
error: string
) {
return {
jobId: null,
didUrlState: {
didUrl: did + '/resources/' + resourcePayload.id,
state: IState.Failed,
reason: Messages.Invalid,
description: Messages.Invalid + ': ' + error,
secret,
resourcePayload,
},
};
}
}
1 change: 1 addition & 0 deletions src/types/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ export interface IResourceCreateRequest {
content: any;
name: string;
type: string;
version: string;
}
export interface IResourceUpdateRequest {
jobId: string | null;
Expand Down
Loading

0 comments on commit d3a0723

Please sign in to comment.