mirror of https://github.com/pallets/flask.git
				
				
				
			
		
			
				
	
	
		
			151 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
	
# -*- coding: utf-8 -*-
 | 
						|
"""
 | 
						|
    MiniTwit Tests
 | 
						|
    ~~~~~~~~~~~~~~
 | 
						|
 | 
						|
    Tests the MiniTwit application.
 | 
						|
 | 
						|
    :copyright: (c) 2014 by Armin Ronacher.
 | 
						|
    :license: BSD, see LICENSE for more details.
 | 
						|
"""
 | 
						|
import os
 | 
						|
import minitwit
 | 
						|
import unittest
 | 
						|
import tempfile
 | 
						|
 | 
						|
 | 
						|
class MiniTwitTestCase(unittest.TestCase):
 | 
						|
 | 
						|
    def setUp(self):
 | 
						|
        """Before each test, set up a blank database"""
 | 
						|
        self.db_fd, minitwit.app.config['DATABASE'] = tempfile.mkstemp()
 | 
						|
        self.app = minitwit.app.test_client()
 | 
						|
        with minitwit.app.app_context():
 | 
						|
            minitwit.init_db()
 | 
						|
 | 
						|
    def tearDown(self):
 | 
						|
        """Get rid of the database again after each test."""
 | 
						|
        os.close(self.db_fd)
 | 
						|
        os.unlink(minitwit.app.config['DATABASE'])
 | 
						|
 | 
						|
    # helper functions
 | 
						|
 | 
						|
    def register(self, username, password, password2=None, email=None):
 | 
						|
        """Helper function to register a user"""
 | 
						|
        if password2 is None:
 | 
						|
            password2 = password
 | 
						|
        if email is None:
 | 
						|
            email = username + '@example.com'
 | 
						|
        return self.app.post('/register', data={
 | 
						|
            'username':     username,
 | 
						|
            'password':     password,
 | 
						|
            'password2':    password2,
 | 
						|
            'email':        email,
 | 
						|
        }, follow_redirects=True)
 | 
						|
 | 
						|
    def login(self, username, password):
 | 
						|
        """Helper function to login"""
 | 
						|
        return self.app.post('/login', data={
 | 
						|
            'username': username,
 | 
						|
            'password': password
 | 
						|
        }, follow_redirects=True)
 | 
						|
 | 
						|
    def register_and_login(self, username, password):
 | 
						|
        """Registers and logs in in one go"""
 | 
						|
        self.register(username, password)
 | 
						|
        return self.login(username, password)
 | 
						|
 | 
						|
    def logout(self):
 | 
						|
        """Helper function to logout"""
 | 
						|
        return self.app.get('/logout', follow_redirects=True)
 | 
						|
 | 
						|
    def add_message(self, text):
 | 
						|
        """Records a message"""
 | 
						|
        rv = self.app.post('/add_message', data={'text': text},
 | 
						|
                                    follow_redirects=True)
 | 
						|
        if text:
 | 
						|
            assert b'Your message was recorded' in rv.data
 | 
						|
        return rv
 | 
						|
 | 
						|
    # testing functions
 | 
						|
 | 
						|
    def test_register(self):
 | 
						|
        """Make sure registering works"""
 | 
						|
        rv = self.register('user1', 'default')
 | 
						|
        assert b'You were successfully registered ' \
 | 
						|
               b'and can login now' in rv.data
 | 
						|
        rv = self.register('user1', 'default')
 | 
						|
        assert b'The username is already taken' in rv.data
 | 
						|
        rv = self.register('', 'default')
 | 
						|
        assert b'You have to enter a username' in rv.data
 | 
						|
        rv = self.register('meh', '')
 | 
						|
        assert b'You have to enter a password' in rv.data
 | 
						|
        rv = self.register('meh', 'x', 'y')
 | 
						|
        assert b'The two passwords do not match' in rv.data
 | 
						|
        rv = self.register('meh', 'foo', email='broken')
 | 
						|
        assert b'You have to enter a valid email address' in rv.data
 | 
						|
 | 
						|
    def test_login_logout(self):
 | 
						|
        """Make sure logging in and logging out works"""
 | 
						|
        rv = self.register_and_login('user1', 'default')
 | 
						|
        assert b'You were logged in' in rv.data
 | 
						|
        rv = self.logout()
 | 
						|
        assert b'You were logged out' in rv.data
 | 
						|
        rv = self.login('user1', 'wrongpassword')
 | 
						|
        assert b'Invalid password' in rv.data
 | 
						|
        rv = self.login('user2', 'wrongpassword')
 | 
						|
        assert b'Invalid username' in rv.data
 | 
						|
 | 
						|
    def test_message_recording(self):
 | 
						|
        """Check if adding messages works"""
 | 
						|
        self.register_and_login('foo', 'default')
 | 
						|
        self.add_message('test message 1')
 | 
						|
        self.add_message('<test message 2>')
 | 
						|
        rv = self.app.get('/')
 | 
						|
        assert b'test message 1' in rv.data
 | 
						|
        assert b'<test message 2>' in rv.data
 | 
						|
 | 
						|
    def test_timelines(self):
 | 
						|
        """Make sure that timelines work"""
 | 
						|
        self.register_and_login('foo', 'default')
 | 
						|
        self.add_message('the message by foo')
 | 
						|
        self.logout()
 | 
						|
        self.register_and_login('bar', 'default')
 | 
						|
        self.add_message('the message by bar')
 | 
						|
        rv = self.app.get('/public')
 | 
						|
        assert b'the message by foo' in rv.data
 | 
						|
        assert b'the message by bar' in rv.data
 | 
						|
 | 
						|
        # bar's timeline should just show bar's message
 | 
						|
        rv = self.app.get('/')
 | 
						|
        assert b'the message by foo' not in rv.data
 | 
						|
        assert b'the message by bar' in rv.data
 | 
						|
 | 
						|
        # now let's follow foo
 | 
						|
        rv = self.app.get('/foo/follow', follow_redirects=True)
 | 
						|
        assert b'You are now following "foo"' in rv.data
 | 
						|
 | 
						|
        # we should now see foo's message
 | 
						|
        rv = self.app.get('/')
 | 
						|
        assert b'the message by foo' in rv.data
 | 
						|
        assert b'the message by bar' in rv.data
 | 
						|
 | 
						|
        # but on the user's page we only want the user's message
 | 
						|
        rv = self.app.get('/bar')
 | 
						|
        assert b'the message by foo' not in rv.data
 | 
						|
        assert b'the message by bar' in rv.data
 | 
						|
        rv = self.app.get('/foo')
 | 
						|
        assert b'the message by foo' in rv.data
 | 
						|
        assert b'the message by bar' not in rv.data
 | 
						|
 | 
						|
        # now unfollow and check if that worked
 | 
						|
        rv = self.app.get('/foo/unfollow', follow_redirects=True)
 | 
						|
        assert b'You are no longer following "foo"' in rv.data
 | 
						|
        rv = self.app.get('/')
 | 
						|
        assert b'the message by foo' not in rv.data
 | 
						|
        assert b'the message by bar' in rv.data
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    unittest.main()
 |