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,149 @@
|
|
|
1
|
+
*** Settings ***
|
|
2
|
+
|
|
3
|
+
Resource cumulusci/robotframework/Salesforce.robot
|
|
4
|
+
Library cumulusci/robotframework/tests/salesforce/TestListener.py
|
|
5
|
+
Library TestLibraryA.py
|
|
6
|
+
Library TestLibraryB.py
|
|
7
|
+
Library Dialogs
|
|
8
|
+
|
|
9
|
+
Suite Setup Open test browser
|
|
10
|
+
Suite Teardown Close all browsers
|
|
11
|
+
|
|
12
|
+
*** Test Cases ***
|
|
13
|
+
Locator strategy 'text'
|
|
14
|
+
[Documentation]
|
|
15
|
+
... Test that the 'text' location strategy has been added
|
|
16
|
+
[Setup] Go to setup home
|
|
17
|
+
|
|
18
|
+
# Try to use the locator strategy on an element
|
|
19
|
+
# we know should be on the page.
|
|
20
|
+
Wait until page contains element text:Mobile Publisher
|
|
21
|
+
|
|
22
|
+
Locator strategy 'title'
|
|
23
|
+
[Documentation]
|
|
24
|
+
... Test that the 'title' location strategy has been added
|
|
25
|
+
[Setup] Go to setup home
|
|
26
|
+
|
|
27
|
+
# Try to use the locator strategy on an element
|
|
28
|
+
# we know should be on the page.
|
|
29
|
+
Wait until page contains element title:Object Manager
|
|
30
|
+
|
|
31
|
+
Locator strategy 'label'
|
|
32
|
+
[Documentation]
|
|
33
|
+
... Test that the 'label' location strategy has been added
|
|
34
|
+
[Setup] Run keywords
|
|
35
|
+
... Go To Object Home Contact
|
|
36
|
+
... AND Click Object Button New
|
|
37
|
+
[Teardown] Close Modal
|
|
38
|
+
|
|
39
|
+
# Try to use the locator strategy on an element
|
|
40
|
+
# we know should be on the page.
|
|
41
|
+
Wait until page contains element label:Phone
|
|
42
|
+
|
|
43
|
+
Keyword library locators
|
|
44
|
+
[Documentation]
|
|
45
|
+
... Test that we can use custom locators with Selenium keywords
|
|
46
|
+
|
|
47
|
+
... Both of the test libraries should have registered their own
|
|
48
|
+
... locators. This test makes sure both of them were registered
|
|
49
|
+
... and available for use.
|
|
50
|
+
|
|
51
|
+
[Setup] Go to setup home
|
|
52
|
+
|
|
53
|
+
Wait until page contains element A:breadcrumb: Home
|
|
54
|
+
Wait until page contains element B:appname:Setup
|
|
55
|
+
|
|
56
|
+
Invalid locator
|
|
57
|
+
[Documentation]
|
|
58
|
+
... Verify we give a reasonable error message if the locator
|
|
59
|
+
... isn't found
|
|
60
|
+
|
|
61
|
+
# Note: a:breadcrumb is valid, but it doesn't have a child
|
|
62
|
+
# locator named 'bogus'
|
|
63
|
+
Run keyword and expect error
|
|
64
|
+
... locator A:breadcrumb.bogus not found
|
|
65
|
+
... Page should not contain element a:breadcrumb.bogus
|
|
66
|
+
|
|
67
|
+
Not enough arguments in locator
|
|
68
|
+
[Documentation]
|
|
69
|
+
... Verify that we give a reasonable error message if a locator
|
|
70
|
+
... requires more arguments than it gets
|
|
71
|
+
|
|
72
|
+
# Note: a:breadcrumb requires an argument
|
|
73
|
+
Run keyword and expect error
|
|
74
|
+
... Not enough arguments were supplied
|
|
75
|
+
... Page should not contain element a:breadcrumb
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
Show translated locator in the log
|
|
79
|
+
[Documentation]
|
|
80
|
+
... Verify the translated locator appears in the log
|
|
81
|
+
|
|
82
|
+
Page should not contain element A:something
|
|
83
|
+
assert robot log locator: 'A:something' => '//whatever'
|
|
84
|
+
|
|
85
|
+
Page should not contain custom locator
|
|
86
|
+
[Documentation]
|
|
87
|
+
... Verify that a custom locator can be used in a context where
|
|
88
|
+
... the locator doesn't exist.
|
|
89
|
+
...
|
|
90
|
+
... It used to be that the locator manager would itself throw
|
|
91
|
+
... an error if it couldn't find a locator. Now, it returns None
|
|
92
|
+
... so that the keyword can be responsible for deciding if an
|
|
93
|
+
... error should be thrown or not
|
|
94
|
+
|
|
95
|
+
# we know this locator doesn't exist, but the keyword should
|
|
96
|
+
# pass. Prior to the fix when this test was introduced, this would
|
|
97
|
+
# give an error
|
|
98
|
+
|
|
99
|
+
Page should not contain element B:appname:Sorry Charlie
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
Get Webelement (singlular)
|
|
103
|
+
[Documentation]
|
|
104
|
+
... A smoke test to verify that we can get an element with a custom locator
|
|
105
|
+
[Setup] Go to setup home
|
|
106
|
+
|
|
107
|
+
${element}= Get webelement A:breadcrumb:Home
|
|
108
|
+
# Different browsers return different classes of objects so we
|
|
109
|
+
# can't easily do a check for the returned object type that works
|
|
110
|
+
# for all browsers. We'll just have to assume that if the element
|
|
111
|
+
# isn't None then it's a web element
|
|
112
|
+
Should be true $element is not None
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
Get Webelements (plural) - no matching elements
|
|
116
|
+
|
|
117
|
+
[tags] W-10187485
|
|
118
|
+
|
|
119
|
+
# this is a locator which shouldn't match anything on the page
|
|
120
|
+
${locator}= Get Locator modal.button Bogus
|
|
121
|
+
${elements}= Get webelements ${locator}
|
|
122
|
+
|
|
123
|
+
# same locator, but using the custom locator strategy
|
|
124
|
+
${elements_via_locator_manager}= Get webelements sf:modal.button:Bogus
|
|
125
|
+
|
|
126
|
+
# the two lists of elements should be identical. The bug reported
|
|
127
|
+
# in W-10187485 caused the locator strategy to return [None]
|
|
128
|
+
# instead of []. This verifies that we fixed that bug.
|
|
129
|
+
Should be equal ${elements} ${elements via locator manager}
|
|
130
|
+
|
|
131
|
+
# In addition to getting an empty list when trying to fetch
|
|
132
|
+
# non-existing elements, this verifies that we can use the
|
|
133
|
+
# locator in a negative test.
|
|
134
|
+
Page should not contain sf:modal.button:Bogus
|
|
135
|
+
|
|
136
|
+
Get Webelements (plural) with custom locator
|
|
137
|
+
[Setup] Run keywords
|
|
138
|
+
... Go to object home Contact
|
|
139
|
+
... AND Click object button New
|
|
140
|
+
|
|
141
|
+
# Get the web element with the xpath directly, then verify
|
|
142
|
+
# that Get Webelements returns a list with just that element
|
|
143
|
+
# when using the custom locator
|
|
144
|
+
${element}= Get webelement //div[contains(@class,'uiModal')]//button[.='Save & New']
|
|
145
|
+
@{expected elements}= Create list ${element}
|
|
146
|
+
|
|
147
|
+
${actual elements}= Get webelements sf:modal.button:Save & New
|
|
148
|
+
|
|
149
|
+
Should be equal ${actual elements} ${expected elements}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
*** Settings ***
|
|
2
|
+
Resource cumulusci/robotframework/Salesforce.robot
|
|
3
|
+
Library Collections
|
|
4
|
+
Library cumulusci.robotframework.PageObjects
|
|
5
|
+
... ${CURDIR}/example_page_object.py
|
|
6
|
+
|
|
7
|
+
Suite Setup Run keywords
|
|
8
|
+
... Create test data
|
|
9
|
+
... AND Open Test Browser
|
|
10
|
+
Suite Teardown Delete Records and Close Browser
|
|
11
|
+
|
|
12
|
+
*** Keywords ***
|
|
13
|
+
Create Test Data
|
|
14
|
+
[Documentation]
|
|
15
|
+
... Create a Contact for Connor MacLeod if there isn't one. If there's
|
|
16
|
+
... already more than one, it's a fatal error since some tests depend
|
|
17
|
+
... on their being only one.
|
|
18
|
+
${result}= Salesforce Query Contact Firstname=Connor LastName=MacLeod
|
|
19
|
+
run keyword if len($result) > 1
|
|
20
|
+
... Fatal Error Expected to find only one contact named Connor MacLeod, found several
|
|
21
|
+
run keyword if len($result) == 0
|
|
22
|
+
... Salesforce Insert Contact FirstName=Connor LastName=MacLeod
|
|
23
|
+
|
|
24
|
+
*** Test Cases ***
|
|
25
|
+
HomePage
|
|
26
|
+
[Documentation]
|
|
27
|
+
... Verify we can go to the generic Home page
|
|
28
|
+
... (assuming we don't have an explicit TaskHomePage)
|
|
29
|
+
go to page Home Task
|
|
30
|
+
Current page should be Home Task
|
|
31
|
+
|
|
32
|
+
DetailPage
|
|
33
|
+
[Documentation]
|
|
34
|
+
... Verify we can go to the generic Detail page
|
|
35
|
+
... (assuming we don't have an explicit TaskDetailPage)
|
|
36
|
+
|
|
37
|
+
Go to page Detail Contact firstName=Connor lastName=MacLeod
|
|
38
|
+
# It is assumed only one contact will match. If there are several,
|
|
39
|
+
# you might need to recreate your scratch org to clear out the duplicates
|
|
40
|
+
Current page should be Detail Contact firstName=Connor lastName=MacLeod
|
|
41
|
+
|
|
42
|
+
DetailPage with no matches
|
|
43
|
+
[Documentation]
|
|
44
|
+
... Verify that we get an error if we try to go to a page for
|
|
45
|
+
... an object that doesn't exist.
|
|
46
|
+
|
|
47
|
+
run keyword and expect error no Contact matches firstName=Nobody, lastName=Nobody
|
|
48
|
+
... Go to page Detail Contact firstName=Nobody lastName=Nobody
|
|
49
|
+
|
|
50
|
+
DetailPage with more than one match
|
|
51
|
+
[Documentation]
|
|
52
|
+
... Verify that we get an error if we try to go to a detail
|
|
53
|
+
... page that matches more than a single record
|
|
54
|
+
|
|
55
|
+
[Setup] run keywords
|
|
56
|
+
... Salesforce Insert Contact FirstName=John LastName=Smith
|
|
57
|
+
... AND Salesforce Insert Contact FirstName=John LastName=Jones
|
|
58
|
+
|
|
59
|
+
${records}= Salesforce query Contact firstName=John
|
|
60
|
+
${expected}= get length ${records}
|
|
61
|
+
|
|
62
|
+
run keyword and expect error Query returned ${expected} objects
|
|
63
|
+
... Go to page Detail Contact firstName=John
|
|
64
|
+
|
|
65
|
+
NewModal
|
|
66
|
+
[Documentation]
|
|
67
|
+
... Verify that we can use the NewModal page object keywords
|
|
68
|
+
|
|
69
|
+
[Setup] Go to page Home Contact
|
|
70
|
+
Click object button New
|
|
71
|
+
Wait for modal New Contact
|
|
72
|
+
Close the modal
|
|
73
|
+
|
|
74
|
+
NewModal - click modal button
|
|
75
|
+
[Documentation]
|
|
76
|
+
... Verify that we can use the NewModal 'click modal button' keyword
|
|
77
|
+
|
|
78
|
+
[Setup] Run keywords
|
|
79
|
+
... Go to page Home Contact
|
|
80
|
+
... AND Click object button New
|
|
81
|
+
... AND Wait for modal New Contact
|
|
82
|
+
|
|
83
|
+
Click modal button Cancel
|
|
84
|
+
Wait until modal is closed
|
|
85
|
+
|
|
86
|
+
NewModal - Modal errors
|
|
87
|
+
[Documentation]
|
|
88
|
+
... Verify that we can detect errors in the model
|
|
89
|
+
... with 'modal should contain errors' keyword (API < 51)
|
|
90
|
+
... or 'Modal should show edit error for fields' (API >= 51)
|
|
91
|
+
|
|
92
|
+
[Setup] Run keywords
|
|
93
|
+
... Go to page Home Contact
|
|
94
|
+
... AND Click object button New
|
|
95
|
+
... AND Wait for modal New Contact
|
|
96
|
+
|
|
97
|
+
Click modal button Save
|
|
98
|
+
capture page screenshot
|
|
99
|
+
${api}= Get latest API version
|
|
100
|
+
Modal should show edit error for fields Name
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from cumulusci.robotframework.pageobjects import BasePage, pageobject
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
@pageobject("About", "Blank")
|
|
5
|
+
class AboutBlankPage(BasePage):
|
|
6
|
+
object_name = None
|
|
7
|
+
|
|
8
|
+
def _go_to_page(self):
|
|
9
|
+
self.selenium.go_to("about:blank")
|
|
10
|
+
|
|
11
|
+
def _is_current_page(self):
|
|
12
|
+
location = self.selenium.get_location()
|
|
13
|
+
if location != "about:blank":
|
|
14
|
+
raise Exception(
|
|
15
|
+
"Expected location to be 'about:blank' but it was '{}'".format(location)
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
def hello(self, message):
|
|
19
|
+
return "About:Blank Page says Hello, {}".format(message)
|
|
20
|
+
|
|
21
|
+
def keyword_one(self):
|
|
22
|
+
return "About:Blank keyword one"
|
|
23
|
+
|
|
24
|
+
def keyword_two(self):
|
|
25
|
+
return "About:Blank keyword two"
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
*** Settings ***
|
|
2
|
+
Resource cumulusci/robotframework/Salesforce.robot
|
|
3
|
+
Library Collections
|
|
4
|
+
Library cumulusci.robotframework.PageObjects
|
|
5
|
+
... ${CURDIR}/example_page_object.py
|
|
6
|
+
|
|
7
|
+
Suite Setup Run keywords
|
|
8
|
+
... Create test data
|
|
9
|
+
... AND Open Test Browser
|
|
10
|
+
Suite Teardown Delete Records and Close Browser
|
|
11
|
+
|
|
12
|
+
*** Keywords ***
|
|
13
|
+
Create Test Data
|
|
14
|
+
[Documentation]
|
|
15
|
+
... Create contacts used by tests in this suite
|
|
16
|
+
|
|
17
|
+
# Delete all cases, in case they are holding on to some contacts
|
|
18
|
+
${records}= Salesforce Query Case
|
|
19
|
+
FOR ${record} IN @{records}
|
|
20
|
+
Salesforce Delete Case ${record['Id']}
|
|
21
|
+
END
|
|
22
|
+
|
|
23
|
+
# Next, delete all existing contacts
|
|
24
|
+
${records}= Salesforce Query Contact
|
|
25
|
+
FOR ${record} IN @{records}
|
|
26
|
+
Salesforce Delete Contact ${record['Id']}
|
|
27
|
+
END
|
|
28
|
+
|
|
29
|
+
# Next, add the ones we need
|
|
30
|
+
Salesforce Insert Contact LastName=MacLeod FirstName=Connor Phone=555-123-1000
|
|
31
|
+
Salesforce Insert Contact LastName=Doe Phone=555-123-1001
|
|
32
|
+
Salesforce Insert Contact LastName=Doe Phone=555-123-1002
|
|
33
|
+
|
|
34
|
+
Status info should contain
|
|
35
|
+
[Documentation]
|
|
36
|
+
... Verifies that the status info contains the given text
|
|
37
|
+
[Arguments] ${expected}
|
|
38
|
+
|
|
39
|
+
${text}= Get text sf:object_list.status_info
|
|
40
|
+
Should contain ${text} ${expected}
|
|
41
|
+
... msg=Element text '${text}' does not contain '${expected}'
|
|
42
|
+
... values=False
|
|
43
|
+
|
|
44
|
+
*** Test Cases ***
|
|
45
|
+
ListingPage - Smoke test
|
|
46
|
+
[Documentation]
|
|
47
|
+
... Verify we can go to the generic Listing page
|
|
48
|
+
... (assuming we don't have an explicit TaskListingPage)
|
|
49
|
+
Go to page Listing Task
|
|
50
|
+
Current page should be Listing Task
|
|
51
|
+
|
|
52
|
+
ListingPage - Select Rows
|
|
53
|
+
[Documentation]
|
|
54
|
+
... Verify that the 'Select Rows' keyword works
|
|
55
|
+
[Setup] Run keywords
|
|
56
|
+
... Go to page Listing Contact
|
|
57
|
+
... AND wait until element is not visible sf:spinner
|
|
58
|
+
|
|
59
|
+
Select rows Doe
|
|
60
|
+
Status info should contain 2 items selected
|
|
61
|
+
|
|
62
|
+
ListingPage - Select Rows when already selected
|
|
63
|
+
[Documentation]
|
|
64
|
+
... Verify that the 'Select Rows' keyword doesn't toggle
|
|
65
|
+
... already selected rows
|
|
66
|
+
[Setup] Run keywords
|
|
67
|
+
... Go to page Listing Contact
|
|
68
|
+
... AND wait until element is not visible sf:spinner
|
|
69
|
+
|
|
70
|
+
Select rows Doe
|
|
71
|
+
Status info should contain 2 items selected
|
|
72
|
+
|
|
73
|
+
Select rows Doe
|
|
74
|
+
Status info should contain 2 items selected
|
|
75
|
+
|
|
76
|
+
ListingPage - Select Rows - No matching rows
|
|
77
|
+
[Documentation]
|
|
78
|
+
... Verify that 'Select Rows' raises an appropriate error
|
|
79
|
+
... when no rows can be found
|
|
80
|
+
[Setup] Run keywords
|
|
81
|
+
... Go to page Listing Contact
|
|
82
|
+
... AND wait until element is not visible sf:spinner
|
|
83
|
+
|
|
84
|
+
Run keyword and expect error
|
|
85
|
+
... No rows matched 'Bogus'
|
|
86
|
+
... Select rows Bogus
|
|
87
|
+
|
|
88
|
+
ListingPage - Deselect Rows
|
|
89
|
+
[Documentation]
|
|
90
|
+
... Verify that the 'Deselect Rows' keyword works
|
|
91
|
+
[Setup] Run keywords
|
|
92
|
+
... Go to page Listing Contact
|
|
93
|
+
... AND wait until element is not visible sf:spinner
|
|
94
|
+
|
|
95
|
+
Select rows Doe Connor MacLeod
|
|
96
|
+
Status info should contain 3 items selected
|
|
97
|
+
|
|
98
|
+
# deselect via name column
|
|
99
|
+
Deselect rows Doe
|
|
100
|
+
Status info should contain 1 item selected
|
|
101
|
+
|
|
102
|
+
# deselect one more via phone column
|
|
103
|
+
Deselect rows 555-123-1000
|
|
104
|
+
Status info should contain 3 items
|
|
105
|
+
|
|
106
|
+
ListingPage - Deselect Rows - No matching rows
|
|
107
|
+
[Documentation]
|
|
108
|
+
... Verify that the 'Deselect Rows' keyword raises an appropriate error
|
|
109
|
+
[Setup] Run keywords
|
|
110
|
+
... Go to page Listing Contact
|
|
111
|
+
... AND wait until element is not visible sf:spinner
|
|
112
|
+
|
|
113
|
+
Run keyword and expect error
|
|
114
|
+
... No rows matched 'Bogus'
|
|
115
|
+
... Select rows Bogus
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
*** Settings ***
|
|
2
|
+
|
|
3
|
+
Resource cumulusci/robotframework/Salesforce.robot
|
|
4
|
+
Library cumulusci.robotframework.PageObjects
|
|
5
|
+
Suite Setup Run keywords Open Test Browser
|
|
6
|
+
Suite Teardown Delete Records and Close Browser
|
|
7
|
+
|
|
8
|
+
*** Keywords ***
|
|
9
|
+
Create Custom Field In Object Manager
|
|
10
|
+
[Documentation]
|
|
11
|
+
... Reads key value pair arguments.
|
|
12
|
+
...
|
|
13
|
+
... Navigates to Object Manager page and load fields and relationships for the specific object
|
|
14
|
+
... Runs keyword to create custom field
|
|
15
|
+
...
|
|
16
|
+
... Example:
|
|
17
|
+
...
|
|
18
|
+
... | Create custom field in object manager
|
|
19
|
+
... | ... Object=Payment
|
|
20
|
+
... | ... Field_Type=Formula
|
|
21
|
+
... | ... Field_Name=Is Opportunity From Prior Year
|
|
22
|
+
... | ... Formula=YEAR( npe01__Opportunity__r.CloseDate ) < YEAR( npe01__Payment_Date__c )
|
|
23
|
+
|
|
24
|
+
[Arguments] &{fields}
|
|
25
|
+
Go To Page ObjectManager ${fields}[Object]
|
|
26
|
+
Switch Tab To Fields & Relationships
|
|
27
|
+
Create Custom Field &{fields}
|
|
28
|
+
|
|
29
|
+
*** Test Cases ***
|
|
30
|
+
|
|
31
|
+
Navigate To The Object Manager page For Specified Object
|
|
32
|
+
[Documentation] Smoke Test For validating the behavior of navigating to the ObjectManager Page for a specified object
|
|
33
|
+
|
|
34
|
+
Go To Page ObjectManager Contact
|
|
35
|
+
Current page should be ObjectManager Contact
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
Create Custom Lookup Field Using Object Manager
|
|
39
|
+
[Documentation] To test the ability of creating a custom lookup field using object manager and verify field got created
|
|
40
|
+
|
|
41
|
+
Create Custom Field In Object Manager
|
|
42
|
+
... Object=Contact
|
|
43
|
+
... Field_Type=Lookup
|
|
44
|
+
... Field_Name=Last Soft Credit Opportunity
|
|
45
|
+
... Related_To=Opportunity
|
|
46
|
+
Go To Page ObjectManager Contact
|
|
47
|
+
Switch Tab To Fields & Relationships
|
|
48
|
+
Is Field Present Last Soft Credit Opportunity
|
|
49
|
+
Delete Custom Field Last Soft Credit Opportunity
|
|
50
|
+
|
|
51
|
+
Create Custom Text Field Using Object Manager
|
|
52
|
+
[Documentation] To test the ability of creating a custom text field using object manager and verify field got created
|
|
53
|
+
|
|
54
|
+
Create Custom Field In Object Manager
|
|
55
|
+
... Object=Contact
|
|
56
|
+
... Field_Type=Text
|
|
57
|
+
... Field_Name=This Is A Text Field
|
|
58
|
+
Go To Page ObjectManager Contact
|
|
59
|
+
Switch Tab To Fields & Relationships
|
|
60
|
+
Is Field Present This Is A Text Field
|
|
61
|
+
Delete Custom Field This Is A Text Field
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
Create Custom Currency Field Using Object Manager
|
|
65
|
+
[Documentation] To test the ability of creating a custom currency field and verify field got created
|
|
66
|
+
|
|
67
|
+
Create Custom Field In Object Manager
|
|
68
|
+
... Object=Account
|
|
69
|
+
... Field_Type=Currency
|
|
70
|
+
... Field_Name=This Year Payments on Past Year Pledges
|
|
71
|
+
Go To Page ObjectManager Account
|
|
72
|
+
Switch Tab To Fields & Relationships
|
|
73
|
+
Is Field Present This Year Payments on Past Year Pledges
|
|
74
|
+
Delete Custom Field This Year Payments on Past Year Pledges
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
*** Settings ***
|
|
2
|
+
Resource cumulusci/robotframework/Salesforce.robot
|
|
3
|
+
Library Collections
|
|
4
|
+
Library cumulusci.robotframework.PageObjects
|
|
5
|
+
... ${CURDIR}/example_page_object.py
|
|
6
|
+
|
|
7
|
+
Suite Setup Open Test Browser
|
|
8
|
+
Suite Teardown Delete Records and Close Browser
|
|
9
|
+
|
|
10
|
+
*** Test Cases ***
|
|
11
|
+
Load page object, using defined page object
|
|
12
|
+
[Documentation]
|
|
13
|
+
... If we can't do this, all hope is lost!
|
|
14
|
+
Load page object About Blank
|
|
15
|
+
|
|
16
|
+
Go to page automatically loads page object
|
|
17
|
+
[Documentation] Verify that 'go to page' automatically loads the page object
|
|
18
|
+
Go to page About Blank
|
|
19
|
+
${pobj}= log current page object
|
|
20
|
+
Should not be equal ${pobj} ${None}
|
|
21
|
+
|
|
22
|
+
Go to page and current page should be, using defined page object
|
|
23
|
+
[Documentation] Verify we can go to an implemented page object
|
|
24
|
+
Go to page About Blank
|
|
25
|
+
Current page should be About Blank
|
|
26
|
+
|
|
27
|
+
Go to page, using generic page object
|
|
28
|
+
[Documentation]
|
|
29
|
+
... Verify we can go to a page object for which there is
|
|
30
|
+
... no explicit definition, but for which there is a generic
|
|
31
|
+
... (base) class.
|
|
32
|
+
Go to page Listing Contact
|
|
33
|
+
Current page should be Listing Contact
|
|
34
|
+
|
|
35
|
+
Go to page, using multiple generic pages
|
|
36
|
+
[Documentation]
|
|
37
|
+
... Verify we can use multiple generic page objects in the same
|
|
38
|
+
... test. Earlier versions of the library had a bug that
|
|
39
|
+
... prevented this from working. What was happening is that we
|
|
40
|
+
... were giving the library a generic name like "DetailPage"
|
|
41
|
+
... rather than a name that included the object type such as
|
|
42
|
+
... "ContactDetailPage".
|
|
43
|
+
|
|
44
|
+
Go to page Listing Contact
|
|
45
|
+
Current page should be Listing Contact
|
|
46
|
+
Go to page Listing Task
|
|
47
|
+
Current page should be Listing Task
|
|
48
|
+
Go to page Detail Contact
|
|
49
|
+
Current page should be Detail Contact
|
|
50
|
+
|
|
51
|
+
Get page object
|
|
52
|
+
[Documentation]
|
|
53
|
+
... Verify that we can call the `get page object` keyword and that
|
|
54
|
+
... it returns a page object
|
|
55
|
+
[Setup] Load page object About Blank
|
|
56
|
+
|
|
57
|
+
${pobj}= Get page object About Blank
|
|
58
|
+
Should not be equal ${pobj} ${NONE}
|
|
59
|
+
|
|
60
|
+
@{keywords}= Call method ${pobj} get_keyword_names
|
|
61
|
+
|
|
62
|
+
# The page object should have three keywords we defined, plus
|
|
63
|
+
# one from the base class
|
|
64
|
+
${expected}= Create list hello keyword_one keyword_two log_current_page_object
|
|
65
|
+
Lists should be equal ${keywords} ${expected}
|
|
66
|
+
|
|
67
|
+
Call keyword of defined page object
|
|
68
|
+
[Documentation]
|
|
69
|
+
... Verify we can call a keyword in a defined page object
|
|
70
|
+
Load page object About Blank
|
|
71
|
+
|
|
72
|
+
# "Hello" is a keyword in AboutBlankPage
|
|
73
|
+
${result}= Hello world
|
|
74
|
+
should be equal ${result} About:Blank Page says Hello, world
|
|
75
|
+
|
|
76
|
+
Load page object, using generic page object
|
|
77
|
+
[Documentation]
|
|
78
|
+
... Verify that 'load page object' works when using a generic
|
|
79
|
+
... page object
|
|
80
|
+
Load page object Listing Contact
|
|
81
|
+
|
|
82
|
+
Current page should be, using generic page object
|
|
83
|
+
[Documentation]
|
|
84
|
+
... Verify that 'current page should be' works when
|
|
85
|
+
... using a generic page object
|
|
86
|
+
[Setup] Go to page Listing Task
|
|
87
|
+
|
|
88
|
+
log current page object
|
|
89
|
+
Current page should be Listing Task
|
|
90
|
+
Location should contain /lightning/o/Task/list
|
|
91
|
+
|
|
92
|
+
Current page should be throws appropriate error
|
|
93
|
+
[Documentation]
|
|
94
|
+
... Verifies the error that is thrown when 'current page should be'
|
|
95
|
+
... is false
|
|
96
|
+
[Setup] load page object Listing Contact
|
|
97
|
+
|
|
98
|
+
${location}= get location
|
|
99
|
+
run keyword and expect error Expected location to be 'about:blank' but it was '${location}'
|
|
100
|
+
... current page should be About Blank
|
|
101
|
+
|
|
102
|
+
Error when no page object can be found
|
|
103
|
+
[Documentation]
|
|
104
|
+
... Verify we get an error if no page object exists, and
|
|
105
|
+
... there is no suitable base class
|
|
106
|
+
|
|
107
|
+
Run keyword and expect error
|
|
108
|
+
... Unable to find a page object for 'Foo Bar'
|
|
109
|
+
... Go to page Foo Bar
|
|
110
|
+
|
|
111
|
+
Log page object keywords
|
|
112
|
+
[Documentation] Verify that 'log page object keywords' doesn't throw an error
|
|
113
|
+
# All we're doing here is verifying it doesn't throw an error.
|
|
114
|
+
# Unfortunately there's no way to verify the robot log message
|
|
115
|
+
# was called (or is there...???)
|
|
116
|
+
[Setup] Load Page Object About Blank
|
|
117
|
+
|
|
118
|
+
log page object keywords
|
|
119
|
+
|
|
120
|
+
Load multiple page objects in library search order
|
|
121
|
+
[Documentation]
|
|
122
|
+
... Loading a page object inserts it at the start of the
|
|
123
|
+
... library search order. Verify that that happens properly.
|
|
124
|
+
|
|
125
|
+
# Note: the library search order persists for the life of a suite
|
|
126
|
+
# Therefore we need to reset it before running this test since
|
|
127
|
+
# other tests will be loading page objects
|
|
128
|
+
[Setup] Set library search order PageObjects
|
|
129
|
+
|
|
130
|
+
Go to page About Blank
|
|
131
|
+
Go to page Home Task
|
|
132
|
+
Go to page Listing Contact
|
|
133
|
+
|
|
134
|
+
# This should move HomeTask to the front. It should not
|
|
135
|
+
# end up in the search order twice.
|
|
136
|
+
Go to page Home Task
|
|
137
|
+
|
|
138
|
+
# Note: the order is a list of strings, not actual libraries.
|
|
139
|
+
${actual_order}= Set library search order
|
|
140
|
+
${expected_order}= Create list TaskHomePage ContactListingPage AboutBlankPage PageObjects
|
|
141
|
+
log actual order: ${actual_order}
|
|
142
|
+
Lists should be equal ${actual_order} ${expected_order}
|
|
143
|
+
|
|
144
|
+
Wait for page object
|
|
145
|
+
Go to page Listing Contact
|
|
146
|
+
Click object button New
|
|
147
|
+
|
|
148
|
+
Wait for page object New Contact
|
|
149
|
+
|
|
150
|
+
Wait for page object exception
|
|
151
|
+
[Documentation] Verify we throw an error if page object isn't found
|
|
152
|
+
Go to page Listing Contact
|
|
153
|
+
Run keyword and expect error
|
|
154
|
+
... Unable to find a page object for 'BogusType BogusObject'
|
|
155
|
+
... Wait for page object BogusType BogusObject
|
|
156
|
+
|
|
157
|
+
Wait for modal
|
|
158
|
+
[Documentation] Verify that the 'wait for modal' keyword works
|
|
159
|
+
Go to page Listing Contact
|
|
160
|
+
Click object button New
|
|
161
|
+
|
|
162
|
+
Wait for modal New Contact
|
|
163
|
+
|
|
164
|
+
Wait for modal exception
|
|
165
|
+
[Documentation] Verify we throw an error if page object isn't found
|
|
166
|
+
Go to page Listing Contact
|
|
167
|
+
Click object button New
|
|
168
|
+
|
|
169
|
+
Run keyword and expect error
|
|
170
|
+
... Unable to find a page object for 'BogusType BogusObject'
|
|
171
|
+
... Wait for modal BogusType BogusObject
|