Repository: SFDO-Tooling/CumulusCI
Pull request #3133 (2022-03-25 15:37:33)

Automated update to sfdc API version 54.0

jstvz: @bethbrains This PR maps to @[W-10743352](https://gus.lightning.force.com/a07EE00000rPCf1YAG) and was created via the workflow to be added by #3132.

Patch:
diff --git a/cumulusci/cumulusci.yml b/cumulusci/cumulusci.yml
index 44db3b130..0f80bb972 100644
--- a/cumulusci/cumulusci.yml
+++ b/cumulusci/cumulusci.yml
@@ -191,7 +191,6 @@ tasks:
         description: Update records of an sObject matching a where-clause.
         class_path: cumulusci.tasks.bulkdata.update_data.UpdateData
         group: Data Operations
-
     deploy:
         description: Deploys the src directory of the repository to the org
         class_path: cumulusci.tasks.salesforce.Deploy
@@ -673,7 +672,6 @@ tasks:
         group: NPSP/EDA
         options:
             restore: True
-
 flows:
     ci_beta:
         group: Continuous Integration
@@ -683,7 +681,6 @@ flows:
                 flow: install_beta
             2:
                 task: run_tests
-
     ci_feature:
         group: Continuous Integration
         description: Prepare an unmanaged metadata test org and run Apex tests. Intended for use against feature branch commits.
@@ -707,7 +704,6 @@ flows:
             5:
                 task: github_automerge_feature
                 when: project_config.repo_branch and project_config.repo_branch.startswith(project_config.project__git__prefix_feature)
-
     ci_feature_beta_deps:
         group: Continuous Integration
         description: This flow is deprecated. Please use ci_feature instead.
@@ -731,7 +727,6 @@ flows:
             5:
                 task: github_automerge_feature
                 when: project_config.repo_branch and project_config.repo_branch.startswith(project_config.project__git__prefix_feature)
-
     ci_feature_2gp:
         group: Continuous Integration
         description: Install as a managed 2gp package and run Apex tests. Intended for use after build_feature_test_package.
@@ -742,7 +737,6 @@ flows:
                 flow: config_apextest
             3:
                 task: run_tests
-
     ci_master:
         group: Continuous Integration
         description: Deploy the package metadata to the packaging org and prepare for managed package version upload.  Intended for use against main branch commits.
@@ -756,7 +750,6 @@ flows:
                 flow: deploy_packaging
             3:
                 flow: config_packaging
-
     ci_release:
         group: Continuous Integration
         description: Install a production release version and runs tests from the managed package
@@ -765,7 +758,6 @@ flows:
                 flow: install_prod
             2:
                 task: run_tests
-
     config_apextest:
         group: Post-Install Configuration
         description: Configure an org to run apex tests after package metadata is deployed
@@ -774,7 +766,6 @@ flows:
                 task: deploy_post
             2:
                 task: update_admin_profile
-
     config_dev:
         group: Post-Install Configuration
         description: Configure an org for use as a dev org after package metadata is deployed
@@ -783,7 +774,6 @@ flows:
                 task: deploy_post
             2:
                 task: update_admin_profile
-
     config_managed:
         group: Post-Install Configuration
         description: Configure an org for use after the managed package has been installed.
@@ -792,14 +782,12 @@ flows:
                 task: deploy_post
             2:
                 task: update_admin_profile
-
     config_packaging:
         group: Post-Install Configuration
         description: Configure packaging org for upload after package metadata is deployed
         steps:
             1:
                 task: update_admin_profile
-
     config_qa:
         group: Post-Install Configuration
         description: Configure an org for use as a QA org after package metadata is deployed
@@ -808,14 +796,12 @@ flows:
                 task: deploy_post
             2:
                 task: update_admin_profile
-
     config_regression:
         group: Post-Install Configuration
         description: Configure an org for QA regression after the package is installed
         steps:
             1:
                 flow: config_managed
-
     dependencies:
         group: Dependency Management
         description: Deploy dependencies to prepare the org environment for the package metadata
@@ -824,7 +810,6 @@ flows:
                 task: update_dependencies
             2:
                 task: deploy_pre
-
     beta_dependencies:
         group: Dependency Management
         description: "This flow is deprecated. Please use the `dependencies` flow and set the `include_beta` option on the first task, `update_dependencies`. Deploy the latest (beta) version of dependencies to prepare the org environment for the package metadata"
@@ -835,7 +820,6 @@ flows:
                     resolution_strategy: preproduction
             2:
                 task: deploy_pre
-
     deploy_unmanaged:
         group: Deployment
         description: Deploy the unmanaged metadata from the package
@@ -861,7 +845,6 @@ flows:
                 when: project_config.project__source_format != "sfdx" or not org_config.scratch
             5:
                 task: snapshot_changes
-
     deploy_unmanaged_ee:
         group: Deployment
         description: Deploy the unmanaged metadata from the package to an Enterprise Edition org
@@ -883,7 +866,6 @@ flows:
                 task: uninstall_packaged_incremental
                 options:
                     purge_on_delete: False
-
     deploy_packaging:
         group: Deployment
         description: Process and deploy the package metadata to the packaging org
@@ -905,7 +887,6 @@ flows:
                 task: revert_managed_src
             6:
                 task: uninstall_packaged_incremental
-
     dev_org:
         group: Org Setup
         description: Set up an org as a development environment for unmanaged metadata
@@ -921,7 +902,6 @@ flows:
                 flow: config_dev
             4:
                 task: snapshot_changes
-
     dev_org_beta_deps:
         group: Org Setup
         description: This flow is deprecated. Please use dev_org instead.
@@ -935,7 +915,6 @@ flows:
                 flow: deploy_unmanaged
             3:
                 flow: config_dev
-
     dev_org_namespaced:
         group: Org Setup
         description: Set up a namespaced scratch org as a development environment for unmanaged metadata
@@ -951,7 +930,6 @@ flows:
                 flow: config_dev
             4:
                 task: snapshot_changes
-
     qa_org:
         group: Org Setup
         description: Set up an org as a QA environment for unmanaged metadata
@@ -967,7 +945,6 @@ flows:
                 flow: config_qa
             4:
                 task: snapshot_changes
-
     qa_org_2gp:
         group: Org Setup
         description: Set up an org as a QA environment using a second-generation package
@@ -978,7 +955,6 @@ flows:
                 flow: config_qa
             3:
                 task: snapshot_changes
-
     regression_org:
         group: Org Setup
         description: Simulates an org that has been upgraded from the latest release of to the current beta and its dependencies, but deploys any unmanaged metadata from the current beta.
@@ -989,7 +965,6 @@ flows:
                 flow: config_regression
             3:
                 task: snapshot_changes
-
     uninstall_managed:
         group: Install / Uninstall
         description: Uninstall the installed managed version of the package.  Run this before install_beta or install_prod if a version is already installed in the target org.
@@ -998,7 +973,6 @@ flows:
                 task: uninstall_post
             2:
                 task: uninstall_managed
-
     install_2gp_commit:
         group: Install / Uninstall
         description: Install the 2GP package for the current commit
@@ -1017,7 +991,6 @@ flows:
                 task: install_managed
                 options:
                     version: ^^github_package_data.version_id
-
     install_beta:
         group: Org Setup
         description: Install and configure the latest beta version
@@ -1033,7 +1006,6 @@ flows:
                 flow: config_managed
             4:
                 task: snapshot_changes
-
     install_prod:
         group: Org Setup
         description: Install and configure the latest production version
@@ -1046,7 +1018,6 @@ flows:
                 flow: config_managed
             4:
                 task: snapshot_changes
-
     install_prod_no_config:
         group: Install / Uninstall
         description: Install but do not configure the latest production version
@@ -1057,7 +1028,6 @@ flows:
                 task: install_managed
             3:
                 task: deploy_post
-
     install_regression:
         group: Install / Uninstall
         description: Install the latest beta dependencies and upgrade to the latest beta version from the most recent production version
@@ -1071,7 +1041,6 @@ flows:
                 task: install_managed
             3:
                 task: install_managed_beta
-
     release_2gp_beta:
         group: Release Operations
         description: Upload and release a beta 2gp managed package version
@@ -1106,7 +1075,6 @@ flows:
                     version_id: ^^create_package_version.subscriber_package_version_id
             4:
                 task: github_automerge_main
-
     release_unlocked_beta:
         group: Release Operations
         description: Upload and release a beta 2gp unlocked package version
@@ -1140,7 +1108,6 @@ flows:
                     version_id: ^^create_package_version.subscriber_package_version_id
             4:
                 task: github_automerge_main
-
     release_beta:
         group: Release Operations
         description: Upload and release a beta version of the metadata currently in packaging
@@ -1168,7 +1135,6 @@ flows:
                     version_id: ^^upload_beta.version_id
             4:
                 task: github_automerge_main
-
     release_production:
         group: Release Operations
         description: Upload and release a production version of the metadata currently in packaging
@@ -1190,7 +1156,6 @@ flows:
                     publish: True
                     tag: ^^github_release.tag_name
                     version_id: ^^upload_production.version_id
-
     release_2gp_production:
         group: Release Operations
         description: Promote the latest beta 2gp managed package version and create a new release in GitHub
@@ -1212,7 +1177,6 @@ flows:
                     publish: True
                     tag: ^^github_release.tag_name
                     version_id: ^^promote_package_version.version_id
-
     release_unlocked_production:
         group: Release Operations
         description: Promote the latest beta 2GP unlocked package version and create a new release in GitHub
@@ -1234,7 +1198,6 @@ flows:
                     publish: True
                     tag: ^^github_release.tag_name
                     version_id: ^^promote_package_version.version_id
-
     build_feature_test_package:
         group: Release Operations
         description: Create a 2gp managed package version
@@ -1251,7 +1214,6 @@ flows:
                     version_type: minor
                     skip_validation: True
                     resolution_strategy: commit_status
-
     unmanaged_ee:
         group: Deployment
         description: Deploy the unmanaged package metadata and all dependencies to the target EE org
@@ -1263,7 +1225,6 @@ flows:
                         purge_on_delete: False
             2:
                 flow: deploy_unmanaged_ee
-
 services:
     connected_app:
         description: A Connected App is required to connect to and run commands against persistent orgs. See https://cumulusci.readthedocs.io/en/latest/connected_orgs.html#use-a-custom-connected-app for more info.
@@ -1348,7 +1309,6 @@ services:
             callback_url:
                 description: The URL that the auth server will callback to after authentication of the user
                 required: True
-
 project:
     name:
     package:
@@ -1357,7 +1317,7 @@ project:
         namespace:
         install_class:
         uninstall_class:
-        api_version: "52.0"
+        api_version: "54.0"
     git:
         default_branch: master
         prefix_feature: feature/
@@ -1410,7 +1370,6 @@ project:
                 - latest_release
                 - unmanaged
     dependencies:
-
 orgs:
     scratch:
         dev:


Test patch:
diff --git a/cumulusci/salesforce_api/tests/test_package_install.py b/cumulusci/salesforce_api/tests/test_package_install.py
index 2ae0b77db..523c012a8 100644
--- a/cumulusci/salesforce_api/tests/test_package_install.py
+++ b/cumulusci/salesforce_api/tests/test_package_install.py
@@ -17,7 +17,7 @@ from cumulusci.salesforce_api.package_install import (
     install_package_by_namespace_version,
     install_package_by_version_id,
 )
-from cumulusci.tests.util import create_project_config
+from cumulusci.tests.util import CURRENT_SF_API_VERSION, create_project_config
 
 
 @responses.activate
@@ -25,17 +25,17 @@ def test_install_package_by_version_id(caplog):
     caplog.set_level(logging.INFO)
     responses.add(
         "POST",
-        "https://salesforce/services/data/v52.0/tooling/sobjects/PackageInstallRequest/",
+        f"https://salesforce/services/data/v{CURRENT_SF_API_VERSION}/tooling/sobjects/PackageInstallRequest/",
         json={"id": "0Hf"},
     )
     responses.add(
         "GET",
-        "https://salesforce/services/data/v52.0/tooling/query/",
+        f"https://salesforce/services/data/v{CURRENT_SF_API_VERSION}/tooling/query/",
         json={"records": [{"Status": "IN_PROGRESS"}]},
     )
     responses.add(
         "GET",
-        "https://salesforce/services/data/v52.0/tooling/query/",
+        f"https://salesforce/services/data/v{CURRENT_SF_API_VERSION}/tooling/query/",
         json={"records": [{"Status": "SUCCESS"}]},
     )
 
@@ -53,12 +53,12 @@ def test_install_package_by_version_id(caplog):
 def test_install_package_by_version_id__error():
     responses.add(
         "POST",
-        "https://salesforce/services/data/v52.0/tooling/sobjects/PackageInstallRequest/",
+        f"https://salesforce/services/data/v{CURRENT_SF_API_VERSION}/tooling/sobjects/PackageInstallRequest/",
         json={"id": "0Hf"},
     )
     responses.add(
         "GET",
-        "https://salesforce/services/data/v52.0/tooling/query/",
+        f"https://salesforce/services/data/v{CURRENT_SF_API_VERSION}/tooling/query/",
         json={
             "records": [
                 {
@@ -84,18 +84,18 @@ def test_install_package_by_version_id__not_propagated(caplog):
     caplog.set_level(logging.INFO)
     responses.add(
         "POST",
-        "https://salesforce/services/data/v52.0/tooling/sobjects/PackageInstallRequest/",
+        f"https://salesforce/services/data/v{CURRENT_SF_API_VERSION}/tooling/sobjects/PackageInstallRequest/",
         json={"id": "0Hf"},
     )
     responses.add(
         "GET",
-        "https://salesforce/services/data/v52.0/tooling/query/",
+        f"https://salesforce/services/data/v{CURRENT_SF_API_VERSION}/tooling/query/",
         status=400,
         body="invalid cross reference id",
     )
     responses.add(
         "GET",
-        "https://salesforce/services/data/v52.0/tooling/query/",
+        f"https://salesforce/services/data/v{CURRENT_SF_API_VERSION}/tooling/query/",
         json={"records": [{"Status": "SUCCESS"}]},
     )
 
diff --git a/cumulusci/tasks/bulkdata/tests/test_upsert.py b/cumulusci/tasks/bulkdata/tests/test_upsert.py
index dc0b16614..e2fb2055c 100644
--- a/cumulusci/tasks/bulkdata/tests/test_upsert.py
+++ b/cumulusci/tasks/bulkdata/tests/test_upsert.py
@@ -6,9 +6,7 @@ import responses
 
 from cumulusci.tasks.bulkdata import LoadData
 from cumulusci.tasks.bulkdata.step import DataApi, DataOperationStatus
-from cumulusci.tests.util import mock_describe_calls
-
-CURRENT_SF_API_VERSION = "52.0"  # match cumulusci.yml until it updates
+from cumulusci.tests.util import CURRENT_SF_API_VERSION, mock_describe_calls
 
 
 class TestUpsert:
diff --git a/cumulusci/tasks/preflight/tests/test_settings.py b/cumulusci/tasks/preflight/tests/test_settings.py
index 3291b7be2..9e2e6dddd 100644
--- a/cumulusci/tasks/preflight/tests/test_settings.py
+++ b/cumulusci/tasks/preflight/tests/test_settings.py
@@ -6,6 +6,7 @@ from simple_salesforce.exceptions import SalesforceMalformedRequest
 
 from cumulusci.tasks.preflight.settings import CheckMyDomainActive, CheckSettingsValue
 from cumulusci.tasks.salesforce.tests.util import create_task
+from cumulusci.tests.util import CURRENT_SF_API_VERSION
 
 JSON_RESPONSE = {
     "records": [{"IntVal": 3, "FloatVal": 3.0, "BoolVal": True, "StringVal": "foo"}],
@@ -28,7 +29,7 @@ JSON_RESPONSE = {
 def test_check_settings(settings_field, value, outcome):
     responses.add(
         "GET",
-        f"https://test.salesforce.com/services/data/v52.0/tooling/query/?q=SELECT+{settings_field}+FROM+ChatterSettings",
+        f"https://test.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/query/?q=SELECT+{settings_field}+FROM+ChatterSettings",
         json=JSON_RESPONSE,
     )
     task = create_task(
@@ -49,7 +50,7 @@ def test_check_settings(settings_field, value, outcome):
 def test_check_settings__no_settings():
     responses.add(
         "GET",
-        "https://test.salesforce.com/services/data/v52.0/tooling/query/?q=SELECT+Foo+FROM+ChatterSettings",
+        f"https://test.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/query/?q=SELECT+Foo+FROM+ChatterSettings",
         json={"records": []},
     )
     task = create_task(
@@ -71,7 +72,7 @@ def test_check_settings__failure():
     responses.add(
         "GET",
         status=400,
-        url="https://test.salesforce.com/services/data/v52.0/tooling/query/?q=SELECT+Test+FROM+NoSettings",
+        url=f"https://test.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/query/?q=SELECT+Test+FROM+NoSettings",
         json={},
     )
     task = create_task(
@@ -94,7 +95,7 @@ def test_check_settings__exception():
     responses.add(
         "GET",
         status=400,
-        url="https://test.salesforce.com/services/data/v52.0/tooling/query/?q=SELECT+Test+FROM+NoSettings",
+        url=f"https://test.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/query/?q=SELECT+Test+FROM+NoSettings",
         json={},
     )
     task = create_task(
diff --git a/cumulusci/tasks/salesforce/tests/test_composite.py b/cumulusci/tasks/salesforce/tests/test_composite.py
index 2da0b36e7..55388f88d 100644
--- a/cumulusci/tasks/salesforce/tests/test_composite.py
+++ b/cumulusci/tasks/salesforce/tests/test_composite.py
@@ -6,6 +6,7 @@ import responses
 
 from cumulusci.core.exceptions import SalesforceException
 from cumulusci.tasks.salesforce.composite import API_ROLLBACK_MESSAGE, CompositeApi
+from cumulusci.tests.util import CURRENT_SF_API_VERSION
 
 from .util import create_task
 
@@ -14,12 +15,12 @@ COMPOSITE_REQUEST = {
     "compositeRequest": [
         {
             "method": "GET",
-            "url": "/services/data/v46.0/query/?q=SELECT+Id+FROM+RecordType+WHERE+SobjectType+=+'Account' AND DeveloperName = 'Educational_Institution'",
+            "url": f"/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id+FROM+RecordType+WHERE+SobjectType+=+'Account' AND DeveloperName = 'Educational_Institution'",
             "referenceId": "schoolRt",
         },
         {
             "method": "POST",
-            "url": "/services/data/v46.0/sobjects/Account",
+            "url": f"/services/data/v{CURRENT_SF_API_VERSION}/sobjects/Account",
             "referenceId": "uni",
             "body": {
                 "Name": "Connected Campus University",
@@ -28,7 +29,7 @@ COMPOSITE_REQUEST = {
         },
         {
             "method": "POST",
-            "url": "/services/data/v46.0/sobjects/User",
+            "url": f"/services/data/v{CURRENT_SF_API_VERSION}/sobjects/User",
             "referenceId": "sophiaUser",
             "body": {
                 "FirstName": "Sophia",
@@ -62,7 +63,7 @@ COMPOSITE_RESPONSE = {
                     {
                         "attributes": {
                             "type": "RecordType",
-                            "url": "/services/data/v46.0/sobjects/RecordType/01211000002FEJ0AAO",
+                            "url": f"/services/data/v{CURRENT_SF_API_VERSION}/sobjects/RecordType/01211000002FEJ0AAO",
                         },
                         "Id": "01211000002FEJ0AAO",
                     }
@@ -75,7 +76,7 @@ COMPOSITE_RESPONSE = {
         {
             "body": {"id": "00111000021SzRwAAK", "success": True, "errors": []},
             "httpHeaders": {
-                "Location": "/services/data/v46.0/sobjects/Account/00111000021SzRwAAK"
+                "Location": f"/services/data/v{CURRENT_SF_API_VERSION}/sobjects/Account/00111000021SzRwAAK"
             },
             "httpStatusCode": 201,
             "referenceId": "uni",
@@ -83,7 +84,7 @@ COMPOSITE_RESPONSE = {
         {
             "body": {"id": "00511000009y7uaAAA", "success": True, "errors": []},
             "httpHeaders": {
-                "Location": "/services/data/v46.0/sobjects/User/00511000009y7uaAAA"
+                "Location": f"/services/data/v{CURRENT_SF_API_VERSION}/sobjects/User/00511000009y7uaAAA"
             },
             "httpStatusCode": 201,
             "referenceId": "sophiaUser",
@@ -108,7 +109,7 @@ class TestCompositeApi:
         )
         responses.add(
             method="POST",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/composite",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/composite",
             status=200,
             json=COMPOSITE_RESPONSE,
         )
@@ -134,7 +135,7 @@ class TestCompositeApi:
         )
         responses.add(
             method="POST",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/composite",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/composite",
             status=200,
             json=COMPOSITE_RESPONSE,
         )
@@ -190,7 +191,7 @@ class TestCompositeApi:
         }
         responses.add(
             method="POST",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/composite",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/composite",
             status=200,
             json=error_response,
         )
@@ -214,7 +215,7 @@ class TestCompositeApi:
         request.append(
             {
                 "method": "PATCH",
-                "url": "/services/data/v46.0/sobjects/User",
+                "url": f"/services/data/v{CURRENT_SF_API_VERSION}/sobjects/User",
                 "body": {
                     "Id": "%%%USERID%%%",
                     "Email": "test@testerino.patch",
diff --git a/cumulusci/tasks/salesforce/tests/test_create_permission_sets.py b/cumulusci/tasks/salesforce/tests/test_create_permission_sets.py
index 0bad5d067..ed74ed844 100644
--- a/cumulusci/tasks/salesforce/tests/test_create_permission_sets.py
+++ b/cumulusci/tasks/salesforce/tests/test_create_permission_sets.py
@@ -1,6 +1,7 @@
 import responses
 
 from cumulusci.tasks.salesforce.create_permission_sets import CreatePermissionSet
+from cumulusci.tests.util import CURRENT_SF_API_VERSION
 
 from .util import create_task
 
@@ -22,13 +23,13 @@ class TestCreatePermissionSet:
 
         responses.add(
             method="POST",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/sobjects/PermissionSet/",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/sobjects/PermissionSet/",
             status=200,
             json={"id": "0PS3F000000fCNPWA2", "success": True, "errors": []},
         )
         responses.add(
             method="POST",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/sobjects/PermissionSetAssignment/",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/sobjects/PermissionSetAssignment/",
             status=200,
             json={"id": "0Pa000000000001", "success": True, "errors": []},
         )
diff --git a/cumulusci/tasks/salesforce/tests/test_enable_prediction.py b/cumulusci/tasks/salesforce/tests/test_enable_prediction.py
index d60b1ec0e..194c0e4a1 100644
--- a/cumulusci/tasks/salesforce/tests/test_enable_prediction.py
+++ b/cumulusci/tasks/salesforce/tests/test_enable_prediction.py
@@ -4,7 +4,7 @@ import responses
 from cumulusci.core.config.org_config import OrgConfig
 from cumulusci.core.exceptions import CumulusCIException
 from cumulusci.tasks.salesforce.enable_prediction import EnablePrediction
-from cumulusci.tests.util import DummyKeychain
+from cumulusci.tests.util import CURRENT_SF_API_VERSION, DummyKeychain
 
 from .util import create_task
 
@@ -45,15 +45,15 @@ def mock_oauth():
             json=[
                 {
                     "label": "Summer '21",
-                    "url": "/services/data/v52.0",
-                    "version": "52.0",
+                    "url": f"/services/data/v{CURRENT_SF_API_VERSION}",
+                    "version": CURRENT_SF_API_VERSION,
                 }
             ],
             status=200,
         )
         rsps.add(
             "GET",
-            "https://test-dev-ed.my.salesforce.com/services/data/v52.0/sobjects/Organization/",
+            f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/sobjects/Organization/",
             json={
                 "OrganizationType": "Developer",
                 "IsSandbox": False,
@@ -68,32 +68,32 @@ def mock_oauth():
 def test_run_task(mock_oauth, task):
     mock_oauth.add(
         "GET",
-        "https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/query/?q=SELECT+Id+FROM+MLPredictionDefinition+WHERE+DeveloperName+%3D+%27test_prediction_v0%27",
+        f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/query/?q=SELECT+Id+FROM+MLPredictionDefinition+WHERE+DeveloperName+%3D+%27test_prediction_v0%27",
         json={"totalSize": 1, "records": [{"Id": "001"}]},
     )
     mock_oauth.add(
         "GET",
-        "https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/query/?q=SELECT+Id+FROM+MLPredictionDefinition+WHERE+DeveloperName+%3D+%27test_prediction_2_v0%27",
+        f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/query/?q=SELECT+Id+FROM+MLPredictionDefinition+WHERE+DeveloperName+%3D+%27test_prediction_2_v0%27",
         json={"totalSize": 1, "records": [{"Id": "002"}]},
     )
     mock_oauth.add(
         "GET",
-        "https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/sobjects/MLPredictionDefinition/001",
+        f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/sobjects/MLPredictionDefinition/001",
         json={"Metadata": {"status": "Draft"}},
     )
     mock_oauth.add(
         "GET",
-        "https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/sobjects/MLPredictionDefinition/002",
+        f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/sobjects/MLPredictionDefinition/002",
         json={"Metadata": {"status": "Draft"}},
     )
     mock_oauth.add(
         method="PATCH",
-        url="https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/sobjects/MLPredictionDefinition/001",
+        url=f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/sobjects/MLPredictionDefinition/001",
         match=[responses.json_params_matcher({"Metadata": {"status": "Enabled"}})],
     )
     mock_oauth.add(
         method="PATCH",
-        url="https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/sobjects/MLPredictionDefinition/002",
+        url=f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/sobjects/MLPredictionDefinition/002",
         match=[responses.json_params_matcher({"Metadata": {"status": "Enabled"}})],
     )
 
@@ -103,7 +103,7 @@ def test_run_task(mock_oauth, task):
 def test_run_task__not_found_exception(mock_oauth, task):
     mock_oauth.add(
         "GET",
-        "https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/query/?q=SELECT+Id+FROM+MLPredictionDefinition+WHERE+DeveloperName+%3D+%27test_prediction_v0%27",
+        f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/query/?q=SELECT+Id+FROM+MLPredictionDefinition+WHERE+DeveloperName+%3D+%27test_prediction_v0%27",
         json={"totalSize": 0, "records": []},
     )
 
@@ -115,17 +115,17 @@ def test_run_task__not_found_exception(mock_oauth, task):
 def test_run_task__failed_update_exception(mock_oauth, task):
     mock_oauth.add(
         "GET",
-        "https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/query/?q=SELECT+Id+FROM+MLPredictionDefinition+WHERE+DeveloperName+%3D+%27test_prediction_v0%27",
+        f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/query/?q=SELECT+Id+FROM+MLPredictionDefinition+WHERE+DeveloperName+%3D+%27test_prediction_v0%27",
         json={"totalSize": 1, "records": [{"Id": "001"}]},
     )
     mock_oauth.add(
         "GET",
-        "https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/sobjects/MLPredictionDefinition/001",
+        f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/sobjects/MLPredictionDefinition/001",
         json={"Metadata": {"status": "Draft"}},
     )
     mock_oauth.add(
         method="PATCH",
-        url="https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/sobjects/MLPredictionDefinition/001",
+        url=f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/sobjects/MLPredictionDefinition/001",
         status=400,
     )
 
@@ -143,43 +143,43 @@ def test_run_task__namespaced_org(mock_oauth, task):
 
     mock_oauth.add(
         "GET",
-        "https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/query/?q=SELECT+Id+FROM+MLPredictionDefinition+WHERE+DeveloperName+%3D+%27foo__test_prediction_v0%27",
+        f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/query/?q=SELECT+Id+FROM+MLPredictionDefinition+WHERE+DeveloperName+%3D+%27foo__test_prediction_v0%27",
         json={"totalSize": 1, "records": [{"Id": "001"}]},
     )
     mock_oauth.add(
         "GET",
-        "https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/query/?q=SELECT+Id+FROM+MLPredictionDefinition+WHERE+DeveloperName+%3D+%27foo__test_prediction_2_v0%27",
+        f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/query/?q=SELECT+Id+FROM+MLPredictionDefinition+WHERE+DeveloperName+%3D+%27foo__test_prediction_2_v0%27",
         json={"totalSize": 1, "records": [{"Id": "002"}]},
     )
     mock_oauth.add(
         "GET",
-        "https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/sobjects/MLPredictionDefinition/001",
+        f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/sobjects/MLPredictionDefinition/001",
         json={"Metadata": {"status": "Draft"}},
     )
     mock_oauth.add(
         "GET",
-        "https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/sobjects/MLPredictionDefinition/002",
+        f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/sobjects/MLPredictionDefinition/002",
         json={"Metadata": {"status": "Draft"}},
     )
     mock_oauth.add(
         method="PATCH",
-        url="https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/sobjects/MLPredictionDefinition/001",
+        url=f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/sobjects/MLPredictionDefinition/001",
         match=[responses.json_params_matcher({"Metadata": {"status": "Enabled"}})],
     )
     mock_oauth.add(
         method="PATCH",
-        url="https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/sobjects/MLPredictionDefinition/002",
+        url=f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/sobjects/MLPredictionDefinition/002",
         match=[responses.json_params_matcher({"Metadata": {"status": "Enabled"}})],
     )
 
     mock_oauth.add(
         "GET",
-        "https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/query/?q=SELECT%20SubscriberPackage.Id,%20SubscriberPackage.NamespacePrefix,%20SubscriberPackageVersionId%20FROM%20InstalledSubscriberPackage",
+        f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/query/?q=SELECT%20SubscriberPackage.Id,%20SubscriberPackage.NamespacePrefix,%20SubscriberPackageVersionId%20FROM%20InstalledSubscriberPackage",
         json={"totalSize": 0, "records": []},
     )
     mock_oauth.replace(
         "GET",
-        "https://test-dev-ed.my.salesforce.com/services/data/v52.0/sobjects/Organization/",
+        f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/sobjects/Organization/",
         json={
             "OrganizationType": "Developer",
             "IsSandbox": False,
@@ -201,32 +201,32 @@ def test_run_task__managed_org(mock_oauth, task):
 
     mock_oauth.add(
         "GET",
-        "https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/query/?q=SELECT+Id+FROM+MLPredictionDefinition+WHERE+DeveloperName+%3D+%27foo__test_prediction_v0%27",
+        f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/query/?q=SELECT+Id+FROM+MLPredictionDefinition+WHERE+DeveloperName+%3D+%27foo__test_prediction_v0%27",
         json={"totalSize": 1, "records": [{"Id": "001"}]},
     )
     mock_oauth.add(
         "GET",
-        "https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/query/?q=SELECT+Id+FROM+MLPredictionDefinition+WHERE+DeveloperName+%3D+%27foo__test_prediction_2_v0%27",
+        f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/query/?q=SELECT+Id+FROM+MLPredictionDefinition+WHERE+DeveloperName+%3D+%27foo__test_prediction_2_v0%27",
         json={"totalSize": 1, "records": [{"Id": "002"}]},
     )
     mock_oauth.add(
         "GET",
-        "https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/sobjects/MLPredictionDefinition/001",
+        f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/sobjects/MLPredictionDefinition/001",
         json={"Metadata": {"status": "Draft"}},
     )
     mock_oauth.add(
         "GET",
-        "https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/sobjects/MLPredictionDefinition/002",
+        f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/sobjects/MLPredictionDefinition/002",
         json={"Metadata": {"status": "Draft"}},
     )
     mock_oauth.add(
         method="PATCH",
-        url="https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/sobjects/MLPredictionDefinition/001",
+        url=f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/sobjects/MLPredictionDefinition/001",
         match=[responses.json_params_matcher({"Metadata": {"status": "Enabled"}})],
     )
     mock_oauth.add(
         method="PATCH",
-        url="https://test-dev-ed.my.salesforce.com/services/data/v52.0/tooling/sobjects/MLPredictionDefinition/002",
+        url=f"https://test-dev-ed.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/tooling/sobjects/MLPredictionDefinition/002",
         match=[responses.json_params_matcher({"Metadata": {"status": "Enabled"}})],
     )
 
diff --git a/cumulusci/tasks/salesforce/tests/test_insert_record.py b/cumulusci/tasks/salesforce/tests/test_insert_record.py
index 97152b403..ace77877c 100644
--- a/cumulusci/tasks/salesforce/tests/test_insert_record.py
+++ b/cumulusci/tasks/salesforce/tests/test_insert_record.py
@@ -7,6 +7,7 @@ from simple_salesforce.exceptions import SalesforceError
 
 from cumulusci.core.exceptions import SalesforceException
 from cumulusci.tasks.salesforce.insert_record import InsertRecord
+from cumulusci.tests.util import CURRENT_SF_API_VERSION
 
 from .util import create_task
 
@@ -89,7 +90,9 @@ class TestCreateRecord:
         )
         responses.add(
             responses.POST,
-            re.compile(r"https://test.salesforce.com/services/data/v52.0/.*"),
+            re.compile(
+                rf"https://test.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}/.*"
+            ),
             content_type="application/json",
             status=404,
             json={
diff --git a/cumulusci/tasks/salesforce/users/tests/test_permsets.py b/cumulusci/tasks/salesforce/users/tests/test_permsets.py
index 0a573a7ae..901a49952 100644
--- a/cumulusci/tasks/salesforce/users/tests/test_permsets.py
+++ b/cumulusci/tasks/salesforce/users/tests/test_permsets.py
@@ -11,6 +11,7 @@ from cumulusci.tasks.salesforce.users.permsets import (
     AssignPermissionSetLicenses,
     AssignPermissionSets,
 )
+from cumulusci.tests.util import CURRENT_SF_API_VERSION
 
 
 class TestCreatePermissionSet:
@@ -25,7 +26,7 @@ class TestCreatePermissionSet:
 
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2C%28SELECT+PermissionSetId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Username+%3D+%27test-cci%40example.com%27",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2C%28SELECT+PermissionSetId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Username+%3D+%27test-cci%40example.com%27",
             status=200,
             json={
                 "done": True,
@@ -44,7 +45,7 @@ class TestCreatePermissionSet:
         )
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2CName+FROM+PermissionSet+WHERE+Name+IN+%28%27PermSet1%27%2C+%27PermSet2%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2CName+FROM+PermissionSet+WHERE+Name+IN+%28%27PermSet1%27%2C+%27PermSet2%27%29",
             status=200,
             json={
                 "done": True,
@@ -63,7 +64,7 @@ class TestCreatePermissionSet:
         )
         responses.add(
             method="POST",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/composite/sobjects",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/composite/sobjects",
             status=200,
             json=[{"id": "0Pa000000000001", "success": True, "errors": []}],
             match=[
@@ -98,7 +99,7 @@ class TestCreatePermissionSet:
 
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2C%28SELECT+PermissionSetId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Alias+IN+%28%27test0%27%2C%27test1%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2C%28SELECT+PermissionSetId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Alias+IN+%28%27test0%27%2C%27test1%27%29",
             status=200,
             json={
                 "done": True,
@@ -125,7 +126,7 @@ class TestCreatePermissionSet:
         )
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2CName+FROM+PermissionSet+WHERE+Name+IN+%28%27PermSet1%27%2C+%27PermSet2%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2CName+FROM+PermissionSet+WHERE+Name+IN+%28%27PermSet1%27%2C+%27PermSet2%27%29",
             status=200,
             json={
                 "done": True,
@@ -144,7 +145,7 @@ class TestCreatePermissionSet:
         )
         responses.add(
             method="POST",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/composite/sobjects",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/composite/sobjects",
             status=200,
             json=[
                 {"id": "0Pa000000000000", "success": True, "errors": []},
@@ -187,7 +188,7 @@ class TestCreatePermissionSet:
 
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2C%28SELECT+PermissionSetId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Alias+IN+%28%27test%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2C%28SELECT+PermissionSetId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Alias+IN+%28%27test%27%29",
             status=200,
             json={
                 "done": True,
@@ -210,7 +211,7 @@ class TestCreatePermissionSet:
 
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2C%28SELECT+PermissionSetId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Alias+IN+%28%27test0%27%2C%27test1%27%2C%27test2%27%2C%27test3%27%2C%27test4%27%2C%27test5%27%2C%27test6%27%2C%27test7%27%2C%27test8%27%2C%27test9%27%2C%27test10%27%2C%27test11%27%2C%27test12%27%2C%27test13%27%2C%27test14%27%2C%27test15%27%2C%27test16%27%2C%27test17%27%2C%27test18%27%2C%27test19%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2C%28SELECT+PermissionSetId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Alias+IN+%28%27test0%27%2C%27test1%27%2C%27test2%27%2C%27test3%27%2C%27test4%27%2C%27test5%27%2C%27test6%27%2C%27test7%27%2C%27test8%27%2C%27test9%27%2C%27test10%27%2C%27test11%27%2C%27test12%27%2C%27test13%27%2C%27test14%27%2C%27test15%27%2C%27test16%27%2C%27test17%27%2C%27test18%27%2C%27test19%27%29",
             status=200,
             json={
                 "done": True,
@@ -226,7 +227,7 @@ class TestCreatePermissionSet:
         )
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2CName+FROM+PermissionSet+WHERE+Name+IN+%28%27PermSet0%27%2C+%27PermSet1%27%2C+%27PermSet2%27%2C+%27PermSet3%27%2C+%27PermSet4%27%2C+%27PermSet5%27%2C+%27PermSet6%27%2C+%27PermSet7%27%2C+%27PermSet8%27%2C+%27PermSet9%27%2C+%27PermSet10%27%2C+%27PermSet11%27%2C+%27PermSet12%27%2C+%27PermSet13%27%2C+%27PermSet14%27%2C+%27PermSet15%27%2C+%27PermSet16%27%2C+%27PermSet17%27%2C+%27PermSet18%27%2C+%27PermSet19%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2CName+FROM+PermissionSet+WHERE+Name+IN+%28%27PermSet0%27%2C+%27PermSet1%27%2C+%27PermSet2%27%2C+%27PermSet3%27%2C+%27PermSet4%27%2C+%27PermSet5%27%2C+%27PermSet6%27%2C+%27PermSet7%27%2C+%27PermSet8%27%2C+%27PermSet9%27%2C+%27PermSet10%27%2C+%27PermSet11%27%2C+%27PermSet12%27%2C+%27PermSet13%27%2C+%27PermSet14%27%2C+%27PermSet15%27%2C+%27PermSet16%27%2C+%27PermSet17%27%2C+%27PermSet18%27%2C+%27PermSet19%27%29",
             status=200,
             json={
                 "done": True,
@@ -242,7 +243,7 @@ class TestCreatePermissionSet:
         )
         responses.add(
             method="POST",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/composite/sobjects",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/composite/sobjects",
             status=200,
             json=[
                 {"id": f"0Pa00000000000{str(i)}", "success": True, "errors": []}
@@ -267,7 +268,7 @@ class TestCreatePermissionSet:
 
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2C%28SELECT+PermissionSetId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Username+%3D+%27test-cci%40example.com%27",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2C%28SELECT+PermissionSetId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Username+%3D+%27test-cci%40example.com%27",
             status=200,
             json={
                 "done": True,
@@ -286,7 +287,7 @@ class TestCreatePermissionSet:
         )
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2CName+FROM+PermissionSet+WHERE+Name+IN+%28%27PermSet1%27%2C+%27PermSet2%27%2C+%27PermSet3%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2CName+FROM+PermissionSet+WHERE+Name+IN+%28%27PermSet1%27%2C+%27PermSet2%27%2C+%27PermSet3%27%29",
             status=200,
             json={
                 "done": True,
@@ -320,7 +321,7 @@ class TestCreatePermissionSet:
 
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2C%28SELECT+PermissionSetId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Alias+IN+%28%27test0%27%2C%27test1%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2C%28SELECT+PermissionSetId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Alias+IN+%28%27test0%27%2C%27test1%27%29",
             status=200,
             json={
                 "done": True,
@@ -347,7 +348,7 @@ class TestCreatePermissionSet:
         )
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2CName+FROM+PermissionSet+WHERE+Name+IN+%28%27PermSet1%27%2C+%27PermSet2%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2CName+FROM+PermissionSet+WHERE+Name+IN+%28%27PermSet1%27%2C+%27PermSet2%27%29",
             status=200,
             json={
                 "done": True,
@@ -366,7 +367,7 @@ class TestCreatePermissionSet:
         )
         responses.add(
             method="POST",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/composite/sobjects",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/composite/sobjects",
             status=200,
             json=[
                 {"id": "0Pa000000000000", "success": True, "errors": []},
@@ -427,7 +428,7 @@ class TestCreatePermissionSetLicense:
 
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2C%28SELECT+PermissionSetLicenseId+FROM+PermissionSetLicenseAssignments%29+FROM+User+WHERE+Username+%3D+%27test-cci%40example.com%27",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2C%28SELECT+PermissionSetLicenseId+FROM+PermissionSetLicenseAssignments%29+FROM+User+WHERE+Username+%3D+%27test-cci%40example.com%27",
             status=200,
             json={
                 "done": True,
@@ -446,7 +447,7 @@ class TestCreatePermissionSetLicense:
         )
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2CDeveloperName+FROM+PermissionSetLicense+WHERE+DeveloperName+IN+%28%27PermSetLicense1%27%2C+%27PermSetLicense2%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2CDeveloperName+FROM+PermissionSetLicense+WHERE+DeveloperName+IN+%28%27PermSetLicense1%27%2C+%27PermSetLicense2%27%29",
             status=200,
             json={
                 "done": True,
@@ -465,7 +466,7 @@ class TestCreatePermissionSetLicense:
         )
         responses.add(
             method="POST",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/composite/sobjects",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/composite/sobjects",
             status=200,
             json=[{"id": "0Pa000000000001", "success": True, "errors": []}],
             match=[
@@ -499,7 +500,7 @@ class TestCreatePermissionSetLicense:
 
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2C%28SELECT+PermissionSetLicenseId+FROM+PermissionSetLicenseAssignments%29+FROM+User+WHERE+Username+%3D+%27test-cci%40example.com%27",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2C%28SELECT+PermissionSetLicenseId+FROM+PermissionSetLicenseAssignments%29+FROM+User+WHERE+Username+%3D+%27test-cci%40example.com%27",
             status=200,
             json={
                 "done": True,
@@ -515,7 +516,7 @@ class TestCreatePermissionSetLicense:
         )
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2CDeveloperName+FROM+PermissionSetLicense+WHERE+DeveloperName+IN+%28%27PermSetLicense1%27%2C+%27PermSetLicense2%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2CDeveloperName+FROM+PermissionSetLicense+WHERE+DeveloperName+IN+%28%27PermSetLicense1%27%2C+%27PermSetLicense2%27%29",
             status=200,
             json={
                 "done": True,
@@ -535,7 +536,7 @@ class TestCreatePermissionSetLicense:
 
         responses.add(
             method="POST",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/composite/sobjects",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/composite/sobjects",
             status=200,
             json=[
                 {"id": "0Pa000000000000", "success": True, "errors": []},
@@ -577,7 +578,7 @@ class TestCreatePermissionSetLicense:
 
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2C%28SELECT+PermissionSetLicenseId+FROM+PermissionSetLicenseAssignments%29+FROM+User+WHERE+Alias+IN+%28%27test%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2C%28SELECT+PermissionSetLicenseId+FROM+PermissionSetLicenseAssignments%29+FROM+User+WHERE+Alias+IN+%28%27test%27%29",
             status=200,
             json={
                 "done": True,
@@ -596,7 +597,7 @@ class TestCreatePermissionSetLicense:
         )
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2CDeveloperName+FROM+PermissionSetLicense+WHERE+DeveloperName+IN+%28%27PermSetLicense1%27%2C+%27PermSetLicense2%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2CDeveloperName+FROM+PermissionSetLicense+WHERE+DeveloperName+IN+%28%27PermSetLicense1%27%2C+%27PermSetLicense2%27%29",
             status=200,
             json={
                 "done": True,
@@ -615,14 +616,14 @@ class TestCreatePermissionSetLicense:
         )
         responses.add(
             method="POST",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/sobjects/PermissionSetLicenseAssign/",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/sobjects/PermissionSetLicenseAssign/",
             status=200,
             json={"id": "0Pa000000000001", "success": True, "errors": []},
         )
 
         responses.add(
             method="POST",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/composite/sobjects",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/composite/sobjects",
             status=200,
             json=[{"id": "0Pa000000000001", "success": True, "errors": []}],
             match=[
@@ -656,7 +657,7 @@ class TestCreatePermissionSetLicense:
 
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2C%28SELECT+PermissionSetLicenseId+FROM+PermissionSetLicenseAssignments%29+FROM+User+WHERE+Alias+IN+%28%27test%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2C%28SELECT+PermissionSetLicenseId+FROM+PermissionSetLicenseAssignments%29+FROM+User+WHERE+Alias+IN+%28%27test%27%29",
             status=200,
             json={
                 "done": True,
@@ -678,7 +679,7 @@ class TestCreatePermissionSetLicense:
 
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2C%28SELECT+PermissionSetLicenseId+FROM+PermissionSetLicenseAssignments%29+FROM+User+WHERE+Username+%3D+%27test-cci%40example.com%27",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2C%28SELECT+PermissionSetLicenseId+FROM+PermissionSetLicenseAssignments%29+FROM+User+WHERE+Username+%3D+%27test-cci%40example.com%27",
             status=200,
             json={
                 "done": True,
@@ -697,7 +698,7 @@ class TestCreatePermissionSetLicense:
         )
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2CDeveloperName+FROM+PermissionSetLicense+WHERE+DeveloperName+IN+%28%27PermSetLicense1%27%2C+%27PermSetLicense2%27%2C+%27PermSetLicense3%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2CDeveloperName+FROM+PermissionSetLicense+WHERE+DeveloperName+IN+%28%27PermSetLicense1%27%2C+%27PermSetLicense2%27%2C+%27PermSetLicense3%27%29",
             status=200,
             json={
                 "done": True,
@@ -731,7 +732,7 @@ class TestCreatePermissionSetGroup:
 
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2C%28SELECT+PermissionSetGroupId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Username+%3D+%27test-cci%40example.com%27",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2C%28SELECT+PermissionSetGroupId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Username+%3D+%27test-cci%40example.com%27",
             status=200,
             json={
                 "done": True,
@@ -750,7 +751,7 @@ class TestCreatePermissionSetGroup:
         )
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2CDeveloperName+FROM+PermissionSetGroup+WHERE+DeveloperName+IN+%28%27PermSetGroup1%27%2C+%27PermSetGroup2%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2CDeveloperName+FROM+PermissionSetGroup+WHERE+DeveloperName+IN+%28%27PermSetGroup1%27%2C+%27PermSetGroup2%27%29",
             status=200,
             json={
                 "done": True,
@@ -769,7 +770,7 @@ class TestCreatePermissionSetGroup:
         )
         responses.add(
             method="POST",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/composite/sobjects",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/composite/sobjects",
             status=200,
             json=[{"id": "0Pa000000000001", "success": True, "errors": []}],
             match=[
@@ -804,7 +805,7 @@ class TestCreatePermissionSetGroup:
 
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2C%28SELECT+PermissionSetGroupId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Alias+IN+%28%27test%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2C%28SELECT+PermissionSetGroupId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Alias+IN+%28%27test%27%29",
             status=200,
             json={
                 "done": True,
@@ -823,7 +824,7 @@ class TestCreatePermissionSetGroup:
         )
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2CDeveloperName+FROM+PermissionSetGroup+WHERE+DeveloperName+IN+%28%27PermSetGroup1%27%2C+%27PermSetGroup2%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2CDeveloperName+FROM+PermissionSetGroup+WHERE+DeveloperName+IN+%28%27PermSetGroup1%27%2C+%27PermSetGroup2%27%29",
             status=200,
             json={
                 "done": True,
@@ -842,7 +843,7 @@ class TestCreatePermissionSetGroup:
         )
         responses.add(
             method="POST",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/composite/sobjects",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/composite/sobjects",
             status=200,
             json=[{"id": "0Pa000000000001", "success": True, "errors": []}],
             match=[
@@ -877,7 +878,7 @@ class TestCreatePermissionSetGroup:
 
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2C%28SELECT+PermissionSetGroupId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Alias+IN+%28%27test%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2C%28SELECT+PermissionSetGroupId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Alias+IN+%28%27test%27%29",
             status=200,
             json={
                 "done": True,
@@ -899,7 +900,7 @@ class TestCreatePermissionSetGroup:
 
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2C%28SELECT+PermissionSetGroupId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Username+%3D+%27test-cci%40example.com%27",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2C%28SELECT+PermissionSetGroupId+FROM+PermissionSetAssignments%29+FROM+User+WHERE+Username+%3D+%27test-cci%40example.com%27",
             status=200,
             json={
                 "done": True,
@@ -918,7 +919,7 @@ class TestCreatePermissionSetGroup:
         )
         responses.add(
             method="GET",
-            url=f"{task.org_config.instance_url}/services/data/v52.0/query/?q=SELECT+Id%2CDeveloperName+FROM+PermissionSetGroup+WHERE+DeveloperName+IN+%28%27PermSetGroup1%27%2C+%27PermSetGroup2%27%2C+%27PermSetGroup3%27%29",
+            url=f"{task.org_config.instance_url}/services/data/v{CURRENT_SF_API_VERSION}/query/?q=SELECT+Id%2CDeveloperName+FROM+PermissionSetGroup+WHERE+DeveloperName+IN+%28%27PermSetGroup1%27%2C+%27PermSetGroup2%27%2C+%27PermSetGroup3%27%29",
             status=200,
             json={
                 "done": True,
diff --git a/cumulusci/tasks/tests/test_promote_package_version.py b/cumulusci/tasks/tests/test_promote_package_version.py
index 9ca07937c..71ef95d12 100644
--- a/cumulusci/tasks/tests/test_promote_package_version.py
+++ b/cumulusci/tasks/tests/test_promote_package_version.py
@@ -13,7 +13,7 @@ from cumulusci.core.exceptions import (
 )
 from cumulusci.tasks.github.tests.util_github_api import GithubApiTestMixin
 from cumulusci.tasks.salesforce.promote_package_version import PromotePackageVersion
-from cumulusci.tests.util import create_project_config
+from cumulusci.tests.util import CURRENT_SF_API_VERSION, create_project_config
 
 
 @pytest.fixture
@@ -58,7 +58,9 @@ def task(project_config, devhub_config, org_config):
 
 
 class TestPromotePackageVersion(GithubApiTestMixin):
-    devhub_base_url = "https://devhub.my.salesforce.com/services/data/v52.0"
+    devhub_base_url = (
+        f"https://devhub.my.salesforce.com/services/data/v{CURRENT_SF_API_VERSION}"
+    )
 
     def _mock_target_package_api_calls(self):
         responses.add(  # query for main package's Package2Version info