Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Remove the PK, it may fail when a user with that PK already exists. https://github.com/gip-inclusion/les-emplois/actions/runs/8602168736/job/23571094021 [gw1] linux -- Python 3.11.8 /home/runner/work/les-emplois/les-emplois/.venv/bin/python3.11 self = <django.db.backends.utils.CursorWrapper object at 0x7f283c04ab50> sql = 'INSERT INTO "users_user" ("password", "last_login", "is_superuser", "username", "first_name", "last_name", "is_staff"...s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) RETURNING "users_user"."id"' params = ('pbkdf2_sha256$720000$CMIMOF2wpjebftDHharSAf$JZr9+VPfyxcezMoepfCHOJeNmpyEg4kWQswHM220uSg=', None, False, 'user_name2074', 'Edward', 'Miller', ...) ignored_wrapper_args = (False, {'connection': <DatabaseWrapper vendor='postgresql' alias='default'>, 'cursor': <django.db.backends.utils.CursorWrapper object at 0x7f283c04ab50>}) def _execute(self, sql, params, *ignored_wrapper_args): # Raise a warning during app initialization (stored_app_configs is only # ever set during testing). if not apps.ready and not apps.stored_app_configs: warnings.warn(self.APPS_NOT_READY_WARNING_MSG, category=RuntimeWarning) self.db.validate_no_broken_transaction() with self.db.wrap_database_errors: if params is None: # params default might be backend specific. return self.cursor.execute(sql) else: > return self.cursor.execute(sql, params) .venv/lib/python3.11/site-packages/django/db/backends/utils.py:105: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <django.db.backends.postgresql.base.Cursor [closed] [IDLE] (host=127.0.0.1 user=postgres database=test_itou_gw1) at 0x7f2839ae5fd0> query = 'INSERT INTO "users_user" ("password", "last_login", "is_superuser", "username", "first_name", "last_name", "is_staff"...s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) RETURNING "users_user"."id"' params = ('pbkdf2_sha256$720000$CMIMOF2wpjebftDHharSAf$JZr9+VPfyxcezMoepfCHOJeNmpyEg4kWQswHM220uSg=', None, False, 'user_name2074', 'Edward', 'Miller', ...) def execute( self: _Self, query: Query, params: Optional[Params] = None, *, prepare: Optional[bool] = None, binary: Optional[bool] = None, ) -> _Self: """ Execute a query or command to the database. """ try: with self._conn.lock: self._conn.wait( self._execute_gen(query, params, prepare=prepare, binary=binary) ) except e._NO_TRACEBACK as ex: > raise ex.with_traceback(None) E psycopg.errors.UniqueViolation: duplicate key value violates unique constraint "users_user_pkey" E DETAIL: Key (id)=(2010) already exists. .venv/lib/python3.11/site-packages/psycopg/cursor.py:737: UniqueViolation The above exception was the direct cause of the following exception: @pytest.mark.django_db(transaction=True) @pytest.mark.usefixtures("metabase") def test_populate_job_seekers(): QPVFactory(code="QP075019") # Importing this file makes a query so we need to do it inside a test # and before the assertNumQueries from itou.metabase.tables.job_seekers import get_user_age_in_years # First user # - no job application # - created by prescriber # - no coords for QPV # - uses PE_CONNECT # - has no PE number # - logged_in recently # - in QPV user_1 = JobSeekerFactory( pk=2010, created_by=PrescriberFactory(), identity_provider=IdentityProvider.PE_CONNECT, jobseeker_profile__pole_emploi_id="", last_login=timezone.now(), jobseeker_profile__nir="179038704133768", post_code="33360", geocoding_score=1, coords=coords_to_geometry("48.85592", "2.41299"), ) # Second user # - job_application / approval from ai stock # - created by an employer # - outside QPV user_2 = JobSeekerFactory( pk=15752, created_by=EmployerFactory(), jobseeker_profile__nir="271049232724647", geocoding_score=1, coords=Point(0, 0), # QPV utils is mocked with_pole_emploi_id=True, ) job_application_2 = JobApplicationFactory( with_approval=True, approval__eligibility_diagnosis=None, job_seeker=user_2, approval__origin=Origin.AI_STOCK, ) job_application_2.eligibility_diagnosis.administrative_criteria.add(*list(AdministrativeCriteria.objects.all())) # Third user # - multiple eligibility diagnosis # - last eligibility diagnosis from an employer # - not an AI # - outside QPV but missing geocoding score user_3 = JobSeekerFactory( pk=26587, jobseeker_profile__nir="297016314515713", with_pole_emploi_id=True, geocoding_score=None, coords=Point(0, 0), # QPV utils is mocked ) job_application_3 = JobApplicationFactory( job_seeker=user_3, created_at=datetime.datetime(2023, 1, 1, tzinfo=datetime.UTC), with_approval=True, eligibility_diagnosis__author_kind=UserKind.EMPLOYER, eligibility_diagnosis__author_prescriber_organization=None, eligibility_diagnosis__author_siae=CompanyFactory(), to_company__kind="ETTI", ) # Older accepted job_application with no eligibility diagnosis # Allow to check get_hiring_company() > JobApplicationFactory( job_seeker=user_3, with_approval=True, approval=job_application_3.approval, eligibility_diagnosis=None, created_at=datetime.datetime(2022, 1, 1, tzinfo=datetime.UTC), ) tests/metabase/management/test_populate_metabase_emplois.py:192: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ .venv/lib/python3.11/site-packages/factory/base.py:40: in __call__ return cls.create(**kwargs) .venv/lib/python3.11/site-packages/factory/base.py:528: in create return cls._generate(enums.CREATE_STRATEGY, kwargs) .venv/lib/python3.11/site-packages/factory/django.py:121: in _generate return super()._generate(strategy, params) .venv/lib/python3.11/site-packages/factory/base.py:465: in _generate return step.build() .venv/lib/python3.11/site-packages/factory/builder.py:270: in build step.resolve(pre) .venv/lib/python3.11/site-packages/factory/builder.py:211: in resolve self.attributes[field_name] = getattr(self.stub, field_name) .venv/lib/python3.11/site-packages/factory/builder.py:356: in __getattr__ value = value.evaluate_pre( .venv/lib/python3.11/site-packages/factory/declarations.py:543: in evaluate_pre return self._unwrap_evaluate_pre( .venv/lib/python3.11/site-packages/factory/declarations.py:58: in _unwrap_evaluate_pre return wrapped.evaluate_pre( .venv/lib/python3.11/site-packages/factory/declarations.py:543: in evaluate_pre return self._unwrap_evaluate_pre( .venv/lib/python3.11/site-packages/factory/declarations.py:58: in _unwrap_evaluate_pre return wrapped.evaluate_pre( .venv/lib/python3.11/site-packages/factory/declarations.py:543: in evaluate_pre return self._unwrap_evaluate_pre( .venv/lib/python3.11/site-packages/factory/declarations.py:58: in _unwrap_evaluate_pre return wrapped.evaluate_pre( .venv/lib/python3.11/site-packages/factory/declarations.py:67: in evaluate_pre return self.evaluate(instance, step, context) .venv/lib/python3.11/site-packages/factory/declarations.py:457: in evaluate return step.recurse(subfactory, extra, force_sequence=force_sequence) .venv/lib/python3.11/site-packages/factory/builder.py:228: in recurse return builder.build(parent_step=self, force_sequence=force_sequence) .venv/lib/python3.11/site-packages/factory/builder.py:274: in build instance = self.factory_meta.instantiate( .venv/lib/python3.11/site-packages/factory/base.py:317: in instantiate return self.factory._create(model, *args, **kwargs) .venv/lib/python3.11/site-packages/factory/django.py:174: in _create return manager.create(*args, **kwargs) .venv/lib/python3.11/site-packages/django/db/models/manager.py:87: in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) .venv/lib/python3.11/site-packages/django/db/models/query.py:679: in create obj.save(force_insert=True, using=self.db) itou/users/models.py:302: in save super().save(*args, **kwargs) .venv/lib/python3.11/site-packages/django/contrib/auth/base_user.py:78: in save super().save(*args, **kwargs) .venv/lib/python3.11/site-packages/django/db/models/base.py:822: in save self.save_base( .venv/lib/python3.11/site-packages/django/db/models/base.py:909: in save_base updated = self._save_table( .venv/lib/python3.11/site-packages/django/db/models/base.py:1067: in _save_table results = self._do_insert( .venv/lib/python3.11/site-packages/django/db/models/base.py:1108: in _do_insert return manager._insert( .venv/lib/python3.11/site-packages/django/db/models/manager.py:87: in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) .venv/lib/python3.11/site-packages/django/db/models/query.py:1847: in _insert return query.get_compiler(using=using).execute_sql(returning_fields) .venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py:1823: in execute_sql cursor.execute(sql, params) .venv/lib/python3.11/site-packages/sentry_sdk/integrations/django/__init__.py:641: in execute result = real_execute(self, sql, params) .venv/lib/python3.11/site-packages/django/db/backends/utils.py:79: in execute return self._execute_with_wrappers( .venv/lib/python3.11/site-packages/django/db/backends/utils.py:92: in _execute_with_wrappers return executor(sql, params, many, context) .venv/lib/python3.11/site-packages/django/db/backends/utils.py:100: in _execute with self.db.wrap_database_errors: .venv/lib/python3.11/site-packages/django/db/utils.py:91: in __exit__ raise dj_exc_value.with_traceback(traceback) from exc_value .venv/lib/python3.11/site-packages/django/db/backends/utils.py:105: in _execute return self.cursor.execute(sql, params) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <django.db.backends.postgresql.base.Cursor [closed] [IDLE] (host=127.0.0.1 user=postgres database=test_itou_gw1) at 0x7f2839ae5fd0> query = 'INSERT INTO "users_user" ("password", "last_login", "is_superuser", "username", "first_name", "last_name", "is_staff"...s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) RETURNING "users_user"."id"' params = ('pbkdf2_sha256$720000$CMIMOF2wpjebftDHharSAf$JZr9+VPfyxcezMoepfCHOJeNmpyEg4kWQswHM220uSg=', None, False, 'user_name2074', 'Edward', 'Miller', ...) def execute( self: _Self, query: Query, params: Optional[Params] = None, *, prepare: Optional[bool] = None, binary: Optional[bool] = None, ) -> _Self: """ Execute a query or command to the database. """ try: with self._conn.lock: self._conn.wait( self._execute_gen(query, params, prepare=prepare, binary=binary) ) except e._NO_TRACEBACK as ex: > raise ex.with_traceback(None) E django.db.utils.IntegrityError: duplicate key value violates unique constraint "users_user_pkey" E DETAIL: Key (id)=(2010) already exists. .venv/lib/python3.11/site-packages/psycopg/cursor.py:737: IntegrityError =========================== short test summary info ============================ FAILED tests/metabase/management/test_populate_metabase_emplois.py::test_populate_job_seekers - django.db.utils.IntegrityError: duplicate key value violates unique constraint "users_user_pkey" DETAIL: Key (id)=(2010) already exists. ================== 1 failed, 2531 passed in 234.20s (0:03:54) ==================
- Loading branch information