Cloud computing coursework:Saas 图片社交网站
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 

111 řádky
4.7 KiB

# -*- coding: utf-8 -*-
from flask import url_for
from phshare.models import User
from phshare.settings import Operations
from phshare.utils import generate_token
from tests.base import BaseTestCase
class AuthTestCase(BaseTestCase):
def test_login_normal_user(self):
response = self.login()
data = response.get_data(as_text=True)
self.assertIn('Login success.', data)
def test_login_locked_user(self):
self.login(email='locked@helloflask.com', password='123')
response = self.client.get(url_for('user.index', username='locked'))
data = response.get_data(as_text=True)
self.assertIn('Your account is locked.', data)
def test_login_blocked_user(self):
response = self.login(email='blocked@helloflask.com', password='123')
data = response.get_data(as_text=True)
self.assertIn('Your account is blocked.', data)
def test_fail_login(self):
response = self.login(email='wrong-username@helloflask.com', password='wrong-password')
data = response.get_data(as_text=True)
self.assertIn('Invalid email or password.', data)
def test_logout_user(self):
self.login()
response = self.logout()
data = response.get_data(as_text=True)
self.assertIn('Logout success.', data)
def test_login_protect(self):
response = self.client.get(url_for('main.upload'), follow_redirects=True)
data = response.get_data(as_text=True)
self.assertIn('Please log in to access this page.', data)
def test_unconfirmed_user_permission(self):
self.login(email='unconfirmed@helloflask.com', password='123')
response = self.client.get(url_for('main.upload'), follow_redirects=True)
data = response.get_data(as_text=True)
self.assertIn('Please confirm your account first.', data)
def test_locked_user_permission(self):
self.login(email='locked@helloflask.com', password='123')
response = self.client.get(url_for('main.upload'), follow_redirects=True)
self.assertEqual(response.status_code, 403)
def test_register_account(self):
response = self.client.post(url_for('auth.register'), data=dict(
name='swz',
email='test@helloflask.com',
username='test',
password='12345678',
password2='12345678'
), follow_redirects=True)
data = response.get_data(as_text=True)
self.assertIn('Confirm email sent, check your inbox.', data)
def test_confirm_account(self):
user = User.query.filter_by(email='unconfirmed@helloflask.com').first()
self.assertFalse(user.confirmed)
token = generate_token(user=user, operation='confirm')
self.login(email='unconfirmed@helloflask.com', password='123')
response = self.client.get(url_for('auth.confirm', token=token), follow_redirects=True)
data = response.get_data(as_text=True)
self.assertIn('Account confirmed.', data)
self.assertTrue(user.confirmed)
def test_bad_confirm_token(self):
self.login(email='unconfirmed@helloflask.com', password='123')
response = self.client.get(url_for('auth.confirm', token='bad token'), follow_redirects=True)
data = response.get_data(as_text=True)
self.assertIn('Invalid or expired token.', data)
self.assertNotIn('Account confirmed.', data)
def test_reset_password(self):
response = self.client.post(url_for('auth.forget_password'), data=dict(
email='normal@helloflask.com',
), follow_redirects=True)
data = response.get_data(as_text=True)
self.assertIn('Password reset email sent, check your inbox.', data)
user = User.query.filter_by(email='normal@helloflask.com').first()
self.assertTrue(user.validate_password('123'))
token = generate_token(user=user, operation=Operations.RESET_PASSWORD)
response = self.client.post(url_for('auth.reset_password', token=token), data=dict(
email='normal@helloflask.com',
password='new-password',
password2='new-password'
), follow_redirects=True)
data = response.get_data(as_text=True)
self.assertIn('Password updated.', data)
self.assertTrue(user.validate_password('new-password'))
self.assertFalse(user.validate_password('123'))
# bad token
response = self.client.post(url_for('auth.reset_password', token='bad token'), data=dict(
email='normal@helloflask.com',
password='new-password',
password2='new-password'
), follow_redirects=True)
data = response.get_data(as_text=True)
self.assertIn('Invalid or expired link.', data)
self.assertNotIn('Password updated.', data)