You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
7.1 KiB
176 lines
7.1 KiB
import sys
|
|
from pathlib import Path
|
|
sys.path.append(str(Path(__file__).absolute().parent.parent))
|
|
|
|
# TestClient provided by FastAPI
|
|
from fastapi.testclient import TestClient
|
|
|
|
# PyMongo for the database
|
|
import pymongo
|
|
|
|
# Contains all constants
|
|
import app.config as config
|
|
# Import the app
|
|
from app.main import app
|
|
|
|
# Database setup
|
|
client = pymongo.MongoClient(config.MONGODB_URL, username=config.MONGODB_USERNAME, password=config.MONGODB_PASSWORD)
|
|
|
|
# Drop test database if exists
|
|
if config.MONGODB_DATABASE in client.list_database_names():
|
|
try:
|
|
client.drop_database(config.MONGODB_DATABASE)
|
|
except Exception as e:
|
|
print(f"Error with database : {e}")
|
|
|
|
# Create empty database
|
|
db = client[config.MONGODB_DATABASE]
|
|
|
|
# TestClient with the app imported from main
|
|
client = TestClient(app)
|
|
|
|
def test_register_user():
|
|
response = client.post("/register", json={"username": "testuser", "password": "testpassword"})
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert "access_token" in data
|
|
assert "token_type" in data
|
|
assert "user_id" in data
|
|
|
|
response = client.post("/register", json={"username": "testuser", "password": "testpassword"})
|
|
assert response.status_code == 409 # Conflict - Cannot create two times the same user
|
|
|
|
def test_login_user():
|
|
response = client.post("/login", data={"username": "testuser", "password": "testpassword"})
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert "access_token" in data
|
|
assert "token_type" in data
|
|
assert "user_id" in data
|
|
|
|
response = client.post("/login", data={"username": "testuser", "password": "BADpassword"})
|
|
assert response.status_code == 401 # Unauthorized, bad pwd
|
|
|
|
def test_add_pin():
|
|
login_response = client.post("/login", data={"username": "testuser", "password": "testpassword"})
|
|
token = login_response.json()["access_token"]
|
|
|
|
response = client.post("/pin/add", json={"title": "Test Pin", "description": "Test Description"}, headers={"Authorization": f"Bearer {token}"})
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert "id" in data
|
|
|
|
def test_list_pins():
|
|
login_response = client.post("/login", data={"username": "testuser", "password": "testpassword"})
|
|
token = login_response.json()["access_token"]
|
|
|
|
response = client.get("/pins", headers={"Authorization": f"Bearer {token}"})
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert isinstance(data, list)
|
|
|
|
def test_get_pin():
|
|
login_response = client.post("/login", data={"username": "testuser", "password": "testpassword"})
|
|
token = login_response.json()["access_token"]
|
|
|
|
add_pin_response = client.post("/pin/add", json={"title": "Test Pin", "description": "Test Description"}, headers={"Authorization": f"Bearer {token}"})
|
|
pin_id = add_pin_response.json()["id"]
|
|
|
|
response = client.get(f"/pin/{pin_id}", headers={"Authorization": f"Bearer {token}"})
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["title"] == "Test Pin"
|
|
assert data["description"] == "Test Description"
|
|
|
|
# Test wrong format
|
|
response = client.get(f"/pin/randomIdThatDoesntExists", headers={"Authorization": f"Bearer {token}"})
|
|
assert response.status_code == 422
|
|
|
|
# Test inexistant id
|
|
response = client.get(f"/pin/123456789987654321abcdef", headers={"Authorization": f"Bearer {token}"})
|
|
assert response.status_code == 404
|
|
|
|
|
|
def test_update_pin():
|
|
login_response = client.post("/login", data={"username": "testuser", "password": "testpassword"})
|
|
token = login_response.json()["access_token"]
|
|
|
|
add_pin_response = client.post("/pin/add", json={"title": "Test Pin", "description": "Test Description"}, headers={"Authorization": f"Bearer {token}"})
|
|
pin_id = add_pin_response.json()["id"]
|
|
|
|
update_response = client.patch(f"/pin/{pin_id}", json={"title": "Updated Pin", "description": "Updated Description"}, headers={"Authorization": f"Bearer {token}"})
|
|
assert update_response.status_code == 200
|
|
|
|
get_pin_response = client.get(f"/pin/{pin_id}", headers={"Authorization": f"Bearer {token}"})
|
|
data = get_pin_response.json()
|
|
assert data["title"] == "Updated Pin"
|
|
assert data["description"] == "Updated Description"
|
|
|
|
# Test wrong format
|
|
response = client.get(f"/pin/randomIdThatDoesntExists", headers={"Authorization": f"Bearer {token}"})
|
|
assert response.status_code == 422
|
|
|
|
# Test inexistant id
|
|
response = client.get(f"/pin/123456789987654321abcdef", headers={"Authorization": f"Bearer {token}"})
|
|
assert response.status_code == 404
|
|
|
|
|
|
def test_add_friend():
|
|
login_response = client.post("/login", data={"username": "testuser", "password": "testpassword"})
|
|
token = login_response.json()["access_token"]
|
|
|
|
# Register another user that will be used as a friend
|
|
response = client.post("/register", json={"username": "testfriend", "password": "testpassword"})
|
|
user_id = response.json()["user_id"]
|
|
|
|
friend_data = {"friend_user_id": user_id}
|
|
|
|
response = client.post("/friend/add", json=friend_data, headers={"Authorization": f"Bearer {token}"})
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert "id" in data
|
|
|
|
friend_data = {"friend_user_id": str(db["users"].find_one({"username": "testuser"})["_id"])}
|
|
|
|
response = client.post("/friend/add", json=friend_data, headers={"Authorization": f"Bearer {token}"})
|
|
assert response.status_code == 409 # Cannot add yourself as a friend
|
|
|
|
def test_list_friends():
|
|
login_response = client.post("/login", data={"username": "testuser", "password": "testpassword"})
|
|
token = login_response.json()["access_token"]
|
|
|
|
response = client.get("/friends", headers={"Authorization": f"Bearer {token}"})
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert isinstance(data, dict)
|
|
|
|
def test_get_friend():
|
|
login_response = client.post("/login", data={"username": "testuser", "password": "testpassword"})
|
|
token = login_response.json()["access_token"]
|
|
|
|
friend_id = str(db["friends"].find_one({})["_id"])
|
|
response = client.get(f"/friend/{friend_id}", headers={"Authorization": f"Bearer {token}"})
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert "id" in data
|
|
assert "user_id" in data
|
|
assert "friend_user_id" in data
|
|
assert "status" in data
|
|
|
|
# Test wrong format
|
|
response = client.get(f"/friend/randomIdThatDoesntExists", headers={"Authorization": f"Bearer {token}"})
|
|
assert response.status_code == 422
|
|
|
|
# Test inexistant id
|
|
response = client.get(f"/friend/123456789987654321abcdef", headers={"Authorization": f"Bearer {token}"})
|
|
assert response.status_code == 404
|
|
|
|
def test_search_users():
|
|
login_response = client.post("/login", data={"username": "testuser", "password": "testpassword"})
|
|
token = login_response.json()["access_token"]
|
|
|
|
response = client.get("/users?name=testuser", headers={"Authorization": f"Bearer {token}"})
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert isinstance(data, list)
|
|
assert data[0]["username"] == "testuser" |