83 lines
2.8 KiB
Python
83 lines
2.8 KiB
Python
import pytest
|
|
from flask import Flask
|
|
from api.auth_api import auth_api
|
|
from db.db import users_db
|
|
from tinydb import Query
|
|
from models.user import User
|
|
from werkzeug.security import generate_password_hash
|
|
from datetime import datetime, timedelta
|
|
import jwt
|
|
|
|
@pytest.fixture
|
|
def client():
|
|
app = Flask(__name__)
|
|
app.register_blueprint(auth_api, url_prefix='/auth')
|
|
app.config['TESTING'] = True
|
|
app.config['SECRET_KEY'] = 'supersecretkey'
|
|
with app.test_client() as client:
|
|
yield client
|
|
|
|
def setup_marked_user(email, verified=False, verify_token=None, reset_token=None):
|
|
users_db.remove(Query().email == email)
|
|
user = User(
|
|
first_name='Marked',
|
|
last_name='User',
|
|
email=email,
|
|
password=generate_password_hash('password123'),
|
|
verified=verified,
|
|
marked_for_deletion=True,
|
|
verify_token=verify_token,
|
|
verify_token_created=datetime.utcnow().isoformat() if verify_token else None,
|
|
reset_token=reset_token,
|
|
reset_token_created=datetime.utcnow().isoformat() if reset_token else None
|
|
)
|
|
users_db.insert(user.to_dict())
|
|
|
|
|
|
def test_signup_marked_for_deletion(client):
|
|
setup_marked_user('marked@example.com')
|
|
data = {
|
|
'first_name': 'Marked',
|
|
'last_name': 'User',
|
|
'email': 'marked@example.com',
|
|
'password': 'password123'
|
|
}
|
|
response = client.post('/auth/signup', json=data)
|
|
assert response.status_code == 403
|
|
assert response.json['code'] == 'ACCOUNT_MARKED_FOR_DELETION'
|
|
|
|
def test_verify_marked_for_deletion(client):
|
|
setup_marked_user('marked2@example.com', verify_token='verifytoken123')
|
|
response = client.get('/auth/verify', query_string={'token': 'verifytoken123'})
|
|
assert response.status_code == 400
|
|
assert response.json['code'] == 'ACCOUNT_MARKED_FOR_DELETION'
|
|
|
|
def test_request_password_reset_marked_for_deletion(client):
|
|
setup_marked_user('marked3@example.com')
|
|
response = client.post('/auth/request-password-reset', json={'email': 'marked3@example.com'})
|
|
assert response.status_code == 403
|
|
assert response.json['code'] == 'ACCOUNT_MARKED_FOR_DELETION'
|
|
|
|
def test_me_marked_for_deletion(client):
|
|
email = 'marked4@example.com'
|
|
setup_marked_user(email, verified=True)
|
|
|
|
# Get the user to access the ID
|
|
user_dict = users_db.get(Query().email == email)
|
|
user = User.from_dict(user_dict)
|
|
|
|
# Create a valid JWT token for the marked user
|
|
payload = {
|
|
'email': email,
|
|
'user_id': user.id,
|
|
'exp': datetime.utcnow() + timedelta(hours=24)
|
|
}
|
|
token = jwt.encode(payload, 'supersecretkey', algorithm='HS256')
|
|
|
|
# Make request with token cookie
|
|
client.set_cookie('token', token)
|
|
response = client.get('/auth/me')
|
|
|
|
assert response.status_code == 403
|
|
assert response.json['code'] == 'ACCOUNT_MARKED_FOR_DELETION'
|