Skip to content

Commit 6410a8a

Browse files
authored
Merge pull request #5500 from raft-tech/5316-user-change-request-e2e-tests
E2E Profile Editing
2 parents 679777f + e04ddd8 commit 6410a8a

File tree

24 files changed

+765
-219
lines changed

24 files changed

+765
-219
lines changed

.circleci/build-and-test/jobs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
name: Setup cypress test data
8080
command: |
8181
cd tdrs-backend
82-
docker-compose exec web python manage.py loaddata cypress/users cypress/data_files cypress/regions
82+
docker-compose exec web python manage.py loaddata cypress/users cypress/data_files cypress/regions cypress/profile_editing_regions cypress/profile_editing_users
8383
- run:
8484
name: Run Cypress e2e tests
8585
command: cd tdrs-frontend; npm run test:e2e-ci

scripts/apply-database-config.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ echo "Done."
7777

7878
if [[ $app == "tdp-backend-develop" || $space == "tanf-dev" ]]; then
7979
echo "Applying e2e test data"
80-
python manage.py loaddata cypress/users cypress/data_files cypress/regions
80+
python manage.py loaddata cypress/users cypress/data_files cypress/regions cypress/profile_editing_regions cypress/profile_editing_users
8181
echo "Done."
8282
fi
8383

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
[
2+
{
3+
"model": "users.regionmeta",
4+
"pk": 1001,
5+
"fields": {
6+
"user": "e5f6a7b8-c9d0-4e5f-2a3b-4c5d6e7f8a9b",
7+
"region": 5
8+
}
9+
},
10+
{
11+
"model": "users.regionmeta",
12+
"pk": 1002,
13+
"fields": {
14+
"user": "e5f6a7b8-c9d0-4e5f-2a3b-4c5d6e7f8a9b",
15+
"region": 3
16+
}
17+
},
18+
{
19+
"model": "users.regionmeta",
20+
"pk": 1003,
21+
"fields": {
22+
"user": "f6a7b8c9-d0e1-4f5a-3b4c-5d6e7f8a9b0c",
23+
"region": 5
24+
}
25+
},
26+
{
27+
"model": "users.regionmeta",
28+
"pk": 1004,
29+
"fields": {
30+
"user": "f6a7b8c9-d0e1-4f5a-3b4c-5d6e7f8a9b0c",
31+
"region": 3
32+
}
33+
}
34+
]
Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
[
2+
{
3+
"model": "users.user",
4+
"pk": "a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d",
5+
"fields": {
6+
"password": "",
7+
"last_login": null,
8+
"is_superuser": false,
9+
"username": "cypress-data-analyst-dana@teamraft.com",
10+
"first_name": "Data Analyst",
11+
"last_name": "Dana",
12+
"email": "cypress-data-analyst-dana@teamraft.com",
13+
"is_staff": false,
14+
"is_active": true,
15+
"date_joined": "2025-11-26T00:00:00Z",
16+
"stt": 5,
17+
"login_gov_uuid": null,
18+
"hhs_id": null,
19+
"account_approval_status": "Access request",
20+
"access_requested_date": "2025-11-26T00:00:00Z",
21+
"feature_flags": {},
22+
"groups": [
23+
[
24+
"Data Analyst"
25+
]
26+
],
27+
"user_permissions": []
28+
}
29+
},
30+
{
31+
"model": "users.user",
32+
"pk": "b2c3d4e5-f6a7-4b5c-9d0e-1f2a3b4c5d6e",
33+
"fields": {
34+
"password": "",
35+
"last_login": null,
36+
"is_superuser": false,
37+
"username": "cypress-fra-data-analyst-derek@teamraft.com",
38+
"first_name": "FRA Data Analyst",
39+
"last_name": "Derek",
40+
"email": "cypress-fra-data-analyst-derek@teamraft.com",
41+
"is_staff": false,
42+
"is_active": true,
43+
"date_joined": "2025-11-26T00:00:00Z",
44+
"stt": 5,
45+
"login_gov_uuid": null,
46+
"hhs_id": null,
47+
"account_approval_status": "Access request",
48+
"access_requested_date": "2025-11-26T00:00:00Z",
49+
"feature_flags": {},
50+
"groups": [
51+
[
52+
"Data Analyst"
53+
]
54+
],
55+
"user_permissions": [
56+
[
57+
"has_fra_access",
58+
"users",
59+
"user"
60+
]
61+
]
62+
}
63+
},
64+
{
65+
"model": "users.user",
66+
"pk": "c3d4e5f6-a7b8-4c5d-0e1f-2a3b4c5d6e7f",
67+
"fields": {
68+
"password": "",
69+
"last_login": null,
70+
"is_superuser": false,
71+
"username": "cypress-data-analyst-donna@teamraft.com",
72+
"first_name": "Data Analyst",
73+
"last_name": "Donna",
74+
"email": "cypress-data-analyst-donna@teamraft.com",
75+
"is_staff": false,
76+
"is_active": true,
77+
"date_joined": "2025-11-26T00:00:00Z",
78+
"stt": 5,
79+
"login_gov_uuid": null,
80+
"hhs_id": null,
81+
"account_approval_status": "Approved",
82+
"access_requested_date": "2025-11-26T00:00:00Z",
83+
"feature_flags": {},
84+
"groups": [
85+
[
86+
"Data Analyst"
87+
]
88+
],
89+
"user_permissions": []
90+
}
91+
},
92+
{
93+
"model": "users.user",
94+
"pk": "d4e5f6a7-b8c9-4d5e-1f2a-3b4c5d6e7f8a",
95+
"fields": {
96+
"password": "",
97+
"last_login": null,
98+
"is_superuser": false,
99+
"username": "cypress-fra-data-analyst-david@teamraft.com",
100+
"first_name": "FRA Data Analyst",
101+
"last_name": "David",
102+
"email": "cypress-fra-data-analyst-david@teamraft.com",
103+
"is_staff": false,
104+
"is_active": true,
105+
"date_joined": "2025-11-26T00:00:00Z",
106+
"stt": 5,
107+
"login_gov_uuid": null,
108+
"hhs_id": null,
109+
"account_approval_status": "Approved",
110+
"access_requested_date": "2025-11-26T00:00:00Z",
111+
"feature_flags": {},
112+
"groups": [
113+
[
114+
"Data Analyst"
115+
]
116+
],
117+
"user_permissions": [
118+
[
119+
"has_fra_access",
120+
"users",
121+
"user"
122+
]
123+
]
124+
}
125+
},
126+
{
127+
"model": "users.user",
128+
"pk": "e5f6a7b8-c9d0-4e5f-2a3b-4c5d6e7f8a9b",
129+
"fields": {
130+
"password": "",
131+
"last_login": null,
132+
"is_superuser": false,
133+
"username": "cypress-fra-ofa-regional-staff-rachel@acf.hhs.gov",
134+
"first_name": "FRA OFA Regional Staff",
135+
"last_name": "Rachel",
136+
"email": "cypress-fra-ofa-regional-staff-rachel@acf.hhs.gov",
137+
"is_staff": false,
138+
"is_active": true,
139+
"date_joined": "2025-11-26T00:00:00Z",
140+
"stt": null,
141+
"login_gov_uuid": null,
142+
"hhs_id": null,
143+
"account_approval_status": "Access request",
144+
"access_requested_date": "2025-11-26T00:00:00Z",
145+
"feature_flags": {},
146+
"groups": [
147+
[
148+
"OFA Regional Staff"
149+
]
150+
],
151+
"user_permissions": [
152+
[
153+
"has_fra_access",
154+
"users",
155+
"user"
156+
]
157+
]
158+
}
159+
},
160+
{
161+
"model": "users.user",
162+
"pk": "f6a7b8c9-d0e1-4f5a-3b4c-5d6e7f8a9b0c",
163+
"fields": {
164+
"password": "",
165+
"last_login": null,
166+
"is_superuser": false,
167+
"username": "cypress-fra-ofa-regional-staff-robert@acf.hhs.gov",
168+
"first_name": "FRA OFA Regional Staff",
169+
"last_name": "Robert",
170+
"email": "cypress-fra-ofa-regional-staff-robert@acf.hhs.gov",
171+
"is_staff": false,
172+
"is_active": true,
173+
"date_joined": "2025-11-26T00:00:00Z",
174+
"stt": null,
175+
"login_gov_uuid": null,
176+
"hhs_id": null,
177+
"account_approval_status": "Approved",
178+
"access_requested_date": "2025-11-26T00:00:00Z",
179+
"feature_flags": {},
180+
"groups": [
181+
[
182+
"OFA Regional Staff"
183+
]
184+
],
185+
"user_permissions": [
186+
[
187+
"has_fra_access",
188+
"users",
189+
"user"
190+
]
191+
]
192+
}
193+
}
194+
]

tdrs-backend/tdpservice/users/serializers.py

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88
from django.utils.translation import gettext_lazy as _
99

1010
from rest_framework import serializers
11-
from tdpservice.users.constants import REGIONAL_ROLES
1211

1312
from tdpservice.stts.models import STT
1413
from tdpservice.stts.serializers import (
1514
RegionPrimaryKeyRelatedField,
1615
STTPrimaryKeyRelatedField,
1716
)
17+
from tdpservice.users.constants import REGIONAL_ROLES
1818
from tdpservice.users.models import (
1919
AccountApprovalStatusChoices,
2020
ChangeRequestAuditLog,
@@ -167,10 +167,9 @@ def validate(self, data):
167167
"""Perform object-level validation."""
168168
validated_data = super().validate(data)
169169
try:
170-
171170
groups = self.instance.groups.all()
172-
regions = validated_data.get('regions')
173-
stts = validated_data.get('stt')
171+
regions = validated_data.get("regions")
172+
stts = validated_data.get("stt")
174173
# Check if the user belongs to any regional group
175174
if groups:
176175
has_regional_role = any(g.name in REGIONAL_ROLES for g in groups)
@@ -199,7 +198,7 @@ def update(self, instance, validated_data):
199198
# fields.
200199

201200
for attr, value in validated_data.items():
202-
if attr == 'regions':
201+
if attr == "regions":
203202
field = getattr(instance, attr)
204203
field.set(value)
205204
else:
@@ -263,30 +262,6 @@ class Meta(UserProfileSerializer.Meta):
263262
"has_fra_access",
264263
]
265264

266-
def validate(self, data):
267-
"""Perform object-level validation."""
268-
validated_data = super().validate(data)
269-
270-
groups = self.instance.groups.all()
271-
# Check if the user belongs to any regional group
272-
has_regional_role = any(g.name in REGIONAL_ROLES for g in groups)
273-
if validated_data.get('regions'):
274-
regions = [i.name for i in validated_data.get('regions')]
275-
else:
276-
regions = []
277-
278-
if has_regional_role and not regions:
279-
raise serializers.ValidationError(
280-
"Users in regional roles must have at least one region assigned."
281-
)
282-
283-
if not has_regional_role and regions:
284-
raise serializers.ValidationError(
285-
"Users without regional roles should not be assigned regions."
286-
)
287-
288-
return validated_data
289-
290265
def validate_regions(self, value):
291266
"""Validate regions field."""
292267
if not value:
@@ -300,6 +275,7 @@ def validate_stt(self, value):
300275
if (
301276
self.instance.account_approval_status
302277
== AccountApprovalStatusChoices.APPROVED
278+
and value != self.instance.stt
303279
):
304280
raise serializers.ValidationError(
305281
_("STT cannot be changed once the account is approved.")

tdrs-frontend/cypress/e2e/common-steps/common-steps.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,31 @@ export const ACTORS = {
6363
role: 'OFA Regional Staff',
6464
username: 'cypress-unapproved-randy@acf.hhs.gov',
6565
},
66+
// Profile Editing Test Users
67+
'Data Analyst Dana': {
68+
role: 'Data Analyst',
69+
username: 'cypress-data-analyst-dana@teamraft.com',
70+
},
71+
'FRA Data Analyst Derek': {
72+
role: 'Data Analyst',
73+
username: 'cypress-fra-data-analyst-derek@teamraft.com',
74+
},
75+
'Data Analyst Donna': {
76+
role: 'Data Analyst',
77+
username: 'cypress-data-analyst-donna@teamraft.com',
78+
},
79+
'FRA Data Analyst David': {
80+
role: 'Data Analyst',
81+
username: 'cypress-fra-data-analyst-david@teamraft.com',
82+
},
83+
'FRA OFA Regional Staff Rachel': {
84+
role: 'OFA Regional Staff',
85+
username: 'cypress-fra-ofa-regional-staff-rachel@acf.hhs.gov',
86+
},
87+
'FRA OFA Regional Staff Robert': {
88+
role: 'OFA Regional Staff',
89+
username: 'cypress-fra-ofa-regional-staff-robert@acf.hhs.gov',
90+
},
6691
}
6792

6893
const setAccountStatus = (actor, status) => {

0 commit comments

Comments
 (0)