cumulusci-plus 5.0.0__py3-none-any.whl
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.
Potentially problematic release.
This version of cumulusci-plus might be problematic. Click here for more details.
- cumulusci/__about__.py +1 -0
- cumulusci/__init__.py +22 -0
- cumulusci/__main__.py +3 -0
- cumulusci/cli/__init__.py +0 -0
- cumulusci/cli/cci.py +244 -0
- cumulusci/cli/error.py +125 -0
- cumulusci/cli/flow.py +185 -0
- cumulusci/cli/logger.py +72 -0
- cumulusci/cli/org.py +692 -0
- cumulusci/cli/plan.py +181 -0
- cumulusci/cli/project.py +391 -0
- cumulusci/cli/robot.py +116 -0
- cumulusci/cli/runtime.py +190 -0
- cumulusci/cli/service.py +521 -0
- cumulusci/cli/task.py +295 -0
- cumulusci/cli/tests/__init__.py +0 -0
- cumulusci/cli/tests/test_cci.py +545 -0
- cumulusci/cli/tests/test_error.py +170 -0
- cumulusci/cli/tests/test_flow.py +276 -0
- cumulusci/cli/tests/test_logger.py +25 -0
- cumulusci/cli/tests/test_org.py +1438 -0
- cumulusci/cli/tests/test_plan.py +245 -0
- cumulusci/cli/tests/test_project.py +235 -0
- cumulusci/cli/tests/test_robot.py +177 -0
- cumulusci/cli/tests/test_runtime.py +197 -0
- cumulusci/cli/tests/test_service.py +853 -0
- cumulusci/cli/tests/test_task.py +266 -0
- cumulusci/cli/tests/test_ui.py +310 -0
- cumulusci/cli/tests/test_utils.py +122 -0
- cumulusci/cli/tests/utils.py +52 -0
- cumulusci/cli/ui.py +234 -0
- cumulusci/cli/utils.py +150 -0
- cumulusci/conftest.py +181 -0
- cumulusci/core/__init__.py +0 -0
- cumulusci/core/config/BaseConfig.py +5 -0
- cumulusci/core/config/BaseTaskFlowConfig.py +5 -0
- cumulusci/core/config/OrgConfig.py +5 -0
- cumulusci/core/config/ScratchOrgConfig.py +5 -0
- cumulusci/core/config/__init__.py +125 -0
- cumulusci/core/config/base_config.py +111 -0
- cumulusci/core/config/base_task_flow_config.py +82 -0
- cumulusci/core/config/marketing_cloud_service_config.py +83 -0
- cumulusci/core/config/oauth2_service_config.py +17 -0
- cumulusci/core/config/org_config.py +604 -0
- cumulusci/core/config/project_config.py +782 -0
- cumulusci/core/config/scratch_org_config.py +251 -0
- cumulusci/core/config/sfdx_org_config.py +220 -0
- cumulusci/core/config/tests/_test_config_backwards_compatibility.py +33 -0
- cumulusci/core/config/tests/test_config.py +1895 -0
- cumulusci/core/config/tests/test_config_expensive.py +839 -0
- cumulusci/core/config/tests/test_config_util.py +91 -0
- cumulusci/core/config/universal_config.py +88 -0
- cumulusci/core/config/util.py +18 -0
- cumulusci/core/datasets.py +303 -0
- cumulusci/core/debug.py +33 -0
- cumulusci/core/dependencies/__init__.py +55 -0
- cumulusci/core/dependencies/base.py +561 -0
- cumulusci/core/dependencies/dependencies.py +273 -0
- cumulusci/core/dependencies/github.py +177 -0
- cumulusci/core/dependencies/github_resolvers.py +244 -0
- cumulusci/core/dependencies/resolvers.py +580 -0
- cumulusci/core/dependencies/tests/__init__.py +0 -0
- cumulusci/core/dependencies/tests/conftest.py +385 -0
- cumulusci/core/dependencies/tests/test_dependencies.py +950 -0
- cumulusci/core/dependencies/tests/test_github.py +83 -0
- cumulusci/core/dependencies/tests/test_resolvers.py +1027 -0
- cumulusci/core/dependencies/utils.py +13 -0
- cumulusci/core/enums.py +11 -0
- cumulusci/core/exceptions.py +311 -0
- cumulusci/core/flowrunner.py +888 -0
- cumulusci/core/github.py +665 -0
- cumulusci/core/keychain/__init__.py +24 -0
- cumulusci/core/keychain/base_project_keychain.py +441 -0
- cumulusci/core/keychain/encrypted_file_project_keychain.py +945 -0
- cumulusci/core/keychain/environment_project_keychain.py +7 -0
- cumulusci/core/keychain/serialization.py +152 -0
- cumulusci/core/keychain/subprocess_keychain.py +24 -0
- cumulusci/core/keychain/tests/conftest.py +50 -0
- cumulusci/core/keychain/tests/test_base_project_keychain.py +299 -0
- cumulusci/core/keychain/tests/test_encrypted_file_project_keychain.py +1228 -0
- cumulusci/core/metadeploy/__init__.py +0 -0
- cumulusci/core/metadeploy/api.py +88 -0
- cumulusci/core/metadeploy/plans.py +25 -0
- cumulusci/core/metadeploy/tests/test_api.py +276 -0
- cumulusci/core/runtime.py +115 -0
- cumulusci/core/sfdx.py +162 -0
- cumulusci/core/source/__init__.py +16 -0
- cumulusci/core/source/github.py +50 -0
- cumulusci/core/source/local_folder.py +35 -0
- cumulusci/core/source_transforms/__init__.py +0 -0
- cumulusci/core/source_transforms/tests/test_transforms.py +1091 -0
- cumulusci/core/source_transforms/transforms.py +532 -0
- cumulusci/core/tasks.py +404 -0
- cumulusci/core/template_utils.py +59 -0
- cumulusci/core/tests/__init__.py +0 -0
- cumulusci/core/tests/cassettes/TestDatasetsE2E.test_datasets_e2e.yaml +215 -0
- cumulusci/core/tests/cassettes/TestDatasetsE2E.test_datasets_extract_standard_objects.yaml +199 -0
- cumulusci/core/tests/cassettes/TestDatasetsE2E.test_datasets_read_explicit_extract_declaration.yaml +3 -0
- cumulusci/core/tests/fake_remote_repo/cumulusci.yml +32 -0
- cumulusci/core/tests/fake_remote_repo/tasks/directory/example_2.py +6 -0
- cumulusci/core/tests/fake_remote_repo/tasks/example.py +43 -0
- cumulusci/core/tests/fake_remote_repo_2/cumulusci.yml +11 -0
- cumulusci/core/tests/fake_remote_repo_2/tasks/example_3.py +6 -0
- cumulusci/core/tests/test_datasets_e2e.py +386 -0
- cumulusci/core/tests/test_exceptions.py +11 -0
- cumulusci/core/tests/test_flowrunner.py +836 -0
- cumulusci/core/tests/test_github.py +942 -0
- cumulusci/core/tests/test_sfdx.py +138 -0
- cumulusci/core/tests/test_source.py +678 -0
- cumulusci/core/tests/test_tasks.py +262 -0
- cumulusci/core/tests/test_utils.py +141 -0
- cumulusci/core/tests/test_utils_merge_config.py +276 -0
- cumulusci/core/tests/test_versions.py +76 -0
- cumulusci/core/tests/untrusted_repo_child/cumulusci.yml +7 -0
- cumulusci/core/tests/untrusted_repo_child/tasks/untrusted_child.py +6 -0
- cumulusci/core/tests/untrusted_repo_parent/cumulusci.yml +26 -0
- cumulusci/core/tests/untrusted_repo_parent/tasks/untrusted_parent.py +6 -0
- cumulusci/core/tests/utils.py +116 -0
- cumulusci/core/tests/yaml/global.yaml +0 -0
- cumulusci/core/utils.py +402 -0
- cumulusci/core/versions.py +149 -0
- cumulusci/cumulusci.yml +1621 -0
- cumulusci/files/admin_profile.xml +20 -0
- cumulusci/files/delete_excludes.txt +424 -0
- cumulusci/files/templates/project/README.md +12 -0
- cumulusci/files/templates/project/cumulusci.yml +63 -0
- cumulusci/files/templates/project/dot-gitignore +60 -0
- cumulusci/files/templates/project/mapping.yml +45 -0
- cumulusci/files/templates/project/scratch_def.json +25 -0
- cumulusci/oauth/__init__.py +0 -0
- cumulusci/oauth/client.py +400 -0
- cumulusci/oauth/exceptions.py +9 -0
- cumulusci/oauth/salesforce.py +95 -0
- cumulusci/oauth/tests/__init__.py +0 -0
- cumulusci/oauth/tests/cassettes/test_get_device_code.yaml +22 -0
- cumulusci/oauth/tests/cassettes/test_get_device_oauth_token.yaml +74 -0
- cumulusci/oauth/tests/test_client.py +308 -0
- cumulusci/oauth/tests/test_salesforce.py +46 -0
- cumulusci/plugins/__init__.py +3 -0
- cumulusci/plugins/plugin_base.py +93 -0
- cumulusci/plugins/plugin_loader.py +59 -0
- cumulusci/robotframework/CumulusCI.py +340 -0
- cumulusci/robotframework/CumulusCI.robot +7 -0
- cumulusci/robotframework/Performance.py +165 -0
- cumulusci/robotframework/Salesforce.py +936 -0
- cumulusci/robotframework/Salesforce.robot +192 -0
- cumulusci/robotframework/SalesforceAPI.py +416 -0
- cumulusci/robotframework/SalesforcePlaywright.py +220 -0
- cumulusci/robotframework/SalesforcePlaywright.robot +40 -0
- cumulusci/robotframework/__init__.py +2 -0
- cumulusci/robotframework/base_library.py +39 -0
- cumulusci/robotframework/faker_mixin.py +89 -0
- cumulusci/robotframework/form_handlers.py +222 -0
- cumulusci/robotframework/javascript/cci_init.js +34 -0
- cumulusci/robotframework/javascript/cumulusci.js +4 -0
- cumulusci/robotframework/locator_manager.py +197 -0
- cumulusci/robotframework/locators_56.py +88 -0
- cumulusci/robotframework/locators_57.py +5 -0
- cumulusci/robotframework/pageobjects/BasePageObjects.py +433 -0
- cumulusci/robotframework/pageobjects/ObjectManagerPageObject.py +246 -0
- cumulusci/robotframework/pageobjects/PageObjectLibrary.py +45 -0
- cumulusci/robotframework/pageobjects/PageObjects.py +351 -0
- cumulusci/robotframework/pageobjects/__init__.py +12 -0
- cumulusci/robotframework/pageobjects/baseobjects.py +120 -0
- cumulusci/robotframework/perftests/short/collection_perf.robot +105 -0
- cumulusci/robotframework/tests/CustomObjectTestPage.py +10 -0
- cumulusci/robotframework/tests/FooTestPage.py +8 -0
- cumulusci/robotframework/tests/cumulusci/base.robot +40 -0
- cumulusci/robotframework/tests/cumulusci/bulkdata.robot +38 -0
- cumulusci/robotframework/tests/cumulusci/communities.robot +57 -0
- cumulusci/robotframework/tests/cumulusci/datagen.robot +84 -0
- cumulusci/robotframework/tests/salesforce/TestLibraryA.py +24 -0
- cumulusci/robotframework/tests/salesforce/TestLibraryB.py +20 -0
- cumulusci/robotframework/tests/salesforce/TestListener.py +93 -0
- cumulusci/robotframework/tests/salesforce/api.robot +178 -0
- cumulusci/robotframework/tests/salesforce/browsers.robot +143 -0
- cumulusci/robotframework/tests/salesforce/classic.robot +51 -0
- cumulusci/robotframework/tests/salesforce/create_contact.robot +59 -0
- cumulusci/robotframework/tests/salesforce/faker.robot +68 -0
- cumulusci/robotframework/tests/salesforce/forms.robot +172 -0
- cumulusci/robotframework/tests/salesforce/label_locator.robot +244 -0
- cumulusci/robotframework/tests/salesforce/labels.html +33 -0
- cumulusci/robotframework/tests/salesforce/locators.robot +149 -0
- cumulusci/robotframework/tests/salesforce/pageobjects/base_pageobjects.robot +100 -0
- cumulusci/robotframework/tests/salesforce/pageobjects/example_page_object.py +25 -0
- cumulusci/robotframework/tests/salesforce/pageobjects/listing_page.robot +115 -0
- cumulusci/robotframework/tests/salesforce/pageobjects/objectmanager.robot +74 -0
- cumulusci/robotframework/tests/salesforce/pageobjects/pageobjects.robot +171 -0
- cumulusci/robotframework/tests/salesforce/performance.robot +109 -0
- cumulusci/robotframework/tests/salesforce/playwright/javascript_keywords.robot +33 -0
- cumulusci/robotframework/tests/salesforce/playwright/open_test_browser.robot +48 -0
- cumulusci/robotframework/tests/salesforce/playwright/playwright.robot +24 -0
- cumulusci/robotframework/tests/salesforce/playwright/ui.robot +32 -0
- cumulusci/robotframework/tests/salesforce/populate.robot +89 -0
- cumulusci/robotframework/tests/salesforce/test_testlistener.py +37 -0
- cumulusci/robotframework/tests/salesforce/ui.robot +361 -0
- cumulusci/robotframework/tests/test_cumulusci_library.py +304 -0
- cumulusci/robotframework/tests/test_locator_manager.py +158 -0
- cumulusci/robotframework/tests/test_pageobjects.py +291 -0
- cumulusci/robotframework/tests/test_performance.py +38 -0
- cumulusci/robotframework/tests/test_salesforce.py +79 -0
- cumulusci/robotframework/tests/test_salesforce_locators.py +73 -0
- cumulusci/robotframework/tests/test_template_util.py +53 -0
- cumulusci/robotframework/tests/test_utils.py +106 -0
- cumulusci/robotframework/utils.py +283 -0
- cumulusci/salesforce_api/__init__.py +0 -0
- cumulusci/salesforce_api/exceptions.py +23 -0
- cumulusci/salesforce_api/filterable_objects.py +96 -0
- cumulusci/salesforce_api/mc_soap_envelopes.py +89 -0
- cumulusci/salesforce_api/metadata.py +721 -0
- cumulusci/salesforce_api/org_schema.py +571 -0
- cumulusci/salesforce_api/org_schema_models.py +226 -0
- cumulusci/salesforce_api/package_install.py +265 -0
- cumulusci/salesforce_api/package_zip.py +301 -0
- cumulusci/salesforce_api/rest_deploy.py +148 -0
- cumulusci/salesforce_api/retrieve_profile_api.py +301 -0
- cumulusci/salesforce_api/soap_envelopes.py +177 -0
- cumulusci/salesforce_api/tests/__init__.py +0 -0
- cumulusci/salesforce_api/tests/metadata_test_strings.py +24 -0
- cumulusci/salesforce_api/tests/test_metadata.py +1015 -0
- cumulusci/salesforce_api/tests/test_package_install.py +219 -0
- cumulusci/salesforce_api/tests/test_package_zip.py +380 -0
- cumulusci/salesforce_api/tests/test_rest_deploy.py +264 -0
- cumulusci/salesforce_api/tests/test_retrieve_profile_api.py +337 -0
- cumulusci/salesforce_api/tests/test_utils.py +124 -0
- cumulusci/salesforce_api/utils.py +51 -0
- cumulusci/schema/cumulusci.jsonschema.json +782 -0
- cumulusci/tasks/__init__.py +0 -0
- cumulusci/tasks/apex/__init__.py +0 -0
- cumulusci/tasks/apex/anon.py +157 -0
- cumulusci/tasks/apex/batch.py +180 -0
- cumulusci/tasks/apex/testrunner.py +835 -0
- cumulusci/tasks/apex/tests/cassettes/ManualEditTestApexIntegrationTests.test_run_tests__integration_test.yaml +703 -0
- cumulusci/tasks/apex/tests/test_apex_tasks.py +1558 -0
- cumulusci/tasks/base_source_control_task.py +17 -0
- cumulusci/tasks/bulkdata/__init__.py +15 -0
- cumulusci/tasks/bulkdata/base_generate_data_task.py +96 -0
- cumulusci/tasks/bulkdata/dates.py +97 -0
- cumulusci/tasks/bulkdata/delete.py +156 -0
- cumulusci/tasks/bulkdata/extract.py +441 -0
- cumulusci/tasks/bulkdata/extract_dataset_utils/calculate_dependencies.py +117 -0
- cumulusci/tasks/bulkdata/extract_dataset_utils/extract_yml.py +123 -0
- cumulusci/tasks/bulkdata/extract_dataset_utils/hardcoded_default_declarations.py +49 -0
- cumulusci/tasks/bulkdata/extract_dataset_utils/synthesize_extract_declarations.py +283 -0
- cumulusci/tasks/bulkdata/extract_dataset_utils/tests/test_extract_yml.py +142 -0
- cumulusci/tasks/bulkdata/extract_dataset_utils/tests/test_synthesize_extract_declarations.py +575 -0
- cumulusci/tasks/bulkdata/factory_utils.py +134 -0
- cumulusci/tasks/bulkdata/generate.py +4 -0
- cumulusci/tasks/bulkdata/generate_and_load_data.py +232 -0
- cumulusci/tasks/bulkdata/generate_and_load_data_from_yaml.py +19 -0
- cumulusci/tasks/bulkdata/generate_from_yaml.py +183 -0
- cumulusci/tasks/bulkdata/generate_mapping.py +434 -0
- cumulusci/tasks/bulkdata/generate_mapping_utils/dependency_map.py +169 -0
- cumulusci/tasks/bulkdata/generate_mapping_utils/extract_mapping_file_generator.py +45 -0
- cumulusci/tasks/bulkdata/generate_mapping_utils/generate_mapping_from_declarations.py +121 -0
- cumulusci/tasks/bulkdata/generate_mapping_utils/load_mapping_file_generator.py +127 -0
- cumulusci/tasks/bulkdata/generate_mapping_utils/mapping_generator_post_processes.py +53 -0
- cumulusci/tasks/bulkdata/generate_mapping_utils/mapping_transforms.py +139 -0
- cumulusci/tasks/bulkdata/generate_mapping_utils/tests/test_generate_extract_mapping_from_declarations.py +135 -0
- cumulusci/tasks/bulkdata/generate_mapping_utils/tests/test_generate_load_mapping_from_declarations.py +330 -0
- cumulusci/tasks/bulkdata/generate_mapping_utils/tests/test_mapping_generator_post_processes.py +60 -0
- cumulusci/tasks/bulkdata/generate_mapping_utils/tests/test_mapping_transforms.py +188 -0
- cumulusci/tasks/bulkdata/load.py +1196 -0
- cumulusci/tasks/bulkdata/mapping_parser.py +811 -0
- cumulusci/tasks/bulkdata/query_transformers.py +264 -0
- cumulusci/tasks/bulkdata/select_utils.py +792 -0
- cumulusci/tasks/bulkdata/snowfakery.py +753 -0
- cumulusci/tasks/bulkdata/snowfakery_utils/queue_manager.py +478 -0
- cumulusci/tasks/bulkdata/snowfakery_utils/snowfakery_run_until.py +141 -0
- cumulusci/tasks/bulkdata/snowfakery_utils/snowfakery_working_directory.py +53 -0
- cumulusci/tasks/bulkdata/snowfakery_utils/subtask_configurator.py +64 -0
- cumulusci/tasks/bulkdata/step.py +1242 -0
- cumulusci/tasks/bulkdata/tests/__init__.py +0 -0
- cumulusci/tasks/bulkdata/tests/cassettes/TestSelect.test_select_random_strategy.yaml +147 -0
- cumulusci/tasks/bulkdata/tests/cassettes/TestSelect.test_select_similarity_annoy_strategy.yaml +123 -0
- cumulusci/tasks/bulkdata/tests/cassettes/TestSelect.test_select_similarity_select_and_insert_strategy.yaml +313 -0
- cumulusci/tasks/bulkdata/tests/cassettes/TestSelect.test_select_similarity_select_and_insert_strategy_bulk.yaml +550 -0
- cumulusci/tasks/bulkdata/tests/cassettes/TestSelect.test_select_similarity_strategy.yaml +175 -0
- cumulusci/tasks/bulkdata/tests/cassettes/TestSelect.test_select_standard_strategy.yaml +147 -0
- cumulusci/tasks/bulkdata/tests/cassettes/TestSnowfakery.test_run_until_records_in_org__multiple_needed.yaml +69 -0
- cumulusci/tasks/bulkdata/tests/cassettes/TestSnowfakery.test_run_until_records_in_org__none_needed.yaml +22 -0
- cumulusci/tasks/bulkdata/tests/cassettes/TestSnowfakery.test_run_until_records_in_org__one_needed.yaml +24 -0
- cumulusci/tasks/bulkdata/tests/cassettes/TestSnowfakery.test_snowfakery_query_salesforce.yaml +25 -0
- cumulusci/tasks/bulkdata/tests/cassettes/TestUpdatesIntegrationTests.test_updates_task.yaml +80 -0
- cumulusci/tasks/bulkdata/tests/cassettes/TestUpsert.test_simple_upsert__rest.yaml +270 -0
- cumulusci/tasks/bulkdata/tests/cassettes/TestUpsert.test_upsert__rest.yaml +267 -0
- cumulusci/tasks/bulkdata/tests/cassettes/TestUpsert.test_upsert_complex_external_id_field__rest.yaml +369 -0
- cumulusci/tasks/bulkdata/tests/cassettes/TestUpsert.test_upsert_complex_external_id_field_rest__duplicate_error.yaml +204 -0
- cumulusci/tasks/bulkdata/tests/cassettes/TestUpsert.test_upsert_complex_fields__bulk.yaml +675 -0
- cumulusci/tasks/bulkdata/tests/dummy_data_factory.py +36 -0
- cumulusci/tasks/bulkdata/tests/integration_test_utils.py +49 -0
- cumulusci/tasks/bulkdata/tests/mapping-oid.yml +87 -0
- cumulusci/tasks/bulkdata/tests/mapping_after.yml +38 -0
- cumulusci/tasks/bulkdata/tests/mapping_poly.yml +34 -0
- cumulusci/tasks/bulkdata/tests/mapping_poly_incomplete.yml +20 -0
- cumulusci/tasks/bulkdata/tests/mapping_poly_wrong.yml +21 -0
- cumulusci/tasks/bulkdata/tests/mapping_select.yml +20 -0
- cumulusci/tasks/bulkdata/tests/mapping_select_invalid_strategy.yml +20 -0
- cumulusci/tasks/bulkdata/tests/mapping_select_invalid_threshold__invalid_number.yml +21 -0
- cumulusci/tasks/bulkdata/tests/mapping_select_invalid_threshold__invalid_strategy.yml +21 -0
- cumulusci/tasks/bulkdata/tests/mapping_select_invalid_threshold__non_float.yml +21 -0
- cumulusci/tasks/bulkdata/tests/mapping_select_missing_priority_fields.yml +22 -0
- cumulusci/tasks/bulkdata/tests/mapping_select_no_priority_fields.yml +18 -0
- cumulusci/tasks/bulkdata/tests/mapping_simple.yml +27 -0
- cumulusci/tasks/bulkdata/tests/mapping_v1.yml +28 -0
- cumulusci/tasks/bulkdata/tests/mapping_v2.yml +21 -0
- cumulusci/tasks/bulkdata/tests/mapping_v3.yml +32 -0
- cumulusci/tasks/bulkdata/tests/mapping_vanilla_sf.yml +69 -0
- cumulusci/tasks/bulkdata/tests/mock_data_factory_without_mapping.py +12 -0
- cumulusci/tasks/bulkdata/tests/person_accounts.yml +23 -0
- cumulusci/tasks/bulkdata/tests/person_accounts_minimal.yml +15 -0
- cumulusci/tasks/bulkdata/tests/recordtypes.yml +8 -0
- cumulusci/tasks/bulkdata/tests/recordtypes_2.yml +6 -0
- cumulusci/tasks/bulkdata/tests/recordtypes_with_ispersontype.yml +8 -0
- cumulusci/tasks/bulkdata/tests/snowfakery/child/child2.yml +3 -0
- cumulusci/tasks/bulkdata/tests/snowfakery/child.yml +4 -0
- cumulusci/tasks/bulkdata/tests/snowfakery/gen_npsp_standard_objects.recipe.yml +89 -0
- cumulusci/tasks/bulkdata/tests/snowfakery/include_parent.yml +3 -0
- cumulusci/tasks/bulkdata/tests/snowfakery/npsp_standard_objects_macros.yml +34 -0
- cumulusci/tasks/bulkdata/tests/snowfakery/options.recipe.yml +6 -0
- cumulusci/tasks/bulkdata/tests/snowfakery/query_snowfakery.recipe.yml +16 -0
- cumulusci/tasks/bulkdata/tests/snowfakery/sf_standard_object_macros.yml +83 -0
- cumulusci/tasks/bulkdata/tests/snowfakery/simple_snowfakery.load.yml +2 -0
- cumulusci/tasks/bulkdata/tests/snowfakery/simple_snowfakery.recipe.yml +13 -0
- cumulusci/tasks/bulkdata/tests/snowfakery/simple_snowfakery_2.load.yml +5 -0
- cumulusci/tasks/bulkdata/tests/snowfakery/simple_snowfakery_channels.load.yml +13 -0
- cumulusci/tasks/bulkdata/tests/snowfakery/simple_snowfakery_channels.recipe.yml +12 -0
- cumulusci/tasks/bulkdata/tests/snowfakery/simple_snowfakery_channels_2.load.yml +13 -0
- cumulusci/tasks/bulkdata/tests/snowfakery/unique_values.recipe.yml +4 -0
- cumulusci/tasks/bulkdata/tests/snowfakery/upsert.recipe.yml +23 -0
- cumulusci/tasks/bulkdata/tests/snowfakery/upsert_2.recipe.yml +29 -0
- cumulusci/tasks/bulkdata/tests/snowfakery/upsert_before.yml +10 -0
- cumulusci/tasks/bulkdata/tests/test_base_generate_data_tasks.py +61 -0
- cumulusci/tasks/bulkdata/tests/test_dates.py +99 -0
- cumulusci/tasks/bulkdata/tests/test_delete.py +404 -0
- cumulusci/tasks/bulkdata/tests/test_extract.py +1311 -0
- cumulusci/tasks/bulkdata/tests/test_factory_utils.py +55 -0
- cumulusci/tasks/bulkdata/tests/test_generate_and_load.py +252 -0
- cumulusci/tasks/bulkdata/tests/test_generate_from_snowfakery_task.py +343 -0
- cumulusci/tasks/bulkdata/tests/test_generatemapping.py +1039 -0
- cumulusci/tasks/bulkdata/tests/test_load.py +3175 -0
- cumulusci/tasks/bulkdata/tests/test_mapping_parser.py +1658 -0
- cumulusci/tasks/bulkdata/tests/test_query_db__joins_self_lookups.yml +12 -0
- cumulusci/tasks/bulkdata/tests/test_query_db_joins_lookups.yml +26 -0
- cumulusci/tasks/bulkdata/tests/test_query_db_joins_lookups_select.yml +48 -0
- cumulusci/tasks/bulkdata/tests/test_select.py +171 -0
- cumulusci/tasks/bulkdata/tests/test_select_utils.py +1057 -0
- cumulusci/tasks/bulkdata/tests/test_snowfakery.py +1153 -0
- cumulusci/tasks/bulkdata/tests/test_step.py +3957 -0
- cumulusci/tasks/bulkdata/tests/test_updates.py +513 -0
- cumulusci/tasks/bulkdata/tests/test_upsert.py +1015 -0
- cumulusci/tasks/bulkdata/tests/test_utils.py +158 -0
- cumulusci/tasks/bulkdata/tests/testdata.db +0 -0
- cumulusci/tasks/bulkdata/tests/update_describe.py +50 -0
- cumulusci/tasks/bulkdata/tests/update_person_accounts.yml +23 -0
- cumulusci/tasks/bulkdata/tests/utils.py +114 -0
- cumulusci/tasks/bulkdata/update_data.py +260 -0
- cumulusci/tasks/bulkdata/upsert_utils.py +130 -0
- cumulusci/tasks/bulkdata/utils.py +249 -0
- cumulusci/tasks/command.py +178 -0
- cumulusci/tasks/connectedapp.py +186 -0
- cumulusci/tasks/create_package_version.py +778 -0
- cumulusci/tasks/datadictionary.py +745 -0
- cumulusci/tasks/dx_convert_from.py +26 -0
- cumulusci/tasks/github/__init__.py +17 -0
- cumulusci/tasks/github/base.py +16 -0
- cumulusci/tasks/github/commit_status.py +13 -0
- cumulusci/tasks/github/merge.py +11 -0
- cumulusci/tasks/github/publish.py +11 -0
- cumulusci/tasks/github/pull_request.py +11 -0
- cumulusci/tasks/github/release.py +11 -0
- cumulusci/tasks/github/release_report.py +11 -0
- cumulusci/tasks/github/tag.py +11 -0
- cumulusci/tasks/github/tests/__init__.py +0 -0
- cumulusci/tasks/github/tests/test_util.py +202 -0
- cumulusci/tasks/github/tests/test_vcs_migration.py +44 -0
- cumulusci/tasks/github/tests/util_github_api.py +666 -0
- cumulusci/tasks/github/util.py +252 -0
- cumulusci/tasks/marketing_cloud/__init__.py +0 -0
- cumulusci/tasks/marketing_cloud/api.py +188 -0
- cumulusci/tasks/marketing_cloud/base.py +38 -0
- cumulusci/tasks/marketing_cloud/deploy.py +345 -0
- cumulusci/tasks/marketing_cloud/get_user_info.py +40 -0
- cumulusci/tasks/marketing_cloud/mc_constants.py +1 -0
- cumulusci/tasks/marketing_cloud/tests/__init__.py +0 -0
- cumulusci/tasks/marketing_cloud/tests/conftest.py +46 -0
- cumulusci/tasks/marketing_cloud/tests/expected-payload.json +110 -0
- cumulusci/tasks/marketing_cloud/tests/test_api.py +97 -0
- cumulusci/tasks/marketing_cloud/tests/test_api_soap_envelopes.py +145 -0
- cumulusci/tasks/marketing_cloud/tests/test_base.py +14 -0
- cumulusci/tasks/marketing_cloud/tests/test_deploy.py +400 -0
- cumulusci/tasks/marketing_cloud/tests/test_get_user_info.py +141 -0
- cumulusci/tasks/marketing_cloud/tests/validation-response.json +39 -0
- cumulusci/tasks/metadata/__init__.py +0 -0
- cumulusci/tasks/metadata/ee_src.py +94 -0
- cumulusci/tasks/metadata/managed_src.py +100 -0
- cumulusci/tasks/metadata/metadata_map.yml +868 -0
- cumulusci/tasks/metadata/modify.py +99 -0
- cumulusci/tasks/metadata/package.py +684 -0
- cumulusci/tasks/metadata/tests/__init__.py +0 -0
- cumulusci/tasks/metadata/tests/package_metadata/namespaced_report_folder/.hidden/.keep +0 -0
- cumulusci/tasks/metadata/tests/package_metadata/namespaced_report_folder/destructiveChanges.xml +9 -0
- cumulusci/tasks/metadata/tests/package_metadata/namespaced_report_folder/package.xml +9 -0
- cumulusci/tasks/metadata/tests/package_metadata/namespaced_report_folder/package_install_uninstall.xml +11 -0
- cumulusci/tasks/metadata/tests/package_metadata/namespaced_report_folder/reports/namespace__TestFolder/TestReport.report +3 -0
- cumulusci/tasks/metadata/tests/sample_package.xml +9 -0
- cumulusci/tasks/metadata/tests/test_ee_src.py +112 -0
- cumulusci/tasks/metadata/tests/test_managed_src.py +111 -0
- cumulusci/tasks/metadata/tests/test_modify.py +123 -0
- cumulusci/tasks/metadata/tests/test_package.py +476 -0
- cumulusci/tasks/metadata_etl/__init__.py +29 -0
- cumulusci/tasks/metadata_etl/base.py +436 -0
- cumulusci/tasks/metadata_etl/duplicate_rules.py +24 -0
- cumulusci/tasks/metadata_etl/field_sets.py +70 -0
- cumulusci/tasks/metadata_etl/help_text.py +92 -0
- cumulusci/tasks/metadata_etl/layouts.py +550 -0
- cumulusci/tasks/metadata_etl/objects.py +68 -0
- cumulusci/tasks/metadata_etl/permissions.py +167 -0
- cumulusci/tasks/metadata_etl/picklists.py +221 -0
- cumulusci/tasks/metadata_etl/remote_site_settings.py +99 -0
- cumulusci/tasks/metadata_etl/sharing.py +138 -0
- cumulusci/tasks/metadata_etl/tests/test_base.py +512 -0
- cumulusci/tasks/metadata_etl/tests/test_duplicate_rules.py +22 -0
- cumulusci/tasks/metadata_etl/tests/test_field_sets.py +156 -0
- cumulusci/tasks/metadata_etl/tests/test_help_text.py +387 -0
- cumulusci/tasks/metadata_etl/tests/test_ip_ranges.py +85 -0
- cumulusci/tasks/metadata_etl/tests/test_layouts.py +858 -0
- cumulusci/tasks/metadata_etl/tests/test_objects.py +236 -0
- cumulusci/tasks/metadata_etl/tests/test_permissions.py +223 -0
- cumulusci/tasks/metadata_etl/tests/test_picklists.py +547 -0
- cumulusci/tasks/metadata_etl/tests/test_remote_site_settings.py +46 -0
- cumulusci/tasks/metadata_etl/tests/test_sharing.py +333 -0
- cumulusci/tasks/metadata_etl/tests/test_value_sets.py +298 -0
- cumulusci/tasks/metadata_etl/value_sets.py +106 -0
- cumulusci/tasks/metadeploy.py +393 -0
- cumulusci/tasks/metaxml.py +88 -0
- cumulusci/tasks/preflight/__init__.py +0 -0
- cumulusci/tasks/preflight/dataset_load.py +49 -0
- cumulusci/tasks/preflight/licenses.py +86 -0
- cumulusci/tasks/preflight/packages.py +14 -0
- cumulusci/tasks/preflight/permsets.py +23 -0
- cumulusci/tasks/preflight/recordtypes.py +16 -0
- cumulusci/tasks/preflight/retrieve_tasks.py +30 -0
- cumulusci/tasks/preflight/settings.py +77 -0
- cumulusci/tasks/preflight/sobjects.py +202 -0
- cumulusci/tasks/preflight/tests/test_dataset_load.py +85 -0
- cumulusci/tasks/preflight/tests/test_licenses.py +174 -0
- cumulusci/tasks/preflight/tests/test_packages.py +14 -0
- cumulusci/tasks/preflight/tests/test_permset_preflights.py +51 -0
- cumulusci/tasks/preflight/tests/test_recordtypes.py +30 -0
- cumulusci/tasks/preflight/tests/test_retrieve_tasks.py +62 -0
- cumulusci/tasks/preflight/tests/test_settings.py +130 -0
- cumulusci/tasks/preflight/tests/test_sobjects.py +231 -0
- cumulusci/tasks/push/README.md +59 -0
- cumulusci/tasks/push/__init__.py +0 -0
- cumulusci/tasks/push/push_api.py +659 -0
- cumulusci/tasks/push/pushfails.py +136 -0
- cumulusci/tasks/push/tasks.py +476 -0
- cumulusci/tasks/push/tests/conftest.py +263 -0
- cumulusci/tasks/push/tests/test_push_api.py +951 -0
- cumulusci/tasks/push/tests/test_push_tasks.py +659 -0
- cumulusci/tasks/release_notes/README.md +63 -0
- cumulusci/tasks/release_notes/__init__.py +0 -0
- cumulusci/tasks/release_notes/exceptions.py +5 -0
- cumulusci/tasks/release_notes/generator.py +137 -0
- cumulusci/tasks/release_notes/parser.py +232 -0
- cumulusci/tasks/release_notes/provider.py +44 -0
- cumulusci/tasks/release_notes/task.py +300 -0
- cumulusci/tasks/release_notes/tests/__init__.py +0 -0
- cumulusci/tasks/release_notes/tests/change_notes/full/example1.md +17 -0
- cumulusci/tasks/release_notes/tests/change_notes/multi/1.txt +1 -0
- cumulusci/tasks/release_notes/tests/change_notes/multi/2.txt +1 -0
- cumulusci/tasks/release_notes/tests/change_notes/multi/3.txt +1 -0
- cumulusci/tasks/release_notes/tests/change_notes/single/1.txt +1 -0
- cumulusci/tasks/release_notes/tests/test_generator.py +582 -0
- cumulusci/tasks/release_notes/tests/test_parser.py +867 -0
- cumulusci/tasks/release_notes/tests/test_provider.py +512 -0
- cumulusci/tasks/release_notes/tests/test_task.py +461 -0
- cumulusci/tasks/release_notes/tests/utils.py +153 -0
- cumulusci/tasks/robotframework/__init__.py +3 -0
- cumulusci/tasks/robotframework/debugger/DebugListener.py +100 -0
- cumulusci/tasks/robotframework/debugger/__init__.py +10 -0
- cumulusci/tasks/robotframework/debugger/model.py +87 -0
- cumulusci/tasks/robotframework/debugger/ui.py +259 -0
- cumulusci/tasks/robotframework/libdoc.py +269 -0
- cumulusci/tasks/robotframework/robotframework.py +392 -0
- cumulusci/tasks/robotframework/stylesheet.css +130 -0
- cumulusci/tasks/robotframework/template.html +109 -0
- cumulusci/tasks/robotframework/tests/TestLibrary.py +18 -0
- cumulusci/tasks/robotframework/tests/TestPageObjects.py +31 -0
- cumulusci/tasks/robotframework/tests/TestResource.robot +8 -0
- cumulusci/tasks/robotframework/tests/failing_tests.robot +16 -0
- cumulusci/tasks/robotframework/tests/performance.robot +23 -0
- cumulusci/tasks/robotframework/tests/test_browser_proxies.py +137 -0
- cumulusci/tasks/robotframework/tests/test_debugger.py +360 -0
- cumulusci/tasks/robotframework/tests/test_robot_parallel.py +141 -0
- cumulusci/tasks/robotframework/tests/test_robotframework.py +860 -0
- cumulusci/tasks/salesforce/BaseRetrieveMetadata.py +58 -0
- cumulusci/tasks/salesforce/BaseSalesforceApiTask.py +45 -0
- cumulusci/tasks/salesforce/BaseSalesforceMetadataApiTask.py +18 -0
- cumulusci/tasks/salesforce/BaseSalesforceTask.py +4 -0
- cumulusci/tasks/salesforce/BaseUninstallMetadata.py +41 -0
- cumulusci/tasks/salesforce/CreateCommunity.py +124 -0
- cumulusci/tasks/salesforce/CreatePackage.py +29 -0
- cumulusci/tasks/salesforce/Deploy.py +240 -0
- cumulusci/tasks/salesforce/DeployBundles.py +88 -0
- cumulusci/tasks/salesforce/DescribeMetadataTypes.py +26 -0
- cumulusci/tasks/salesforce/EnsureRecordTypes.py +202 -0
- cumulusci/tasks/salesforce/GetInstalledPackages.py +8 -0
- cumulusci/tasks/salesforce/ListCommunities.py +40 -0
- cumulusci/tasks/salesforce/ListCommunityTemplates.py +19 -0
- cumulusci/tasks/salesforce/PublishCommunity.py +62 -0
- cumulusci/tasks/salesforce/RetrievePackaged.py +41 -0
- cumulusci/tasks/salesforce/RetrieveReportsAndDashboards.py +82 -0
- cumulusci/tasks/salesforce/RetrieveUnpackaged.py +36 -0
- cumulusci/tasks/salesforce/SOQLQuery.py +39 -0
- cumulusci/tasks/salesforce/UninstallLocal.py +15 -0
- cumulusci/tasks/salesforce/UninstallLocalBundles.py +28 -0
- cumulusci/tasks/salesforce/UninstallLocalNamespacedBundles.py +58 -0
- cumulusci/tasks/salesforce/UninstallPackage.py +32 -0
- cumulusci/tasks/salesforce/UninstallPackaged.py +56 -0
- cumulusci/tasks/salesforce/UpdateAdminProfile.py +8 -0
- cumulusci/tasks/salesforce/__init__.py +79 -0
- cumulusci/tasks/salesforce/activate_flow.py +74 -0
- cumulusci/tasks/salesforce/check_components.py +324 -0
- cumulusci/tasks/salesforce/composite.py +142 -0
- cumulusci/tasks/salesforce/create_permission_sets.py +35 -0
- cumulusci/tasks/salesforce/custom_settings.py +134 -0
- cumulusci/tasks/salesforce/custom_settings_wait.py +132 -0
- cumulusci/tasks/salesforce/enable_prediction.py +107 -0
- cumulusci/tasks/salesforce/insert_record.py +40 -0
- cumulusci/tasks/salesforce/install_package_version.py +242 -0
- cumulusci/tasks/salesforce/license_preflights.py +8 -0
- cumulusci/tasks/salesforce/network_member_group.py +178 -0
- cumulusci/tasks/salesforce/nonsourcetracking.py +228 -0
- cumulusci/tasks/salesforce/org_settings.py +193 -0
- cumulusci/tasks/salesforce/package_upload.py +328 -0
- cumulusci/tasks/salesforce/profiles.py +74 -0
- cumulusci/tasks/salesforce/promote_package_version.py +376 -0
- cumulusci/tasks/salesforce/retrieve_profile.py +195 -0
- cumulusci/tasks/salesforce/salesforce_files.py +244 -0
- cumulusci/tasks/salesforce/sourcetracking.py +507 -0
- cumulusci/tasks/salesforce/tests/__init__.py +3 -0
- cumulusci/tasks/salesforce/tests/test_CreateCommunity.py +278 -0
- cumulusci/tasks/salesforce/tests/test_CreatePackage.py +22 -0
- cumulusci/tasks/salesforce/tests/test_Deploy.py +470 -0
- cumulusci/tasks/salesforce/tests/test_DeployBundles.py +76 -0
- cumulusci/tasks/salesforce/tests/test_EnsureRecordTypes.py +345 -0
- cumulusci/tasks/salesforce/tests/test_ListCommunities.py +84 -0
- cumulusci/tasks/salesforce/tests/test_ListCommunityTemplates.py +49 -0
- cumulusci/tasks/salesforce/tests/test_PackageUpload.py +547 -0
- cumulusci/tasks/salesforce/tests/test_ProfileGrantAllAccess.py +699 -0
- cumulusci/tasks/salesforce/tests/test_PublishCommunity.py +181 -0
- cumulusci/tasks/salesforce/tests/test_RetrievePackaged.py +24 -0
- cumulusci/tasks/salesforce/tests/test_RetrieveReportsAndDashboards.py +56 -0
- cumulusci/tasks/salesforce/tests/test_RetrieveUnpackaged.py +21 -0
- cumulusci/tasks/salesforce/tests/test_SOQLQuery.py +30 -0
- cumulusci/tasks/salesforce/tests/test_UninstallLocal.py +15 -0
- cumulusci/tasks/salesforce/tests/test_UninstallLocalBundles.py +19 -0
- cumulusci/tasks/salesforce/tests/test_UninstallLocalNamespacedBundles.py +22 -0
- cumulusci/tasks/salesforce/tests/test_UninstallPackage.py +19 -0
- cumulusci/tasks/salesforce/tests/test_UninstallPackaged.py +66 -0
- cumulusci/tasks/salesforce/tests/test_UninstallPackagedIncremental.py +127 -0
- cumulusci/tasks/salesforce/tests/test_activate_flow.py +132 -0
- cumulusci/tasks/salesforce/tests/test_base_tasks.py +110 -0
- cumulusci/tasks/salesforce/tests/test_check_components.py +445 -0
- cumulusci/tasks/salesforce/tests/test_composite.py +250 -0
- cumulusci/tasks/salesforce/tests/test_create_permission_sets.py +41 -0
- cumulusci/tasks/salesforce/tests/test_custom_settings.py +227 -0
- cumulusci/tasks/salesforce/tests/test_custom_settings_wait.py +174 -0
- cumulusci/tasks/salesforce/tests/test_describemetadatatypes.py +18 -0
- cumulusci/tasks/salesforce/tests/test_enable_prediction.py +240 -0
- cumulusci/tasks/salesforce/tests/test_insert_record.py +110 -0
- cumulusci/tasks/salesforce/tests/test_install_package_version.py +464 -0
- cumulusci/tasks/salesforce/tests/test_network_member_group.py +444 -0
- cumulusci/tasks/salesforce/tests/test_nonsourcetracking.py +235 -0
- cumulusci/tasks/salesforce/tests/test_org_settings.py +407 -0
- cumulusci/tasks/salesforce/tests/test_profiles.py +202 -0
- cumulusci/tasks/salesforce/tests/test_retrieve_profile.py +287 -0
- cumulusci/tasks/salesforce/tests/test_salesforce_files.py +228 -0
- cumulusci/tasks/salesforce/tests/test_sourcetracking.py +350 -0
- cumulusci/tasks/salesforce/tests/test_trigger_handlers.py +300 -0
- cumulusci/tasks/salesforce/tests/test_update_dependencies.py +509 -0
- cumulusci/tasks/salesforce/tests/util.py +79 -0
- cumulusci/tasks/salesforce/trigger_handlers.py +119 -0
- cumulusci/tasks/salesforce/uninstall_packaged_incremental.py +136 -0
- cumulusci/tasks/salesforce/update_dependencies.py +290 -0
- cumulusci/tasks/salesforce/update_profile.py +339 -0
- cumulusci/tasks/salesforce/users/permsets.py +227 -0
- cumulusci/tasks/salesforce/users/photos.py +162 -0
- cumulusci/tasks/salesforce/users/tests/photo.mock.txt +1 -0
- cumulusci/tasks/salesforce/users/tests/test_permsets.py +950 -0
- cumulusci/tasks/salesforce/users/tests/test_photos.py +373 -0
- cumulusci/tasks/sample_data/capture_sample_data.py +77 -0
- cumulusci/tasks/sample_data/load_sample_data.py +85 -0
- cumulusci/tasks/sample_data/test_capture_sample_data.py +117 -0
- cumulusci/tasks/sample_data/test_load_sample_data.py +121 -0
- cumulusci/tasks/sfdx.py +83 -0
- cumulusci/tasks/tests/__init__.py +1 -0
- cumulusci/tasks/tests/conftest.py +30 -0
- cumulusci/tasks/tests/test_command.py +129 -0
- cumulusci/tasks/tests/test_connectedapp.py +236 -0
- cumulusci/tasks/tests/test_create_package_version.py +847 -0
- cumulusci/tasks/tests/test_datadictionary.py +1575 -0
- cumulusci/tasks/tests/test_dx_convert_from.py +60 -0
- cumulusci/tasks/tests/test_metadeploy.py +624 -0
- cumulusci/tasks/tests/test_metaxml.py +99 -0
- cumulusci/tasks/tests/test_promote_package_version.py +488 -0
- cumulusci/tasks/tests/test_pushfails.py +96 -0
- cumulusci/tasks/tests/test_salesforce.py +72 -0
- cumulusci/tasks/tests/test_sfdx.py +105 -0
- cumulusci/tasks/tests/test_util.py +207 -0
- cumulusci/tasks/util.py +261 -0
- cumulusci/tasks/vcs/__init__.py +19 -0
- cumulusci/tasks/vcs/commit_status.py +58 -0
- cumulusci/tasks/vcs/create_commit_status.py +37 -0
- cumulusci/tasks/vcs/download_extract.py +199 -0
- cumulusci/tasks/vcs/merge.py +298 -0
- cumulusci/tasks/vcs/publish.py +207 -0
- cumulusci/tasks/vcs/pull_request.py +9 -0
- cumulusci/tasks/vcs/release.py +134 -0
- cumulusci/tasks/vcs/release_report.py +105 -0
- cumulusci/tasks/vcs/tag.py +31 -0
- cumulusci/tasks/vcs/tests/github/test_commit_status.py +196 -0
- cumulusci/tasks/vcs/tests/github/test_download_extract.py +896 -0
- cumulusci/tasks/vcs/tests/github/test_merge.py +1118 -0
- cumulusci/tasks/vcs/tests/github/test_publish.py +823 -0
- cumulusci/tasks/vcs/tests/github/test_pull_request.py +29 -0
- cumulusci/tasks/vcs/tests/github/test_release.py +390 -0
- cumulusci/tasks/vcs/tests/github/test_release_report.py +109 -0
- cumulusci/tasks/vcs/tests/github/test_tag.py +90 -0
- cumulusci/tasks/vlocity/exceptions.py +2 -0
- cumulusci/tasks/vlocity/tests/test_vlocity.py +283 -0
- cumulusci/tasks/vlocity/vlocity.py +342 -0
- cumulusci/tests/__init__.py +1 -0
- cumulusci/tests/cassettes/GET_sobjects_Account_PersonAccount_describe.yaml +18 -0
- cumulusci/tests/cassettes/TestIntegrationInfrastructure.test_integration_tests.yaml +19 -0
- cumulusci/tests/pytest_plugins/pytest_sf_orgconnect.py +307 -0
- cumulusci/tests/pytest_plugins/pytest_sf_vcr.py +275 -0
- cumulusci/tests/pytest_plugins/pytest_sf_vcr_serializer.py +160 -0
- cumulusci/tests/pytest_plugins/pytest_typeguard.py +5 -0
- cumulusci/tests/pytest_plugins/test_vcr_string_compressor.py +49 -0
- cumulusci/tests/pytest_plugins/vcr_string_compressor.py +97 -0
- cumulusci/tests/shared_cassettes/GET_sobjects_Account_describe.yaml +18 -0
- cumulusci/tests/shared_cassettes/GET_sobjects_Case_describe.yaml +18 -0
- cumulusci/tests/shared_cassettes/GET_sobjects_Contact_describe.yaml +4838 -0
- cumulusci/tests/shared_cassettes/GET_sobjects_Custom__c_describe.yaml +242 -0
- cumulusci/tests/shared_cassettes/GET_sobjects_Event_describe.yaml +19 -0
- cumulusci/tests/shared_cassettes/GET_sobjects_Global_describe.yaml +1338 -0
- cumulusci/tests/shared_cassettes/GET_sobjects_Lead_describe.yaml +18 -0
- cumulusci/tests/shared_cassettes/GET_sobjects_OpportunityContactRole_describe.yaml +34 -0
- cumulusci/tests/shared_cassettes/GET_sobjects_Opportunity_describe.yaml +1261 -0
- cumulusci/tests/shared_cassettes/GET_sobjects_Organization.yaml +49 -0
- cumulusci/tests/shared_cassettes/vcr_string_templates/batchInfoList_xml.tpl +15 -0
- cumulusci/tests/shared_cassettes/vcr_string_templates/batchInfo_xml.tpl +13 -0
- cumulusci/tests/shared_cassettes/vcr_string_templates/jobInfo_insert_xml.tpl +24 -0
- cumulusci/tests/shared_cassettes/vcr_string_templates/jobInfo_upsert_xml.tpl +25 -0
- cumulusci/tests/test_entry_points.py +20 -0
- cumulusci/tests/test_integration_infrastructure.py +131 -0
- cumulusci/tests/test_main.py +9 -0
- cumulusci/tests/test_schema.py +32 -0
- cumulusci/tests/test_utils.py +657 -0
- cumulusci/tests/test_vcr_serializer.py +134 -0
- cumulusci/tests/uncompressed_cassette.yaml +83 -0
- cumulusci/tests/util.py +344 -0
- cumulusci/utils/__init__.py +731 -0
- cumulusci/utils/classutils.py +9 -0
- cumulusci/utils/collections.py +32 -0
- cumulusci/utils/deprecation.py +11 -0
- cumulusci/utils/encryption.py +31 -0
- cumulusci/utils/fileutils.py +295 -0
- cumulusci/utils/git.py +142 -0
- cumulusci/utils/http/multi_request.py +214 -0
- cumulusci/utils/http/requests_utils.py +103 -0
- cumulusci/utils/http/tests/cassettes/ManualEditTestCompositeParallelSalesforce.test_http_headers.yaml +32 -0
- cumulusci/utils/http/tests/cassettes/TestCompositeParallelSalesforce.test_composite_parallel_salesforce.yaml +65 -0
- cumulusci/utils/http/tests/cassettes/TestCompositeParallelSalesforce.test_errors.yaml +24 -0
- cumulusci/utils/http/tests/cassettes/TestCompositeParallelSalesforce.test_reference_ids.yaml +49 -0
- cumulusci/utils/http/tests/test_multi_request.py +255 -0
- cumulusci/utils/iterators.py +21 -0
- cumulusci/utils/logging.py +128 -0
- cumulusci/utils/metaprogramming.py +10 -0
- cumulusci/utils/options.py +138 -0
- cumulusci/utils/parallel/queries_in_parallel/run_queries_in_parallel.py +29 -0
- cumulusci/utils/parallel/queries_in_parallel/tests/test_run_queries_in_parallel.py +50 -0
- cumulusci/utils/parallel/task_worker_queues/parallel_worker.py +238 -0
- cumulusci/utils/parallel/task_worker_queues/parallel_worker_queue.py +243 -0
- cumulusci/utils/parallel/task_worker_queues/tests/test_parallel_worker.py +353 -0
- cumulusci/utils/salesforce/count_sobjects.py +46 -0
- cumulusci/utils/salesforce/soql.py +17 -0
- cumulusci/utils/salesforce/tests/cassettes/ManualEdit_TestCountSObjects.test_count_sobjects__network_errors.yaml +23 -0
- cumulusci/utils/salesforce/tests/cassettes/TestCountSObjects.test_count_sobjects__errors.yaml +33 -0
- cumulusci/utils/salesforce/tests/cassettes/TestCountSObjects.test_count_sobjects_simple.yaml +29 -0
- cumulusci/utils/salesforce/tests/test_count_sobjects.py +29 -0
- cumulusci/utils/salesforce/tests/test_soql.py +30 -0
- cumulusci/utils/tests/cassettes/ManualEditTestDescribeOrg.test_minimal_schema.yaml +36 -0
- cumulusci/utils/tests/cassettes/ManualEdit_test_describe_to_sql.yaml +191 -0
- cumulusci/utils/tests/test_fileutils.py +284 -0
- cumulusci/utils/tests/test_git.py +85 -0
- cumulusci/utils/tests/test_logging.py +70 -0
- cumulusci/utils/tests/test_option_parsing.py +188 -0
- cumulusci/utils/tests/test_org_schema.py +691 -0
- cumulusci/utils/tests/test_org_schema_models.py +79 -0
- cumulusci/utils/tests/test_waiting.py +25 -0
- cumulusci/utils/version_strings.py +391 -0
- cumulusci/utils/waiting.py +42 -0
- cumulusci/utils/xml/__init__.py +91 -0
- cumulusci/utils/xml/metadata_tree.py +299 -0
- cumulusci/utils/xml/robot_xml.py +114 -0
- cumulusci/utils/xml/salesforce_encoding.py +100 -0
- cumulusci/utils/xml/test/test_metadata_tree.py +251 -0
- cumulusci/utils/xml/test/test_salesforce_encoding.py +173 -0
- cumulusci/utils/yaml/cumulusci_yml.py +401 -0
- cumulusci/utils/yaml/model_parser.py +156 -0
- cumulusci/utils/yaml/safer_loader.py +74 -0
- cumulusci/utils/yaml/tests/bad_cci.yml +5 -0
- cumulusci/utils/yaml/tests/cassettes/TestCumulusciYml.test_validate_url__with_errors.yaml +20 -0
- cumulusci/utils/yaml/tests/test_cumulusci_yml.py +286 -0
- cumulusci/utils/yaml/tests/test_model_parser.py +175 -0
- cumulusci/utils/yaml/tests/test_safer_loader.py +88 -0
- cumulusci/utils/ziputils.py +61 -0
- cumulusci/vcs/base.py +143 -0
- cumulusci/vcs/bootstrap.py +272 -0
- cumulusci/vcs/github/__init__.py +24 -0
- cumulusci/vcs/github/adapter.py +689 -0
- cumulusci/vcs/github/release_notes/generator.py +219 -0
- cumulusci/vcs/github/release_notes/parser.py +151 -0
- cumulusci/vcs/github/release_notes/provider.py +143 -0
- cumulusci/vcs/github/service.py +569 -0
- cumulusci/vcs/github/tests/test_adapter.py +138 -0
- cumulusci/vcs/github/tests/test_service.py +408 -0
- cumulusci/vcs/models.py +586 -0
- cumulusci/vcs/tests/conftest.py +41 -0
- cumulusci/vcs/tests/dummy_service.py +241 -0
- cumulusci/vcs/tests/test_vcs_base.py +687 -0
- cumulusci/vcs/tests/test_vcs_bootstrap.py +727 -0
- cumulusci/vcs/utils/__init__.py +31 -0
- cumulusci/vcs/vcs_source.py +287 -0
- cumulusci_plus-5.0.0.dist-info/METADATA +145 -0
- cumulusci_plus-5.0.0.dist-info/RECORD +744 -0
- cumulusci_plus-5.0.0.dist-info/WHEEL +4 -0
- cumulusci_plus-5.0.0.dist-info/entry_points.txt +3 -0
- cumulusci_plus-5.0.0.dist-info/licenses/AUTHORS.rst +41 -0
- cumulusci_plus-5.0.0.dist-info/licenses/LICENSE +30 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
*** Settings ***
|
|
2
|
+
Documentation
|
|
3
|
+
... Tests for auto-detecting classic mode in a scratch org
|
|
4
|
+
|
|
5
|
+
Resource cumulusci/robotframework/Salesforce.robot
|
|
6
|
+
Library cumulusci/robotframework/tests/salesforce/TestListener.py
|
|
7
|
+
|
|
8
|
+
Suite Setup Run keywords
|
|
9
|
+
... Get URLs for switching
|
|
10
|
+
... AND Open test browser wait=False
|
|
11
|
+
... AND Switch to classic
|
|
12
|
+
|
|
13
|
+
Suite Teardown Run keywords
|
|
14
|
+
... Switch to lightning
|
|
15
|
+
... AND Close all browsers
|
|
16
|
+
|
|
17
|
+
*** Keywords ***
|
|
18
|
+
Get current user experience
|
|
19
|
+
log not implemented yet
|
|
20
|
+
|
|
21
|
+
Switch to classic
|
|
22
|
+
Go to ${switcher classic url}
|
|
23
|
+
Wait for aura
|
|
24
|
+
|
|
25
|
+
Switch to lightning
|
|
26
|
+
${org info}= Get org info
|
|
27
|
+
Go to ${switcher lex url}
|
|
28
|
+
Wait for aura
|
|
29
|
+
|
|
30
|
+
Get urls for switching
|
|
31
|
+
${org info}= Get org info
|
|
32
|
+
set suite variable ${switcher lex url}
|
|
33
|
+
... ${org info['instance_url']}/ltng/switcher?destination=lex
|
|
34
|
+
set suite variable ${switcher classic url}
|
|
35
|
+
... ${org info['instance_url']}/ltng/switcher?destination=classic
|
|
36
|
+
|
|
37
|
+
*** Test Cases ***
|
|
38
|
+
Auto-switch to lightning
|
|
39
|
+
[Setup] Run keywords
|
|
40
|
+
... Close all browsers
|
|
41
|
+
... Reset test listener keyword log
|
|
42
|
+
... Reset test listener message log
|
|
43
|
+
|
|
44
|
+
Open Test Browser
|
|
45
|
+
Assert keyword status
|
|
46
|
+
... PASS
|
|
47
|
+
... cumulusci.robotframework.Salesforce.Wait Until Salesforce Is Ready
|
|
48
|
+
... timeout=180
|
|
49
|
+
|
|
50
|
+
Assert robot log It appears we are on a classic page WARN
|
|
51
|
+
capture page screenshot
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
*** Settings ***
|
|
2
|
+
|
|
3
|
+
Resource cumulusci/robotframework/Salesforce.robot
|
|
4
|
+
Library cumulusci.robotframework.PageObjects
|
|
5
|
+
|
|
6
|
+
Suite Setup Open Test Browser
|
|
7
|
+
Suite Teardown Delete Records and Close Browser
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
*** Test Cases ***
|
|
11
|
+
|
|
12
|
+
Via API
|
|
13
|
+
${first_name} = Get fake data first_name
|
|
14
|
+
${last_name} = Get fake data last_name
|
|
15
|
+
|
|
16
|
+
${contact_id} = Salesforce Insert Contact
|
|
17
|
+
... FirstName=${first_name}
|
|
18
|
+
... LastName=${last_name}
|
|
19
|
+
|
|
20
|
+
&{contact} = Salesforce Get Contact ${contact_id}
|
|
21
|
+
Validate Contact ${contact_id} ${first_name} ${last_name}
|
|
22
|
+
|
|
23
|
+
Via UI
|
|
24
|
+
${first_name} = Get fake data first_name
|
|
25
|
+
${last_name} = Get fake data last_name
|
|
26
|
+
|
|
27
|
+
Go to page Home Contact
|
|
28
|
+
Click Object Button New
|
|
29
|
+
Wait for modal New Contact
|
|
30
|
+
|
|
31
|
+
Populate Form
|
|
32
|
+
... First Name=${first_name}
|
|
33
|
+
... Last Name=${last_name}
|
|
34
|
+
Click Modal Button Save
|
|
35
|
+
|
|
36
|
+
Wait Until Modal Is Closed
|
|
37
|
+
|
|
38
|
+
${contact_id} = Get Current Record Id
|
|
39
|
+
Store Session Record Contact ${contact_id}
|
|
40
|
+
Validate Contact ${contact_id} ${first_name} ${last_name}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
*** Keywords ***
|
|
44
|
+
|
|
45
|
+
Validate Contact
|
|
46
|
+
[Arguments] ${contact_id} ${first_name} ${last_name}
|
|
47
|
+
[Documentation]
|
|
48
|
+
... Given a contact id, validate that the contact has the
|
|
49
|
+
... expected first and last name both through the detail page in
|
|
50
|
+
... the UI and via the API.
|
|
51
|
+
|
|
52
|
+
# Validate via UI
|
|
53
|
+
Go to page Detail Contact ${contact_id}
|
|
54
|
+
Page Should Contain ${first_name} ${last_name}
|
|
55
|
+
|
|
56
|
+
# Validate via API
|
|
57
|
+
&{contact} = Salesforce Get Contact ${contact_id}
|
|
58
|
+
Should Be Equal ${first_name} ${contact}[FirstName]
|
|
59
|
+
Should Be Equal ${last_name} ${contact}[LastName]
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
*** Settings ***
|
|
2
|
+
Resource cumulusci/robotframework/Salesforce.robot
|
|
3
|
+
Force Tags no-browser
|
|
4
|
+
|
|
5
|
+
*** Variables ***
|
|
6
|
+
${ssn} ${faker.ssn()}
|
|
7
|
+
|
|
8
|
+
*** Test Cases ***
|
|
9
|
+
Faker variable should exist
|
|
10
|
+
Variable should exist \${faker}
|
|
11
|
+
|
|
12
|
+
Faker extended variable syntax in variables table
|
|
13
|
+
Variable should exist \${ssn}
|
|
14
|
+
Should match regexp ${ssn} \\d\\d\\d-\\d\\d-\\d\\d\\d\\d
|
|
15
|
+
|
|
16
|
+
Faker keyword, no arguments
|
|
17
|
+
# Note, ssn is used because it's easily to validate that
|
|
18
|
+
# we got back data in the expected format. Hard to do with
|
|
19
|
+
# names and addresses since the whole point is to provide
|
|
20
|
+
# random fake data
|
|
21
|
+
|
|
22
|
+
[Setup] Variable should not exist \${data}
|
|
23
|
+
${data}= Get fake data ssn
|
|
24
|
+
Should match regexp ${data} \\d\\d\\d-\\d\\d-\\d\\d\\d\\d
|
|
25
|
+
|
|
26
|
+
Faker keyword, with arguments
|
|
27
|
+
[Setup] Variable should not exist \${data}
|
|
28
|
+
|
|
29
|
+
${data}= Get fake data date pattern=%Y,%m
|
|
30
|
+
Should match regexp ${data} \\d\\d\\d\\d,\\d\\d
|
|
31
|
+
|
|
32
|
+
Faker variable, no arguments
|
|
33
|
+
[Setup] Variable should not exist \${data}
|
|
34
|
+
|
|
35
|
+
${data}= Set variable ${faker.ssn()}
|
|
36
|
+
Should match regexp ${ssn} \\d\\d\\d-\\d\\d-\\d\\d\\d\\d
|
|
37
|
+
|
|
38
|
+
Faker variable, with arguments
|
|
39
|
+
[Setup] Variable should not exist \${data}
|
|
40
|
+
|
|
41
|
+
${data}= Set variable ${faker.date(pattern='%Y,%m')}
|
|
42
|
+
Should match regexp ${data} \\d\\d\\d\\d,\\d\\d
|
|
43
|
+
|
|
44
|
+
Set faker locale
|
|
45
|
+
[Setup] Variable should not exist \${data}
|
|
46
|
+
[Teardown] Set faker locale en_US
|
|
47
|
+
|
|
48
|
+
Set faker locale fr_FR
|
|
49
|
+
${data}= Get fake data vat_id
|
|
50
|
+
Should match regexp ${data} ^FR.*
|
|
51
|
+
|
|
52
|
+
Set faker locale it_IT
|
|
53
|
+
${data}= Get fake data vat_id
|
|
54
|
+
Should match regexp ${data} ^IT.*
|
|
55
|
+
|
|
56
|
+
Set faker locale exception
|
|
57
|
+
[Setup] Variable should not exist \${data}
|
|
58
|
+
[Teardown] Set faker locale en_US
|
|
59
|
+
|
|
60
|
+
Run keyword and expect error
|
|
61
|
+
... Unknown locale for fake data: 'bogus'
|
|
62
|
+
... Set faker locale bogus
|
|
63
|
+
|
|
64
|
+
Faker keyword, bad property
|
|
65
|
+
[Setup] Variable should not exist \${data}
|
|
66
|
+
Run keyword and expect error
|
|
67
|
+
... Unknown fake data request: 'bogus'
|
|
68
|
+
... Get fake data bogus
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
*** Settings ***
|
|
2
|
+
Resource cumulusci/robotframework/Salesforce.robot
|
|
3
|
+
Library cumulusci.robotframework.PageObjects
|
|
4
|
+
Library Dialogs
|
|
5
|
+
|
|
6
|
+
Suite Setup Run keywords
|
|
7
|
+
... Initialize Test Objects
|
|
8
|
+
... Open test browser
|
|
9
|
+
Suite Teardown Delete records and close browser
|
|
10
|
+
Force tags forms
|
|
11
|
+
|
|
12
|
+
*** Variables ***
|
|
13
|
+
${account name} ACME Labs
|
|
14
|
+
${campaign name} The Big SPAM
|
|
15
|
+
${DATA DIR} ${{pathlib.Path($SUITE_SOURCE).parent}}
|
|
16
|
+
|
|
17
|
+
*** Keywords ***
|
|
18
|
+
Initialize test objects
|
|
19
|
+
[Documentation] Create related objects used by this test
|
|
20
|
+
|
|
21
|
+
Require salesforce object Account name=${account name}
|
|
22
|
+
Require salesforce object Campaign name=${campaign name}
|
|
23
|
+
|
|
24
|
+
Require Salesforce object
|
|
25
|
+
# We might want to make this available to everyone.
|
|
26
|
+
[Documentation]
|
|
27
|
+
... Create a salesforce object if it doesn't exist
|
|
28
|
+
...
|
|
29
|
+
... Example:
|
|
30
|
+
...
|
|
31
|
+
... | Require salesforce object Account name=ACME Labs description=Created for test case
|
|
32
|
+
|
|
33
|
+
[Arguments] ${object_type} &{args}
|
|
34
|
+
|
|
35
|
+
${result}= salesforce query ${object_type} &{args}
|
|
36
|
+
# if we don't already have such an object, create one
|
|
37
|
+
Run keyword if not $result
|
|
38
|
+
... Salesforce insert ${object type} &{args}
|
|
39
|
+
Run keyword if not $result
|
|
40
|
+
... log created object DEBUG
|
|
41
|
+
|
|
42
|
+
Go to My Email settings
|
|
43
|
+
[Documentation]
|
|
44
|
+
... Go directly to the My Email Settings page
|
|
45
|
+
|
|
46
|
+
&{org}= Get org info
|
|
47
|
+
${url}= Set variable
|
|
48
|
+
... ${org['instance_url']}/lightning/settings/personal/EmailSettings/home
|
|
49
|
+
Go to ${url}
|
|
50
|
+
|
|
51
|
+
*** Test Cases ***
|
|
52
|
+
Lightning based form
|
|
53
|
+
[Documentation]
|
|
54
|
+
... Sets all of the input fields for an opportunity, to make sure
|
|
55
|
+
... we at least support enough input field types to create an opportunity
|
|
56
|
+
|
|
57
|
+
[Setup] Run keywords
|
|
58
|
+
... Go to page Home Opportunity
|
|
59
|
+
... AND Click Object Button New
|
|
60
|
+
... AND Wait for modal New Opportunity
|
|
61
|
+
[Teardown] Click modal button Cancel
|
|
62
|
+
|
|
63
|
+
Input form data
|
|
64
|
+
... Opportunity Name The big one # required text field
|
|
65
|
+
... Account Name ${Account Name} # lookup
|
|
66
|
+
... Amount 1b # currency field
|
|
67
|
+
... Next Step whatever # text field
|
|
68
|
+
... Close Date 4/01/2022 # date field
|
|
69
|
+
... Private checked # checkbox
|
|
70
|
+
... Type New Customer # combobox
|
|
71
|
+
... Stage Prospecting # combobox
|
|
72
|
+
... Probability (%) 90 # percentage
|
|
73
|
+
... Description this is a long description\nblah blah # textarea
|
|
74
|
+
... Primary Campaign Source ${Campaign Name} # lookup
|
|
75
|
+
... Lead Source Purchased List # combobox
|
|
76
|
+
|
|
77
|
+
capture page screenshot
|
|
78
|
+
|
|
79
|
+
Non-lightning based form - checkbox
|
|
80
|
+
[Documentation]
|
|
81
|
+
... Verify that we can check and uncheck standard html checkboxes
|
|
82
|
+
... e.g.: <input type="checkbox">
|
|
83
|
+
|
|
84
|
+
[Setup] Run keywords
|
|
85
|
+
... Go to page Home Campaign
|
|
86
|
+
... AND Click Object Button New
|
|
87
|
+
... AND Wait for modal New Campaign
|
|
88
|
+
[Teardown] Click modal button Cancel
|
|
89
|
+
|
|
90
|
+
# first, let's make sure that the keyword returns an element
|
|
91
|
+
# that is a plain html input element
|
|
92
|
+
${element}= Get webelement label:Active
|
|
93
|
+
Should be equal ${element.tag_name} input
|
|
94
|
+
... Expected to find an <input> element but did not.
|
|
95
|
+
|
|
96
|
+
# next, set the checkbox and assert it is checked
|
|
97
|
+
Input form data
|
|
98
|
+
... Active checked
|
|
99
|
+
Checkbox should be selected label:Active
|
|
100
|
+
|
|
101
|
+
# finally, unset it and assert it is unchecked
|
|
102
|
+
Input form data
|
|
103
|
+
... Active unchecked
|
|
104
|
+
Checkbox should not be selected label:Active
|
|
105
|
+
|
|
106
|
+
Lightning based form - radiobutton
|
|
107
|
+
[Documentation]
|
|
108
|
+
... Verify we can set a lightning radiobutton by its label
|
|
109
|
+
[Setup] Run keywords
|
|
110
|
+
... Go to page Listing Opportunity
|
|
111
|
+
... AND Click element sf:list_view_menu.button
|
|
112
|
+
... AND Click element sf:list_view_menu.item:New
|
|
113
|
+
... AND Wait for modal New List View
|
|
114
|
+
[Teardown] Click modal button Cancel
|
|
115
|
+
|
|
116
|
+
Input form data
|
|
117
|
+
... Who sees this list view?::All users can see this list view selected
|
|
118
|
+
|
|
119
|
+
# Using the label: locator returns a lightning-input element. We need to find
|
|
120
|
+
# the actual html input element to verify that it is checked. Ugly, but efficient.
|
|
121
|
+
${element}= Get webelement label:All users can see this list view
|
|
122
|
+
Should be true ${element.find_element_by_xpath(".//input").is_selected()}
|
|
123
|
+
|
|
124
|
+
Non-lightning based form - radiobutton
|
|
125
|
+
[Documentation] Verify we can set a plain non-lightning radiobutton
|
|
126
|
+
|
|
127
|
+
[Setup] Run keywords
|
|
128
|
+
... Go to My Email Settings
|
|
129
|
+
... AND Select frame //div[@class="setupcontent"]//iframe
|
|
130
|
+
... AND Select radio button use_external_email 1
|
|
131
|
+
... AND Radio button should be set to use_external_email 1
|
|
132
|
+
[Teardown] Unselect frame
|
|
133
|
+
|
|
134
|
+
# The settings page is just about the only page I could find
|
|
135
|
+
# with old school non-lightning radiobuttons
|
|
136
|
+
# Thankfully, I can use built-in keywords to validate that
|
|
137
|
+
# the radiobuttons have actually bet set.
|
|
138
|
+
|
|
139
|
+
# then try to use our keyword to set it
|
|
140
|
+
Input form data
|
|
141
|
+
... Send through Salesforce selected
|
|
142
|
+
|
|
143
|
+
# ... and then verify that it was set
|
|
144
|
+
Radio button should be set to use_external_email 0
|
|
145
|
+
|
|
146
|
+
Non-lightning based form - input and textarea
|
|
147
|
+
[Documentation]
|
|
148
|
+
... Fill in non-lightning input and textarea fields
|
|
149
|
+
|
|
150
|
+
[Setup] Go to file://${DATA DIR}/labels.html
|
|
151
|
+
|
|
152
|
+
Input form data
|
|
153
|
+
... Description This is the description
|
|
154
|
+
... City Oklahoma City
|
|
155
|
+
|
|
156
|
+
Textarea should contain id=textarea-1 This is the description
|
|
157
|
+
Textfield should contain id=input-3 Oklahoma City
|
|
158
|
+
|
|
159
|
+
Fieldsets
|
|
160
|
+
[Documentation]
|
|
161
|
+
... Verify we can use fieldsets to disambiguate fields
|
|
162
|
+
|
|
163
|
+
[Setup] Run keywords
|
|
164
|
+
... Go to page Home Shipment
|
|
165
|
+
... AND Click Object Button New
|
|
166
|
+
... AND Wait for modal New Shipment
|
|
167
|
+
[Teardown] Click modal button Cancel
|
|
168
|
+
|
|
169
|
+
Input form data
|
|
170
|
+
... Expected Delivery Date::Date 04/01/2021
|
|
171
|
+
# hmmm. This one isn't working. Too late in the evening to fixe it :-\
|
|
172
|
+
# ... Actual Delivery Date::Date 04/02/2021
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
*** Settings ***
|
|
2
|
+
Documentation
|
|
3
|
+
... Tests for the custom locator strategy "label:"
|
|
4
|
+
... These tests were created to catch the various ways form fields
|
|
5
|
+
... and labels are marked up on Salesforce pages.
|
|
6
|
+
|
|
7
|
+
Resource cumulusci/robotframework/Salesforce.robot
|
|
8
|
+
Library OperatingSystem
|
|
9
|
+
|
|
10
|
+
Suite Setup Open test browser
|
|
11
|
+
Suite Teardown Delete records and close browser
|
|
12
|
+
Test Teardown Log failure conditions
|
|
13
|
+
|
|
14
|
+
*** Variables ***
|
|
15
|
+
|
|
16
|
+
${DATA DIR} ${{pathlib.Path($SUITE_SOURCE).parent}}
|
|
17
|
+
${TEST URL} file://${DATA DIR}/labels.html
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
*** Keywords ***
|
|
21
|
+
|
|
22
|
+
Log failure conditions
|
|
23
|
+
[Documentation]
|
|
24
|
+
... Do some extra reporting when a test fails
|
|
25
|
+
|
|
26
|
+
Run keyword if test failed
|
|
27
|
+
... Run keywords
|
|
28
|
+
... Log Location
|
|
29
|
+
... Log Source
|
|
30
|
+
... Capture page screenshot
|
|
31
|
+
|
|
32
|
+
Returned element should have id
|
|
33
|
+
[Documentation]
|
|
34
|
+
... This is the main assertion in a test case. It gets a webelement
|
|
35
|
+
... using the label: locator and asserts that the correct element is
|
|
36
|
+
... returned.
|
|
37
|
+
[Arguments] ${expected id} ${locator}
|
|
38
|
+
${actual id}= SeleniumLibrary.Get element attribute ${locator} id
|
|
39
|
+
|
|
40
|
+
Should be equal ${actual id} ${expected id}
|
|
41
|
+
... Expected the element id to be '${expected id}' but it was '${actual id}'
|
|
42
|
+
... values=False
|
|
43
|
+
|
|
44
|
+
With HTML:
|
|
45
|
+
[Documentation]
|
|
46
|
+
... Inject html into our test document
|
|
47
|
+
... Input is one or more string arguments that will be joined
|
|
48
|
+
... and then inserted into the current document in a div
|
|
49
|
+
... with the id 'input-data'
|
|
50
|
+
[Arguments] @{lines}
|
|
51
|
+
|
|
52
|
+
${html}= Catenate SEPARATOR=${\n} @{lines}
|
|
53
|
+
execute javascript
|
|
54
|
+
... ARGUMENTS
|
|
55
|
+
... ${HTML}
|
|
56
|
+
... JAVASCRIPT
|
|
57
|
+
... var element=document.querySelector('#test-data');
|
|
58
|
+
... element.innerHTML = arguments[0];
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
*** Test Cases ***
|
|
62
|
+
|
|
63
|
+
Label pointing to input
|
|
64
|
+
[Documentation]
|
|
65
|
+
... Verify we can find input elements
|
|
66
|
+
|
|
67
|
+
[Setup] Go to ${TEST URL}
|
|
68
|
+
|
|
69
|
+
With HTML:
|
|
70
|
+
... <label for='input-1'>Zipcode</label>
|
|
71
|
+
... <input id='input-1'>
|
|
72
|
+
|
|
73
|
+
Returned element should have id input-1 label:Zipcode
|
|
74
|
+
|
|
75
|
+
Label pointing to textarea
|
|
76
|
+
[Documentation]
|
|
77
|
+
... Verify we can find textarea elements
|
|
78
|
+
|
|
79
|
+
[Setup] Go to ${TEST URL}
|
|
80
|
+
|
|
81
|
+
With HTML:
|
|
82
|
+
... <label for='textarea-1'>Zipcode</label>
|
|
83
|
+
... <textarea id='textarea-1'>
|
|
84
|
+
|
|
85
|
+
Returned element should have id textarea-1 label:Zipcode
|
|
86
|
+
|
|
87
|
+
Label inside a lightning component
|
|
88
|
+
[Documentation]
|
|
89
|
+
... Verify we can find a lightning component
|
|
90
|
+
|
|
91
|
+
[Setup] Go to ${TEST URL}
|
|
92
|
+
|
|
93
|
+
With HTML:
|
|
94
|
+
... <lightning-combobox id='combobox-1'>
|
|
95
|
+
... <label for='input-1'>Zipcode</label>
|
|
96
|
+
... <input id='input-1'>
|
|
97
|
+
... </lightning-combobox>
|
|
98
|
+
|
|
99
|
+
Returned element should have id combobox-1 label:Zipcode
|
|
100
|
+
|
|
101
|
+
Nested Lightning Components
|
|
102
|
+
[Documentation]
|
|
103
|
+
... Verify that the inner-most component is returned
|
|
104
|
+
|
|
105
|
+
[Setup] Go to ${TEST URL}
|
|
106
|
+
|
|
107
|
+
With HTML:
|
|
108
|
+
... <lightning-picklist id='picklist-1'>
|
|
109
|
+
... <lightning-combobox id='combobox-1'>
|
|
110
|
+
... <label>Salutation</label>
|
|
111
|
+
... </lightning-combobox>
|
|
112
|
+
... <lightning-picklist>
|
|
113
|
+
|
|
114
|
+
Returned element should have id combobox-1 label:Salutation
|
|
115
|
+
|
|
116
|
+
Label with a single quote
|
|
117
|
+
[Documentation]
|
|
118
|
+
... Verify that labels with apostrophes don't trip us up
|
|
119
|
+
|
|
120
|
+
[Setup] Go to ${TEST URL}
|
|
121
|
+
|
|
122
|
+
With HTML:
|
|
123
|
+
... <label for='input-1'>foo'bar</label>
|
|
124
|
+
... <input id='input-1'>
|
|
125
|
+
|
|
126
|
+
Returned element should have id input-1 label:foo'bar
|
|
127
|
+
|
|
128
|
+
Simple label spread across multiple lines
|
|
129
|
+
[Documentation]
|
|
130
|
+
... Verify that label text spread across multiple lines is recognized
|
|
131
|
+
|
|
132
|
+
[Setup] Go to ${TEST URL}
|
|
133
|
+
|
|
134
|
+
With HTML:
|
|
135
|
+
... <label for='input-1'>
|
|
136
|
+
... Hello,
|
|
137
|
+
... world
|
|
138
|
+
... </label>
|
|
139
|
+
... <input id='input-1'>
|
|
140
|
+
|
|
141
|
+
Returned element should have id input-1 label:Hello, world
|
|
142
|
+
|
|
143
|
+
Label with leading and trailing whitespace
|
|
144
|
+
[Documentation]
|
|
145
|
+
... Verify that we aren't tripped up by leading or trailing spaces
|
|
146
|
+
|
|
147
|
+
[Setup] Go to ${TEST URL}
|
|
148
|
+
|
|
149
|
+
With HTML:
|
|
150
|
+
... <label for='input-1'> email </label>
|
|
151
|
+
... <input id='input-1'>
|
|
152
|
+
|
|
153
|
+
Returned element should have id input-1 label:email
|
|
154
|
+
|
|
155
|
+
Label with inner span BEFORE the label text, simulating a required field
|
|
156
|
+
[Documentation]
|
|
157
|
+
... Verify we can find a label when there's additional elements
|
|
158
|
+
... before the label text
|
|
159
|
+
...
|
|
160
|
+
... Note: the assistiveText span is how some required fields are marked up
|
|
161
|
+
|
|
162
|
+
[Setup] Go to ${TEST URL}
|
|
163
|
+
|
|
164
|
+
With HTML:
|
|
165
|
+
... <label for='input-1'>
|
|
166
|
+
... <span class="assistiveText"> * </span>
|
|
167
|
+
... Company Name
|
|
168
|
+
... </label>
|
|
169
|
+
... <input id='input-1'>
|
|
170
|
+
|
|
171
|
+
Returned element should have id input-1 label:Company Name
|
|
172
|
+
|
|
173
|
+
Label with inner span AFTER the label text, simulating a required field
|
|
174
|
+
[Documentation]
|
|
175
|
+
... Verify we can find a label when there's additional elements
|
|
176
|
+
... after the label text
|
|
177
|
+
...
|
|
178
|
+
... Note: the assistiveText span is how some required fields are marked up
|
|
179
|
+
|
|
180
|
+
[Setup] Go to ${TEST URL}
|
|
181
|
+
|
|
182
|
+
With HTML:
|
|
183
|
+
... <label for='input-1'>
|
|
184
|
+
... Street Address
|
|
185
|
+
... <span class="assistiveText"> * </span>
|
|
186
|
+
... </label>
|
|
187
|
+
... <input id='input-1'>
|
|
188
|
+
|
|
189
|
+
Returned element should have id input-1 label:Street Address
|
|
190
|
+
|
|
191
|
+
Label that doesn't exist yields an appropriate error
|
|
192
|
+
[Documentation]
|
|
193
|
+
... Verify we get an appropriate exception when we can't find the label
|
|
194
|
+
|
|
195
|
+
[Setup] Go to ${TEST URL}
|
|
196
|
+
|
|
197
|
+
With HTML:
|
|
198
|
+
... <label for='input-1'>
|
|
199
|
+
... Whatever
|
|
200
|
+
... </label>
|
|
201
|
+
... <input id='input-1'>
|
|
202
|
+
|
|
203
|
+
Run keyword and expect error
|
|
204
|
+
... Element with locator 'label:Bogus' not found.
|
|
205
|
+
... Get Webelement label:Bogus
|
|
206
|
+
|
|
207
|
+
Label where text is in a span
|
|
208
|
+
[Documentation]
|
|
209
|
+
... Verify that we can find a label when the text is in a span
|
|
210
|
+
|
|
211
|
+
[Setup] Go to ${TEST URL}
|
|
212
|
+
|
|
213
|
+
With HTML:
|
|
214
|
+
... <label for='input-1'
|
|
215
|
+
... <span>Ship To Street</span>
|
|
216
|
+
... </label>
|
|
217
|
+
... <input id='input-1'>
|
|
218
|
+
|
|
219
|
+
Returned element should have id input-1 label:Ship To Street
|
|
220
|
+
|
|
221
|
+
Multiple identical labels in fieldsets
|
|
222
|
+
[Documentation]
|
|
223
|
+
... Verify that we can distinguish between similar labels
|
|
224
|
+
... in different fieldsets
|
|
225
|
+
|
|
226
|
+
[Setup] Go to ${TEST URL}
|
|
227
|
+
|
|
228
|
+
With HTML:
|
|
229
|
+
... <fieldset><div>Section 1</div>
|
|
230
|
+
... <label for='input-1'>
|
|
231
|
+
... Name
|
|
232
|
+
... </label>
|
|
233
|
+
... <input id='input-1'>
|
|
234
|
+
... </fieldset>
|
|
235
|
+
... <fieldset><div>Section 2</div>
|
|
236
|
+
... <label for='input-2'>
|
|
237
|
+
... Name
|
|
238
|
+
... </label>
|
|
239
|
+
... <input id='input-2'>
|
|
240
|
+
... </fieldset>
|
|
241
|
+
|
|
242
|
+
Returned element should have id input-1 label:Section 1::Name
|
|
243
|
+
Returned element should have id input-2 label:Section 2::Name
|
|
244
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<title>Labels for testing</title>
|
|
5
|
+
<style>
|
|
6
|
+
#test-data {
|
|
7
|
+
margin: 10px;
|
|
8
|
+
border-left: 3px solid;
|
|
9
|
+
padding-left: 10px;
|
|
10
|
+
}
|
|
11
|
+
</style>
|
|
12
|
+
</head>
|
|
13
|
+
<body>
|
|
14
|
+
<h1>A simulated input form, yo.</h1>
|
|
15
|
+
<p>
|
|
16
|
+
While this has a couple of input elements, this file is primarily designed for
|
|
17
|
+
test cases to inject input fields into the div with an id of "test-data"
|
|
18
|
+
</p>
|
|
19
|
+
|
|
20
|
+
<div><label for="input-1">First Name</label><br /><input id="input-1" /></div>
|
|
21
|
+
<div><label for="input-2">Last Name</label><br /><input id="input-2" /></div>
|
|
22
|
+
<div id="test-data">
|
|
23
|
+
<!-- tests will dynamically add code here-->
|
|
24
|
+
</div>
|
|
25
|
+
<div><label for="input-3">City</label><br /><input id="input-3" /></div>
|
|
26
|
+
<div><label for="input-4">Street</label><br /><input id="input-4" /></div>
|
|
27
|
+
<div>
|
|
28
|
+
<label for="textarea-1">Description</label><br /><textarea
|
|
29
|
+
id="textarea-1"
|
|
30
|
+
></textarea>
|
|
31
|
+
</div>
|
|
32
|
+
</body>
|
|
33
|
+
</html>
|