diff --git a/backend/src/backend/__pycache__/main.cpython-314.pyc b/backend/src/backend/__pycache__/main.cpython-314.pyc index 1f02bd3..a322364 100644 Binary files a/backend/src/backend/__pycache__/main.cpython-314.pyc and b/backend/src/backend/__pycache__/main.cpython-314.pyc differ diff --git a/backend/src/backend/internal/__pycache__/user_code_gen.cpython-314.pyc b/backend/src/backend/internal/__pycache__/user_code_gen.cpython-314.pyc new file mode 100644 index 0000000..7a5dca9 Binary files /dev/null and b/backend/src/backend/internal/__pycache__/user_code_gen.cpython-314.pyc differ diff --git a/backend/src/backend/internal/user_code_gen.py b/backend/src/backend/internal/user_code_gen.py new file mode 100644 index 0000000..bf82c3d --- /dev/null +++ b/backend/src/backend/internal/user_code_gen.py @@ -0,0 +1,4 @@ +import string +import random +def generate_user_code() -> str: + return ''.join(random.choices(string.ascii_letters, k=4)).upper() diff --git a/backend/src/backend/main.py b/backend/src/backend/main.py index e9892ce..9a5062d 100644 --- a/backend/src/backend/main.py +++ b/backend/src/backend/main.py @@ -17,6 +17,4 @@ def on_startup(): router = APIRouter() app.include_router(users.router) -app.include_router(comments.router) - -print(SQLModel.metadata.tables.keys()) +app.include_router(comments.router) \ No newline at end of file diff --git a/backend/src/backend/models/__pycache__/user.cpython-314.pyc b/backend/src/backend/models/__pycache__/user.cpython-314.pyc index 69ea8e6..1475983 100644 Binary files a/backend/src/backend/models/__pycache__/user.cpython-314.pyc and b/backend/src/backend/models/__pycache__/user.cpython-314.pyc differ diff --git a/backend/src/backend/models/user.py b/backend/src/backend/models/user.py index 90923aa..844b898 100644 --- a/backend/src/backend/models/user.py +++ b/backend/src/backend/models/user.py @@ -1,3 +1,5 @@ +from backend.internal.user_code_gen import generate_user_code +from dataclasses import dataclass import uuid from typing import TYPE_CHECKING from sqlmodel import Field @@ -14,10 +16,11 @@ class User(UserBase, table=True): id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True) email: str = Field(unique=True) name: str = Field(unique=True) - user_code: str = Field(default="1234",unique=True) # TODO: create Generator + user_code: str = Field(default_factory=generate_user_code,unique=True) subscription: bool = Field() comments: list["Comment"] = Relationship(back_populates="user") +@dataclass class NewUser(UserBase): email: str name: str diff --git a/backend/src/backend/routers/__pycache__/test_users.cpython-314-pytest-9.1.1.pyc b/backend/src/backend/routers/__pycache__/test_users.cpython-314-pytest-9.1.1.pyc index a17eab1..7997263 100644 Binary files a/backend/src/backend/routers/__pycache__/test_users.cpython-314-pytest-9.1.1.pyc and b/backend/src/backend/routers/__pycache__/test_users.cpython-314-pytest-9.1.1.pyc differ diff --git a/backend/src/backend/routers/test_users.py b/backend/src/backend/routers/test_users.py index ff62a1c..78e2219 100644 --- a/backend/src/backend/routers/test_users.py +++ b/backend/src/backend/routers/test_users.py @@ -1,3 +1,5 @@ +from backend.models.user import NewUser +from sqlmodel import select from backend.models.user import User from backend.internal.database import get_session from sqlmodel import Session @@ -30,11 +32,7 @@ def client_fixture(session: Session): yield client app.dependency_overrides.clear() - - - -def test_register_user_works(client: TestClient): - print(SQLModel.metadata.tables.keys()) +def test_register_user_saved(session:Session, client: TestClient): new_user = { "email": "Test@Test.test", "name": "Test1", @@ -43,15 +41,26 @@ def test_register_user_works(client: TestClient): response = client.post(url="/users/", json=new_user) assert response.status_code == 200 -def test_email_not_unique(session: Session, client: TestClient): - new_user = { - "email": "Test@Test.test", - "name": "Test1", - "subscription": True - } - user = User.model_validate(new_user) + db_user = session.exec(select(User).where(User.email == "Test@Test.test")).first() + assert db_user + assert db_user.email == "Test@Test.test" + assert db_user.name == "Test1" + assert db_user.subscription == True + +def test_email_not_unique_returns_400(session: Session, client: TestClient): + new_user = NewUser(email="Not@Unique.de",name="Tim", subscription=True) + + user = User.model_validate(new_user.model_copy(update={'name':'Different'})) session.add(user) session.commit() - response = client.post(url="/users/", json=new_user) - + response = client.post(url="/users/", json=new_user.model_dump()) + assert response.status_code == 400 + +def test_name_not_unique_returns_400(session: Session, client: TestClient): + new_user = NewUser(email="Absolutly@Unique.de",name="Chiara", subscription=True) + + user = User.model_validate(new_user.model_copy(update={'email':'Different@Different.de'})) + session.add(user) + session.commit() + response = client.post(url="/users/", json=new_user.model_dump()) assert response.status_code == 400 \ No newline at end of file