Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions app/core/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -408,8 +408,8 @@ class UserCheckAdmin(admin.ModelAdmin):

@admin.register(UserEmploymentHistory)
class UserEmploymentHistoryAdmin(admin.ModelAdmin):
list_display = ("user", "title", "soc_detailed", "created_at")
search_fields = ("title", "user__username", "user__email")
list_display = ("user", "modern_job_title", "soc_detailed", "created_at")
search_fields = ("modern_job_title__title", "user__username", "user__email")
list_filter = ("soc_detailed",)


Expand Down
2 changes: 1 addition & 1 deletion app/core/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -667,7 +667,7 @@ class UserEmploymentHistorySerializer(serializers.ModelSerializer):

class Meta:
model = UserEmploymentHistory
fields = ("uuid", "user", "soc_detailed", "title")
fields = ("uuid", "user", "soc_detailed", "modern_job_title")
read_only_fields = ("uuid", "created_at", "updated_at")


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Generated by Django 4.2.27 on 2026-03-24 23:28

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('core', '0053_rename_partner_logo_affiliate_logo_and_more'),
]

operations = [
migrations.RemoveField(
model_name='useremploymenthistory',
name='title',
),
migrations.AddField(
model_name='useremploymenthistory',
name='modern_job_title',
field=models.ForeignKey(default=0, on_delete=django.db.models.deletion.CASCADE, related_name='user_employment_histories', to='core.modernjobtitle'),
preserve_default=False,
),
]
2 changes: 1 addition & 1 deletion app/core/migrations/max_migration.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0053_rename_partner_logo_affiliate_logo_and_more
0054_remove_useremploymenthistory_title_and_more
8 changes: 6 additions & 2 deletions app/core/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -830,10 +830,14 @@ class UserEmploymentHistory(AbstractBaseModel):
related_name="user_employment_histories",
)

title = models.CharField(max_length=255)
modern_job_title = models.ForeignKey(
"ModernJobTitle",
on_delete=models.CASCADE,
related_name="user_employment_histories",
)

def __str__(self):
return f"{self.user.username} - {self.title}"
return f"{self.user.username} - {self.modern_job_title}"


class Win(AbstractBaseModel):
Expand Down
4 changes: 2 additions & 2 deletions app/core/tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -483,11 +483,11 @@ def user_check(user, organization, check_type, project):


@pytest.fixture
def user_employment_history(db, user, soc_detailed):
def user_employment_history(db, user, soc_detailed, modern_job_title):
return UserEmploymentHistory.objects.create(
user=user,
soc_detailed=soc_detailed,
title="Software Engineer",
modern_job_title=modern_job_title,
)


Expand Down
16 changes: 10 additions & 6 deletions app/core/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -1255,11 +1255,13 @@ def test_api_allow_org_and_project_same_type_different_scopes(
assert r2.status_code == status.HTTP_201_CREATED


def test_list_user_employment_histories(auth_client, user, soc_detailed):
def test_list_user_employment_histories(
auth_client, user, soc_detailed, modern_job_title
):
payload = {
"user": user.pk,
"soc_detailed": soc_detailed.pk,
"title": "Software Engineer",
"modern_job_title": modern_job_title.pk,
}
auth_client.post(USER_EMPLOYMENT_HISTORIES_URL, payload)

Expand All @@ -1272,11 +1274,13 @@ def test_list_user_employment_histories(auth_client, user, soc_detailed):
assert res.data == expected_data


def test_create_user_employment_history(auth_client, user, soc_detailed):
def test_create_user_employment_history(
auth_client, user, soc_detailed, modern_job_title
):
payload = {
"user": user.pk,
"soc_detailed": soc_detailed.pk,
"title": "Backend Engineer",
"modern_job_title": modern_job_title.pk,
}

res = auth_client.post(USER_EMPLOYMENT_HISTORIES_URL, payload)
Expand All @@ -1286,7 +1290,7 @@ def test_create_user_employment_history(auth_client, user, soc_detailed):
created = UserEmploymentHistory.objects.get(uuid=res.data["uuid"])
assert created.user == user
assert created.soc_detailed.pk == payload["soc_detailed"]
assert created.title == payload["title"]
assert created.modern_job_title.pk == payload["modern_job_title"]


def test_retrieve_user_employment_history(auth_client, user_employment_history):
Expand All @@ -1295,7 +1299,7 @@ def test_retrieve_user_employment_history(auth_client, user_employment_history):

assert res.status_code == status.HTTP_200_OK
assert res.data["uuid"] == str(user_employment_history.pk)
assert res.data["title"] == user_employment_history.title
assert res.data["modern_job_title"] == user_employment_history.modern_job_title.pk
assert res.data["soc_detailed"] == user_employment_history.soc_detailed.pk
assert res.data["user"] == user_employment_history.user.pk

Expand Down
20 changes: 12 additions & 8 deletions app/core/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -723,29 +723,31 @@ def test_usercheck_cross_scopes_allowed_simultaneously(
assert project_user_check.pk is not None


def test_create_user_employment_history(user, soc_detailed):
def test_create_user_employment_history(user, soc_detailed, modern_job_title):
history = UserEmploymentHistory.objects.create(
user=user,
soc_detailed=soc_detailed,
title="Backend Engineer",
modern_job_title=modern_job_title,
)

assert history.uuid is not None
assert history.user == user
assert history.soc_detailed == soc_detailed
assert history.title == "Backend Engineer"
assert history.modern_job_title == modern_job_title


def test_user_can_have_multiple_employment_histories(user, soc_detailed):
def test_user_can_have_multiple_employment_histories(
user, soc_detailed, modern_job_title
):
history1 = UserEmploymentHistory.objects.create(
user=user,
soc_detailed=soc_detailed,
title="Software Engineer",
modern_job_title=modern_job_title,
)
history2 = UserEmploymentHistory.objects.create(
user=user,
soc_detailed=soc_detailed,
title="Senior Software Engineer",
modern_job_title=modern_job_title,
)

histories = user.employment_histories.all()
Expand All @@ -755,11 +757,13 @@ def test_user_can_have_multiple_employment_histories(user, soc_detailed):
assert history2 in histories


def test_user_deletion_cascades_to_employment_histories(user, soc_detailed):
def test_user_deletion_cascades_to_employment_histories(
user, soc_detailed, modern_job_title
):
UserEmploymentHistory.objects.create(
user=user,
soc_detailed=soc_detailed,
title="Software Engineer",
modern_job_title=modern_job_title,
)

user.delete()
Expand Down
Loading