import pytest import calsocial from calsocial.models import db, User @pytest.fixture def client(): calsocial.app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' calsocial.app.config['TESTING'] = True calsocial.app.config['WTF_CSRF_ENABLED'] = False client = calsocial.app.test_client() with calsocial.app.app_context(): db.create_all() yield client with calsocial.app.app_context(): db.drop_all() def test_index_no_login(client): """Test the main page without logging in """ page = client.get('/') assert b'Welcome to Calendar.social' in page.data def test_register_page(client): """Test the registration page """ page = client.get('/register') assert b'Register' in page.data def test_register_post_empty(client): """Test sending empty registration data """ page = client.post('/register', data={}) assert b'This field is required' in page.data def test_register_invalid_email(client): """Test sending an invalid email address """ page = client.post('/register', data={ 'username': 'test', 'email': 'test', 'password': 'password', 'password_retype': 'password', }) assert b'Invalid email address' in page.data def test_register_password_mismatch(client): """Test sending different password for registration """ page = client.post('/register', data={ 'username': 'test', 'email': 'test@example.com', 'password': 'password', 'password_retype': 'something', }) assert b'The two passwords must match' in page.data def test_register(client): """Test user registration """ page = client.post('/register', data={ 'username': 'test', 'email': 'test@example.com', 'password': 'password', 'password_retype': 'password', }) print(page.data) assert page.status_code == 302 assert page.location == 'http://localhost/' with calsocial.app.app_context(): user = User.query.one() assert user.username == 'test' assert user.email == 'test@example.com' def test_register_existing_username(client): """Test registering an existing username """ with calsocial.app.app_context(): user = User(username='test', email='test@example.com') db.session.add(user) db.session.commit() page = client.post('/register', data={ 'username': 'test', 'email': 'test2@example.com', 'password': 'password', 'password_retype': 'password', }) assert b'This username is not available' in page.data def test_register_existing_email(client): """Test registering an existing email address """ with calsocial.app.app_context(): user = User(username='test', email='test@example.com') db.session.add(user) db.session.commit() page = client.post('/register', data={ 'username': 'tester', 'email': 'test@example.com', 'password': 'password', 'password_retype': 'password', }) assert b'This email address can not be used' in page.data