diff --git a/backend/app/tests/conftest.py b/backend/app/tests/conftest.py index 9563086..1e053d1 100644 --- a/backend/app/tests/conftest.py +++ b/backend/app/tests/conftest.py @@ -15,7 +15,7 @@ engine = create_engine(SQLALCHEMY_DATABASE_URI,echo=True) test_session_maker = sessionmaker(autocommit=False, autoflush=False, bind=engine) -@pytest.fixture(scope="function") +@pytest.fixture(scope="session") def test_db(): connection = engine.connect() transaction = connection.begin() @@ -25,7 +25,7 @@ def test_db(): transaction.rollback() connection.close() -@pytest.fixture(scope="function") +@pytest.fixture(scope="session") def test_client(test_db): def get_test_db(): try: @@ -56,9 +56,24 @@ def test_user(test_db): dicUser["password"] = password return dicUser -@pytest.fixture(scope="function") -def test_admin(test_db): - password ="admin" +@pytest.fixture(scope="session") +def password(): + return "password" + +@pytest.fixture(scope="session") +def user(password): + user = models.User( + email = "user@test.com", + first_name = "user", + last_name = "abc", + hashed_password = security.get_password_hash(password), + is_active = True, + is_superuser = False + ) + return user + +@pytest.fixture(scope="session") +def admin(password): user = models.User( email = "admin@test.com", first_name = "admin", @@ -67,12 +82,23 @@ def test_admin(test_db): is_active = True, is_superuser = True ) + return user + +@pytest.fixture(scope="session") +def login_user(test_db,test_client,user,password): test_db.add(user) test_db.commit() test_db.refresh(user) - dicUser = user.__dict__ - dicUser["password"] = password - return dicUser + response = test_client.post("/api/token", data={"username": user.email, "password":password }) + return response.json()["access_token"] + +@pytest.fixture(scope="session") +def login_admin(test_db,test_client,admin,password): + test_db.add(admin) + test_db.commit() + test_db.refresh(admin) + response = test_client.post("/api/token", data={"username": admin.email, "password":password }) + return response.json()["access_token"] # @pytest.fixture # def test_password() -> str: diff --git a/backend/app/tests/test_domain.py b/backend/app/tests/test_domain.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/app/tests/test_user.py b/backend/app/tests/test_user.py index 04cdc24..ec608d6 100644 --- a/backend/app/tests/test_user.py +++ b/backend/app/tests/test_user.py @@ -1,22 +1,85 @@ -def test_users_list(test_client,test_user,test_admin): - response = test_client.post("/api/token", data={"username": test_user["email"], "password": test_user["password"]}) - assert "access_token" in response.json() - user_token =response.json()["access_token"] - response = test_client.post("/api/token", data={"username": test_admin["email"], "password": test_admin["password"]}) - assert "access_token" in response.json() - admin_token =response.json()["access_token"] +from fastapi import security +import jwt - response = test_client.get("/api/v1/users", headers={"Authorization": "Bearer " + user_token}) + +def test_users_list(test_client,login_user): + + response = test_client.get("/api/v1/users", headers={"Authorization": "Bearer " + login_user}) assert response.status_code == 200 data = response.json() - assert len(data["data"]) == 1 + assert len(data["data"]) == 2 + +def test_users_list_for_admin(test_client,login_admin): - response = test_client.get("/api/v1/users", headers={"Authorization": "Bearer " + admin_token}) + response = test_client.get("/api/v1/users", headers={"Authorization": "Bearer " + login_admin}) assert response.status_code == 200 data = response.json() - assert len(data["data"]) == 2 + assert len(data["data"]) == 3 +def test_user_create(test_client,login_user): + user_data = { + "email": "newuser@example.com", + "password": "password123", + "first_name": "New", + "last_name": "User", + "is_active": True, + "is_superuser": False + } + response = test_client.post("/api/v1/users", json=user_data, headers={"Authorization": "Bearer " + login_user}) + assert response.status_code == 200 + data = response.json() + assert "data" in data + assert data["data"] is not None + assert data["data"]["email"] == user_data["email"] + assert data["data"]["first_name"] == user_data["first_name"] + assert data["data"]["last_name"] == user_data["last_name"] + assert data["data"]["is_active"] == user_data["is_active"] + assert data["data"]["is_superuser"] == user_data["is_superuser"] + +def test_admin_create(test_client,login_user): + user_data = { + "email": "newuser@example.com", + "password": "password123", + "first_name": "New", + "last_name": "User", + "is_active": True, + "is_superuser": True + } + response = test_client.post("/api/v1/users", json=user_data, headers={"Authorization": "Bearer " + login_user}) + assert response.status_code == 200 + data = response.json() + assert "data" not in data - \ No newline at end of file +def test_admin_create_for_admin(test_client,login_admin): + user_data = { + "email": "admin@example.com", + "password": "password123", + "first_name": "New", + "last_name": "User", + "is_active": True, + "is_superuser": True + } + response = test_client.post("/api/v1/users", json=user_data, headers={"Authorization": "Bearer " + login_admin}) + assert response.status_code == 200 + data = response.json() + assert "data" in data + assert data["data"] is not None + assert data["data"]["email"] == user_data["email"] + assert data["data"]["first_name"] == user_data["first_name"] + assert data["data"]["last_name"] == user_data["last_name"] + assert data["data"]["is_active"] == user_data["is_active"] + assert data["data"]["is_superuser"] == user_data["is_superuser"] + + def test_user_details(test_client, login_user,user): + payload = jwt.decode(login_user, security.SECRET_KEY, algorithms=[security.ALGORITHM]) + id = payload.get("sub") + response = test_client.get("/api/v1/users/"+ id) + assert response.status_code == 200 + assert response.json()["data"]["email"] ==user["email"] + assert data["data"]["first_name"] == user["first_name"] + assert data["data"]["last_name"] == user["last_name"] + assert data["data"]["is_active"] == user["is_active"] + assert data["data"]["is_superuser"] == user["is_superuser"] + assert response.json()["data"]["id"] == id \ No newline at end of file