@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,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Data Factory for Case records
|
|
3
|
+
* Supports bulk creation with Account/Contact relationships and priority variations
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* List<Case> cases = TestDataFactory_Case.create(200);
|
|
7
|
+
* List<Case> casesForAccount = TestDataFactory_Case.createForAccount(50, accountId);
|
|
8
|
+
* List<Case> highPriority = TestDataFactory_Case.createWithPriority(100, 'High');
|
|
9
|
+
*/
|
|
10
|
+
public class TestDataFactory_Case {
|
|
11
|
+
|
|
12
|
+
private static final String DEFAULT_SUBJECT_PREFIX = 'Test Case ';
|
|
13
|
+
private static final String DEFAULT_STATUS = 'New';
|
|
14
|
+
private static final String DEFAULT_PRIORITY = 'Medium';
|
|
15
|
+
private static final String DEFAULT_ORIGIN = 'Web';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Create and insert Case records (creates parent Account automatically)
|
|
19
|
+
* @param count Number of records to create
|
|
20
|
+
* @return List of inserted Case records with IDs
|
|
21
|
+
*/
|
|
22
|
+
public static List<Case> create(Integer count) {
|
|
23
|
+
return create(count, true);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Create Case records with insert option
|
|
28
|
+
* @param count Number of records to create
|
|
29
|
+
* @param doInsert Whether to insert records
|
|
30
|
+
* @return List of Case records
|
|
31
|
+
*/
|
|
32
|
+
public static List<Case> create(Integer count, Boolean doInsert) {
|
|
33
|
+
// Create parent Account and Contact
|
|
34
|
+
Account parentAccount = new Account(Name = 'Test Parent Account for Cases');
|
|
35
|
+
insert parentAccount;
|
|
36
|
+
|
|
37
|
+
Contact parentContact = new Contact(
|
|
38
|
+
FirstName = 'Test',
|
|
39
|
+
LastName = 'CaseContact',
|
|
40
|
+
AccountId = parentAccount.Id,
|
|
41
|
+
Email = 'casecontact@testfactory.example.com'
|
|
42
|
+
);
|
|
43
|
+
insert parentContact;
|
|
44
|
+
|
|
45
|
+
return createForAccountAndContact(count, parentAccount.Id, parentContact.Id, doInsert);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Create Case records for a specific Account
|
|
50
|
+
* @param count Number of records to create
|
|
51
|
+
* @param accountId Parent Account ID
|
|
52
|
+
* @return List of inserted Case records
|
|
53
|
+
*/
|
|
54
|
+
public static List<Case> createForAccount(Integer count, Id accountId) {
|
|
55
|
+
return createForAccount(count, accountId, true);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Create Case records for a specific Account with insert option
|
|
60
|
+
* @param count Number of records to create
|
|
61
|
+
* @param accountId Parent Account ID
|
|
62
|
+
* @param doInsert Whether to insert records
|
|
63
|
+
* @return List of Case records
|
|
64
|
+
*/
|
|
65
|
+
public static List<Case> createForAccount(Integer count, Id accountId, Boolean doInsert) {
|
|
66
|
+
List<Case> records = new List<Case>();
|
|
67
|
+
for (Integer i = 0; i < count; i++) {
|
|
68
|
+
records.add(buildRecord(i, accountId, null));
|
|
69
|
+
}
|
|
70
|
+
if (doInsert && !records.isEmpty()) {
|
|
71
|
+
insert records;
|
|
72
|
+
}
|
|
73
|
+
return records;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Create Case records for specific Account and Contact
|
|
78
|
+
* @param count Number of records to create
|
|
79
|
+
* @param accountId Parent Account ID
|
|
80
|
+
* @param contactId Parent Contact ID
|
|
81
|
+
* @param doInsert Whether to insert records
|
|
82
|
+
* @return List of Case records
|
|
83
|
+
*/
|
|
84
|
+
public static List<Case> createForAccountAndContact(Integer count, Id accountId, Id contactId, Boolean doInsert) {
|
|
85
|
+
List<Case> records = new List<Case>();
|
|
86
|
+
for (Integer i = 0; i < count; i++) {
|
|
87
|
+
records.add(buildRecord(i, accountId, contactId));
|
|
88
|
+
}
|
|
89
|
+
if (doInsert && !records.isEmpty()) {
|
|
90
|
+
insert records;
|
|
91
|
+
}
|
|
92
|
+
return records;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Create Case records with a specific Priority
|
|
97
|
+
* @param count Number of records to create
|
|
98
|
+
* @param priority Priority picklist value (Low, Medium, High)
|
|
99
|
+
* @return List of inserted Case records
|
|
100
|
+
*/
|
|
101
|
+
public static List<Case> createWithPriority(Integer count, String priority) {
|
|
102
|
+
Account parentAccount = new Account(Name = 'Test Account for ' + priority + ' Priority Cases');
|
|
103
|
+
insert parentAccount;
|
|
104
|
+
|
|
105
|
+
List<Case> records = new List<Case>();
|
|
106
|
+
for (Integer i = 0; i < count; i++) {
|
|
107
|
+
Case c = buildRecord(i, parentAccount.Id, null);
|
|
108
|
+
c.Priority = priority;
|
|
109
|
+
records.add(c);
|
|
110
|
+
}
|
|
111
|
+
if (!records.isEmpty()) {
|
|
112
|
+
insert records;
|
|
113
|
+
}
|
|
114
|
+
return records;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Create Case records with a specific Status
|
|
119
|
+
* @param count Number of records to create
|
|
120
|
+
* @param status Status picklist value
|
|
121
|
+
* @return List of inserted Case records
|
|
122
|
+
*/
|
|
123
|
+
public static List<Case> createWithStatus(Integer count, String status) {
|
|
124
|
+
Account parentAccount = new Account(Name = 'Test Account for ' + status + ' Cases');
|
|
125
|
+
insert parentAccount;
|
|
126
|
+
|
|
127
|
+
List<Case> records = new List<Case>();
|
|
128
|
+
for (Integer i = 0; i < count; i++) {
|
|
129
|
+
Case c = buildRecord(i, parentAccount.Id, null);
|
|
130
|
+
c.Status = status;
|
|
131
|
+
records.add(c);
|
|
132
|
+
}
|
|
133
|
+
if (!records.isEmpty()) {
|
|
134
|
+
insert records;
|
|
135
|
+
}
|
|
136
|
+
return records;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Create Cases with varied Types for categorization testing
|
|
141
|
+
* @param count Number of records to create
|
|
142
|
+
* @param accountId Parent Account ID
|
|
143
|
+
* @return List of inserted Case records with varied types
|
|
144
|
+
*/
|
|
145
|
+
public static List<Case> createWithVariedTypes(Integer count, Id accountId) {
|
|
146
|
+
List<String> types = new List<String>{
|
|
147
|
+
'Mechanical', 'Electrical', 'Electronic', 'Structural', 'Other',
|
|
148
|
+
'Feature Request', 'Question', 'Problem'
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
List<Case> records = new List<Case>();
|
|
152
|
+
for (Integer i = 0; i < count; i++) {
|
|
153
|
+
Case c = buildRecord(i, accountId, null);
|
|
154
|
+
c.Type = types[Math.mod(i, types.size())];
|
|
155
|
+
records.add(c);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (!records.isEmpty()) {
|
|
159
|
+
insert records;
|
|
160
|
+
}
|
|
161
|
+
return records;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Create escalated Cases for escalation rule testing
|
|
166
|
+
* @param count Number of records to create
|
|
167
|
+
* @return List of inserted escalated Case records
|
|
168
|
+
*/
|
|
169
|
+
public static List<Case> createEscalated(Integer count) {
|
|
170
|
+
Account parentAccount = new Account(Name = 'Test Account for Escalated Cases');
|
|
171
|
+
insert parentAccount;
|
|
172
|
+
|
|
173
|
+
List<Case> records = new List<Case>();
|
|
174
|
+
for (Integer i = 0; i < count; i++) {
|
|
175
|
+
Case c = buildRecord(i, parentAccount.Id, null);
|
|
176
|
+
c.Priority = 'High';
|
|
177
|
+
c.IsEscalated = true;
|
|
178
|
+
records.add(c);
|
|
179
|
+
}
|
|
180
|
+
if (!records.isEmpty()) {
|
|
181
|
+
insert records;
|
|
182
|
+
}
|
|
183
|
+
return records;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Build a single Case record with default values
|
|
188
|
+
* @param index Record index for unique naming
|
|
189
|
+
* @param accountId Parent Account ID
|
|
190
|
+
* @param contactId Parent Contact ID (optional)
|
|
191
|
+
* @return Case record (not inserted)
|
|
192
|
+
*/
|
|
193
|
+
private static Case buildRecord(Integer index, Id accountId, Id contactId) {
|
|
194
|
+
String indexStr = String.valueOf(index).leftPad(5, '0');
|
|
195
|
+
|
|
196
|
+
return new Case(
|
|
197
|
+
Subject = DEFAULT_SUBJECT_PREFIX + indexStr,
|
|
198
|
+
AccountId = accountId,
|
|
199
|
+
ContactId = contactId,
|
|
200
|
+
Status = DEFAULT_STATUS,
|
|
201
|
+
Priority = DEFAULT_PRIORITY,
|
|
202
|
+
Origin = DEFAULT_ORIGIN,
|
|
203
|
+
Type = 'Problem',
|
|
204
|
+
Reason = 'User didn\'t attend training',
|
|
205
|
+
Description = 'Test case created by TestDataFactory for automated testing. Case index: ' + index,
|
|
206
|
+
SuppliedName = 'Test Supplied Name ' + index,
|
|
207
|
+
SuppliedEmail = 'supplied' + index + '@testfactory.example.com',
|
|
208
|
+
SuppliedPhone = '(555) 600-' + String.valueOf(1000 + index),
|
|
209
|
+
SuppliedCompany = 'Test Supplied Company ' + index
|
|
210
|
+
);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Get IDs of created records for cleanup
|
|
215
|
+
* @param records List of Case records
|
|
216
|
+
* @return Set of Case IDs
|
|
217
|
+
*/
|
|
218
|
+
public static Set<Id> getIds(List<Case> records) {
|
|
219
|
+
Set<Id> ids = new Set<Id>();
|
|
220
|
+
for (Case c : records) {
|
|
221
|
+
if (c.Id != null) {
|
|
222
|
+
ids.add(c.Id);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
return ids;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Delete records by IDs (cleanup utility)
|
|
230
|
+
* @param recordIds Set of Case IDs to delete
|
|
231
|
+
*/
|
|
232
|
+
public static void cleanup(Set<Id> recordIds) {
|
|
233
|
+
if (!recordIds.isEmpty()) {
|
|
234
|
+
delete [SELECT Id FROM Case WHERE Id IN :recordIds];
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Data Factory for Contact records
|
|
3
|
+
* Supports bulk creation with Account relationships
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* List<Contact> contacts = TestDataFactory_Contact.create(200);
|
|
7
|
+
* List<Contact> contactsForAccount = TestDataFactory_Contact.createForAccount(50, accountId);
|
|
8
|
+
* List<Contact> contactsNoInsert = TestDataFactory_Contact.create(200, false);
|
|
9
|
+
*/
|
|
10
|
+
public class TestDataFactory_Contact {
|
|
11
|
+
|
|
12
|
+
private static final String DEFAULT_FIRST_NAME_PREFIX = 'Test';
|
|
13
|
+
private static final String DEFAULT_LAST_NAME_PREFIX = 'Contact';
|
|
14
|
+
private static final String DEFAULT_EMAIL_DOMAIN = 'testfactory.example.com';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Create and insert Contact records (creates parent Account automatically)
|
|
18
|
+
* @param count Number of records to create
|
|
19
|
+
* @return List of inserted Contact records with IDs
|
|
20
|
+
*/
|
|
21
|
+
public static List<Contact> create(Integer count) {
|
|
22
|
+
return create(count, true);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Create Contact records with insert option
|
|
27
|
+
* @param count Number of records to create
|
|
28
|
+
* @param doInsert Whether to insert records
|
|
29
|
+
* @return List of Contact records
|
|
30
|
+
*/
|
|
31
|
+
public static List<Contact> create(Integer count, Boolean doInsert) {
|
|
32
|
+
// Create a parent Account for orphan protection
|
|
33
|
+
Account parentAccount = new Account(Name = 'Test Parent Account for Contacts');
|
|
34
|
+
insert parentAccount;
|
|
35
|
+
|
|
36
|
+
return createForAccount(count, parentAccount.Id, doInsert);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Create Contact records for a specific Account
|
|
41
|
+
* @param count Number of records to create
|
|
42
|
+
* @param accountId Parent Account ID
|
|
43
|
+
* @return List of inserted Contact records
|
|
44
|
+
*/
|
|
45
|
+
public static List<Contact> createForAccount(Integer count, Id accountId) {
|
|
46
|
+
return createForAccount(count, accountId, true);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Create Contact 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 Contact records
|
|
55
|
+
*/
|
|
56
|
+
public static List<Contact> createForAccount(Integer count, Id accountId, Boolean doInsert) {
|
|
57
|
+
List<Contact> records = new List<Contact>();
|
|
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 Contacts distributed across multiple Accounts
|
|
69
|
+
* @param accountIds List of Account IDs
|
|
70
|
+
* @param contactsPerAccount Number of Contacts per Account
|
|
71
|
+
* @return List of inserted Contact records
|
|
72
|
+
*/
|
|
73
|
+
public static List<Contact> createForAccounts(List<Id> accountIds, Integer contactsPerAccount) {
|
|
74
|
+
List<Contact> records = new List<Contact>();
|
|
75
|
+
Integer globalIndex = 0;
|
|
76
|
+
|
|
77
|
+
for (Id accountId : accountIds) {
|
|
78
|
+
for (Integer i = 0; i < contactsPerAccount; i++) {
|
|
79
|
+
records.add(buildRecord(globalIndex++, accountId));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (!records.isEmpty()) {
|
|
84
|
+
insert records;
|
|
85
|
+
}
|
|
86
|
+
return records;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Create Contacts with varied titles for role-based testing
|
|
91
|
+
* @param count Number of records to create
|
|
92
|
+
* @param accountId Parent Account ID
|
|
93
|
+
* @return List of inserted Contact records with varied titles
|
|
94
|
+
*/
|
|
95
|
+
public static List<Contact> createWithVariedTitles(Integer count, Id accountId) {
|
|
96
|
+
List<String> titles = new List<String>{
|
|
97
|
+
'CEO', 'CFO', 'CTO', 'VP Sales', 'VP Marketing',
|
|
98
|
+
'Director', 'Manager', 'Senior Developer', 'Analyst', 'Consultant'
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
List<Contact> records = new List<Contact>();
|
|
102
|
+
for (Integer i = 0; i < count; i++) {
|
|
103
|
+
Contact con = buildRecord(i, accountId);
|
|
104
|
+
con.Title = titles[Math.mod(i, titles.size())];
|
|
105
|
+
records.add(con);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (!records.isEmpty()) {
|
|
109
|
+
insert records;
|
|
110
|
+
}
|
|
111
|
+
return records;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Build a single Contact record with default values
|
|
116
|
+
* @param index Record index for unique naming
|
|
117
|
+
* @param accountId Parent Account ID
|
|
118
|
+
* @return Contact record (not inserted)
|
|
119
|
+
*/
|
|
120
|
+
private static Contact buildRecord(Integer index, Id accountId) {
|
|
121
|
+
String indexStr = String.valueOf(index).leftPad(5, '0');
|
|
122
|
+
String firstName = DEFAULT_FIRST_NAME_PREFIX + indexStr;
|
|
123
|
+
String lastName = DEFAULT_LAST_NAME_PREFIX + indexStr;
|
|
124
|
+
|
|
125
|
+
return new Contact(
|
|
126
|
+
FirstName = firstName,
|
|
127
|
+
LastName = lastName,
|
|
128
|
+
AccountId = accountId,
|
|
129
|
+
Email = firstName.toLowerCase() + '.' + lastName.toLowerCase() + '@' + DEFAULT_EMAIL_DOMAIN,
|
|
130
|
+
Phone = '(555) 200-' + String.valueOf(1000 + index),
|
|
131
|
+
MobilePhone = '(555) 300-' + String.valueOf(1000 + index),
|
|
132
|
+
Title = 'Test Title',
|
|
133
|
+
Department = 'Test Department',
|
|
134
|
+
MailingStreet = '456 Contact Ave',
|
|
135
|
+
MailingCity = 'San Francisco',
|
|
136
|
+
MailingState = 'CA',
|
|
137
|
+
MailingPostalCode = '94103',
|
|
138
|
+
MailingCountry = 'USA',
|
|
139
|
+
Birthdate = Date.today().addYears(-30).addDays(index),
|
|
140
|
+
Description = 'Test contact created by TestDataFactory for automated testing'
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Get IDs of created records for cleanup
|
|
146
|
+
* @param records List of Contact records
|
|
147
|
+
* @return Set of Contact IDs
|
|
148
|
+
*/
|
|
149
|
+
public static Set<Id> getIds(List<Contact> records) {
|
|
150
|
+
Set<Id> ids = new Set<Id>();
|
|
151
|
+
for (Contact con : records) {
|
|
152
|
+
if (con.Id != null) {
|
|
153
|
+
ids.add(con.Id);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return ids;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Delete records by IDs (cleanup utility)
|
|
161
|
+
* @param recordIds Set of Contact IDs to delete
|
|
162
|
+
*/
|
|
163
|
+
public static void cleanup(Set<Id> recordIds) {
|
|
164
|
+
if (!recordIds.isEmpty()) {
|
|
165
|
+
delete [SELECT Id FROM Contact WHERE Id IN :recordIds];
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Data Factory Template for Custom Objects
|
|
3
|
+
*
|
|
4
|
+
* INSTRUCTIONS:
|
|
5
|
+
* 1. Copy this file and rename to TestDataFactory_[YourObject].cls
|
|
6
|
+
* 2. Replace {{ObjectName}} with your object API name (e.g., Invoice__c)
|
|
7
|
+
* 3. Replace {{ObjectLabel}} with display name (e.g., Invoice)
|
|
8
|
+
* 4. Update buildRecord() with your object's fields
|
|
9
|
+
* 5. Add object-specific creation methods as needed
|
|
10
|
+
*
|
|
11
|
+
* Usage:
|
|
12
|
+
* List<{{ObjectName}}> records = TestDataFactory_{{ObjectLabel}}.create(200);
|
|
13
|
+
* List<{{ObjectName}}> recordsNoInsert = TestDataFactory_{{ObjectLabel}}.create(200, false);
|
|
14
|
+
*/
|
|
15
|
+
public class TestDataFactory_{{ObjectLabel}} {
|
|
16
|
+
|
|
17
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
18
|
+
// CONFIGURATION - Update these for your object
|
|
19
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
20
|
+
|
|
21
|
+
private static final String DEFAULT_NAME_PREFIX = 'Test {{ObjectLabel}} ';
|
|
22
|
+
|
|
23
|
+
// Add default values for required picklist fields
|
|
24
|
+
// private static final String DEFAULT_STATUS = 'Draft';
|
|
25
|
+
// private static final String DEFAULT_TYPE = 'Standard';
|
|
26
|
+
|
|
27
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
28
|
+
// STANDARD FACTORY METHODS
|
|
29
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Create and insert records with default values
|
|
33
|
+
* @param count Number of records to create
|
|
34
|
+
* @return List of inserted records with IDs
|
|
35
|
+
*/
|
|
36
|
+
public static List<{{ObjectName}}> create(Integer count) {
|
|
37
|
+
return create(count, true);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Create records with insert option
|
|
42
|
+
* @param count Number of records to create
|
|
43
|
+
* @param doInsert Whether to insert records
|
|
44
|
+
* @return List of records
|
|
45
|
+
*/
|
|
46
|
+
public static List<{{ObjectName}}> create(Integer count, Boolean doInsert) {
|
|
47
|
+
List<{{ObjectName}}> records = new List<{{ObjectName}}>();
|
|
48
|
+
for (Integer i = 0; i < count; i++) {
|
|
49
|
+
records.add(buildRecord(i));
|
|
50
|
+
}
|
|
51
|
+
if (doInsert && !records.isEmpty()) {
|
|
52
|
+
insert records;
|
|
53
|
+
}
|
|
54
|
+
return records;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
58
|
+
// RELATIONSHIP METHODS - Uncomment and modify if object has lookups
|
|
59
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Create records for a specific parent Account
|
|
63
|
+
* Uncomment if your object has an Account lookup
|
|
64
|
+
*/
|
|
65
|
+
/*
|
|
66
|
+
public static List<{{ObjectName}}> createForAccount(Integer count, Id accountId) {
|
|
67
|
+
return createForAccount(count, accountId, true);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
public static List<{{ObjectName}}> createForAccount(Integer count, Id accountId, Boolean doInsert) {
|
|
71
|
+
List<{{ObjectName}}> records = new List<{{ObjectName}}>();
|
|
72
|
+
for (Integer i = 0; i < count; i++) {
|
|
73
|
+
{{ObjectName}} record = buildRecord(i);
|
|
74
|
+
record.Account__c = accountId; // Update with your lookup field API name
|
|
75
|
+
records.add(record);
|
|
76
|
+
}
|
|
77
|
+
if (doInsert && !records.isEmpty()) {
|
|
78
|
+
insert records;
|
|
79
|
+
}
|
|
80
|
+
return records;
|
|
81
|
+
}
|
|
82
|
+
*/
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Create records for a specific parent (generic lookup)
|
|
86
|
+
* Uncomment and modify for your parent object
|
|
87
|
+
*/
|
|
88
|
+
/*
|
|
89
|
+
public static List<{{ObjectName}}> createForParent(Integer count, Id parentId) {
|
|
90
|
+
List<{{ObjectName}}> records = new List<{{ObjectName}}>();
|
|
91
|
+
for (Integer i = 0; i < count; i++) {
|
|
92
|
+
{{ObjectName}} record = buildRecord(i);
|
|
93
|
+
record.Parent__c = parentId; // Update with your lookup field API name
|
|
94
|
+
records.add(record);
|
|
95
|
+
}
|
|
96
|
+
if (!records.isEmpty()) {
|
|
97
|
+
insert records;
|
|
98
|
+
}
|
|
99
|
+
return records;
|
|
100
|
+
}
|
|
101
|
+
*/
|
|
102
|
+
|
|
103
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
104
|
+
// VARIATION METHODS - Add methods for specific field variations
|
|
105
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Create records with a specific Status
|
|
109
|
+
* Uncomment if your object has a Status picklist
|
|
110
|
+
*/
|
|
111
|
+
/*
|
|
112
|
+
public static List<{{ObjectName}}> createWithStatus(Integer count, String status) {
|
|
113
|
+
List<{{ObjectName}}> records = new List<{{ObjectName}}>();
|
|
114
|
+
for (Integer i = 0; i < count; i++) {
|
|
115
|
+
{{ObjectName}} record = buildRecord(i);
|
|
116
|
+
record.Status__c = status; // Update with your status field API name
|
|
117
|
+
records.add(record);
|
|
118
|
+
}
|
|
119
|
+
if (!records.isEmpty()) {
|
|
120
|
+
insert records;
|
|
121
|
+
}
|
|
122
|
+
return records;
|
|
123
|
+
}
|
|
124
|
+
*/
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Create records with varied values for comprehensive testing
|
|
128
|
+
* Modify for your object's key picklist fields
|
|
129
|
+
*/
|
|
130
|
+
/*
|
|
131
|
+
public static List<{{ObjectName}}> createWithVariedValues(Integer count) {
|
|
132
|
+
List<String> statuses = new List<String>{'Draft', 'Active', 'Complete', 'Cancelled'};
|
|
133
|
+
|
|
134
|
+
List<{{ObjectName}}> records = new List<{{ObjectName}}>();
|
|
135
|
+
for (Integer i = 0; i < count; i++) {
|
|
136
|
+
{{ObjectName}} record = buildRecord(i);
|
|
137
|
+
record.Status__c = statuses[Math.mod(i, statuses.size())];
|
|
138
|
+
records.add(record);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
if (!records.isEmpty()) {
|
|
142
|
+
insert records;
|
|
143
|
+
}
|
|
144
|
+
return records;
|
|
145
|
+
}
|
|
146
|
+
*/
|
|
147
|
+
|
|
148
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
149
|
+
// RECORD BUILDER - Customize for your object's fields
|
|
150
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Build a single record with default values
|
|
154
|
+
*
|
|
155
|
+
* UPDATE THIS METHOD with your object's fields:
|
|
156
|
+
* 1. Add all required fields
|
|
157
|
+
* 2. Add fields needed for testing
|
|
158
|
+
* 3. Use realistic test values
|
|
159
|
+
*
|
|
160
|
+
* @param index Record index for unique naming
|
|
161
|
+
* @return Record (not inserted)
|
|
162
|
+
*/
|
|
163
|
+
private static {{ObjectName}} buildRecord(Integer index) {
|
|
164
|
+
String indexStr = String.valueOf(index).leftPad(5, '0');
|
|
165
|
+
|
|
166
|
+
return new {{ObjectName}}(
|
|
167
|
+
Name = DEFAULT_NAME_PREFIX + indexStr
|
|
168
|
+
|
|
169
|
+
// ─────────────────────────────────────────────────────────────
|
|
170
|
+
// ADD YOUR FIELDS BELOW
|
|
171
|
+
// ─────────────────────────────────────────────────────────────
|
|
172
|
+
|
|
173
|
+
// Text fields
|
|
174
|
+
// , Description__c = 'Test {{ObjectLabel}} created by TestDataFactory'
|
|
175
|
+
|
|
176
|
+
// Picklist fields (use valid picklist values)
|
|
177
|
+
// , Status__c = DEFAULT_STATUS
|
|
178
|
+
// , Type__c = DEFAULT_TYPE
|
|
179
|
+
|
|
180
|
+
// Number fields
|
|
181
|
+
// , Amount__c = 1000 + (index * 100)
|
|
182
|
+
// , Quantity__c = 1 + index
|
|
183
|
+
|
|
184
|
+
// Date fields
|
|
185
|
+
// , StartDate__c = Date.today()
|
|
186
|
+
// , EndDate__c = Date.today().addDays(30 + index)
|
|
187
|
+
|
|
188
|
+
// DateTime fields
|
|
189
|
+
// , ScheduledDateTime__c = DateTime.now().addDays(index)
|
|
190
|
+
|
|
191
|
+
// Checkbox fields
|
|
192
|
+
// , IsActive__c = true
|
|
193
|
+
|
|
194
|
+
// Currency fields
|
|
195
|
+
// , TotalAmount__c = 10000.00 + (index * 500)
|
|
196
|
+
|
|
197
|
+
// Percent fields
|
|
198
|
+
// , DiscountPercent__c = 10 + index
|
|
199
|
+
|
|
200
|
+
// Email fields
|
|
201
|
+
// , ContactEmail__c = 'test' + index + '@testfactory.example.com'
|
|
202
|
+
|
|
203
|
+
// Phone fields
|
|
204
|
+
// , ContactPhone__c = '(555) 900-' + String.valueOf(1000 + index)
|
|
205
|
+
|
|
206
|
+
// URL fields
|
|
207
|
+
// , Website__c = 'https://test' + index + '.example.com'
|
|
208
|
+
|
|
209
|
+
// Lookup fields (requires parent record ID)
|
|
210
|
+
// , Account__c = accountId
|
|
211
|
+
// , Contact__c = contactId
|
|
212
|
+
|
|
213
|
+
// ─────────────────────────────────────────────────────────────
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
218
|
+
// UTILITY METHODS
|
|
219
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Get IDs of created records for cleanup
|
|
223
|
+
* @param records List of records
|
|
224
|
+
* @return Set of record IDs
|
|
225
|
+
*/
|
|
226
|
+
public static Set<Id> getIds(List<{{ObjectName}}> records) {
|
|
227
|
+
Set<Id> ids = new Set<Id>();
|
|
228
|
+
for ({{ObjectName}} record : records) {
|
|
229
|
+
if (record.Id != null) {
|
|
230
|
+
ids.add(record.Id);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return ids;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Delete records by IDs (cleanup utility)
|
|
238
|
+
* @param recordIds Set of record IDs to delete
|
|
239
|
+
*/
|
|
240
|
+
public static void cleanup(Set<Id> recordIds) {
|
|
241
|
+
if (!recordIds.isEmpty()) {
|
|
242
|
+
delete [SELECT Id FROM {{ObjectName}} WHERE Id IN :recordIds];
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Delete records by Name pattern (cleanup utility)
|
|
248
|
+
* @param namePattern LIKE pattern (e.g., 'Test%')
|
|
249
|
+
*/
|
|
250
|
+
public static void cleanupByName(String namePattern) {
|
|
251
|
+
List<{{ObjectName}}> records = [
|
|
252
|
+
SELECT Id FROM {{ObjectName}}
|
|
253
|
+
WHERE Name LIKE :namePattern
|
|
254
|
+
LIMIT 10000
|
|
255
|
+
];
|
|
256
|
+
if (!records.isEmpty()) {
|
|
257
|
+
delete records;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|