salesforce-composite-envelo.../composite-envelope-builder/docs/DEPLOYMENT_AND_TESTING.md

15 KiB
Raw Blame History

Deployment & Testing Guide

Quick reference for deploying the Salesforce Composite Envelope Builder to your org and running tests.

Shell Note: Commands below show both Bash/WSL and PowerShell variants for Windows Terminal. Choose the one that matches your environment. The sf CLI commands are identical across both shells.


Deploy + Test in One Script

Bash/WSL:

cd /home/paulh/.openclaw/workspace/projects/salesforce-composite-envelope-builder/composite-envelope-builder
bash deploy-to-dev-org.sh

PowerShell (Windows Terminal):

cd "$env:USERPROFILE\.openclaw\workspace\projects\salesforce-composite-envelope-builder\composite-envelope-builder"
bash deploy-to-dev-org.sh
# Or if you prefer native PowerShell (not WSL):
# .\deploy-to-dev-org.sh  (requires WSL bash available)

This script handles:

  • Org authorization (opens browser login)
  • Code deployment
  • Unit test execution with code coverage
  • Human-readable results

Manual Commands

1. Authorize Your Org (First Time Only)

Bash/WSL:

# For Developer Edition
sf org login web --alias dev-org --instance-url https://login.salesforce.com

# For Sandbox
sf org login web --alias sandbox-org --instance-url https://test.salesforce.com

PowerShell (Windows Terminal):

# For Developer Edition
sf org login web --alias dev-org --instance-url https://login.salesforce.com

# For Sandbox
sf org login web --alias sandbox-org --instance-url https://test.salesforce.com

You'll be redirected to Salesforce login. Once authorized, the org alias is saved for future deploys.


2. Deploy Code

Bash/WSL:

cd /home/paulh/.openclaw/workspace/projects/salesforce-composite-envelope-builder/composite-envelope-builder
sf project deploy start --target-org dev-org

PowerShell (Windows Terminal):

cd "$env:USERPROFILE\.openclaw\workspace\projects\salesforce-composite-envelope-builder\composite-envelope-builder"
sf project deploy start --target-org dev-org

Options:

  • --target-org dev-org — Use the authorized org alias (replace with your alias if different)
  • --wait 10 — Wait up to 10 minutes for deployment to complete

3. Run Tests

Run ALL unit tests with code coverage:

Bash/WSL:

sf apex run test --wait 10 --result-format human --code-coverage --target-org dev-org

PowerShell:

sf apex run test --wait 10 --result-format human --code-coverage --target-org dev-org

Run ONLY the new handler tests:

Bash/WSL:

sf apex run test --class-names DocusignEnvelopeRequestHandlerTest --wait 10 --result-format human --target-org dev-org

PowerShell:

sf apex run test --class-names DocusignEnvelopeRequestHandlerTest --wait 10 --result-format human --target-org dev-org

Run specific test methods:

Bash/WSL:

sf apex run test --class-names DocusignEnvelopeRequestHandlerTest --method-names testValidateRequest_Success --wait 10 --result-format human --target-org dev-org

PowerShell:

sf apex run test --class-names DocusignEnvelopeRequestHandlerTest --method-names testValidateRequest_Success --wait 10 --result-format human --target-org dev-org

Run tests for a specific class only:

Bash/WSL:

# Test the main invocable class
sf apex run test --class-names DocusignCompositeEnvelopeBuilderTest --wait 10 --result-format human --code-coverage --target-org dev-org

# Test the request handler
sf apex run test --class-names DocusignEnvelopeRequestHandlerTest --wait 10 --result-format human --code-coverage --target-org dev-org

# Legacy REST-helper tests (optional)
# The REST-based `DocusignAPIService` and `DocusignCredentials` tests are part of a
# legacy implementation and are not required for the current dfsle-based Flow.
# Run these only if you have intentionally included the older REST helper classes in your package:
# sf apex run test --class-names DocusignAPIServiceTest --wait 10 --result-format human --code-coverage --target-org dev-org
# sf apex run test --class-names DocusignCredentialsTest --wait 10 --result-format human --code-coverage --target-org dev-org

PowerShell:

# Test the main invocable class
sf apex run test --class-names DocusignCompositeEnvelopeBuilderTest --wait 10 --result-format human --code-coverage --target-org dev-org

# Test the request handler
sf apex run test --class-names DocusignEnvelopeRequestHandlerTest --wait 10 --result-format human --code-coverage --target-org dev-org

# Test the API service
sf apex run test --class-names DocusignAPIServiceTest --wait 10 --result-format human --code-coverage --target-org dev-org

# Test the credentials helper
sf apex run test --class-names DocusignCredentialsTest --wait 10 --result-format human --code-coverage --target-org dev-org

Run ALL tests with JSON output (for parsing):

Bash/WSL:

sf apex run test --wait 10 --result-format json --code-coverage --target-org dev-org > test-results.json

PowerShell:

sf apex run test --wait 10 --result-format json --code-coverage --target-org dev-org | Out-File -FilePath test-results.json

Complete Deploy + Test in One Command

Bash/WSL:

cd /home/paulh/.openclaw/workspace/projects/salesforce-composite-envelope-builder/composite-envelope-builder && \
sf project deploy start --target-org dev-org && \
sf apex run test --wait 10 --result-format human --code-coverage --target-org dev-org

PowerShell (Windows Terminal):

cd "$env:USERPROFILE\.openclaw\workspace\projects\salesforce-composite-envelope-builder\composite-envelope-builder"; `
sf project deploy start --target-org dev-org; `
sf apex run test --wait 10 --result-format human --code-coverage --target-org dev-org

Alternative PowerShell (using semicolons):

cd "$env:USERPROFILE\.openclaw\workspace\projects\salesforce-composite-envelope-builder\composite-envelope-builder"; sf project deploy start --target-org dev-org; sf apex run test --wait 10 --result-format human --code-coverage --target-org dev-org

Understanding Test Results

Sample output:

Apex Tests
═════════════════════════════════════════════════════════════════

Test Results Summary  [Included Code Coverage]
═════════════════════════════════════════════════════════════════
Outcome: Passed
Tests Ran: 39
Passes: 39
Failures: 0
Skipped: 0
Pass Rate: 100%
Apex Code Coverage: 92%

Key metrics:

  • Pass Rate — Percentage of tests that passed (should be 100%)
  • Apex Code Coverage — Percentage of code executed by tests (should be >80%)
  • Failures — If > 0, review the failed test names and error messages below

Updating the Multi-Copy Template Name

The "Authorization to Release Information" template name is stored in two places. If this template is ever renamed, update both:

1. Apex constant — DocusignCompositeEnvelopeBuilder.cls

// Line ~30 in DocusignCompositeEnvelopeBuilder.cls
private static final String MULTI_COPY_TEMPLATE_NAME = 'Authorization to Release Information';

Change the string value to match the new template name (partial match is fine — the query uses LIKE '%<name>%').

2. Flow decision — Docusign_Envelope_Templates_V3.flow-meta.xml

In the Does_Row_Contain_Auth_Release decision node, update the Contains condition value:

<conditions>
    <leftValueReference>Scan_For_Auth_Release_Template.Name</leftValueReference>
    <operator>Contains</operator>
    <rightValue>
        <stringValue>Authorization to Release Information</stringValue>  <!-- update here -->
    </rightValue>
</conditions>

After editing the XML, redeploy the flow to your org.


Updating Template IDs After Sandbox Refresh

After a sandbox refresh, Docusign template IDs may become stale and need updating with the correct demo/sandbox template IDs.

Find Your Demo Template IDs

  1. Log into your Docusign demo account: https://demo.docusign.net
  2. Go to Templates
  3. Click each template — the GUID is in the URL or under Template ID
  4. Copy the template IDs you need

Option 1: Developer Console (Quickest)

  1. Open Developer Console (gear icon → Developer Console)
  2. Click DebugOpen Execute Anonymous Window

Step 1: View current template IDs:

List<dfsle__EnvelopeConfiguration__c> configs = [
    SELECT Id, Name, dfsle__DocuSignId__c 
    FROM dfsle__EnvelopeConfiguration__c
    ORDER BY Name
];
for (dfsle__EnvelopeConfiguration__c c : configs) {
    System.debug(c.Name + ' → ' + c.dfsle__DocuSignId__c);
}

Check the Logs tab at the bottom for the output.

Step 2: Update with new template IDs:

// Replace template names and IDs with YOUR values
Map<String, String> updates = new Map<String, String>{
    'Template Name 1' => 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
    'Template Name 2' => 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
};

List<dfsle__EnvelopeConfiguration__c> configs = [
    SELECT Id, Name, dfsle__DocuSignId__c 
    FROM dfsle__EnvelopeConfiguration__c
    WHERE Name IN :updates.keySet()
];

for (dfsle__EnvelopeConfiguration__c c : configs) {
    c.dfsle__DocuSignId__c = updates.get(c.Name);
}
update configs;
System.debug('Updated ' + configs.size() + ' templates');

Option 2: Query Editor (View Only)

In Developer Console → Query Editor tab:

SELECT Id, Name, dfsle__DocuSignId__c, Envelope_Template_Language__c 
FROM dfsle__EnvelopeConfiguration__c 
ORDER BY Name

Option 3: Salesforce UI (Point and Click)

  1. Use App Launcher → search for Docusign Envelope Templates
  2. Open each record → Edit
  3. Update the DocuSign template ID field
  4. Save

Post-Deployment Setup

After successful deployment, configure your Salesforce org:

1. Create Docusign Configuration Custom Setting

  1. Log into your Salesforce org
  2. Go to SetupCustom Settings
  3. Click Manage next to Docusign Configuration
  4. Click New
  5. Fill in:
    • Account Id: {your Docusign sandbox account ID}
    • Base URL: callout:DocusignAPI
  6. Click Save

2. Create Named Credential for Docusign API

  1. Go to SetupNamed Credentials
  2. Click New Named Credential
  3. Fill in:
    • Name: DocusignAPI
    • Label: Docusign API
    • URL: https://demo.docusign.net/restapi/v2.1
    • Identity Type: Named Principal
    • Authentication Protocol: OAuth 2.0
    • Authentication Provider: DocusignOAuthProvider (if available)
  4. Click Save

3. Update Your Screen Flow

  1. Go to Flow Builder
  2. Create or edit your Screen Flow
  3. Add an Action to the flow:
    • Action: Send Composite Docusign Envelope
    • Input Variables:
      • Template IDs — Comma-separated Docusign template IDs
      • Salesforce Record ID — {!Record.Id}
      • Language — en or es
      • Email Subject — Optional custom subject
    • Authorization to Release Form Copies — Number of copies (15) for the Authorization to Release Information template; populated by the authReleaseFormCopies flow variable (defaults to 1)
  4. Output Variables:
    • Envelope ID — Unique Docusign envelope ID
    • Success — Boolean (true/false)
    • Error Message — Error details if creation failed
  5. Save and test the flow

Multi-copy dialog: If you are using Docusign_Envelope_Templates_V3, the flow automatically detects when "Authorization to Release Information" is selected and displays a radio-button screen asking for 15 copies before sending. No additional Flow configuration is required for this feature.


Troubleshooting

Authorization Issues

Bash/WSL:

# If auth fails, try manual URL method:
sf org login web --alias dev-org --instance-url https://login.salesforce.com --json

# Copy the 'url' value and paste into your browser

PowerShell:

# If auth fails, try manual URL method:
sf org login web --alias dev-org --instance-url https://login.salesforce.com --json

# Copy the 'url' value from the output and paste into your browser

Deployment Errors

Bash/WSL:

# Check what's in your org
sf project list metadata --target-org dev-org

# Validate without deploying
sf project validate deploy --target-org dev-org

PowerShell:

# Check what's in your org
sf project list metadata --target-org dev-org

# Validate without deploying
sf project validate deploy --target-org dev-org

Test Failures

Bash/WSL:

# Run tests with verbose output
sf apex run test --target-org dev-org --result-format human --code-coverage -v

PowerShell:

# Run tests with verbose output
sf apex run test --target-org dev-org --result-format human --code-coverage -v

Reference: Classes Deployed

Apex Classes:

  • DocusignCompositeEnvelopeBuilder — Main invocable class (Flows); includes multi-copy template expansion logic
  • DocusignEnvelopeRequest — Invocable input DTO; includes authReleaseFormCopies field (v1.1)
  • DocusignEnvelopeRequestHandler — Request validation & envelope building (reusable)
  • DocusignAPIService — Docusign REST API wrapper
  • DocusignCredentials — Custom settings singleton

Test Classes:

  • DocusignCompositeEnvelopeBuilderTest — Tests for main invocable
  • DocusignEnvelopeRequestHandlerTest — Tests for request handler (10 test methods)
  • DocusignAPIServiceTest — Tests for API service
  • DocusignCredentialsTest — Tests for credentials

Flows:

  • Docusign_Envelope_Templates_V3 — Main template selection flow; includes multi-copy dialog for Authorization to Release Information (v1.1)

Custom Settings:

  • Docusign_Configuration__c — Stores Account ID and Base URL

Next Steps After Successful Deploy

  1. Verify all tests pass
  2. Create Docusign Configuration in Salesforce
  3. Set up Named Credential
  4. Create a test Screen Flow
  5. Test with real Docusign templates
  6. Deploy to Production (when ready)

For more details, see:

  • docs/deployment-guide.md — Detailed deployment instructions
  • docs/api-reference.md — API reference
  • docs/design.md — Architecture & design decisions

Change Log

Version Date Author Summary
1.0 2026-02-23 Paul Huliganga Initial release
1.1 2026-03-11 Paul Huliganga Added multi-copy Authorization to Release Information feature; added "Updating the Multi-Copy Template Name" section; updated Screen Flow setup instructions and class reference