6c0d5a4e63
- Flask-based mold cost calculation application - PostgreSQL database with SQLAlchemy ORM - Docker/Podman containerization - Comprehensive documentation in docs/ - Clean, organized codebase without obsolete files - Production-ready deployment configuration - Enhanced pytest configuration with coverage reporting - Master/Development branch structure
116 lines
3.5 KiB
Python
116 lines
3.5 KiB
Python
import pytest
|
|
from flask import url_for
|
|
from app.models import User, Quotation
|
|
from datetime import datetime, timezone
|
|
import os
|
|
|
|
def test_home_page(client):
|
|
response = client.get('/')
|
|
assert response.status_code == 200
|
|
|
|
def test_login_page(client):
|
|
response = client.get('/login')
|
|
assert response.status_code == 200
|
|
assert b'Login' in response.data
|
|
|
|
def test_register_page(client):
|
|
response = client.get('/register')
|
|
assert response.status_code == 200
|
|
assert b'Register' in response.data
|
|
|
|
def test_calculator_page_redirect(client):
|
|
response = client.get('/calculator')
|
|
assert response.status_code == 302
|
|
assert '/login' in response.headers['Location']
|
|
|
|
def test_login_success(client, app):
|
|
with app.app_context():
|
|
test_password = os.getenv('TEST_USER_PASSWORD', 'Test123!')
|
|
user = User.create(
|
|
username='testuser',
|
|
email='test@example.com',
|
|
company='Test Company',
|
|
password=test_password
|
|
)
|
|
db.session.commit()
|
|
|
|
response = client.post('/login', data={
|
|
'email': 'test@example.com',
|
|
'password': test_password,
|
|
'remember_me': False
|
|
}, follow_redirects=True)
|
|
|
|
assert response.status_code == 200
|
|
assert b'Calculator' in response.data
|
|
|
|
def test_login_failure(client):
|
|
response = client.post('/login', data={
|
|
'email': 'wrong@example.com',
|
|
'password': 'WrongPass123!',
|
|
'remember_me': False
|
|
}, follow_redirects=True)
|
|
|
|
assert response.status_code == 200
|
|
assert b'Invalid email or password' in response.data
|
|
|
|
def test_register_success(client, app):
|
|
response = client.post('/register', data={
|
|
'username': 'newuser',
|
|
'email': 'jenny.tay@adidas.com',
|
|
'company': 'New Company',
|
|
'password': 'NewPass123!',
|
|
'password_confirm': 'NewPass123!',
|
|
'terms': True
|
|
}, follow_redirects=True)
|
|
|
|
assert response.status_code == 200
|
|
assert b'Registration successful' in response.data
|
|
|
|
def test_register_duplicate_email(client, app):
|
|
with app.app_context():
|
|
user = User.create(
|
|
username='testuser',
|
|
email='jenny.tay@adidas.com',
|
|
company='Test Company',
|
|
password='Test123!'
|
|
)
|
|
db.session.commit()
|
|
|
|
response = client.post('/register', data={
|
|
'username': 'newuser',
|
|
'email': 'jenny.tay@adidas.com',
|
|
'company': 'New Company',
|
|
'password': 'NewPass123!',
|
|
'password_confirm': 'NewPass123!',
|
|
'terms': True
|
|
}, follow_redirects=True)
|
|
|
|
assert response.status_code == 200
|
|
assert b'Email already registered' in response.data
|
|
|
|
def test_admin_management_unauthorized(client):
|
|
response = client.get('/admin/management')
|
|
assert response.status_code == 302
|
|
assert '/login' in response.headers['Location']
|
|
|
|
def test_admin_management_authorized(client, app):
|
|
with app.app_context():
|
|
admin = User.create(
|
|
username='admin',
|
|
email='admin@example.com',
|
|
company='Admin Company',
|
|
password='Admin123!'
|
|
)
|
|
admin.is_admin = True
|
|
db.session.commit()
|
|
|
|
client.post('/login', data={
|
|
'email': 'admin@example.com',
|
|
'password': 'Admin123!',
|
|
'remember_me': False
|
|
})
|
|
|
|
response = client.get('/admin/management')
|
|
assert response.status_code == 200
|
|
assert b'User Management' in response.data
|
|
|