Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] PersonFactory giver UniqueViolation, da e-mail ikke er unik fordi Sequence bliver resat #1128

Open
Dansk-Torskerognsforening opened this issue Nov 21, 2024 · 0 comments
Labels
bug noget der ikke virker efter hensigten

Comments

@Dansk-Torskerognsforening

I PersonFactory bliver der brugt en factory.Sequence() til at give hver person en unik e-mail ([email protected], [email protected], [email protected] osv.) Men sequencen resetter sig selv efter hver "gang" man har brugt den.

Det jeg mener med "gang" er, at jeg åbner et shell og bruger person factory 3 gange, hvor sequence bliver større. Men når jeg åbner et nyt shell, efter jeg har lukket det gamle, og kører PersonFactory igen, så har sequencen resat sig selv til 0, som giver mig UniqueViolation fejlen.

Genskab fejlen

Vær sikker på, at der ikke allerede er blevet lavet en Person med PersonFactory, så [email protected] ikke er brugt. (Fx brugte jeg python manage.py flush til at rydde databasen).
Åbn et nyt shell. Og lav 2 eller flere personer.

# python manage.py shell            
RUNNING IN DEBUG MODE
Python 3.10.15 (main, Oct 19 2024, 04:00:28) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from members.tests.factories import PersonFactory
>>> p1 = PersonFactory()
>>> p2 = PersonFactory()
>>> p3 = PersonFactory()
>>> exit()

Så her er sequence blevet større ved hver person, da der ikke er kommet en fejl.
Derefter åbn et nyt shell:

# python manage.py shell
RUNNING IN DEBUG MODE
Python 3.10.15 (main, Oct 19 2024, 04:00:28) [GCC 12.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from members.tests.factories import PersonFactory
>>> p4 = PersonFactory()

Efter at jeg trykker enter på sidste linje, og laver en ny person, får jeg denne fejl:

Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/django/db/backends/utils.py", line 89, in _execute
    return self.cursor.execute(sql, params)
psycopg2.errors.UniqueViolation: duplicate key value violates unique constraint "members_family_email_key"
DETAIL:  Key (email)=([email protected]) already exists.

Hvad skulle der være sket

Jeg tænker bare at sequencen skulle fortsætte så den lavede en [email protected].

Mere info

Jeg kørte manage.py shell i Docker desktops terminal. Mit OS er Windows 10.

Koden hvor sequence er brugt til at lave e-mails:

email = factory.Sequence(
lambda n: "person{0}@example.com".format(n)
) # Faker("email")

@Dansk-Torskerognsforening Dansk-Torskerognsforening added the bug noget der ikke virker efter hensigten label Nov 21, 2024
@Dansk-Torskerognsforening Dansk-Torskerognsforening changed the title [BUG] PersonFactory giver UniqueViolation, da e-mails er ikke unikke fordi Sequence bliver resat [BUG] PersonFactory giver UniqueViolation, da e-mail ikke er unik fordi Sequence bliver resat Nov 21, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug noget der ikke virker efter hensigten
Projects
None yet
Development

No branches or pull requests

1 participant