@salesforce/afv-skills 1.8.0 → 1.9.1
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/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/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-test/CREDITS.md +2 -27
- 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-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/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/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
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
<!-- Parent: running-apex-tests/SKILL.md -->
|
|
2
|
+
# Apex Testing Best Practices
|
|
3
|
+
|
|
4
|
+
## Overview
|
|
5
|
+
|
|
6
|
+
This guide covers best practices for writing effective, maintainable Apex tests that ensure code quality and prevent regressions.
|
|
7
|
+
|
|
8
|
+
## The Testing Pyramid
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
╱╲
|
|
12
|
+
╱ ╲
|
|
13
|
+
╱ E2E╲ Few end-to-end tests
|
|
14
|
+
╱──────╲
|
|
15
|
+
╱ ╲
|
|
16
|
+
╱Integration╲ Moderate integration tests
|
|
17
|
+
╱────────────╲
|
|
18
|
+
╱ ╲
|
|
19
|
+
╱ Unit Tests ╲ Many unit tests
|
|
20
|
+
╱──────────────────╲
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Core Principles
|
|
24
|
+
|
|
25
|
+
### 1. Test One Thing Per Method
|
|
26
|
+
|
|
27
|
+
```apex
|
|
28
|
+
// ❌ BAD: Testing multiple things
|
|
29
|
+
@IsTest
|
|
30
|
+
static void testEverything() {
|
|
31
|
+
Account acc = new Account(Name = 'Test');
|
|
32
|
+
insert acc;
|
|
33
|
+
acc.Name = 'Updated';
|
|
34
|
+
update acc;
|
|
35
|
+
delete acc;
|
|
36
|
+
// What exactly are we testing?
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// ✅ GOOD: Single responsibility
|
|
40
|
+
@IsTest
|
|
41
|
+
static void testAccountInsert_ValidName_Success() {
|
|
42
|
+
Account acc = new Account(Name = 'Test');
|
|
43
|
+
insert acc;
|
|
44
|
+
Assert.isNotNull(acc.Id, 'Account should be inserted');
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@IsTest
|
|
48
|
+
static void testAccountUpdate_ChangeName_Success() {
|
|
49
|
+
Account acc = TestDataFactory.createAndInsertAccounts(1)[0];
|
|
50
|
+
acc.Name = 'Updated';
|
|
51
|
+
update acc;
|
|
52
|
+
Account updated = [SELECT Name FROM Account WHERE Id = :acc.Id];
|
|
53
|
+
Assert.areEqual('Updated', updated.Name, 'Name should be updated');
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 2. Use Descriptive Test Names
|
|
58
|
+
|
|
59
|
+
```apex
|
|
60
|
+
// ❌ BAD: Unclear names
|
|
61
|
+
@IsTest static void test1() { }
|
|
62
|
+
@IsTest static void testMethod() { }
|
|
63
|
+
|
|
64
|
+
// ✅ GOOD: Describes scenario, condition, and expectation
|
|
65
|
+
@IsTest static void testCreateAccount_WithValidData_ReturnsId() { }
|
|
66
|
+
@IsTest static void testCreateAccount_WithNullName_ThrowsException() { }
|
|
67
|
+
@IsTest static void testBulkInsert_251Records_AllSucceed() { }
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 3. Follow AAA Pattern (Arrange-Act-Assert)
|
|
71
|
+
|
|
72
|
+
```apex
|
|
73
|
+
@IsTest
|
|
74
|
+
static void testCalculateDiscount_VIPCustomer_Returns20Percent() {
|
|
75
|
+
// ARRANGE - Set up test data
|
|
76
|
+
Account vipAccount = new Account(
|
|
77
|
+
Name = 'VIP Customer',
|
|
78
|
+
Type = 'VIP'
|
|
79
|
+
);
|
|
80
|
+
insert vipAccount;
|
|
81
|
+
|
|
82
|
+
// ACT - Execute the code under test
|
|
83
|
+
Test.startTest();
|
|
84
|
+
Decimal discount = DiscountService.calculateDiscount(vipAccount.Id);
|
|
85
|
+
Test.stopTest();
|
|
86
|
+
|
|
87
|
+
// ASSERT - Verify results
|
|
88
|
+
Assert.areEqual(0.20, discount, 'VIP customers should get 20% discount');
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Test Data Factory Pattern
|
|
93
|
+
|
|
94
|
+
### Why Use Test Data Factory?
|
|
95
|
+
|
|
96
|
+
1. **Consistency**: Same data creation logic everywhere
|
|
97
|
+
2. **Maintainability**: Change in one place affects all tests
|
|
98
|
+
3. **Readability**: Tests focus on logic, not data setup
|
|
99
|
+
4. **Flexibility**: Easy to create variations
|
|
100
|
+
|
|
101
|
+
### Factory Methods
|
|
102
|
+
|
|
103
|
+
```apex
|
|
104
|
+
@IsTest
|
|
105
|
+
public class TestDataFactory {
|
|
106
|
+
|
|
107
|
+
// Basic creation (no insert)
|
|
108
|
+
public static List<Account> createAccounts(Integer count) {
|
|
109
|
+
List<Account> accounts = new List<Account>();
|
|
110
|
+
for (Integer i = 0; i < count; i++) {
|
|
111
|
+
accounts.add(new Account(
|
|
112
|
+
Name = 'Test Account ' + i,
|
|
113
|
+
Industry = 'Technology'
|
|
114
|
+
));
|
|
115
|
+
}
|
|
116
|
+
return accounts;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Create and insert
|
|
120
|
+
public static List<Account> createAndInsertAccounts(Integer count) {
|
|
121
|
+
List<Account> accounts = createAccounts(count);
|
|
122
|
+
insert accounts;
|
|
123
|
+
return accounts;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// With specific attributes
|
|
127
|
+
public static Account createAccount(String name, String industry) {
|
|
128
|
+
return new Account(Name = name, Industry = industry);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## @TestSetup for Efficiency
|
|
134
|
+
|
|
135
|
+
```apex
|
|
136
|
+
@IsTest
|
|
137
|
+
private class AccountServiceTest {
|
|
138
|
+
|
|
139
|
+
@TestSetup
|
|
140
|
+
static void setupTestData() {
|
|
141
|
+
// This runs ONCE for all test methods in the class
|
|
142
|
+
// Data is rolled back after each test method
|
|
143
|
+
List<Account> accounts = TestDataFactory.createAccounts(10);
|
|
144
|
+
insert accounts;
|
|
145
|
+
|
|
146
|
+
List<Contact> contacts = new List<Contact>();
|
|
147
|
+
for (Account acc : accounts) {
|
|
148
|
+
contacts.addAll(TestDataFactory.createContacts(5, acc.Id));
|
|
149
|
+
}
|
|
150
|
+
insert contacts;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
@IsTest
|
|
154
|
+
static void testMethod1() {
|
|
155
|
+
// Has access to 10 accounts and 50 contacts
|
|
156
|
+
List<Account> accounts = [SELECT Id FROM Account];
|
|
157
|
+
Assert.areEqual(10, accounts.size());
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
@IsTest
|
|
161
|
+
static void testMethod2() {
|
|
162
|
+
// ALSO has access to 10 accounts and 50 contacts
|
|
163
|
+
// @TestSetup data is available to all test methods
|
|
164
|
+
List<Contact> contacts = [SELECT Id FROM Contact];
|
|
165
|
+
Assert.areEqual(50, contacts.size());
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## Bulk Testing (251+ Records)
|
|
171
|
+
|
|
172
|
+
### Why 251 Records?
|
|
173
|
+
|
|
174
|
+
Triggers process records in batches of 200. Testing with 251 records ensures:
|
|
175
|
+
- First batch: 200 records
|
|
176
|
+
- Second batch: 51 records
|
|
177
|
+
- Crosses the batch boundary, revealing bulkification issues
|
|
178
|
+
|
|
179
|
+
```apex
|
|
180
|
+
@IsTest
|
|
181
|
+
static void testTrigger_BulkInsert_NoDMLInLoop() {
|
|
182
|
+
// ARRANGE
|
|
183
|
+
List<Account> accounts = TestDataFactory.createAccounts(251);
|
|
184
|
+
|
|
185
|
+
// ACT
|
|
186
|
+
Test.startTest();
|
|
187
|
+
insert accounts; // Trigger fires twice: 200, then 51
|
|
188
|
+
Test.stopTest();
|
|
189
|
+
|
|
190
|
+
// ASSERT
|
|
191
|
+
Assert.areEqual(251, [SELECT COUNT() FROM Account],
|
|
192
|
+
'All 251 accounts should be created');
|
|
193
|
+
|
|
194
|
+
// Verify governor limits not approached
|
|
195
|
+
Assert.isTrue(Limits.getQueries() < 90,
|
|
196
|
+
'Should not approach SOQL limit');
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## Negative Testing
|
|
201
|
+
|
|
202
|
+
### Test for Expected Failures
|
|
203
|
+
|
|
204
|
+
```apex
|
|
205
|
+
@IsTest
|
|
206
|
+
static void testCreateAccount_NullName_ThrowsException() {
|
|
207
|
+
try {
|
|
208
|
+
Account acc = new Account(Name = null);
|
|
209
|
+
insert acc;
|
|
210
|
+
Assert.fail('Expected DmlException was not thrown');
|
|
211
|
+
} catch (DmlException e) {
|
|
212
|
+
Assert.isTrue(
|
|
213
|
+
e.getMessage().contains('REQUIRED_FIELD_MISSING'),
|
|
214
|
+
'Should throw required field error'
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
@IsTest
|
|
220
|
+
static void testWithdraw_InsufficientFunds_ReturnsFalse() {
|
|
221
|
+
Account acc = TestDataFactory.createAndInsertAccounts(1)[0];
|
|
222
|
+
acc.AnnualRevenue = 100;
|
|
223
|
+
update acc;
|
|
224
|
+
|
|
225
|
+
Test.startTest();
|
|
226
|
+
Boolean result = AccountService.withdraw(acc.Id, 200);
|
|
227
|
+
Test.stopTest();
|
|
228
|
+
|
|
229
|
+
Assert.isFalse(result, 'Withdrawal should fail with insufficient funds');
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## Mock Framework Patterns
|
|
234
|
+
|
|
235
|
+
### HttpCalloutMock
|
|
236
|
+
|
|
237
|
+
```apex
|
|
238
|
+
private class SuccessHttpMock implements HttpCalloutMock {
|
|
239
|
+
public HttpResponse respond(HttpRequest req) {
|
|
240
|
+
HttpResponse res = new HttpResponse();
|
|
241
|
+
res.setStatusCode(200);
|
|
242
|
+
res.setBody('{"success": true}');
|
|
243
|
+
return res;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
@IsTest
|
|
248
|
+
static void testExternalAPICall_Success() {
|
|
249
|
+
Test.setMock(HttpCalloutMock.class, new SuccessHttpMock());
|
|
250
|
+
|
|
251
|
+
Test.startTest();
|
|
252
|
+
String result = MyService.callExternalAPI();
|
|
253
|
+
Test.stopTest();
|
|
254
|
+
|
|
255
|
+
Assert.isTrue(result.contains('success'));
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### Stub API (Test.StubProvider)
|
|
260
|
+
|
|
261
|
+
```apex
|
|
262
|
+
@IsTest
|
|
263
|
+
private class AccountServiceTest {
|
|
264
|
+
|
|
265
|
+
// Stub for dependency injection
|
|
266
|
+
private class SelectorStub implements System.StubProvider {
|
|
267
|
+
public Object handleMethodCall(
|
|
268
|
+
Object stubbedObject,
|
|
269
|
+
String stubbedMethodName,
|
|
270
|
+
Type returnType,
|
|
271
|
+
List<Type> paramTypes,
|
|
272
|
+
List<String> paramNames,
|
|
273
|
+
List<Object> args
|
|
274
|
+
) {
|
|
275
|
+
if (stubbedMethodName == 'getAccountById') {
|
|
276
|
+
return new Account(Name = 'Mocked Account');
|
|
277
|
+
}
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
@IsTest
|
|
283
|
+
static void testServiceWithMockedSelector() {
|
|
284
|
+
// Create stub
|
|
285
|
+
AccountSelector mockSelector = (AccountSelector) Test.createStub(
|
|
286
|
+
AccountSelector.class,
|
|
287
|
+
new SelectorStub()
|
|
288
|
+
);
|
|
289
|
+
|
|
290
|
+
// Inject into service
|
|
291
|
+
AccountService service = new AccountService(mockSelector);
|
|
292
|
+
|
|
293
|
+
// Test with mocked dependency
|
|
294
|
+
Test.startTest();
|
|
295
|
+
Account result = service.getAccount('001xx000000001');
|
|
296
|
+
Test.stopTest();
|
|
297
|
+
|
|
298
|
+
Assert.areEqual('Mocked Account', result.Name);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
## Governor Limit Testing
|
|
304
|
+
|
|
305
|
+
```apex
|
|
306
|
+
@IsTest
|
|
307
|
+
static void testBulkOperation_StaysWithinLimits() {
|
|
308
|
+
List<Account> accounts = TestDataFactory.createAccounts(200);
|
|
309
|
+
|
|
310
|
+
Test.startTest();
|
|
311
|
+
insert accounts;
|
|
312
|
+
Test.stopTest();
|
|
313
|
+
|
|
314
|
+
// Assert limits not exceeded
|
|
315
|
+
System.debug('SOQL queries used: ' + Limits.getQueries());
|
|
316
|
+
System.debug('DML statements used: ' + Limits.getDmlStatements());
|
|
317
|
+
|
|
318
|
+
Assert.isTrue(Limits.getQueries() < 100,
|
|
319
|
+
'Should stay under SOQL limit: ' + Limits.getQueries());
|
|
320
|
+
Assert.isTrue(Limits.getDmlStatements() < 150,
|
|
321
|
+
'Should stay under DML limit: ' + Limits.getDmlStatements());
|
|
322
|
+
}
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
## Common Anti-Patterns to Avoid
|
|
326
|
+
|
|
327
|
+
### ❌ SeeAllData=true
|
|
328
|
+
|
|
329
|
+
```apex
|
|
330
|
+
// ❌ BAD: Depends on org data
|
|
331
|
+
@IsTest(SeeAllData=true)
|
|
332
|
+
static void testBadPattern() {
|
|
333
|
+
Account acc = [SELECT Id FROM Account LIMIT 1];
|
|
334
|
+
// This will fail in empty orgs!
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// ✅ GOOD: Creates own data
|
|
338
|
+
@IsTest
|
|
339
|
+
static void testGoodPattern() {
|
|
340
|
+
Account acc = TestDataFactory.createAndInsertAccounts(1)[0];
|
|
341
|
+
// Works in any org
|
|
342
|
+
}
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### ❌ No Assertions
|
|
346
|
+
|
|
347
|
+
```apex
|
|
348
|
+
// ❌ BAD: No assertions - test passes even if code is broken
|
|
349
|
+
@IsTest
|
|
350
|
+
static void testNoAssertions() {
|
|
351
|
+
Account acc = new Account(Name = 'Test');
|
|
352
|
+
insert acc;
|
|
353
|
+
// Test "passes" but proves nothing
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// ✅ GOOD: Meaningful assertions
|
|
357
|
+
@IsTest
|
|
358
|
+
static void testWithAssertions() {
|
|
359
|
+
Account acc = new Account(Name = 'Test');
|
|
360
|
+
insert acc;
|
|
361
|
+
Assert.isNotNull(acc.Id, 'Account should have an Id after insert');
|
|
362
|
+
Account inserted = [SELECT Name FROM Account WHERE Id = :acc.Id];
|
|
363
|
+
Assert.areEqual('Test', inserted.Name, 'Name should be preserved');
|
|
364
|
+
}
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
### ❌ Hardcoded IDs
|
|
368
|
+
|
|
369
|
+
```apex
|
|
370
|
+
// ❌ BAD: Hardcoded IDs fail across orgs
|
|
371
|
+
Account acc = [SELECT Id FROM Account WHERE Id = '001xx0000000001'];
|
|
372
|
+
|
|
373
|
+
// ✅ GOOD: Query or create dynamically
|
|
374
|
+
Account acc = TestDataFactory.createAndInsertAccounts(1)[0];
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
## Test Method Template
|
|
378
|
+
|
|
379
|
+
```apex
|
|
380
|
+
/**
|
|
381
|
+
* @description Tests [method] with [condition] expecting [outcome]
|
|
382
|
+
*/
|
|
383
|
+
@IsTest
|
|
384
|
+
static void test[Method]_[Condition]_[ExpectedOutcome]() {
|
|
385
|
+
// ═══════════════════════════════════════════════════════════════
|
|
386
|
+
// ARRANGE - Set up test data and conditions
|
|
387
|
+
// ═══════════════════════════════════════════════════════════════
|
|
388
|
+
// Create test data using TestDataFactory
|
|
389
|
+
// Set up any mocks needed
|
|
390
|
+
|
|
391
|
+
// ═══════════════════════════════════════════════════════════════
|
|
392
|
+
// ACT - Execute the code under test
|
|
393
|
+
// ═══════════════════════════════════════════════════════════════
|
|
394
|
+
Test.startTest();
|
|
395
|
+
// Call the method being tested
|
|
396
|
+
Test.stopTest();
|
|
397
|
+
|
|
398
|
+
// ═══════════════════════════════════════════════════════════════
|
|
399
|
+
// ASSERT - Verify expected outcomes
|
|
400
|
+
// ═══════════════════════════════════════════════════════════════
|
|
401
|
+
// Assert.areEqual(expected, actual, 'Descriptive message');
|
|
402
|
+
// Assert.isTrue(condition, 'Descriptive message');
|
|
403
|
+
// Assert.isNotNull(value, 'Descriptive message');
|
|
404
|
+
}
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
---
|
|
408
|
+
|
|
409
|
+
## Test Speed Philosophy
|
|
410
|
+
|
|
411
|
+
### Why Test Speed Matters
|
|
412
|
+
|
|
413
|
+
Fast tests enable continuous integration. Slow tests become barriers to frequent commits.
|
|
414
|
+
|
|
415
|
+
### Target Metrics
|
|
416
|
+
|
|
417
|
+
| Test Type | Target Speed | Purpose |
|
|
418
|
+
|-----------|--------------|---------|
|
|
419
|
+
| Unit test (no DML) | < 50ms | Test pure business logic |
|
|
420
|
+
| Unit test (mocked DML) | < 100ms | Test with stubbed database |
|
|
421
|
+
| Integration test | < 500ms | Verify real database behavior |
|
|
422
|
+
| Full scenario test | < 2000ms | End-to-end validation |
|
|
423
|
+
|
|
424
|
+
### Speed Strategy
|
|
425
|
+
|
|
426
|
+
```
|
|
427
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
428
|
+
│ INTEGRATION TESTS (Few) │
|
|
429
|
+
│ - Real DML, real triggers │
|
|
430
|
+
│ - Test happy path completely │
|
|
431
|
+
│ - Slow but high confidence │
|
|
432
|
+
└─────────────────────────────────────────────────────────────┘
|
|
433
|
+
│
|
|
434
|
+
▼
|
|
435
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
436
|
+
│ UNIT TESTS WITH MOCKS (Many) │
|
|
437
|
+
│ - Stub database operations │
|
|
438
|
+
│ - Test edge cases, variations │
|
|
439
|
+
│ - Fast, run on every save │
|
|
440
|
+
└─────────────────────────────────────────────────────────────┘
|
|
441
|
+
```
|
|
442
|
+
|
|
443
|
+
### Balance Reality vs Speed
|
|
444
|
+
|
|
445
|
+
```apex
|
|
446
|
+
// INTEGRATION TEST: Full database interaction (slower, realistic)
|
|
447
|
+
@IsTest
|
|
448
|
+
static void testAccountCreation_Integration() {
|
|
449
|
+
Test.startTest();
|
|
450
|
+
Account acc = new Account(Name = 'Test');
|
|
451
|
+
insert acc;
|
|
452
|
+
Test.stopTest();
|
|
453
|
+
|
|
454
|
+
Account queried = [SELECT Name, Status__c FROM Account WHERE Id = :acc.Id];
|
|
455
|
+
Assert.areEqual('Active', queried.Status__c, 'Trigger should set status');
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
// UNIT TEST: Mocked database (faster, tests logic only)
|
|
459
|
+
@IsTest
|
|
460
|
+
static void testAccountRules_IsHighValue() {
|
|
461
|
+
// No database interaction - tests pure logic
|
|
462
|
+
Account acc = new Account(AnnualRevenue = 1500000);
|
|
463
|
+
Assert.isTrue(AccountRules.isHighValue(acc), 'Should be high value');
|
|
464
|
+
|
|
465
|
+
Account lowValue = new Account(AnnualRevenue = 500000);
|
|
466
|
+
Assert.isFalse(AccountRules.isHighValue(lowValue), 'Should not be high value');
|
|
467
|
+
}
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
### Techniques for Faster Tests
|
|
471
|
+
|
|
472
|
+
| Technique | Benefit | Trade-off |
|
|
473
|
+
|-----------|---------|-----------|
|
|
474
|
+
| @TestSetup | Reuse data across methods | Small setup overhead |
|
|
475
|
+
| Stub API | No real DML | Less realistic |
|
|
476
|
+
| Selector mocking | Skip SOQL | Must trust Selector |
|
|
477
|
+
| Domain class testing | Pure logic, no DB | Limited scope |
|
|
478
|
+
| Avoid SeeAllData | Predictable data | Must create test data |
|
|
479
|
+
|
|
480
|
+
### When to Prioritize Speed vs Reality
|
|
481
|
+
|
|
482
|
+
| Scenario | Priority | Approach |
|
|
483
|
+
|----------|----------|----------|
|
|
484
|
+
| Business logic validation | Speed | Unit test with mocks |
|
|
485
|
+
| Trigger behavior | Reality | Integration test |
|
|
486
|
+
| Edge case coverage | Speed | Many unit tests |
|
|
487
|
+
| Deployment validation | Reality | RunLocalTests |
|
|
488
|
+
| Developer feedback loop | Speed | Fast unit tests |
|
|
489
|
+
|
|
490
|
+
### Measuring Test Speed
|
|
491
|
+
|
|
492
|
+
```bash
|
|
493
|
+
# Run tests and view timing
|
|
494
|
+
sf apex run test --test-level RunLocalTests --target-org alias --result-format human
|
|
495
|
+
|
|
496
|
+
# Check individual test timing
|
|
497
|
+
sf apex get test --test-run-id [id] --code-coverage --result-format json | jq '.tests[] | {name: .MethodName, time: .RunTime}'
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
### Fast Test Checklist
|
|
501
|
+
|
|
502
|
+
```
|
|
503
|
+
□ Is there a pure logic portion that can be unit tested?
|
|
504
|
+
□ Can database operations be mocked for edge cases?
|
|
505
|
+
□ Is @TestSetup reused across multiple test methods?
|
|
506
|
+
□ Are tests avoiding SeeAllData=true?
|
|
507
|
+
□ Are integration tests reserved for critical paths only?
|
|
508
|
+
□ Can SOQL be mocked via Selector pattern?
|
|
509
|
+
```
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# segmenting-datacloud
|
|
2
|
+
|
|
3
|
+
Audience and insight workflows for Salesforce Data Cloud.
|
|
4
|
+
|
|
5
|
+
## Use this skill for
|
|
6
|
+
|
|
7
|
+
- creating and publishing segments
|
|
8
|
+
- managing calculated insights
|
|
9
|
+
- checking segment counts
|
|
10
|
+
- troubleshooting segment SQL
|
|
11
|
+
- understanding why a segment is empty or unexpectedly large
|
|
12
|
+
|
|
13
|
+
## Example requests
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
"Create a high-value customer segment in Data Cloud"
|
|
17
|
+
"Why is my segment returning zero members?"
|
|
18
|
+
"Run this calculated insight and help me verify it"
|
|
19
|
+
"Show me how to get member counts for this segment"
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Common commands
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
sf data360 segment list -o myorg 2>/dev/null
|
|
26
|
+
sf data360 segment create -o myorg -f segment.json --api-version 64.0 2>/dev/null
|
|
27
|
+
sf data360 segment publish -o myorg --name High_Value_Customers 2>/dev/null
|
|
28
|
+
sf data360 calculated-insight list -o myorg 2>/dev/null
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## References
|
|
32
|
+
|
|
33
|
+
- [SKILL.md](SKILL.md)
|
|
34
|
+
- [../orchestrating-datacloud/assets/definitions/calculated-insight.template.json](../orchestrating-datacloud/assets/definitions/calculated-insight.template.json)
|
|
35
|
+
- [../orchestrating-datacloud/assets/definitions/segment.template.json](../orchestrating-datacloud/assets/definitions/segment.template.json)
|
|
36
|
+
- [CREDITS.md](CREDITS.md)
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: segmenting-datacloud
|
|
3
|
+
description: "Salesforce Data Cloud Segment phase. Use this skill when the user creates or publishes segments, manages calculated insights, or troubleshoots audience SQL in Data Cloud. TRIGGER when: user creates or publishes segments, manages calculated insights, inspects segment counts or membership, or troubleshoots audience SQL in Data Cloud. DO NOT TRIGGER when: the task is DMO/mapping/identity-resolution work (use harmonizing-datacloud), activation work (use activating-datacloud), query/search-index work (use retrieving-datacloud), or Standard Data Model (STDM)/session tracing (use observing-agentforce)."
|
|
4
|
+
license: MIT
|
|
5
|
+
compatibility: "Requires an external community sf data360 CLI plugin and a Data Cloud-enabled org"
|
|
6
|
+
metadata:
|
|
7
|
+
version: "1.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# segmenting-datacloud: Data Cloud Segment Phase
|
|
11
|
+
|
|
12
|
+
Use this skill when the user needs **audience and insight work**: segments, calculated insights, publish workflows, member counts, or troubleshooting Data Cloud segment SQL.
|
|
13
|
+
|
|
14
|
+
## When This Skill Owns the Task
|
|
15
|
+
|
|
16
|
+
Use `segmenting-datacloud` when the work involves:
|
|
17
|
+
- `sf data360 segment *`
|
|
18
|
+
- `sf data360 calculated-insight *`
|
|
19
|
+
- segment publish workflows
|
|
20
|
+
- member counts and segment troubleshooting
|
|
21
|
+
- calculated insight execution and verification
|
|
22
|
+
|
|
23
|
+
Delegate elsewhere when the user is:
|
|
24
|
+
- still building Data Model Objects (DMOs), mappings, or identity resolution → [harmonizing-datacloud](../harmonizing-datacloud/SKILL.md)
|
|
25
|
+
- activating a segment downstream → [activating-datacloud](../activating-datacloud/SKILL.md)
|
|
26
|
+
- writing read-only SQL or search-index queries → [retrieving-datacloud](../retrieving-datacloud/SKILL.md)
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Required Context to Gather First
|
|
31
|
+
|
|
32
|
+
Ask for or infer:
|
|
33
|
+
- target org alias
|
|
34
|
+
- unified DMO (Data Model Object) or base entity name
|
|
35
|
+
- whether the user wants create, publish, inspect, or troubleshoot
|
|
36
|
+
- whether the asset is a segment or calculated insight
|
|
37
|
+
- expected success metric: member count, aggregate value, or publish status
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Core Operating Rules
|
|
42
|
+
|
|
43
|
+
- Treat Data Cloud segment SQL as distinct from CRM SOQL.
|
|
44
|
+
- Run the shared readiness classifier from the `orchestrating-datacloud` skill before mutating audience assets: `node ../orchestrating-datacloud/scripts/diagnose-org.mjs -o <org> --phase segment --json`.
|
|
45
|
+
- Prefer reusable JSON definitions for repeatable segment and CI creation.
|
|
46
|
+
- Use `--api-version 64.0` when segment creation behavior is unstable on newer defaults.
|
|
47
|
+
- Verify with counts or SQL after publish/run steps instead of assuming success.
|
|
48
|
+
- Use SQL joins rather than `segment members` when readable member details are needed.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Recommended Workflow
|
|
53
|
+
|
|
54
|
+
### 1. Classify readiness for segment work
|
|
55
|
+
```bash
|
|
56
|
+
node ../orchestrating-datacloud/scripts/diagnose-org.mjs -o <org> --phase segment --json
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 2. Inspect current state
|
|
60
|
+
```bash
|
|
61
|
+
sf data360 segment list -o <org> 2>/dev/null
|
|
62
|
+
sf data360 calculated-insight list -o <org> 2>/dev/null
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 3. Create with reusable JSON definitions
|
|
66
|
+
```bash
|
|
67
|
+
sf data360 segment create -o <org> -f segment.json --api-version 64.0 2>/dev/null
|
|
68
|
+
sf data360 calculated-insight create -o <org> -f ci.json 2>/dev/null
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 4. Publish or run explicitly
|
|
72
|
+
```bash
|
|
73
|
+
sf data360 segment publish -o <org> --name My_Segment 2>/dev/null
|
|
74
|
+
sf data360 calculated-insight run -o <org> --name Lifetime_Value 2>/dev/null
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### 5. Verify with counts or SQL
|
|
78
|
+
```bash
|
|
79
|
+
sf data360 segment count -o <org> --name My_Segment 2>/dev/null
|
|
80
|
+
sf data360 query sql -o <org> --sql 'SELECT COUNT(*) FROM "UnifiedssotIndividualMain__dlm"' 2>/dev/null
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## High-Signal Gotchas
|
|
86
|
+
|
|
87
|
+
- Segment creation can require `--api-version 64.0`.
|
|
88
|
+
- `segment members` returns opaque IDs; use SQL joins when human-readable member details are needed.
|
|
89
|
+
- Segment SQL is not SOQL.
|
|
90
|
+
- Calculated insight assets and segment SQL have different limitations.
|
|
91
|
+
- Publish/run steps may kick off asynchronous work even when the command returns quickly.
|
|
92
|
+
- An empty segment or calculated-insight list usually means the module is reachable but unconfigured, not unavailable.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Output Format
|
|
97
|
+
|
|
98
|
+
```text
|
|
99
|
+
Segment task: <segment / calculated-insight>
|
|
100
|
+
Action: <create / publish / inspect / troubleshoot>
|
|
101
|
+
Target org: <alias>
|
|
102
|
+
Artifacts: <definition files / commands>
|
|
103
|
+
Verification: <member count / query result / publish state>
|
|
104
|
+
Next step: <act / retrieve / follow-up>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## References
|
|
110
|
+
|
|
111
|
+
- [README.md](README.md)
|
|
112
|
+
- [../orchestrating-datacloud/assets/definitions/calculated-insight.template.json](../orchestrating-datacloud/assets/definitions/calculated-insight.template.json)
|
|
113
|
+
- [../orchestrating-datacloud/assets/definitions/segment.template.json](../orchestrating-datacloud/assets/definitions/segment.template.json)
|
|
114
|
+
- [../orchestrating-datacloud/references/feature-readiness.md](../orchestrating-datacloud/references/feature-readiness.md)
|
|
115
|
+
- [../orchestrating-datacloud/UPSTREAM.md](../orchestrating-datacloud/UPSTREAM.md)
|