Skip to content

Commit 41cd651

Browse files
committed
Fix salesforce tests to run sequentially
1 parent b98822c commit 41cd651

7 files changed

Lines changed: 37 additions & 35 deletions

File tree

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ jobs:
8989
DJANGO_LOG_LEVEL: ERROR
9090
run: |
9191
docker exec seed_web touch /seed/config/settings/local_untracked.py
92-
docker exec --env SEED_PM_UN --env SEED_PM_PW --env DJANGO_LOG_LEVEL --env SF_INSTANCE --env SF_USERNAME --env SF_PASSWORD --env SF_SECURITY_TOKEN --env SF_DOMAIN seed_web /bin/bash -lc 'uv run coverage run manage.py test --settings=config.settings.docker_test --parallel="$(nproc)"'
92+
docker exec --env SEED_PM_UN --env SEED_PM_PW --env DJANGO_LOG_LEVEL --env SF_INSTANCE --env SF_USERNAME --env SF_PASSWORD --env SF_SECURITY_TOKEN --env SF_DOMAIN seed_web /bin/bash -lc 'uv run coverage run manage.py test --settings=config.settings.docker_test --parallel="$(nproc)" --verbosity=2'
9393
if [[ ! -z "${COVERALLS_REPO_TOKEN}" ]]; then
9494
docker exec --env COVERALLS_REPO_TOKEN seed_web uv run coveralls
9595
else

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ dependencies = [
6565
# Integrations
6666
"buildingsync-asset-extractor==0.3.0", # BuildingSync Asset Extractor (includes lxml dependency required by SEED)
6767
"tkbl==0.7",
68-
"seed-salesforce==0.1.1",
68+
"seed-salesforce==0.2.0",
6969
"simple-salesforce==1.12.9",
7070
# Compatibility / backports
7171
"importlib-metadata==8.7.1", # Remove once a version newer than 8.5.0 has been released that fixes Django autoreload

seed/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55

66
# This will make sure the app is always imported when
77
# Django starts so that shared_task will use this app.
8-
from .celery import app as celery_app
8+
from .celery_app import app as celery_app
99

1010
__all__ = ("celery_app",)

seed/celery.py renamed to seed/celery_app.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
#!/usr/bin/env python
21
"""
32
SEED Platform (TM), Copyright (c) Alliance for Energy Innovation, LLC, and other contributors.
43
See also https://github.com/SEED-platform/seed/blob/main/LICENSE.md
@@ -15,6 +14,3 @@
1514
app = celery.Celery("seed")
1615
app.config_from_object("django.conf:settings", namespace="CELERY")
1716
app.autodiscover_tasks(lambda: (*settings.SEED_CORE_APPS, "seed.analysis_pipelines"))
18-
19-
if __name__ == "__main__":
20-
app.start()

seed/tests/test_salesforce_views.py

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,12 @@
88
from unittest.mock import Mock, patch
99

1010
import pytest
11+
from django.conf import settings
1112
from django.db import IntegrityError, transaction
13+
from django.test.testcases import SerializeMixin
1214
from django.urls import reverse
1315
from django.utils.timezone import get_current_timezone
1416

15-
from config.settings.test import SF_DOMAIN, SF_INSTANCE, SF_PASSWORD, SF_SECURITY_TOKEN, SF_USERNAME
1617
from seed.landing.models import SEEDUser as User
1718
from seed.lib.superperms.orgs.models import ROLE_MEMBER
1819
from seed.models import Column, PropertyView, SalesforceConfig, SalesforceMapping
@@ -32,7 +33,12 @@
3233
from seed.views.v3.label_inventories import LabelInventoryViewSet
3334

3435

35-
class SalesforceViewTests(DataMappingBaseTestCase):
36+
class SalesforceLiveTestsMixin(SerializeMixin):
37+
# These tests use the same live Salesforce sandbox records and must not run in parallel.
38+
lockfile = __file__
39+
40+
41+
class SalesforceViewTests(SalesforceLiveTestsMixin, DataMappingBaseTestCase):
3642
def setUp(self):
3743
user_details = {"username": "test_user@demo.com", "password": "test_pass", "email": "test_user@demo.com"}
3844
self.api_view = LabelInventoryViewSet()
@@ -190,8 +196,8 @@ def test_salesforce_connection_fails(self):
190196
self.org.save()
191197

192198
payload_data = {"salesforce_config": {"instance": None, "username": None, "password": None, "security_token": None}}
193-
if SF_DOMAIN == "test":
194-
payload_data["salesforce_config"]["domain"] = SF_DOMAIN
199+
if settings.SF_DOMAIN == "test":
200+
payload_data["salesforce_config"]["domain"] = settings.SF_DOMAIN
195201

196202
response = self.client.post(
197203
reverse("api:v3:salesforce_configs-salesforce-connection") + "?organization_id=" + str(self.org.id),
@@ -212,15 +218,15 @@ def test_salesforce_connection_success(self):
212218

213219
payload_data = {
214220
"salesforce_config": {
215-
"instance": SF_INSTANCE,
216-
"username": SF_USERNAME,
217-
"password": SF_PASSWORD,
218-
"security_token": SF_SECURITY_TOKEN,
221+
"instance": settings.SF_INSTANCE,
222+
"username": settings.SF_USERNAME,
223+
"password": settings.SF_PASSWORD,
224+
"security_token": settings.SF_SECURITY_TOKEN,
219225
}
220226
}
221227

222-
if SF_DOMAIN == "test":
223-
payload_data["salesforce_config"]["domain"] = SF_DOMAIN
228+
if settings.SF_DOMAIN == "test":
229+
payload_data["salesforce_config"]["domain"] = settings.SF_DOMAIN
224230

225231
response = self.client.post(
226232
reverse("api:v3:salesforce_configs-salesforce-connection") + "?organization_id=" + str(self.org.id),
@@ -250,12 +256,12 @@ def test_pushing_salesforce_benchmark(self):
250256
# print(f" view data: {pdata}")
251257

252258
# enable sf
253-
self.sf_config.url = SF_INSTANCE
254-
self.sf_config.username = SF_USERNAME
255-
self.sf_config.password = encrypt(SF_PASSWORD)
256-
self.sf_config.security_token = SF_SECURITY_TOKEN
257-
if SF_DOMAIN == "test":
258-
self.sf_config.domain = SF_DOMAIN
259+
self.sf_config.url = settings.SF_INSTANCE
260+
self.sf_config.username = settings.SF_USERNAME
261+
self.sf_config.password = encrypt(settings.SF_PASSWORD)
262+
self.sf_config.security_token = settings.SF_SECURITY_TOKEN
263+
if settings.SF_DOMAIN == "test":
264+
self.sf_config.domain = settings.SF_DOMAIN
259265
self.sf_config.save()
260266

261267
status, _message = update_salesforce_property(self.org.id, view.id)
@@ -528,7 +534,7 @@ def test_no_sync_when_disabled(self):
528534
# TODO: test auto sync works and sets date
529535

530536

531-
class SalesforceViewTestPermissions(AccessLevelBaseTestCase):
537+
class SalesforceViewTestPermissions(SalesforceLiveTestsMixin, AccessLevelBaseTestCase):
532538
def setUp(self):
533539
super().setUp()
534540

@@ -699,12 +705,12 @@ def test_property_update_salesforce_perms(self):
699705
self.api_view.add_labels(self.api_view.models["property"].objects.none(), "property", [view.id], [self.compliance_label.id])
700706

701707
# enable sf
702-
self.sf_config.url = SF_INSTANCE
703-
self.sf_config.username = SF_USERNAME
704-
self.sf_config.password = encrypt(SF_PASSWORD)
705-
self.sf_config.security_token = SF_SECURITY_TOKEN
706-
if SF_DOMAIN == "test":
707-
self.sf_config.domain = SF_DOMAIN
708+
self.sf_config.url = settings.SF_INSTANCE
709+
self.sf_config.username = settings.SF_USERNAME
710+
self.sf_config.password = encrypt(settings.SF_PASSWORD)
711+
self.sf_config.security_token = settings.SF_SECURITY_TOKEN
712+
if settings.SF_DOMAIN == "test":
713+
self.sf_config.domain = settings.SF_DOMAIN
708714
self.sf_config.save()
709715

710716
url = reverse("api:v3:properties-update-salesforce") + f"?organization_id={self.org.pk}"

seed/views/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from rest_framework.decorators import api_view, permission_classes
2121
from rest_framework.permissions import AllowAny
2222

23-
from seed.celery import app
23+
from seed.celery_app import app
2424
from seed.decorators import ajax_request
2525
from seed.lib.superperms.orgs.decorators import has_perm
2626
from seed.utils.api import api_endpoint

uv.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)