@salesforce/afv-skills 1.7.5 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skills/activating-datacloud/CREDITS.md +5 -0
- package/skills/activating-datacloud/README.md +39 -0
- package/skills/activating-datacloud/SKILL.md +118 -0
- package/skills/analyzing-omnistudio-dependencies/CREDITS.md +5 -0
- package/skills/analyzing-omnistudio-dependencies/SKILL.md +477 -0
- package/skills/analyzing-omnistudio-dependencies/references/dependency-patterns.md +508 -0
- package/skills/analyzing-omnistudio-dependencies/references/namespace-guide.md +300 -0
- package/skills/building-omnistudio-callable-apex/CREDITS.md +9 -0
- package/skills/building-omnistudio-callable-apex/README.md +80 -0
- package/skills/building-omnistudio-callable-apex/SKILL.md +276 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_callable_openinterface.cls +40 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_callable_vanilla.cls +32 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_migration.cls +54 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_openinterface.cls +45 -0
- package/skills/building-omnistudio-callable-apex/assets/pattern_test_class.cls +65 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/IndustriesCallableException.cls +7 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallable.cls +115 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/Industries_QuoteByProductCallableTest.cls +189 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_QuoteByProductCallable/TRANSCRIPT.md +115 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/IndustriesCallableException.cls +7 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallable.cls +74 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomCallableTest.cls +146 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/MyCustomRemoteClass.cls +16 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterface2Conversion/TRANSCRIPT.md +120 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/IndustriesCallableException.cls +7 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallable.cls +73 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomCallableTest.cls +128 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/MyCustomVlocityOpenInterface2.cls +23 -0
- package/skills/building-omnistudio-callable-apex/examples/Test_VlocityOpenInterfaceConversion/TRANSCRIPT.md +75 -0
- package/skills/building-omnistudio-datamapper/CREDITS.md +5 -0
- package/skills/building-omnistudio-datamapper/SKILL.md +270 -0
- package/skills/building-omnistudio-datamapper/assets/completion-summary-template.md +28 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-extract.json +6 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-item.json +12 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-load.json +6 -0
- package/skills/building-omnistudio-datamapper/assets/omni-data-transform-transform.json +6 -0
- package/skills/building-omnistudio-datamapper/references/best-practices.md +277 -0
- package/skills/building-omnistudio-datamapper/references/naming-conventions.md +145 -0
- package/skills/building-omnistudio-flexcard/CREDITS.md +5 -0
- package/skills/building-omnistudio-flexcard/SKILL.md +325 -0
- package/skills/building-omnistudio-flexcard/assets/omni-ui-card.json +10 -0
- package/skills/building-omnistudio-flexcard/references/best-practices.md +291 -0
- package/skills/building-omnistudio-flexcard/references/data-binding-guide.md +311 -0
- package/skills/building-omnistudio-flexcard/references/scoring-rubric.md +66 -0
- package/skills/building-omnistudio-flexcard/scripts/flexcard-commands.sh +24 -0
- package/skills/building-omnistudio-integration-procedure/CREDITS.md +5 -0
- package/skills/building-omnistudio-integration-procedure/SKILL.md +275 -0
- package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-dr-extract.json +10 -0
- package/skills/building-omnistudio-integration-procedure/assets/omni-process-element-set-values.json +10 -0
- package/skills/building-omnistudio-integration-procedure/assets/omni-process-ip.json +12 -0
- package/skills/building-omnistudio-integration-procedure/assets/scoring-report-format.txt +14 -0
- package/skills/building-omnistudio-integration-procedure/references/best-practices.md +388 -0
- package/skills/building-omnistudio-integration-procedure/references/element-types.md +588 -0
- package/skills/building-omnistudio-integration-procedure/scripts/cli-commands.sh +18 -0
- package/skills/building-omnistudio-omniscript/CREDITS.md +5 -0
- package/skills/building-omnistudio-omniscript/SKILL.md +367 -0
- package/skills/building-omnistudio-omniscript/assets/omni-process-element-step.json +10 -0
- package/skills/building-omnistudio-omniscript/assets/omni-process-element-text-block.json +11 -0
- package/skills/building-omnistudio-omniscript/assets/omni-process-omniscript.json +12 -0
- package/skills/building-omnistudio-omniscript/references/best-practices.md +480 -0
- package/skills/building-omnistudio-omniscript/references/element-types.md +1172 -0
- package/skills/building-omnistudio-omniscript/scripts/check-duplicate-omniscript.sh +13 -0
- package/skills/building-omnistudio-omniscript/scripts/cli-reference.sh +21 -0
- package/skills/building-omnistudio-omniscript/scripts/deploy-omniscript.sh +29 -0
- package/skills/building-sf-integrations/CREDITS.md +5 -0
- package/skills/building-sf-integrations/README.md +95 -0
- package/skills/building-sf-integrations/SKILL.md +192 -0
- package/skills/building-sf-integrations/assets/callouts/callout-retry-handler.cls +167 -0
- package/skills/building-sf-integrations/assets/callouts/http-response-handler.cls +257 -0
- package/skills/building-sf-integrations/assets/callouts/rest-queueable-callout.cls +262 -0
- package/skills/building-sf-integrations/assets/callouts/rest-sync-callout.cls +211 -0
- package/skills/building-sf-integrations/assets/cdc/cdc-handler.cls +246 -0
- package/skills/building-sf-integrations/assets/cdc/cdc-subscriber-trigger.trigger +139 -0
- package/skills/building-sf-integrations/assets/endpoint-security/example.cspTrustedSite-meta.xml +58 -0
- package/skills/building-sf-integrations/assets/endpoint-security/example.remoteSite-meta.xml +39 -0
- package/skills/building-sf-integrations/assets/external-credentials/jwt-external-credential.externalCredential-meta.xml +90 -0
- package/skills/building-sf-integrations/assets/external-credentials/oauth-external-credential.externalCredential-meta.xml +87 -0
- package/skills/building-sf-integrations/assets/external-services/external-service-operations.md +221 -0
- package/skills/building-sf-integrations/assets/external-services/openapi-registration.externalServiceRegistration-meta.xml +193 -0
- package/skills/building-sf-integrations/assets/named-credentials/certificate-auth.namedCredential-meta.xml +62 -0
- package/skills/building-sf-integrations/assets/named-credentials/custom-auth.namedCredential-meta.xml +71 -0
- package/skills/building-sf-integrations/assets/named-credentials/oauth-client-credentials.namedCredential-meta.xml +51 -0
- package/skills/building-sf-integrations/assets/named-credentials/oauth-jwt-bearer.namedCredential-meta.xml +67 -0
- package/skills/building-sf-integrations/assets/platform-events/event-publisher.cls +191 -0
- package/skills/building-sf-integrations/assets/platform-events/event-subscriber-action.cls +295 -0
- package/skills/building-sf-integrations/assets/platform-events/event-subscriber-trigger.trigger +108 -0
- package/skills/building-sf-integrations/assets/platform-events/platform-event-definition.object-meta.xml +124 -0
- package/skills/building-sf-integrations/assets/soap/soap-callout-service.cls +186 -0
- package/skills/building-sf-integrations/assets/soap/wsdl2apex-guide.md +213 -0
- package/skills/building-sf-integrations/hooks/scripts/suggest_credential_setup.py +271 -0
- package/skills/building-sf-integrations/hooks/scripts/validate_integration.py +363 -0
- package/skills/building-sf-integrations/references/callout-patterns.md +719 -0
- package/skills/building-sf-integrations/references/cdc-guide.md +288 -0
- package/skills/building-sf-integrations/references/cli-reference.md +94 -0
- package/skills/building-sf-integrations/references/event-driven-architecture-guide.md +266 -0
- package/skills/building-sf-integrations/references/event-patterns.md +838 -0
- package/skills/building-sf-integrations/references/external-services-guide.md +303 -0
- package/skills/building-sf-integrations/references/messaging-api-v2.md +609 -0
- package/skills/building-sf-integrations/references/named-credentials-automation.md +201 -0
- package/skills/building-sf-integrations/references/named-credentials-guide.md +173 -0
- package/skills/building-sf-integrations/references/platform-events-guide.md +288 -0
- package/skills/building-sf-integrations/references/rest-callout-patterns.md +288 -0
- package/skills/building-sf-integrations/references/scoring-rubric.md +59 -0
- package/skills/building-sf-integrations/references/security-best-practices.md +248 -0
- package/skills/building-sf-integrations/scripts/README.md +100 -0
- package/skills/building-sf-integrations/scripts/configure-named-credential.sh +236 -0
- package/skills/building-sf-integrations/scripts/set-api-credential.sh +146 -0
- package/skills/building-sf-integrations/scripts/templates/setup-credentials-with-csp.sh +158 -0
- package/skills/building-ui-bundle-frontend/SKILL.md +2 -0
- package/skills/configuring-connected-apps/CREDITS.md +3 -0
- package/skills/configuring-connected-apps/README.md +99 -0
- package/skills/configuring-connected-apps/SKILL.md +224 -0
- package/skills/configuring-connected-apps/assets/connected-app-basic.xml +29 -0
- package/skills/configuring-connected-apps/assets/connected-app-canvas.xml +62 -0
- package/skills/configuring-connected-apps/assets/connected-app-jwt.xml +49 -0
- package/skills/configuring-connected-apps/assets/connected-app-oauth.xml +65 -0
- package/skills/configuring-connected-apps/assets/eca-global-oauth.xml +36 -0
- package/skills/configuring-connected-apps/assets/eca-oauth-settings.xml +36 -0
- package/skills/configuring-connected-apps/assets/eca-policies.xml +36 -0
- package/skills/configuring-connected-apps/assets/external-client-app.xml +35 -0
- package/skills/configuring-connected-apps/references/example-usage.md +256 -0
- package/skills/configuring-connected-apps/references/migration-guide.md +328 -0
- package/skills/configuring-connected-apps/references/oauth-flows-reference.md +660 -0
- package/skills/configuring-connected-apps/references/security-checklist.md +209 -0
- package/skills/configuring-connected-apps/references/testing-validation-guide.md +275 -0
- package/skills/connecting-datacloud/CREDITS.md +5 -0
- package/skills/connecting-datacloud/README.md +59 -0
- package/skills/connecting-datacloud/SKILL.md +155 -0
- package/skills/connecting-datacloud/examples/connections/heroku-postgres.json +15 -0
- package/skills/connecting-datacloud/examples/connections/ingest-api-connection.json +5 -0
- package/skills/connecting-datacloud/examples/connections/ingest-api-schema.json +31 -0
- package/skills/connecting-datacloud/examples/connections/redshift.json +16 -0
- package/skills/connecting-datacloud/examples/connections/sharepoint-unstructured.json +20 -0
- package/skills/connecting-datacloud/examples/connections/snowflake-connection.json +42 -0
- package/skills/debugging-apex-logs/CREDITS.md +22 -0
- package/skills/debugging-apex-logs/README.md +74 -0
- package/skills/debugging-apex-logs/SKILL.md +172 -0
- package/skills/debugging-apex-logs/assets/benchmarking-template.cls +327 -0
- package/skills/debugging-apex-logs/assets/cpu-heap-optimization.cls +307 -0
- package/skills/debugging-apex-logs/assets/dml-in-loop-fix.cls +219 -0
- package/skills/debugging-apex-logs/assets/null-pointer-fix.cls +252 -0
- package/skills/debugging-apex-logs/assets/soql-in-loop-fix.cls +157 -0
- package/skills/debugging-apex-logs/references/analysis-playbook.md +53 -0
- package/skills/debugging-apex-logs/references/benchmarking-guide.md +287 -0
- package/skills/debugging-apex-logs/references/cli-commands.md +368 -0
- package/skills/debugging-apex-logs/references/common-issues.md +68 -0
- package/skills/debugging-apex-logs/references/debug-log-reference.md +328 -0
- package/skills/debugging-apex-logs/references/log-analysis-tools.md +248 -0
- package/skills/debugging-apex-logs/references/scoring-rubric.md +21 -0
- package/skills/deploying-metadata/CREDITS.md +25 -0
- package/skills/deploying-metadata/README.md +104 -0
- package/skills/deploying-metadata/SKILL.md +214 -0
- package/skills/deploying-metadata/assets/destructiveChanges.xml +143 -0
- package/skills/deploying-metadata/assets/package.xml +121 -0
- package/skills/deploying-metadata/references/agent-deployment-guide.md +628 -0
- package/skills/deploying-metadata/references/deploy.sh +73 -0
- package/skills/deploying-metadata/references/deployment-report-template.md +89 -0
- package/skills/deploying-metadata/references/deployment-workflows.md +395 -0
- package/skills/deploying-metadata/references/orchestration.md +183 -0
- package/skills/deploying-metadata/references/trigger-deployment-safety.md +376 -0
- package/skills/deploying-omnistudio-datapacks/CREDITS.md +5 -0
- package/skills/deploying-omnistudio-datapacks/README.md +88 -0
- package/skills/deploying-omnistudio-datapacks/SKILL.md +174 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/TRANSCRIPT.md +124 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle/deploy-business-internet-plus-bundle.yaml +11 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/TRANSCRIPT.md +142 -0
- package/skills/deploying-omnistudio-datapacks/examples/business-internet-plus-bundle-deploy/deploy-business-internet-plus-bundle.yaml +10 -0
- package/skills/deploying-omnistudio-datapacks/references/job-file-template.md +42 -0
- package/skills/deploying-omnistudio-datapacks/references/troubleshooting-matrix.md +24 -0
- package/skills/deploying-ui-bundle/SKILL.md +2 -0
- package/skills/developing-agentforce/SKILL.md +1 -1
- package/skills/developing-agentforce/assets/metadata/http-callout-flow.flow-meta.xml +1 -1
- package/skills/developing-agentforce/references/actions-reference.md +8 -8
- package/skills/fetching-salesforce-docs/README.md +66 -0
- package/skills/fetching-salesforce-docs/SKILL.md +209 -0
- package/skills/fetching-salesforce-docs/requirements.txt +2 -0
- package/skills/fetching-salesforce-docs/scripts/extract_help_salesforce.py +497 -0
- package/skills/fetching-salesforce-docs/scripts/extract_salesforce_doc.py +357 -0
- package/skills/fetching-salesforce-docs/scripts/runtime_bootstrap.py +58 -0
- package/skills/generating-apex/CREDITS.md +1 -26
- package/skills/generating-apex/SKILL.md +4 -2
- package/skills/generating-apex-test/CREDITS.md +2 -27
- package/skills/generating-apex-test/SKILL.md +3 -1
- package/skills/generating-custom-application/SKILL.md +2 -0
- package/skills/generating-custom-field/SKILL.md +3 -1
- package/skills/generating-custom-lightning-type/SKILL.md +2 -0
- package/skills/generating-custom-object/SKILL.md +3 -1
- package/skills/generating-custom-tab/SKILL.md +3 -1
- package/skills/generating-flexipage/SKILL.md +2 -0
- package/skills/generating-flow/SKILL.md +2 -0
- package/skills/generating-lightning-app/SKILL.md +1 -1
- package/skills/generating-list-view/SKILL.md +2 -0
- package/skills/generating-lwc-components/CREDITS.md +5 -0
- package/skills/generating-lwc-components/README.md +126 -0
- package/skills/generating-lwc-components/SKILL.md +191 -0
- package/skills/generating-lwc-components/assets/apex-controller/LwcController.cls +327 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.css +72 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.html +111 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.js +163 -0
- package/skills/generating-lwc-components/assets/basic-component/basicComponent.js-meta.xml +137 -0
- package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.html +111 -0
- package/skills/generating-lwc-components/assets/datatable-component/datatableComponent.js +367 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.css +63 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.html +154 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js +348 -0
- package/skills/generating-lwc-components/assets/flow-screen-component/flowScreenComponent.js-meta.xml +87 -0
- package/skills/generating-lwc-components/assets/form-component/formComponent.html +165 -0
- package/skills/generating-lwc-components/assets/form-component/formComponent.js +275 -0
- package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.html +100 -0
- package/skills/generating-lwc-components/assets/graphql-component/graphqlComponent.js +336 -0
- package/skills/generating-lwc-components/assets/jest-test/componentName.test.js.example +371 -0
- package/skills/generating-lwc-components/assets/message-channel/RecordSelected.messageChannel-meta.xml +71 -0
- package/skills/generating-lwc-components/assets/message-channel/lmsPublisher.js +103 -0
- package/skills/generating-lwc-components/assets/message-channel/lmsSubscriber.js +181 -0
- package/skills/generating-lwc-components/assets/modal-component/modalComponent.html +85 -0
- package/skills/generating-lwc-components/assets/modal-component/modalComponent.js +199 -0
- package/skills/generating-lwc-components/assets/record-picker/recordPicker.html +55 -0
- package/skills/generating-lwc-components/assets/record-picker/recordPicker.js +199 -0
- package/skills/generating-lwc-components/assets/state-store/store.js +282 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.css +65 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.html +95 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.js-meta.xml +75 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.test.ts.example +301 -0
- package/skills/generating-lwc-components/assets/typescript-component/typescriptComponent.ts +295 -0
- package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.html +71 -0
- package/skills/generating-lwc-components/assets/workspace-api/workspaceComponent.js +316 -0
- package/skills/generating-lwc-components/hooks/scripts/lwc-lsp-validate.py +295 -0
- package/skills/generating-lwc-components/hooks/scripts/post-tool-validate.py +347 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_data/deprecated_patterns.json +74 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_data/styling_hooks.json +111 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_data/valid_slds_classes.json +127 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_linter_wrapper.py +294 -0
- package/skills/generating-lwc-components/hooks/scripts/slds_rules/__init__.py +22 -0
- package/skills/generating-lwc-components/hooks/scripts/template_validator.py +332 -0
- package/skills/generating-lwc-components/hooks/scripts/validate_slds.py +595 -0
- package/skills/generating-lwc-components/references/accessibility-guide.md +843 -0
- package/skills/generating-lwc-components/references/advanced-features.md +108 -0
- package/skills/generating-lwc-components/references/async-notification-patterns.md +661 -0
- package/skills/generating-lwc-components/references/cli-commands.md +545 -0
- package/skills/generating-lwc-components/references/component-patterns.md +1476 -0
- package/skills/generating-lwc-components/references/flow-integration-guide.md +675 -0
- package/skills/generating-lwc-components/references/jest-testing.md +1011 -0
- package/skills/generating-lwc-components/references/lms-guide.md +860 -0
- package/skills/generating-lwc-components/references/lwc-best-practices.md +1310 -0
- package/skills/generating-lwc-components/references/performance-guide.md +861 -0
- package/skills/generating-lwc-components/references/scoring-and-testing.md +116 -0
- package/skills/generating-lwc-components/references/slds-blueprints.json +14389 -0
- package/skills/generating-lwc-components/references/slds-design-guide.md +166 -0
- package/skills/generating-lwc-components/references/state-management.md +642 -0
- package/skills/generating-lwc-components/references/template-anti-patterns.md +948 -0
- package/skills/generating-lwc-components/references/triangle-pattern.md +365 -0
- package/skills/generating-lwc-components/scripts/local-dev-preview.sh +34 -0
- package/skills/generating-mermaid-diagrams/CREDITS.md +46 -0
- package/skills/generating-mermaid-diagrams/README.md +114 -0
- package/skills/generating-mermaid-diagrams/SKILL.md +218 -0
- package/skills/generating-mermaid-diagrams/assets/agentforce/agent-flow.md +313 -0
- package/skills/generating-mermaid-diagrams/assets/architecture/system-landscape.md +351 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/b2b-commerce-erd.md +317 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/campaigns-erd.md +195 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/consent-erd.md +262 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/files-erd.md +266 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/forecasting-erd.md +261 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/fsl-erd.md +332 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/party-model-erd.md +237 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/quote-order-erd.md +277 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/revenue-cloud-erd.md +343 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/sales-cloud-erd.md +192 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/salesforce-erd.md +209 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/scheduler-erd.md +276 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/service-cloud-erd.md +217 -0
- package/skills/generating-mermaid-diagrams/assets/datamodel/territory-management-erd.md +241 -0
- package/skills/generating-mermaid-diagrams/assets/integration/api-sequence.md +387 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code-pkce.md +197 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/authorization-code.md +152 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/client-credentials.md +233 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/device-authorization.md +295 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/jwt-bearer.md +256 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/refresh-token.md +281 -0
- package/skills/generating-mermaid-diagrams/assets/oauth/user-agent-social-sign-on.md +281 -0
- package/skills/generating-mermaid-diagrams/assets/role-hierarchy/user-hierarchy.md +322 -0
- package/skills/generating-mermaid-diagrams/references/color-palette.md +464 -0
- package/skills/generating-mermaid-diagrams/references/diagram-conventions.md +313 -0
- package/skills/generating-mermaid-diagrams/references/erd-conventions.md +320 -0
- package/skills/generating-mermaid-diagrams/references/mermaid-reference.md +434 -0
- package/skills/generating-mermaid-diagrams/references/mermaid-styling.md +81 -0
- package/skills/generating-mermaid-diagrams/references/preview-guide.md +49 -0
- package/skills/generating-mermaid-diagrams/references/usage-examples.md +340 -0
- package/skills/generating-mermaid-diagrams/scripts/README.md +160 -0
- package/skills/generating-mermaid-diagrams/scripts/mermaid_preview.py +654 -0
- package/skills/generating-mermaid-diagrams/scripts/query-org-metadata.py +293 -0
- package/skills/generating-ui-bundle-features/SKILL.md +2 -0
- package/skills/generating-ui-bundle-metadata/SKILL.md +2 -0
- package/skills/generating-ui-bundle-site/SKILL.md +2 -0
- package/skills/generating-validation-rule/SKILL.md +2 -0
- package/skills/generating-visual-diagrams/CREDITS.md +80 -0
- package/skills/generating-visual-diagrams/README.md +83 -0
- package/skills/generating-visual-diagrams/SKILL.md +208 -0
- package/skills/generating-visual-diagrams/assets/architecture/integration-flow.md +55 -0
- package/skills/generating-visual-diagrams/assets/erd/core-objects.md +131 -0
- package/skills/generating-visual-diagrams/assets/erd/custom-objects.md +60 -0
- package/skills/generating-visual-diagrams/assets/lwc/dashboard-card.md +45 -0
- package/skills/generating-visual-diagrams/assets/lwc/data-table.md +57 -0
- package/skills/generating-visual-diagrams/assets/lwc/record-form.md +60 -0
- package/skills/generating-visual-diagrams/assets/review/apex-review.md +57 -0
- package/skills/generating-visual-diagrams/assets/review/lwc-review.md +48 -0
- package/skills/generating-visual-diagrams/references/architect-aesthetic-guide.md +257 -0
- package/skills/generating-visual-diagrams/references/examples-index.md +35 -0
- package/skills/generating-visual-diagrams/references/gemini-cli-setup.md +65 -0
- package/skills/generating-visual-diagrams/references/interview-questions.md +529 -0
- package/skills/generating-visual-diagrams/references/iteration-workflow.md +173 -0
- package/skills/generating-visual-diagrams/scripts/check-prerequisites.sh +101 -0
- package/skills/generating-visual-diagrams/scripts/generate_image.py +243 -0
- package/skills/handling-sf-data/CREDITS.md +5 -0
- package/skills/handling-sf-data/README.md +112 -0
- package/skills/handling-sf-data/SKILL.md +235 -0
- package/skills/handling-sf-data/assets/bulk/bulk-insert-10000.apex +293 -0
- package/skills/handling-sf-data/assets/bulk/bulk-insert-200.apex +208 -0
- package/skills/handling-sf-data/assets/bulk/bulk-insert-500.apex +219 -0
- package/skills/handling-sf-data/assets/bulk/bulk-upsert-external-id.apex +324 -0
- package/skills/handling-sf-data/assets/cleanup/delete-by-created-date.apex +319 -0
- package/skills/handling-sf-data/assets/cleanup/delete-by-name.apex +240 -0
- package/skills/handling-sf-data/assets/cleanup/delete-test-data.apex +311 -0
- package/skills/handling-sf-data/assets/cleanup/rollback-transaction.apex +266 -0
- package/skills/handling-sf-data/assets/csv/account-import.csv +11 -0
- package/skills/handling-sf-data/assets/csv/contact-import.csv +11 -0
- package/skills/handling-sf-data/assets/csv/custom-object-import.csv +11 -0
- package/skills/handling-sf-data/assets/csv/opportunity-import.csv +11 -0
- package/skills/handling-sf-data/assets/factories/account-factory.apex +165 -0
- package/skills/handling-sf-data/assets/factories/case-factory.apex +237 -0
- package/skills/handling-sf-data/assets/factories/contact-factory.apex +168 -0
- package/skills/handling-sf-data/assets/factories/custom-object-factory.apex +260 -0
- package/skills/handling-sf-data/assets/factories/event-factory.apex +275 -0
- package/skills/handling-sf-data/assets/factories/hierarchy-factory.apex +372 -0
- package/skills/handling-sf-data/assets/factories/lead-factory.apex +190 -0
- package/skills/handling-sf-data/assets/factories/opportunity-factory.apex +206 -0
- package/skills/handling-sf-data/assets/factories/task-factory.apex +246 -0
- package/skills/handling-sf-data/assets/factories/user-factory.apex +278 -0
- package/skills/handling-sf-data/assets/json/account-contact-tree.json +130 -0
- package/skills/handling-sf-data/assets/json/account-opportunity-tree.json +110 -0
- package/skills/handling-sf-data/assets/json/full-hierarchy-tree.json +188 -0
- package/skills/handling-sf-data/assets/soql/aggregate.soql +226 -0
- package/skills/handling-sf-data/assets/soql/child-to-parent.soql +162 -0
- package/skills/handling-sf-data/assets/soql/parent-to-child.soql +153 -0
- package/skills/handling-sf-data/assets/soql/polymorphic.soql +198 -0
- package/skills/handling-sf-data/assets/soql/subquery.soql +287 -0
- package/skills/handling-sf-data/references/anonymous-apex-guide.md +98 -0
- package/skills/handling-sf-data/references/bulk-operations-guide.md +94 -0
- package/skills/handling-sf-data/references/bulk-testing-example.md +194 -0
- package/skills/handling-sf-data/references/cleanup-rollback-example.md +322 -0
- package/skills/handling-sf-data/references/cleanup-rollback-guide.md +84 -0
- package/skills/handling-sf-data/references/crud-workflow-example.md +183 -0
- package/skills/handling-sf-data/references/governor-limits-reference.md +74 -0
- package/skills/handling-sf-data/references/orchestration.md +174 -0
- package/skills/handling-sf-data/references/relationship-query-examples.md +249 -0
- package/skills/handling-sf-data/references/sf-cli-data-commands.md +158 -0
- package/skills/handling-sf-data/references/soql-relationship-guide.md +84 -0
- package/skills/handling-sf-data/references/test-data-best-practices.md +104 -0
- package/skills/handling-sf-data/references/test-data-factory-usage.md +290 -0
- package/skills/handling-sf-data/references/test-data-patterns.md +98 -0
- package/skills/handling-sf-data/scripts/soql_validator.py +292 -0
- package/skills/handling-sf-data/scripts/validate_data_operation.py +379 -0
- package/skills/harmonizing-datacloud/CREDITS.md +3 -0
- package/skills/harmonizing-datacloud/README.md +31 -0
- package/skills/harmonizing-datacloud/SKILL.md +117 -0
- package/skills/implementing-ui-bundle-agentforce-conversation-client/SKILL.md +1 -1
- package/skills/implementing-ui-bundle-file-upload/SKILL.md +2 -0
- package/skills/modeling-omnistudio-epc-catalog/CREDITS.md +14 -0
- package/skills/modeling-omnistudio-epc-catalog/README.md +89 -0
- package/skills/modeling-omnistudio-epc-catalog/SKILL.md +395 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/attribute-assignment-template.json +402 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/compiled-attribute-overrides-template.json +43 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/completion-block-template.txt +8 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/decomposition-relationships-template.json +233 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_AttributeAssignments.json +514 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_CompiledAttributeOverrides.json +21 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DataPack.json +649 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_DecompositionRelationships.json +200 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ObjectFieldAttributes.json +138 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OrchestrationScenarios.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_OverrideDefinitions.json +266 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ParentKeys.json +23 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PriceListEntries.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_ProductChildItems.json +34 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-premium-fttc-simple-offer/Business-Internet-Premium-FTTC_RuleAssignments.json +21 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_AttributeAssignments.json +410 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DataPack.json +535 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_DecompositionRelationships.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ObjectFieldAttributes.json +138 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_OrchestrationScenarios.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ParentKeys.json +23 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PriceListEntries.json +220 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/business-internet-pro-vpl-simple-offer/Business-Internet-Pro-VPL_ProductChildItems.json +414 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_AttributeAssignments.json +382 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DataPack.json +565 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_DecompositionRelationships.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ObjectFieldAttributes.json +104 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_OrchestrationScenarios.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ParentKeys.json +13 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PriceListEntries.json +106 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/samsung-galaxy-s22-bundle/Samsung-Galaxy-S22-Bundle_ProductChildItems.json +72 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_AttributeAssignments.json +142 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DataPack.json +377 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_DecompositionRelationships.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ObjectFieldAttributes.json +36 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ParentKeys.json +8 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PriceListEntries.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_PricebookEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/examples/static-ip-simple-offer/Static-IP_ProductChildItems.json +34 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/object-field-attributes-template.json +138 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/orchestration-scenarios-template.json +54 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/override-definitions-template.json +134 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/parent-keys-template.json +29 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/price-list-entries-template.json +158 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/pricebook-entries-template.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/product-child-item-template.json +338 -0
- package/skills/modeling-omnistudio-epc-catalog/assets/product2-offer-template.json +527 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/.gitkeep +1 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_AttributeAssignments.json +95 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_CompiledAttributeOverrides.json +1 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DataPack.json +214 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_DecompositionRelationships.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ObjectFieldAttributes.json +98 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OrchestrationScenarios.json +22 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_OverrideDefinitions.json +1 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ParentKeys.json +13 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PriceListEntries.json +35 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_PricebookEntries.json +28 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/Business-Internet-Plus_ProductChildItems.json +110 -0
- package/skills/modeling-omnistudio-epc-catalog/examples/business-internet-plus-bundle/TRANSCRIPT.md +58 -0
- package/skills/modeling-omnistudio-epc-catalog/references/epc-field-guide.md +90 -0
- package/skills/modeling-omnistudio-epc-catalog/references/naming-conventions.md +80 -0
- package/skills/modeling-omnistudio-epc-catalog/references/scoring-model.md +57 -0
- package/skills/modeling-omnistudio-epc-catalog/scripts/cli-validation-commands.sh +19 -0
- package/skills/modeling-omnistudio-epc-catalog/scripts/sample-invocations.sh +18 -0
- package/skills/observing-agentforce/SKILL.md +1 -1
- package/skills/orchestrating-datacloud/CREDITS.md +15 -0
- package/skills/orchestrating-datacloud/README.md +129 -0
- package/skills/orchestrating-datacloud/SKILL.md +236 -0
- package/skills/orchestrating-datacloud/UPSTREAM.md +45 -0
- package/skills/orchestrating-datacloud/assets/definitions/activation-target.template.json +5 -0
- package/skills/orchestrating-datacloud/assets/definitions/activation.template.json +7 -0
- package/skills/orchestrating-datacloud/assets/definitions/calculated-insight.template.json +7 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-action-target.template.json +5 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-action.template.json +5 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-graph.template.json +21 -0
- package/skills/orchestrating-datacloud/assets/definitions/data-stream.template.json +55 -0
- package/skills/orchestrating-datacloud/assets/definitions/dmo.template.json +17 -0
- package/skills/orchestrating-datacloud/assets/definitions/identity-resolution.template.json +30 -0
- package/skills/orchestrating-datacloud/assets/definitions/mapping.template.json +14 -0
- package/skills/orchestrating-datacloud/assets/definitions/relationship.template.json +12 -0
- package/skills/orchestrating-datacloud/assets/definitions/search-index.template.json +9 -0
- package/skills/orchestrating-datacloud/assets/definitions/segment.template.json +16 -0
- package/skills/orchestrating-datacloud/references/feature-readiness.md +157 -0
- package/skills/orchestrating-datacloud/references/plugin-setup.md +140 -0
- package/skills/orchestrating-datacloud/scripts/bootstrap-plugin.sh +53 -0
- package/skills/orchestrating-datacloud/scripts/diagnose-org.mjs +511 -0
- package/skills/orchestrating-datacloud/scripts/generate-manifest.mjs +68 -0
- package/skills/orchestrating-datacloud/scripts/verify-plugin.sh +58 -0
- package/skills/preparing-datacloud/CREDITS.md +7 -0
- package/skills/preparing-datacloud/README.md +51 -0
- package/skills/preparing-datacloud/SKILL.md +191 -0
- package/skills/preparing-datacloud/examples/ingestion-api/.env.example +8 -0
- package/skills/preparing-datacloud/examples/ingestion-api/README.md +48 -0
- package/skills/preparing-datacloud/examples/ingestion-api/send-data.py +144 -0
- package/skills/querying-soql/CREDITS.md +21 -0
- package/skills/querying-soql/README.md +41 -0
- package/skills/querying-soql/SKILL.md +143 -0
- package/skills/querying-soql/assets/aggregate-queries.soql +242 -0
- package/skills/querying-soql/assets/basic-queries.soql +188 -0
- package/skills/querying-soql/assets/bulkified-query-pattern.cls +280 -0
- package/skills/querying-soql/assets/optimization-patterns.soql +259 -0
- package/skills/querying-soql/assets/relationship-queries.soql +203 -0
- package/skills/querying-soql/assets/selector-class.cls +219 -0
- package/skills/querying-soql/references/anti-patterns.md +348 -0
- package/skills/querying-soql/references/cli-commands.md +358 -0
- package/skills/querying-soql/references/field-coverage-rules.md +514 -0
- package/skills/querying-soql/references/query-optimization.md +142 -0
- package/skills/querying-soql/references/selector-patterns.md +479 -0
- package/skills/querying-soql/references/soql-reference.md +227 -0
- package/skills/querying-soql/references/soql-syntax-reference.md +208 -0
- package/skills/querying-soql/scripts/post-tool-validate.py +322 -0
- package/skills/retrieving-datacloud/CREDITS.md +7 -0
- package/skills/retrieving-datacloud/README.md +44 -0
- package/skills/retrieving-datacloud/SKILL.md +120 -0
- package/skills/retrieving-datacloud/examples/search-indexes/hybrid-structured.json +44 -0
- package/skills/retrieving-datacloud/examples/search-indexes/vector-knowledge.json +43 -0
- package/skills/running-apex-tests/CREDITS.md +22 -0
- package/skills/running-apex-tests/README.md +94 -0
- package/skills/running-apex-tests/SKILL.md +158 -0
- package/skills/running-apex-tests/assets/basic-test.cls +169 -0
- package/skills/running-apex-tests/assets/bulk-test.cls +255 -0
- package/skills/running-apex-tests/assets/dml-mock.cls +339 -0
- package/skills/running-apex-tests/assets/mock-callout-test.cls +353 -0
- package/skills/running-apex-tests/assets/stub-provider-example.cls +364 -0
- package/skills/running-apex-tests/assets/test-data-factory.cls +328 -0
- package/skills/running-apex-tests/hooks/scripts/parse-test-results.py +364 -0
- package/skills/running-apex-tests/references/cli-commands.md +289 -0
- package/skills/running-apex-tests/references/mocking-patterns.md +500 -0
- package/skills/running-apex-tests/references/performance-optimization.md +283 -0
- package/skills/running-apex-tests/references/test-fix-loop.md +49 -0
- package/skills/running-apex-tests/references/test-patterns.md +154 -0
- package/skills/running-apex-tests/references/testing-best-practices.md +509 -0
- package/skills/segmenting-datacloud/CREDITS.md +3 -0
- package/skills/segmenting-datacloud/README.md +36 -0
- package/skills/segmenting-datacloud/SKILL.md +115 -0
- package/skills/switching-org/SKILL.md +1 -1
- package/skills/testing-agentforce/SKILL.md +1 -1
- package/skills/uplifting-components-to-slds2/SKILL.md +3 -1
- package/skills/using-ui-bundle-salesforce-data/SKILL.md +2 -0
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
<!-- Parent: running-apex-tests/SKILL.md -->
|
|
2
|
+
# Performance Optimization for Apex Tests
|
|
3
|
+
|
|
4
|
+
Fast tests enable faster development. When test suites run quickly, developers refactor confidently. This guide covers techniques to dramatically reduce test execution time.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Why Test Speed Matters
|
|
9
|
+
|
|
10
|
+
| Test Suite Duration | Impact |
|
|
11
|
+
|---------------------|--------|
|
|
12
|
+
| **< 5 minutes** | Developers run frequently, catch issues early |
|
|
13
|
+
| **5-30 minutes** | Developers run occasionally, issues slip through |
|
|
14
|
+
| **30+ minutes** | Developers avoid running, tests become stale |
|
|
15
|
+
| **Hours** | CI/CD bottleneck, blocked deployments |
|
|
16
|
+
|
|
17
|
+
The goal: **Sub-second unit tests**, with integration tests taking seconds, not minutes.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Technique 1: Mock DML Operations
|
|
22
|
+
|
|
23
|
+
Database operations are the #1 cause of slow tests.
|
|
24
|
+
|
|
25
|
+
### The Numbers
|
|
26
|
+
|
|
27
|
+
| Operation | 10,000 Records | Notes |
|
|
28
|
+
|-----------|----------------|-------|
|
|
29
|
+
| Actual insert | ~50 seconds | Database round-trips |
|
|
30
|
+
| DML mocking | <1 second | In-memory only |
|
|
31
|
+
| **Improvement** | **~35x faster** | |
|
|
32
|
+
|
|
33
|
+
### Implementation
|
|
34
|
+
|
|
35
|
+
See `assets/dml-mock.cls` and `references/mocking-patterns.md` for complete implementation.
|
|
36
|
+
|
|
37
|
+
```apex
|
|
38
|
+
// ❌ SLOW: Actual database insert
|
|
39
|
+
List<Account> accounts = TestDataFactory.createAccounts(1000);
|
|
40
|
+
insert accounts; // ~5 seconds
|
|
41
|
+
|
|
42
|
+
// ✅ FAST: Mock DML
|
|
43
|
+
DMLMock.reset();
|
|
44
|
+
AccountService service = new AccountService(new DMLMock());
|
|
45
|
+
service.createAccounts(accounts); // <0.1 seconds
|
|
46
|
+
Assert.areEqual(1000, DMLMock.InsertedRecords.size());
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Technique 2: Mock SOQL Queries
|
|
52
|
+
|
|
53
|
+
Query execution adds overhead, especially with large result sets.
|
|
54
|
+
|
|
55
|
+
```apex
|
|
56
|
+
// ❌ SLOW: Actual query requiring test data setup
|
|
57
|
+
@TestSetup
|
|
58
|
+
static void setup() {
|
|
59
|
+
List<Account> accounts = new List<Account>();
|
|
60
|
+
for (Integer i = 0; i < 1000; i++) {
|
|
61
|
+
accounts.add(new Account(Name = 'Test ' + i));
|
|
62
|
+
}
|
|
63
|
+
insert accounts; // Slow
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// ✅ FAST: Mock query results
|
|
67
|
+
AccountSelector.setMockResults(new List<Account>{
|
|
68
|
+
new Account(Name = 'Mock 1'),
|
|
69
|
+
new Account(Name = 'Mock 2')
|
|
70
|
+
});
|
|
71
|
+
List<Account> results = AccountSelector.getActiveAccounts(); // Instant
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Technique 3: Minimize @TestSetup
|
|
77
|
+
|
|
78
|
+
`@TestSetup` runs before every test method. Large setups compound execution time.
|
|
79
|
+
|
|
80
|
+
```apex
|
|
81
|
+
// ❌ SLOW: Heavy @TestSetup
|
|
82
|
+
@TestSetup
|
|
83
|
+
static void setup() {
|
|
84
|
+
List<Account> accounts = TestDataFactory.createAccounts(100);
|
|
85
|
+
insert accounts;
|
|
86
|
+
List<Contact> contacts = TestDataFactory.createContacts(500, accounts);
|
|
87
|
+
insert contacts;
|
|
88
|
+
List<Opportunity> opps = TestDataFactory.createOpportunities(200, accounts);
|
|
89
|
+
insert opps;
|
|
90
|
+
// Total: 800 DML operations, runs before EACH test method
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// ✅ FAST: Minimal @TestSetup, mock what you can
|
|
94
|
+
@TestSetup
|
|
95
|
+
static void setup() {
|
|
96
|
+
// Only create what MUST exist in database
|
|
97
|
+
Account parentAccount = new Account(Name = 'Required Parent');
|
|
98
|
+
insert parentAccount;
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Technique 4: Choose Efficient Loop Constructs
|
|
105
|
+
|
|
106
|
+
Loop performance varies significantly with large iterations.
|
|
107
|
+
|
|
108
|
+
### Benchmark Results (10,000 iterations)
|
|
109
|
+
|
|
110
|
+
| Loop Type | Duration | Notes |
|
|
111
|
+
|-----------|----------|-------|
|
|
112
|
+
| While loop | ~0.4s | Fastest |
|
|
113
|
+
| Cached iterator | ~0.8s | Good alternative |
|
|
114
|
+
| For loop (index) | ~1.4s | Acceptable |
|
|
115
|
+
| Enhanced for loop | ~2.4s | Convenient but slower |
|
|
116
|
+
| Uncached iterator | CPU limit | Avoid |
|
|
117
|
+
|
|
118
|
+
### Recommendation
|
|
119
|
+
|
|
120
|
+
```apex
|
|
121
|
+
// ✅ PREFERRED: While loop for large iterations
|
|
122
|
+
Iterator<Account> iter = accounts.iterator();
|
|
123
|
+
while (iter.hasNext()) {
|
|
124
|
+
Account acc = iter.next();
|
|
125
|
+
// process
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// ✅ ACCEPTABLE: Standard for loop
|
|
129
|
+
for (Integer i = 0; i < accounts.size(); i++) {
|
|
130
|
+
Account acc = accounts[i];
|
|
131
|
+
// process
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// ⚠️ CONVENIENT BUT SLOWER: Enhanced for
|
|
135
|
+
for (Account acc : accounts) {
|
|
136
|
+
// process
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Technique 5: Batch Test Data Creation
|
|
143
|
+
|
|
144
|
+
Creating records one-by-one is slow. Batch operations are faster.
|
|
145
|
+
|
|
146
|
+
```apex
|
|
147
|
+
// ❌ SLOW: One-by-one creation
|
|
148
|
+
for (Integer i = 0; i < 200; i++) {
|
|
149
|
+
Account acc = new Account(Name = 'Test ' + i);
|
|
150
|
+
insert acc; // 200 DML statements!
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// ✅ FAST: Batch creation
|
|
154
|
+
List<Account> accounts = new List<Account>();
|
|
155
|
+
for (Integer i = 0; i < 200; i++) {
|
|
156
|
+
accounts.add(new Account(Name = 'Test ' + i));
|
|
157
|
+
}
|
|
158
|
+
insert accounts; // 1 DML statement
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## Technique 6: Use Assert Instead of System.assert
|
|
164
|
+
|
|
165
|
+
The modern `Assert` class is cleaner and provides better error messages.
|
|
166
|
+
|
|
167
|
+
```apex
|
|
168
|
+
// ❌ OLD: System.assert (still works but verbose)
|
|
169
|
+
System.assert(result != null, 'Result should not be null');
|
|
170
|
+
System.assertEquals(expected, actual, 'Values should match');
|
|
171
|
+
|
|
172
|
+
// ✅ MODERN: Assert class (Apex 56.0+)
|
|
173
|
+
Assert.isNotNull(result, 'Result should not be null');
|
|
174
|
+
Assert.areEqual(expected, actual, 'Values should match');
|
|
175
|
+
Assert.isTrue(condition, 'Condition should be true');
|
|
176
|
+
Assert.fail('Should not reach here');
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Technique 7: Avoid SOSL in Tests
|
|
182
|
+
|
|
183
|
+
SOSL searches return empty results in tests unless configured.
|
|
184
|
+
|
|
185
|
+
```apex
|
|
186
|
+
// ❌ PROBLEM: SOSL returns nothing in tests by default
|
|
187
|
+
List<List<SObject>> results = [FIND 'test' IN ALL FIELDS RETURNING Account];
|
|
188
|
+
// results[0] is EMPTY even with matching records!
|
|
189
|
+
|
|
190
|
+
// ✅ SOLUTION: Use Test.setFixedSearchResults()
|
|
191
|
+
@IsTest
|
|
192
|
+
static void testSearch() {
|
|
193
|
+
Account acc = new Account(Name = 'Searchable');
|
|
194
|
+
insert acc;
|
|
195
|
+
|
|
196
|
+
// Configure what SOSL will return
|
|
197
|
+
Test.setFixedSearchResults(new List<Id>{ acc.Id });
|
|
198
|
+
|
|
199
|
+
Test.startTest();
|
|
200
|
+
List<List<SObject>> results = [FIND 'test' IN ALL FIELDS RETURNING Account];
|
|
201
|
+
Test.stopTest();
|
|
202
|
+
|
|
203
|
+
Assert.areEqual(1, results[0].size(), 'Should find configured record');
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Technique 8: Strategic Test Method Scoping
|
|
210
|
+
|
|
211
|
+
Run only the tests you need during development.
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
# ❌ SLOW: Run all tests (minutes to hours)
|
|
215
|
+
sf apex run test --test-level RunLocalTests --target-org sandbox
|
|
216
|
+
|
|
217
|
+
# ✅ FAST: Run single test class
|
|
218
|
+
sf apex run test --class-names MyClassTest --target-org sandbox
|
|
219
|
+
|
|
220
|
+
# ✅ FASTER: Run single test method
|
|
221
|
+
sf apex run test --tests MyClassTest.testSpecificMethod --target-org sandbox
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Technique 9: Async Test Execution
|
|
227
|
+
|
|
228
|
+
Use async mode for large test suites to avoid blocking.
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
# Start tests asynchronously
|
|
232
|
+
sf apex run test --class-names MyClassTest --wait 0 --target-org sandbox
|
|
233
|
+
# Returns test run ID: 707xx0000000000
|
|
234
|
+
|
|
235
|
+
# Check status later
|
|
236
|
+
sf apex get test --test-run-id 707xx0000000000 --target-org sandbox
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## Anti-Patterns to Avoid
|
|
242
|
+
|
|
243
|
+
| Anti-Pattern | Problem | Solution |
|
|
244
|
+
|--------------|---------|----------|
|
|
245
|
+
| DML in loops | N operations instead of 1 | Bulk DML outside loops |
|
|
246
|
+
| Large @TestSetup | Runs before every test | Minimize or mock |
|
|
247
|
+
| No mocking | Full database round-trips | Mock DML, queries, callouts |
|
|
248
|
+
| SeeAllData=true | Depends on org data | Create test data |
|
|
249
|
+
| Deep nested loops | O(n²) or worse | Flatten with Maps |
|
|
250
|
+
| String concatenation in loops | New string objects each iteration | Use List and join |
|
|
251
|
+
|
|
252
|
+
---
|
|
253
|
+
|
|
254
|
+
## Optimization Checklist
|
|
255
|
+
|
|
256
|
+
Before committing tests, verify:
|
|
257
|
+
|
|
258
|
+
- [ ] DML operations are mocked where possible
|
|
259
|
+
- [ ] @TestSetup is minimal
|
|
260
|
+
- [ ] No SOQL/DML inside loops
|
|
261
|
+
- [ ] Uses bulk patterns (200+ records)
|
|
262
|
+
- [ ] Individual test methods run in <1 second
|
|
263
|
+
- [ ] Full test class runs in <10 seconds
|
|
264
|
+
- [ ] Uses Assert class (not System.assert)
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## Performance Testing Your Tests
|
|
269
|
+
|
|
270
|
+
```apex
|
|
271
|
+
@IsTest
|
|
272
|
+
static void testPerformance() {
|
|
273
|
+
Long startTime = System.currentTimeMillis();
|
|
274
|
+
|
|
275
|
+
// Your test code here
|
|
276
|
+
|
|
277
|
+
Long duration = System.currentTimeMillis() - startTime;
|
|
278
|
+
System.debug('Test duration: ' + duration + 'ms');
|
|
279
|
+
|
|
280
|
+
// Assert performance constraint
|
|
281
|
+
Assert.isTrue(duration < 1000, 'Test should complete in <1 second, took: ' + duration + 'ms');
|
|
282
|
+
}
|
|
283
|
+
```
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<!-- Parent: running-apex-tests/SKILL.md -->
|
|
2
|
+
|
|
3
|
+
# Agentic Test-Fix Loop Implementation
|
|
4
|
+
|
|
5
|
+
## How It Works
|
|
6
|
+
|
|
7
|
+
When the agentic loop is enabled, running-apex-tests will:
|
|
8
|
+
|
|
9
|
+
1. **Run tests** and capture results
|
|
10
|
+
2. **Parse failures** to identify error type and location
|
|
11
|
+
3. **Read source files** (test class + class under test)
|
|
12
|
+
4. **Analyze root cause** using the failure analysis decision tree
|
|
13
|
+
5. **Generate fix** by invoking sf-apex skill
|
|
14
|
+
6. **Re-run failing test** to verify fix
|
|
15
|
+
7. **Iterate** until passing or max attempts (3)
|
|
16
|
+
|
|
17
|
+
## Example Agentic Flow
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
User: "Run tests for AccountService with auto-fix enabled"
|
|
21
|
+
|
|
22
|
+
Claude:
|
|
23
|
+
1. sf apex run test --class-names AccountServiceTest --code-coverage --result-format json
|
|
24
|
+
2. Parse results: 1 failure - testBulkInsert line 45 NullPointerException
|
|
25
|
+
3. Read AccountServiceTest.cls (line 45 context)
|
|
26
|
+
4. Read AccountService.cls (trace the null reference)
|
|
27
|
+
5. Identify: Missing null check in AccountService.processAccounts()
|
|
28
|
+
6. Skill(sf-apex): Add null safety to AccountService.processAccounts()
|
|
29
|
+
7. Deploy fix
|
|
30
|
+
8. Re-run: sf apex run test --tests AccountServiceTest.testBulkInsert
|
|
31
|
+
9. ✅ Passing! Report success.
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Failure Analysis Decision Tree
|
|
35
|
+
|
|
36
|
+
| Error Type | Root Cause | Auto-Fix Strategy |
|
|
37
|
+
|------------|------------|-------------------|
|
|
38
|
+
| `System.AssertException` | Wrong expected value or logic bug | Analyze assertion, check if test or code is wrong |
|
|
39
|
+
| `System.NullPointerException` | Missing null check or test data | Add null safety or fix test data setup |
|
|
40
|
+
| `System.DmlException` | Validation rule, required field, trigger | Check org config, add required fields to test data |
|
|
41
|
+
| `System.LimitException` | Governor limit hit | Refactor to use bulkified patterns |
|
|
42
|
+
| `System.QueryException` | No rows returned | Add test data or adjust query |
|
|
43
|
+
| `System.TypeException` | Type mismatch | Fix type casting or data format |
|
|
44
|
+
|
|
45
|
+
## Auto-Fix Command
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
Skill(skill="sf-apex", args="Fix failing test [TestClassName].[methodName] - Error: [error message]")
|
|
49
|
+
```
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
<!-- Parent: running-apex-tests/SKILL.md -->
|
|
2
|
+
|
|
3
|
+
# Test Patterns & Templates
|
|
4
|
+
|
|
5
|
+
## Pattern 1: Basic Test Class
|
|
6
|
+
|
|
7
|
+
Use template: `assets/basic-test.cls`
|
|
8
|
+
|
|
9
|
+
```apex
|
|
10
|
+
@IsTest
|
|
11
|
+
private class AccountServiceTest {
|
|
12
|
+
|
|
13
|
+
@TestSetup
|
|
14
|
+
static void setupTestData() {
|
|
15
|
+
// Use Test Data Factory for consistent data creation
|
|
16
|
+
List<Account> accounts = TestDataFactory.createAccounts(5);
|
|
17
|
+
insert accounts;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@IsTest
|
|
21
|
+
static void testCreateAccount_Success() {
|
|
22
|
+
// Given
|
|
23
|
+
Account testAccount = new Account(Name = 'Test Account');
|
|
24
|
+
|
|
25
|
+
// When
|
|
26
|
+
Test.startTest();
|
|
27
|
+
Id accountId = AccountService.createAccount(testAccount);
|
|
28
|
+
Test.stopTest();
|
|
29
|
+
|
|
30
|
+
// Then
|
|
31
|
+
Assert.isNotNull(accountId, 'Account ID should not be null');
|
|
32
|
+
Account inserted = [SELECT Name FROM Account WHERE Id = :accountId];
|
|
33
|
+
Assert.areEqual('Test Account', inserted.Name, 'Account name should match');
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@IsTest
|
|
37
|
+
static void testCreateAccount_NullInput_ThrowsException() {
|
|
38
|
+
// Given
|
|
39
|
+
Account nullAccount = null;
|
|
40
|
+
|
|
41
|
+
// When/Then
|
|
42
|
+
try {
|
|
43
|
+
Test.startTest();
|
|
44
|
+
AccountService.createAccount(nullAccount);
|
|
45
|
+
Test.stopTest();
|
|
46
|
+
Assert.fail('Expected IllegalArgumentException was not thrown');
|
|
47
|
+
} catch (IllegalArgumentException e) {
|
|
48
|
+
Assert.isTrue(e.getMessage().contains('cannot be null'),
|
|
49
|
+
'Error message should mention null: ' + e.getMessage());
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Pattern 2: Bulk Test (251+ Records)
|
|
56
|
+
|
|
57
|
+
Use template: `assets/bulk-test.cls`
|
|
58
|
+
|
|
59
|
+
```apex
|
|
60
|
+
@IsTest
|
|
61
|
+
static void testBulkInsert_251Records() {
|
|
62
|
+
// Given - 251 records crosses the 200-record batch boundary
|
|
63
|
+
List<Account> accounts = TestDataFactory.createAccounts(251);
|
|
64
|
+
|
|
65
|
+
// When
|
|
66
|
+
Test.startTest();
|
|
67
|
+
insert accounts; // Triggers fire in batches of 200, then 51
|
|
68
|
+
Test.stopTest();
|
|
69
|
+
|
|
70
|
+
// Then
|
|
71
|
+
Integer count = [SELECT COUNT() FROM Account];
|
|
72
|
+
Assert.areEqual(251, count, 'All 251 accounts should be inserted');
|
|
73
|
+
|
|
74
|
+
// Verify no governor limits hit
|
|
75
|
+
Assert.isTrue(Limits.getQueries() < 100,
|
|
76
|
+
'Should not approach SOQL limit: ' + Limits.getQueries());
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Pattern 3: Mock Callout Test
|
|
81
|
+
|
|
82
|
+
Use template: `assets/mock-callout-test.cls`
|
|
83
|
+
|
|
84
|
+
```apex
|
|
85
|
+
@IsTest
|
|
86
|
+
private class ExternalAPIServiceTest {
|
|
87
|
+
|
|
88
|
+
// Mock class for HTTP callouts
|
|
89
|
+
private class MockHttpResponse implements HttpCalloutMock {
|
|
90
|
+
public HttpResponse respond(HttpRequest req) {
|
|
91
|
+
HttpResponse res = new HttpResponse();
|
|
92
|
+
res.setStatusCode(200);
|
|
93
|
+
res.setBody('{"success": true, "data": {"id": "12345"}}');
|
|
94
|
+
return res;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
@IsTest
|
|
99
|
+
static void testCallExternalAPI_Success() {
|
|
100
|
+
// Given
|
|
101
|
+
Test.setMock(HttpCalloutMock.class, new MockHttpResponse());
|
|
102
|
+
|
|
103
|
+
// When
|
|
104
|
+
Test.startTest();
|
|
105
|
+
String result = ExternalAPIService.callAPI('test-endpoint');
|
|
106
|
+
Test.stopTest();
|
|
107
|
+
|
|
108
|
+
// Then
|
|
109
|
+
Assert.isTrue(result.contains('success'), 'Response should indicate success');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Pattern 4: Test Data Factory
|
|
115
|
+
|
|
116
|
+
Use template: `assets/test-data-factory.cls`
|
|
117
|
+
|
|
118
|
+
```apex
|
|
119
|
+
@IsTest
|
|
120
|
+
public class TestDataFactory {
|
|
121
|
+
|
|
122
|
+
public static List<Account> createAccounts(Integer count) {
|
|
123
|
+
List<Account> accounts = new List<Account>();
|
|
124
|
+
for (Integer i = 0; i < count; i++) {
|
|
125
|
+
accounts.add(new Account(
|
|
126
|
+
Name = 'Test Account ' + i,
|
|
127
|
+
Industry = 'Technology',
|
|
128
|
+
BillingCity = 'San Francisco'
|
|
129
|
+
));
|
|
130
|
+
}
|
|
131
|
+
return accounts;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
public static List<Contact> createContacts(Integer count, Id accountId) {
|
|
135
|
+
List<Contact> contacts = new List<Contact>();
|
|
136
|
+
for (Integer i = 0; i < count; i++) {
|
|
137
|
+
contacts.add(new Contact(
|
|
138
|
+
FirstName = 'Test',
|
|
139
|
+
LastName = 'Contact ' + i,
|
|
140
|
+
AccountId = accountId,
|
|
141
|
+
Email = 'test' + i + '@example.com'
|
|
142
|
+
));
|
|
143
|
+
}
|
|
144
|
+
return contacts;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Convenience method with insert
|
|
148
|
+
public static List<Account> createAndInsertAccounts(Integer count) {
|
|
149
|
+
List<Account> accounts = createAccounts(count);
|
|
150
|
+
insert accounts;
|
|
151
|
+
return accounts;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
```
|