mgt c8 checkpoint after tests
This commit is contained in:
		@@ -89,7 +89,7 @@ class User(UserMixin, db.Model):
 | 
				
			|||||||
                .join(Post.author.of_type(Author))
 | 
					                .join(Post.author.of_type(Author))
 | 
				
			||||||
                .join(Author.followers.of_type(Follower), isouter=True)
 | 
					                .join(Author.followers.of_type(Follower), isouter=True)
 | 
				
			||||||
                .where(sa.or_(
 | 
					                .where(sa.or_(
 | 
				
			||||||
                    Follower.id == self.id
 | 
					                    Follower.id == self.id,
 | 
				
			||||||
                    Author.id == self.id
 | 
					                    Author.id == self.id
 | 
				
			||||||
                ))
 | 
					                ))
 | 
				
			||||||
                .group_by(Post)
 | 
					                .group_by(Post)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,8 +5,8 @@ basedir = os.path.abspath(os.path.dirname(__file__))
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class Config:
 | 
					class Config:
 | 
				
			||||||
    SECRET_KEY = os.environ.get('FLASK_SECRET_KEY') or 'flasksk'
 | 
					    SECRET_KEY = os.environ.get('FLASK_SECRET_KEY') or 'flasksk'
 | 
				
			||||||
    #SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'zapp.db')
 | 
					    SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'zapp.db')
 | 
				
			||||||
    SQLALCHEMY_DATABASE_URI = 'mariadb+mariadbconnector://flasku:' + os.environ.get('MYSQL_PASSWORD') + '@db:3306/flask'
 | 
					    #SQLALCHEMY_DATABASE_URI = 'mariadb+mariadbconnector://flasku:' + os.environ.get('MYSQL_PASSWORD') + '@db:3306/flask'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #MAIL_SERVER = 'pmb'
 | 
					    #MAIL_SERVER = 'pmb'
 | 
				
			||||||
    MAIL_SERVER = ''
 | 
					    MAIL_SERVER = ''
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,4 +2,94 @@ import os
 | 
				
			|||||||
os.environ['DATABASE_URL'] = 'sqlite://'
 | 
					os.environ['DATABASE_URL'] = 'sqlite://'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from datetime import datetime, timezone, timedelta
 | 
					from datetime import datetime, timezone, timedelta
 | 
				
			||||||
 | 
					import unittest
 | 
				
			||||||
 | 
					from app import app, db
 | 
				
			||||||
 | 
					from app.models import User, Post
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class UserModelCase(unittest.TestCase):
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        self.app_context = app.app_context()
 | 
				
			||||||
 | 
					        self.app_context.push()
 | 
				
			||||||
 | 
					        db.create_all()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def tearDown(self):
 | 
				
			||||||
 | 
					        db.session.remove()
 | 
				
			||||||
 | 
					        db.drop_all()
 | 
				
			||||||
 | 
					        self.app_context.pop()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_password_hashing(self):
 | 
				
			||||||
 | 
					        u = User(username='susan', email='susan@example.com')
 | 
				
			||||||
 | 
					        u.set_password('cat')
 | 
				
			||||||
 | 
					        self.assertFalse(u.check_password('dog'))
 | 
				
			||||||
 | 
					        self.assertTrue(u.check_password('cat'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_follow(self):
 | 
				
			||||||
 | 
					        u1 = User(username='john', email='john@example.com')
 | 
				
			||||||
 | 
					        u2 = User(username='susan', email='susan@example.com')
 | 
				
			||||||
 | 
					        db.session.add(u1)
 | 
				
			||||||
 | 
					        db.session.add(u2)
 | 
				
			||||||
 | 
					        db.session.commit()
 | 
				
			||||||
 | 
					        following = db.session.scalars(u1.following.select()).all()
 | 
				
			||||||
 | 
					        followers = db.session.scalars(u2.followers.select()).all()
 | 
				
			||||||
 | 
					        self.assertEqual(following, [])
 | 
				
			||||||
 | 
					        self.assertEqual(followers, [])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        u1.follow(u2)
 | 
				
			||||||
 | 
					        db.session.commit()
 | 
				
			||||||
 | 
					        self.assertTrue(u1.is_following(u2))
 | 
				
			||||||
 | 
					        self.assertEqual(u1.following_count(), 1)
 | 
				
			||||||
 | 
					        self.assertEqual(u2.followers_count(), 1)
 | 
				
			||||||
 | 
					        u1_following = db.session.scalars(u1.following.select()).all()
 | 
				
			||||||
 | 
					        u2_followers = db.session.scalars(u2.followers.select()).all()
 | 
				
			||||||
 | 
					        self.assertEqual(u1_following[0].username, 'susan')
 | 
				
			||||||
 | 
					        self.assertEqual(u2_followers[0].username, 'john')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        u1.unfollow(u2)
 | 
				
			||||||
 | 
					        db.session.commit()
 | 
				
			||||||
 | 
					        self.assertFalse(u1.is_following(u2))
 | 
				
			||||||
 | 
					        self.assertEqual(u1.following_count(), 0)
 | 
				
			||||||
 | 
					        self.assertEqual(u2.followers_count(), 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_follow_posts(self):
 | 
				
			||||||
 | 
					        # create four users
 | 
				
			||||||
 | 
					        u1 = User(username='john', email='john@example.com')
 | 
				
			||||||
 | 
					        u2 = User(username='susan', email='susan@example.com')
 | 
				
			||||||
 | 
					        u3 = User(username='mary', email='mary@example.com')
 | 
				
			||||||
 | 
					        u4 = User(username='david', email='david@example.com')
 | 
				
			||||||
 | 
					        db.session.add_all([u1, u2, u3, u4])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # create four posts
 | 
				
			||||||
 | 
					        now = datetime.now(timezone.utc)
 | 
				
			||||||
 | 
					        p1 = Post(body="post from john", author=u1,
 | 
				
			||||||
 | 
					                  timestamp=now + timedelta(seconds=1))
 | 
				
			||||||
 | 
					        p2 = Post(body="post from susan", author=u2,
 | 
				
			||||||
 | 
					                  timestamp=now + timedelta(seconds=4))
 | 
				
			||||||
 | 
					        p3 = Post(body="post from mary", author=u3,
 | 
				
			||||||
 | 
					                  timestamp=now + timedelta(seconds=3))
 | 
				
			||||||
 | 
					        p4 = Post(body="post from david", author=u4,
 | 
				
			||||||
 | 
					                  timestamp=now + timedelta(seconds=2))
 | 
				
			||||||
 | 
					        db.session.add_all([p1, p2, p3, p4])
 | 
				
			||||||
 | 
					        db.session.commit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # setup the followers
 | 
				
			||||||
 | 
					        u1.follow(u2)  # john follows susan
 | 
				
			||||||
 | 
					        u1.follow(u4)  # john follows david
 | 
				
			||||||
 | 
					        u2.follow(u3)  # susan follows mary
 | 
				
			||||||
 | 
					        u3.follow(u4)  # mary follows david
 | 
				
			||||||
 | 
					        db.session.commit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # check the following posts of each user
 | 
				
			||||||
 | 
					        f1 = db.session.scalars(u1.following_posts()).all()
 | 
				
			||||||
 | 
					        f2 = db.session.scalars(u2.following_posts()).all()
 | 
				
			||||||
 | 
					        f3 = db.session.scalars(u3.following_posts()).all()
 | 
				
			||||||
 | 
					        f4 = db.session.scalars(u4.following_posts()).all()
 | 
				
			||||||
 | 
					        self.assertEqual(f1, [p2, p4, p1])
 | 
				
			||||||
 | 
					        self.assertEqual(f2, [p2, p3])
 | 
				
			||||||
 | 
					        self.assertEqual(f3, [p3, p4])
 | 
				
			||||||
 | 
					        self.assertEqual(f4, [p4])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == '__main__':
 | 
				
			||||||
 | 
					    unittest.main(verbosity=2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user