@salesforce/afv-skills 1.8.0 → 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/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,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Data Factory for Lead records
|
|
3
|
+
* Supports bulk creation with status and source variations
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* List<Lead> leads = TestDataFactory_Lead.create(200);
|
|
7
|
+
* List<Lead> openLeads = TestDataFactory_Lead.createWithStatus(100, 'Open - Not Contacted');
|
|
8
|
+
* List<Lead> qualifiedLeads = TestDataFactory_Lead.createQualified(50);
|
|
9
|
+
*/
|
|
10
|
+
public class TestDataFactory_Lead {
|
|
11
|
+
|
|
12
|
+
private static final String DEFAULT_FIRST_NAME_PREFIX = 'Test';
|
|
13
|
+
private static final String DEFAULT_LAST_NAME_PREFIX = 'Lead';
|
|
14
|
+
private static final String DEFAULT_COMPANY_PREFIX = 'Test Company ';
|
|
15
|
+
private static final String DEFAULT_STATUS = 'Open - Not Contacted';
|
|
16
|
+
private static final String DEFAULT_EMAIL_DOMAIN = 'testlead.example.com';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Create and insert Lead records with default values
|
|
20
|
+
* @param count Number of records to create
|
|
21
|
+
* @return List of inserted Lead records with IDs
|
|
22
|
+
*/
|
|
23
|
+
public static List<Lead> create(Integer count) {
|
|
24
|
+
return create(count, true);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Create Lead records with insert option
|
|
29
|
+
* @param count Number of records to create
|
|
30
|
+
* @param doInsert Whether to insert records
|
|
31
|
+
* @return List of Lead records
|
|
32
|
+
*/
|
|
33
|
+
public static List<Lead> create(Integer count, Boolean doInsert) {
|
|
34
|
+
List<Lead> records = new List<Lead>();
|
|
35
|
+
for (Integer i = 0; i < count; i++) {
|
|
36
|
+
records.add(buildRecord(i));
|
|
37
|
+
}
|
|
38
|
+
if (doInsert && !records.isEmpty()) {
|
|
39
|
+
insert records;
|
|
40
|
+
}
|
|
41
|
+
return records;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Create Lead records with a specific Status
|
|
46
|
+
* @param count Number of records to create
|
|
47
|
+
* @param status Lead Status picklist value
|
|
48
|
+
* @return List of inserted Lead records
|
|
49
|
+
*/
|
|
50
|
+
public static List<Lead> createWithStatus(Integer count, String status) {
|
|
51
|
+
List<Lead> records = new List<Lead>();
|
|
52
|
+
for (Integer i = 0; i < count; i++) {
|
|
53
|
+
Lead lead = buildRecord(i);
|
|
54
|
+
lead.Status = status;
|
|
55
|
+
records.add(lead);
|
|
56
|
+
}
|
|
57
|
+
if (!records.isEmpty()) {
|
|
58
|
+
insert records;
|
|
59
|
+
}
|
|
60
|
+
return records;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Create qualified Lead records (ready for conversion)
|
|
65
|
+
* @param count Number of records to create
|
|
66
|
+
* @return List of inserted qualified Lead records
|
|
67
|
+
*/
|
|
68
|
+
public static List<Lead> createQualified(Integer count) {
|
|
69
|
+
List<Lead> records = new List<Lead>();
|
|
70
|
+
for (Integer i = 0; i < count; i++) {
|
|
71
|
+
Lead lead = buildRecord(i);
|
|
72
|
+
lead.Status = 'Qualified';
|
|
73
|
+
lead.Rating = 'Hot';
|
|
74
|
+
lead.NumberOfEmployees = 100;
|
|
75
|
+
lead.AnnualRevenue = 1000000;
|
|
76
|
+
records.add(lead);
|
|
77
|
+
}
|
|
78
|
+
if (!records.isEmpty()) {
|
|
79
|
+
insert records;
|
|
80
|
+
}
|
|
81
|
+
return records;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Create Leads with varied Lead Sources for attribution testing
|
|
86
|
+
* @param count Number of records to create
|
|
87
|
+
* @return List of inserted Lead records with varied sources
|
|
88
|
+
*/
|
|
89
|
+
public static List<Lead> createWithVariedSources(Integer count) {
|
|
90
|
+
List<String> sources = new List<String>{
|
|
91
|
+
'Web', 'Phone Inquiry', 'Partner Referral', 'Purchased List',
|
|
92
|
+
'Other', 'Trade Show', 'Employee Referral', 'External Referral'
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
List<Lead> records = new List<Lead>();
|
|
96
|
+
for (Integer i = 0; i < count; i++) {
|
|
97
|
+
Lead lead = buildRecord(i);
|
|
98
|
+
lead.LeadSource = sources[Math.mod(i, sources.size())];
|
|
99
|
+
records.add(lead);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (!records.isEmpty()) {
|
|
103
|
+
insert records;
|
|
104
|
+
}
|
|
105
|
+
return records;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Create Leads with varied Industries for segmentation testing
|
|
110
|
+
* @param count Number of records to create
|
|
111
|
+
* @return List of inserted Lead records with varied industries
|
|
112
|
+
*/
|
|
113
|
+
public static List<Lead> createWithVariedIndustries(Integer count) {
|
|
114
|
+
List<String> industries = new List<String>{
|
|
115
|
+
'Technology', 'Healthcare', 'Finance', 'Manufacturing',
|
|
116
|
+
'Retail', 'Education', 'Energy', 'Media', 'Government'
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
List<Lead> records = new List<Lead>();
|
|
120
|
+
for (Integer i = 0; i < count; i++) {
|
|
121
|
+
Lead lead = buildRecord(i);
|
|
122
|
+
lead.Industry = industries[Math.mod(i, industries.size())];
|
|
123
|
+
records.add(lead);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
if (!records.isEmpty()) {
|
|
127
|
+
insert records;
|
|
128
|
+
}
|
|
129
|
+
return records;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Build a single Lead record with default values
|
|
134
|
+
* @param index Record index for unique naming
|
|
135
|
+
* @return Lead record (not inserted)
|
|
136
|
+
*/
|
|
137
|
+
private static Lead buildRecord(Integer index) {
|
|
138
|
+
String indexStr = String.valueOf(index).leftPad(5, '0');
|
|
139
|
+
String firstName = DEFAULT_FIRST_NAME_PREFIX + indexStr;
|
|
140
|
+
String lastName = DEFAULT_LAST_NAME_PREFIX + indexStr;
|
|
141
|
+
|
|
142
|
+
return new Lead(
|
|
143
|
+
FirstName = firstName,
|
|
144
|
+
LastName = lastName,
|
|
145
|
+
Company = DEFAULT_COMPANY_PREFIX + indexStr,
|
|
146
|
+
Status = DEFAULT_STATUS,
|
|
147
|
+
Email = firstName.toLowerCase() + '.' + lastName.toLowerCase() + '@' + DEFAULT_EMAIL_DOMAIN,
|
|
148
|
+
Phone = '(555) 400-' + String.valueOf(1000 + index),
|
|
149
|
+
MobilePhone = '(555) 500-' + String.valueOf(1000 + index),
|
|
150
|
+
Title = 'Decision Maker',
|
|
151
|
+
Industry = 'Technology',
|
|
152
|
+
LeadSource = 'Web',
|
|
153
|
+
Rating = 'Warm',
|
|
154
|
+
NumberOfEmployees = 50 + index,
|
|
155
|
+
AnnualRevenue = 500000 + (index * 10000),
|
|
156
|
+
Street = '789 Lead Blvd',
|
|
157
|
+
City = 'San Francisco',
|
|
158
|
+
State = 'CA',
|
|
159
|
+
PostalCode = '94104',
|
|
160
|
+
Country = 'USA',
|
|
161
|
+
Website = 'https://testlead' + index + '.example.com',
|
|
162
|
+
Description = 'Test lead created by TestDataFactory for automated testing'
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Get IDs of created records for cleanup
|
|
168
|
+
* @param records List of Lead records
|
|
169
|
+
* @return Set of Lead IDs
|
|
170
|
+
*/
|
|
171
|
+
public static Set<Id> getIds(List<Lead> records) {
|
|
172
|
+
Set<Id> ids = new Set<Id>();
|
|
173
|
+
for (Lead lead : records) {
|
|
174
|
+
if (lead.Id != null) {
|
|
175
|
+
ids.add(lead.Id);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return ids;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Delete records by IDs (cleanup utility)
|
|
183
|
+
* @param recordIds Set of Lead IDs to delete
|
|
184
|
+
*/
|
|
185
|
+
public static void cleanup(Set<Id> recordIds) {
|
|
186
|
+
if (!recordIds.isEmpty()) {
|
|
187
|
+
delete [SELECT Id FROM Lead WHERE Id IN :recordIds];
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Data Factory for Opportunity records
|
|
3
|
+
* Supports bulk creation with Account relationships and stage variations
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* List<Opportunity> opps = TestDataFactory_Opportunity.create(200);
|
|
7
|
+
* List<Opportunity> oppsForAccount = TestDataFactory_Opportunity.createForAccount(50, accountId);
|
|
8
|
+
* List<Opportunity> closedWon = TestDataFactory_Opportunity.createWithStage(100, 'Closed Won');
|
|
9
|
+
*/
|
|
10
|
+
public class TestDataFactory_Opportunity {
|
|
11
|
+
|
|
12
|
+
private static final String DEFAULT_NAME_PREFIX = 'Test Opportunity ';
|
|
13
|
+
private static final String DEFAULT_STAGE = 'Prospecting';
|
|
14
|
+
private static final Integer DEFAULT_CLOSE_DAYS = 30;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Create and insert Opportunity records (creates parent Account automatically)
|
|
18
|
+
* @param count Number of records to create
|
|
19
|
+
* @return List of inserted Opportunity records with IDs
|
|
20
|
+
*/
|
|
21
|
+
public static List<Opportunity> create(Integer count) {
|
|
22
|
+
return create(count, true);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Create Opportunity records with insert option
|
|
27
|
+
* @param count Number of records to create
|
|
28
|
+
* @param doInsert Whether to insert records
|
|
29
|
+
* @return List of Opportunity records
|
|
30
|
+
*/
|
|
31
|
+
public static List<Opportunity> create(Integer count, Boolean doInsert) {
|
|
32
|
+
// Create a parent Account
|
|
33
|
+
Account parentAccount = new Account(Name = 'Test Parent Account for Opportunities');
|
|
34
|
+
insert parentAccount;
|
|
35
|
+
|
|
36
|
+
return createForAccount(count, parentAccount.Id, doInsert);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Create Opportunity records for a specific Account
|
|
41
|
+
* @param count Number of records to create
|
|
42
|
+
* @param accountId Parent Account ID
|
|
43
|
+
* @return List of inserted Opportunity records
|
|
44
|
+
*/
|
|
45
|
+
public static List<Opportunity> createForAccount(Integer count, Id accountId) {
|
|
46
|
+
return createForAccount(count, accountId, true);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Create Opportunity records for a specific Account with insert option
|
|
51
|
+
* @param count Number of records to create
|
|
52
|
+
* @param accountId Parent Account ID
|
|
53
|
+
* @param doInsert Whether to insert records
|
|
54
|
+
* @return List of Opportunity records
|
|
55
|
+
*/
|
|
56
|
+
public static List<Opportunity> createForAccount(Integer count, Id accountId, Boolean doInsert) {
|
|
57
|
+
List<Opportunity> records = new List<Opportunity>();
|
|
58
|
+
for (Integer i = 0; i < count; i++) {
|
|
59
|
+
records.add(buildRecord(i, accountId));
|
|
60
|
+
}
|
|
61
|
+
if (doInsert && !records.isEmpty()) {
|
|
62
|
+
insert records;
|
|
63
|
+
}
|
|
64
|
+
return records;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Create Opportunities with a specific Stage
|
|
69
|
+
* @param count Number of records to create
|
|
70
|
+
* @param stageName StageName picklist value
|
|
71
|
+
* @return List of inserted Opportunity records
|
|
72
|
+
*/
|
|
73
|
+
public static List<Opportunity> createWithStage(Integer count, String stageName) {
|
|
74
|
+
Account parentAccount = new Account(Name = 'Test Parent Account for ' + stageName + ' Opps');
|
|
75
|
+
insert parentAccount;
|
|
76
|
+
|
|
77
|
+
return createWithStageForAccount(count, stageName, parentAccount.Id);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Create Opportunities with a specific Stage for an Account
|
|
82
|
+
* @param count Number of records to create
|
|
83
|
+
* @param stageName StageName picklist value
|
|
84
|
+
* @param accountId Parent Account ID
|
|
85
|
+
* @return List of inserted Opportunity records
|
|
86
|
+
*/
|
|
87
|
+
public static List<Opportunity> createWithStageForAccount(Integer count, String stageName, Id accountId) {
|
|
88
|
+
List<Opportunity> records = new List<Opportunity>();
|
|
89
|
+
for (Integer i = 0; i < count; i++) {
|
|
90
|
+
Opportunity opp = buildRecord(i, accountId);
|
|
91
|
+
opp.StageName = stageName;
|
|
92
|
+
|
|
93
|
+
// Set Probability based on stage
|
|
94
|
+
if (stageName == 'Closed Won') {
|
|
95
|
+
opp.Probability = 100;
|
|
96
|
+
} else if (stageName == 'Closed Lost') {
|
|
97
|
+
opp.Probability = 0;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
records.add(opp);
|
|
101
|
+
}
|
|
102
|
+
if (!records.isEmpty()) {
|
|
103
|
+
insert records;
|
|
104
|
+
}
|
|
105
|
+
return records;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Create Opportunities with varied Stages for pipeline testing
|
|
110
|
+
* @param count Number of records to create
|
|
111
|
+
* @param accountId Parent Account ID
|
|
112
|
+
* @return List of inserted Opportunity records with varied stages
|
|
113
|
+
*/
|
|
114
|
+
public static List<Opportunity> createWithVariedStages(Integer count, Id accountId) {
|
|
115
|
+
List<String> stages = new List<String>{
|
|
116
|
+
'Prospecting', 'Qualification', 'Needs Analysis',
|
|
117
|
+
'Value Proposition', 'Id. Decision Makers', 'Perception Analysis',
|
|
118
|
+
'Proposal/Price Quote', 'Negotiation/Review', 'Closed Won', 'Closed Lost'
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
List<Opportunity> records = new List<Opportunity>();
|
|
122
|
+
for (Integer i = 0; i < count; i++) {
|
|
123
|
+
Opportunity opp = buildRecord(i, accountId);
|
|
124
|
+
opp.StageName = stages[Math.mod(i, stages.size())];
|
|
125
|
+
records.add(opp);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (!records.isEmpty()) {
|
|
129
|
+
insert records;
|
|
130
|
+
}
|
|
131
|
+
return records;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Create Opportunities with varied Amounts for revenue testing
|
|
136
|
+
* @param count Number of records to create
|
|
137
|
+
* @param accountId Parent Account ID
|
|
138
|
+
* @param minAmount Minimum amount
|
|
139
|
+
* @param maxAmount Maximum amount
|
|
140
|
+
* @return List of inserted Opportunity records
|
|
141
|
+
*/
|
|
142
|
+
public static List<Opportunity> createWithVariedAmounts(Integer count, Id accountId, Decimal minAmount, Decimal maxAmount) {
|
|
143
|
+
List<Opportunity> records = new List<Opportunity>();
|
|
144
|
+
Decimal range = maxAmount - minAmount;
|
|
145
|
+
|
|
146
|
+
for (Integer i = 0; i < count; i++) {
|
|
147
|
+
Opportunity opp = buildRecord(i, accountId);
|
|
148
|
+
// Distribute amounts evenly across the range
|
|
149
|
+
opp.Amount = minAmount + (range * i / count);
|
|
150
|
+
records.add(opp);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (!records.isEmpty()) {
|
|
154
|
+
insert records;
|
|
155
|
+
}
|
|
156
|
+
return records;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Build a single Opportunity record with default values
|
|
161
|
+
* @param index Record index for unique naming
|
|
162
|
+
* @param accountId Parent Account ID
|
|
163
|
+
* @return Opportunity record (not inserted)
|
|
164
|
+
*/
|
|
165
|
+
private static Opportunity buildRecord(Integer index, Id accountId) {
|
|
166
|
+
String indexStr = String.valueOf(index).leftPad(5, '0');
|
|
167
|
+
|
|
168
|
+
return new Opportunity(
|
|
169
|
+
Name = DEFAULT_NAME_PREFIX + indexStr,
|
|
170
|
+
AccountId = accountId,
|
|
171
|
+
StageName = DEFAULT_STAGE,
|
|
172
|
+
CloseDate = Date.today().addDays(DEFAULT_CLOSE_DAYS + index),
|
|
173
|
+
Amount = 10000 + (index * 1000),
|
|
174
|
+
Probability = 20,
|
|
175
|
+
Type = 'New Customer',
|
|
176
|
+
LeadSource = 'Web',
|
|
177
|
+
NextStep = 'Follow up call',
|
|
178
|
+
Description = 'Test opportunity created by TestDataFactory for automated testing'
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Get IDs of created records for cleanup
|
|
184
|
+
* @param records List of Opportunity records
|
|
185
|
+
* @return Set of Opportunity IDs
|
|
186
|
+
*/
|
|
187
|
+
public static Set<Id> getIds(List<Opportunity> records) {
|
|
188
|
+
Set<Id> ids = new Set<Id>();
|
|
189
|
+
for (Opportunity opp : records) {
|
|
190
|
+
if (opp.Id != null) {
|
|
191
|
+
ids.add(opp.Id);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return ids;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Delete records by IDs (cleanup utility)
|
|
199
|
+
* @param recordIds Set of Opportunity IDs to delete
|
|
200
|
+
*/
|
|
201
|
+
public static void cleanup(Set<Id> recordIds) {
|
|
202
|
+
if (!recordIds.isEmpty()) {
|
|
203
|
+
delete [SELECT Id FROM Opportunity WHERE Id IN :recordIds];
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Data Factory for Task records
|
|
3
|
+
* Supports bulk creation with polymorphic Who/What relationships
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* List<Task> tasks = TestDataFactory_Task.create(200);
|
|
7
|
+
* List<Task> tasksForContact = TestDataFactory_Task.createForWho(50, contactId);
|
|
8
|
+
* List<Task> tasksForAccount = TestDataFactory_Task.createForWhat(50, accountId);
|
|
9
|
+
*/
|
|
10
|
+
public class TestDataFactory_Task {
|
|
11
|
+
|
|
12
|
+
private static final String DEFAULT_SUBJECT_PREFIX = 'Test Task ';
|
|
13
|
+
private static final String DEFAULT_STATUS = 'Not Started';
|
|
14
|
+
private static final String DEFAULT_PRIORITY = 'Normal';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Create and insert Task records (creates related Contact automatically)
|
|
18
|
+
* @param count Number of records to create
|
|
19
|
+
* @return List of inserted Task records with IDs
|
|
20
|
+
*/
|
|
21
|
+
public static List<Task> create(Integer count) {
|
|
22
|
+
return create(count, true);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Create Task records with insert option
|
|
27
|
+
* @param count Number of records to create
|
|
28
|
+
* @param doInsert Whether to insert records
|
|
29
|
+
* @return List of Task records
|
|
30
|
+
*/
|
|
31
|
+
public static List<Task> create(Integer count, Boolean doInsert) {
|
|
32
|
+
// Create parent Account and Contact for Who field
|
|
33
|
+
Account parentAccount = new Account(Name = 'Test Parent Account for Tasks');
|
|
34
|
+
insert parentAccount;
|
|
35
|
+
|
|
36
|
+
Contact parentContact = new Contact(
|
|
37
|
+
FirstName = 'Test',
|
|
38
|
+
LastName = 'TaskContact',
|
|
39
|
+
AccountId = parentAccount.Id
|
|
40
|
+
);
|
|
41
|
+
insert parentContact;
|
|
42
|
+
|
|
43
|
+
List<Task> records = new List<Task>();
|
|
44
|
+
for (Integer i = 0; i < count; i++) {
|
|
45
|
+
records.add(buildRecord(i, parentContact.Id, parentAccount.Id));
|
|
46
|
+
}
|
|
47
|
+
if (doInsert && !records.isEmpty()) {
|
|
48
|
+
insert records;
|
|
49
|
+
}
|
|
50
|
+
return records;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Create Task records for a specific Who (Contact or Lead)
|
|
55
|
+
* @param count Number of records to create
|
|
56
|
+
* @param whoId Contact or Lead ID for the Who field
|
|
57
|
+
* @return List of inserted Task records
|
|
58
|
+
*/
|
|
59
|
+
public static List<Task> createForWho(Integer count, Id whoId) {
|
|
60
|
+
return createForWho(count, whoId, true);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Create Task records for a specific Who with insert option
|
|
65
|
+
* @param count Number of records to create
|
|
66
|
+
* @param whoId Contact or Lead ID
|
|
67
|
+
* @param doInsert Whether to insert records
|
|
68
|
+
* @return List of Task records
|
|
69
|
+
*/
|
|
70
|
+
public static List<Task> createForWho(Integer count, Id whoId, Boolean doInsert) {
|
|
71
|
+
List<Task> records = new List<Task>();
|
|
72
|
+
for (Integer i = 0; i < count; i++) {
|
|
73
|
+
records.add(buildRecord(i, whoId, null));
|
|
74
|
+
}
|
|
75
|
+
if (doInsert && !records.isEmpty()) {
|
|
76
|
+
insert records;
|
|
77
|
+
}
|
|
78
|
+
return records;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Create Task records for a specific What (Account, Opportunity, Case, etc.)
|
|
83
|
+
* @param count Number of records to create
|
|
84
|
+
* @param whatId Account, Opportunity, or Case ID
|
|
85
|
+
* @return List of inserted Task records
|
|
86
|
+
*/
|
|
87
|
+
public static List<Task> createForWhat(Integer count, Id whatId) {
|
|
88
|
+
return createForWhat(count, whatId, true);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Create Task records for a specific What with insert option
|
|
93
|
+
* @param count Number of records to create
|
|
94
|
+
* @param whatId Account, Opportunity, or Case ID
|
|
95
|
+
* @param doInsert Whether to insert records
|
|
96
|
+
* @return List of Task records
|
|
97
|
+
*/
|
|
98
|
+
public static List<Task> createForWhat(Integer count, Id whatId, Boolean doInsert) {
|
|
99
|
+
List<Task> records = new List<Task>();
|
|
100
|
+
for (Integer i = 0; i < count; i++) {
|
|
101
|
+
records.add(buildRecord(i, null, whatId));
|
|
102
|
+
}
|
|
103
|
+
if (doInsert && !records.isEmpty()) {
|
|
104
|
+
insert records;
|
|
105
|
+
}
|
|
106
|
+
return records;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Create Task records for both Who and What
|
|
111
|
+
* @param count Number of records to create
|
|
112
|
+
* @param whoId Contact or Lead ID
|
|
113
|
+
* @param whatId Account, Opportunity, or Case ID
|
|
114
|
+
* @return List of inserted Task records
|
|
115
|
+
*/
|
|
116
|
+
public static List<Task> createForWhoAndWhat(Integer count, Id whoId, Id whatId) {
|
|
117
|
+
List<Task> records = new List<Task>();
|
|
118
|
+
for (Integer i = 0; i < count; i++) {
|
|
119
|
+
records.add(buildRecord(i, whoId, whatId));
|
|
120
|
+
}
|
|
121
|
+
if (!records.isEmpty()) {
|
|
122
|
+
insert records;
|
|
123
|
+
}
|
|
124
|
+
return records;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Create Tasks with a specific Status
|
|
129
|
+
* @param count Number of records to create
|
|
130
|
+
* @param status Task Status picklist value
|
|
131
|
+
* @return List of inserted Task records
|
|
132
|
+
*/
|
|
133
|
+
public static List<Task> createWithStatus(Integer count, String status) {
|
|
134
|
+
Account parentAccount = new Account(Name = 'Test Account for ' + status + ' Tasks');
|
|
135
|
+
insert parentAccount;
|
|
136
|
+
|
|
137
|
+
List<Task> records = new List<Task>();
|
|
138
|
+
for (Integer i = 0; i < count; i++) {
|
|
139
|
+
Task t = buildRecord(i, null, parentAccount.Id);
|
|
140
|
+
t.Status = status;
|
|
141
|
+
records.add(t);
|
|
142
|
+
}
|
|
143
|
+
if (!records.isEmpty()) {
|
|
144
|
+
insert records;
|
|
145
|
+
}
|
|
146
|
+
return records;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Create completed Tasks for history testing
|
|
151
|
+
* @param count Number of records to create
|
|
152
|
+
* @return List of inserted completed Task records
|
|
153
|
+
*/
|
|
154
|
+
public static List<Task> createCompleted(Integer count) {
|
|
155
|
+
Account parentAccount = new Account(Name = 'Test Account for Completed Tasks');
|
|
156
|
+
insert parentAccount;
|
|
157
|
+
|
|
158
|
+
List<Task> records = new List<Task>();
|
|
159
|
+
for (Integer i = 0; i < count; i++) {
|
|
160
|
+
Task t = buildRecord(i, null, parentAccount.Id);
|
|
161
|
+
t.Status = 'Completed';
|
|
162
|
+
t.Priority = 'Normal';
|
|
163
|
+
records.add(t);
|
|
164
|
+
}
|
|
165
|
+
if (!records.isEmpty()) {
|
|
166
|
+
insert records;
|
|
167
|
+
}
|
|
168
|
+
return records;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Create Tasks with varied Subjects for search testing
|
|
173
|
+
* @param count Number of records to create
|
|
174
|
+
* @return List of inserted Task records with varied subjects
|
|
175
|
+
*/
|
|
176
|
+
public static List<Task> createWithVariedSubjects(Integer count) {
|
|
177
|
+
List<String> subjects = new List<String>{
|
|
178
|
+
'Call', 'Email', 'Meeting', 'Send Letter', 'Send Quote',
|
|
179
|
+
'Follow Up', 'Demo', 'Proposal', 'Contract Review', 'Other'
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
Account parentAccount = new Account(Name = 'Test Account for Varied Tasks');
|
|
183
|
+
insert parentAccount;
|
|
184
|
+
|
|
185
|
+
List<Task> records = new List<Task>();
|
|
186
|
+
for (Integer i = 0; i < count; i++) {
|
|
187
|
+
Task t = buildRecord(i, null, parentAccount.Id);
|
|
188
|
+
t.Subject = subjects[Math.mod(i, subjects.size())];
|
|
189
|
+
records.add(t);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if (!records.isEmpty()) {
|
|
193
|
+
insert records;
|
|
194
|
+
}
|
|
195
|
+
return records;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Build a single Task record with default values
|
|
200
|
+
* @param index Record index for unique naming
|
|
201
|
+
* @param whoId Contact or Lead ID (optional)
|
|
202
|
+
* @param whatId Account, Opportunity, or Case ID (optional)
|
|
203
|
+
* @return Task record (not inserted)
|
|
204
|
+
*/
|
|
205
|
+
private static Task buildRecord(Integer index, Id whoId, Id whatId) {
|
|
206
|
+
String indexStr = String.valueOf(index).leftPad(5, '0');
|
|
207
|
+
|
|
208
|
+
return new Task(
|
|
209
|
+
Subject = DEFAULT_SUBJECT_PREFIX + indexStr,
|
|
210
|
+
WhoId = whoId,
|
|
211
|
+
WhatId = whatId,
|
|
212
|
+
Status = DEFAULT_STATUS,
|
|
213
|
+
Priority = DEFAULT_PRIORITY,
|
|
214
|
+
ActivityDate = Date.today().addDays(7 + index),
|
|
215
|
+
Description = 'Test task created by TestDataFactory for automated testing. Task index: ' + index,
|
|
216
|
+
Type = 'Call',
|
|
217
|
+
IsReminderSet = false,
|
|
218
|
+
TaskSubtype = 'Task'
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Get IDs of created records for cleanup
|
|
224
|
+
* @param records List of Task records
|
|
225
|
+
* @return Set of Task IDs
|
|
226
|
+
*/
|
|
227
|
+
public static Set<Id> getIds(List<Task> records) {
|
|
228
|
+
Set<Id> ids = new Set<Id>();
|
|
229
|
+
for (Task t : records) {
|
|
230
|
+
if (t.Id != null) {
|
|
231
|
+
ids.add(t.Id);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return ids;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Delete records by IDs (cleanup utility)
|
|
239
|
+
* @param recordIds Set of Task IDs to delete
|
|
240
|
+
*/
|
|
241
|
+
public static void cleanup(Set<Id> recordIds) {
|
|
242
|
+
if (!recordIds.isEmpty()) {
|
|
243
|
+
delete [SELECT Id FROM Task WHERE Id IN :recordIds];
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|