test(esignature): add createEnvelope() test coverage — TC-001, TC-002, blank email guard
Three new test methods in DocusignESignatureServiceTest: - createEnvelopeReturnsSuccessResultOnHttp201 (TC-001): mocks 201, asserts success=true, envelopeId, status - createEnvelopeReturnsFailureResultOnHttp400 (TC-002): mocks 400, asserts success=false, errorMessage non-null - createEnvelopeReturnsEarlyWhenEmailIsBlank: asserts early return with errorMessage when Appraiser_Email__c is blank All 11 tests pass (11/11). Satisfies NFR-001 for createEnvelope(). Agent: claude-sonnet-4-6 Tests: 11/11 passing Tests-Added: +3 TypeScript: N/A (Apex project)
This commit is contained in:
parent
c3421e858f
commit
6fe75d8ab3
|
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
- [x] **Task 2 — EnvelopeCreateResult class + createEnvelope() method:** Add `EnvelopeCreateResult` inner class and `createEnvelope(Id caseId, String accountCode, String templateId)` to `DocusignESignatureService`. (FR-002)
|
- [x] **Task 2 — EnvelopeCreateResult class + createEnvelope() method:** Add `EnvelopeCreateResult` inner class and `createEnvelope(Id caseId, String accountCode, String templateId)` to `DocusignESignatureService`. (FR-002)
|
||||||
|
|
||||||
- [ ] **Task 3 — Tests for createEnvelope():** Add test coverage in `DocusignESignatureServiceTest` — success path (mock 201), failure path (mock 400), blank email guard. (NFR-001, TC-001, TC-002)
|
- [x] **Task 3 — Tests for createEnvelope():** Add test coverage in `DocusignESignatureServiceTest` — success path (mock 201), failure path (mock 400), blank email guard. (NFR-001, TC-001, TC-002)
|
||||||
|
|
||||||
- [ ] **Task 4 — persistEnvelopeResult() + CaseContext extension:** Add `persistEnvelopeResult()` to `CLMAdminService`. Extend `CaseContext` inner class and `getCaseContext()` SOQL to include the 5 eSignature fields. (FR-003, FR-004)
|
- [ ] **Task 4 — persistEnvelopeResult() + CaseContext extension:** Add `persistEnvelopeResult()` to `CLMAdminService`. Extend `CaseContext` inner class and `getCaseContext()` SOQL to include the 5 eSignature fields. (FR-003, FR-004)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -147,4 +147,92 @@ private class DocusignESignatureServiceTest {
|
||||||
DocusignESignatureService.buildEndpoint('/v2.1/accounts', 'Esignature_Demo_NamedCreds')
|
DocusignESignatureService.buildEndpoint('/v2.1/accounts', 'Esignature_Demo_NamedCreds')
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class CreateEnvelopeSuccessMock implements HttpCalloutMock {
|
||||||
|
public HttpResponse respond(HttpRequest req) {
|
||||||
|
HttpResponse res = new HttpResponse();
|
||||||
|
res.setHeader('Content-Type', 'application/json');
|
||||||
|
res.setStatusCode(201);
|
||||||
|
res.setBody('{"envelopeId":"abc-123","status":"sent","uri":"/v2.1/accounts/12345678/envelopes/abc-123"}');
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class CreateEnvelopeFailureMock implements HttpCalloutMock {
|
||||||
|
public HttpResponse respond(HttpRequest req) {
|
||||||
|
HttpResponse res = new HttpResponse();
|
||||||
|
res.setHeader('Content-Type', 'application/json');
|
||||||
|
res.setStatusCode(400);
|
||||||
|
res.setBody('{"errorCode":"TEMPLATE_NOT_IN_ACCOUNT","message":"The template specified is not in the account."}');
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@IsTest
|
||||||
|
static void createEnvelopeReturnsSuccessResultOnHttp201() {
|
||||||
|
Appraiser_Case__c appraiserCase = new Appraiser_Case__c(
|
||||||
|
Appraiser_Field_Review_Date__c = Date.today(),
|
||||||
|
Appraiser_Email__c = 'appraiser@example.com',
|
||||||
|
Appraiser_Name__c = 'Jamie Carter'
|
||||||
|
);
|
||||||
|
insert appraiserCase;
|
||||||
|
|
||||||
|
Test.setMock(HttpCalloutMock.class, new CreateEnvelopeSuccessMock());
|
||||||
|
|
||||||
|
Test.startTest();
|
||||||
|
DocusignESignatureService.EnvelopeCreateResult result = DocusignESignatureService.createEnvelope(
|
||||||
|
appraiserCase.Id,
|
||||||
|
'DTC_CLM_Demo',
|
||||||
|
'tmpl-001'
|
||||||
|
);
|
||||||
|
Test.stopTest();
|
||||||
|
|
||||||
|
System.assertEquals(true, result.success);
|
||||||
|
System.assertEquals('abc-123', result.envelopeId);
|
||||||
|
System.assertEquals('sent', result.status);
|
||||||
|
}
|
||||||
|
|
||||||
|
@IsTest
|
||||||
|
static void createEnvelopeReturnsFailureResultOnHttp400() {
|
||||||
|
Appraiser_Case__c appraiserCase = new Appraiser_Case__c(
|
||||||
|
Appraiser_Field_Review_Date__c = Date.today(),
|
||||||
|
Appraiser_Email__c = 'appraiser@example.com',
|
||||||
|
Appraiser_Name__c = 'Jamie Carter'
|
||||||
|
);
|
||||||
|
insert appraiserCase;
|
||||||
|
|
||||||
|
Test.setMock(HttpCalloutMock.class, new CreateEnvelopeFailureMock());
|
||||||
|
|
||||||
|
Test.startTest();
|
||||||
|
DocusignESignatureService.EnvelopeCreateResult result = DocusignESignatureService.createEnvelope(
|
||||||
|
appraiserCase.Id,
|
||||||
|
'DTC_CLM_Demo',
|
||||||
|
'tmpl-bad'
|
||||||
|
);
|
||||||
|
Test.stopTest();
|
||||||
|
|
||||||
|
System.assertEquals(false, result.success);
|
||||||
|
System.assertNotEquals(null, result.errorMessage);
|
||||||
|
System.assert(result.errorMessage.contains('400'));
|
||||||
|
}
|
||||||
|
|
||||||
|
@IsTest
|
||||||
|
static void createEnvelopeReturnsEarlyWhenEmailIsBlank() {
|
||||||
|
Appraiser_Case__c appraiserCase = new Appraiser_Case__c(
|
||||||
|
Appraiser_Field_Review_Date__c = Date.today()
|
||||||
|
);
|
||||||
|
insert appraiserCase;
|
||||||
|
|
||||||
|
Test.startTest();
|
||||||
|
DocusignESignatureService.EnvelopeCreateResult result = DocusignESignatureService.createEnvelope(
|
||||||
|
appraiserCase.Id,
|
||||||
|
'DTC_CLM_Demo',
|
||||||
|
'tmpl-001'
|
||||||
|
);
|
||||||
|
Test.stopTest();
|
||||||
|
|
||||||
|
System.assertEquals(false, result.success);
|
||||||
|
System.assertNotEquals(null, result.errorMessage);
|
||||||
|
System.assert(result.errorMessage.toLowerCase().contains('email'));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue