sentiment-analysis / test_app.py
sabarish
Initial commit
e45ddff
import pytest
from app import create_app
from models import db, User
@pytest.fixture
def test_client():
# Configure app for testing
app = create_app()
app.config['TESTING'] = True
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:' # Use in-memory SQLite for tests
app.config['WTF_CSRF_ENABLED'] = False
with app.test_client() as testing_client:
with app.app_context():
db.create_all()
# Seed test users
admin = User(name="Admin test", email="admin@test.com", role="Admin")
admin.set_password("pass123")
student = User(name="Student test", email="student@test.com", role="Student")
student.set_password("pass123")
db.session.add_all([admin, student])
db.session.commit()
yield testing_client
db.session.remove()
db.drop_all()
def test_login_page_loads(test_client):
response = test_client.get('/auth/login')
assert response.status_code == 200
def test_register_page_loads(test_client):
response = test_client.get('/auth/register')
assert response.status_code == 200
def login(client, email, password):
return client.post('/auth/login', data=dict(
email=email,
password=password
), follow_redirects=True)
def logout(client):
return client.get('/auth/logout', follow_redirects=True)
def test_dashboard_access(test_client):
# Unauthenticated should redirect
response = test_client.get('/dashboard/', follow_redirects=False)
assert response.status_code == 302
assert '/auth/login' in response.headers.get('Location')
# Authenticated should succeed
login(test_client, 'student@test.com', 'pass123')
response2 = test_client.get('/dashboard/')
assert response2.status_code == 200
def test_admin_routes_security(test_client):
# Login as student
login(test_client, 'student@test.com', 'pass123')
# Try access admin route
response = test_client.get('/admin/create-user', follow_redirects=True)
# Should be redirected to dashboard
assert b'Access denied' in response.data
logout(test_client)
# Login as admin
login(test_client, 'admin@test.com', 'pass123')
response2 = test_client.get('/admin/create-user')
assert response2.status_code == 200
response3 = test_client.get('/admin/manage-users')
assert response3.status_code == 200
def test_profile_route(test_client):
login(test_client, 'student@test.com', 'pass123')
response = test_client.get('/profile/')
assert response.status_code == 200
def test_submit_feedback_page(test_client):
login(test_client, 'student@test.com', 'pass123')
response = test_client.get('/feedback/submit')
assert response.status_code == 200
def test_upload_route_security(test_client):
# Student cannot upload
login(test_client, 'student@test.com', 'pass123')
response = test_client.get('/upload/', follow_redirects=True)
assert b'permission to access' in b''.join(response.data.split()) or b'permission' in response.data
logout(test_client)
# Admin can upload
login(test_client, 'admin@test.com', 'pass123')
response2 = test_client.get('/upload/')
assert response2.status_code == 200