mirror of
https://github.com/rmontanana/microblog.git
synced 2025-08-15 07:15:52 +00:00
115 lines
3.4 KiB
Python
115 lines
3.4 KiB
Python
import os
|
|
|
|
os.environ["DATABASE_URL"] = "sqlite://"
|
|
|
|
from datetime import datetime, 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")
|
|
u.set_password("cat")
|
|
self.assertFalse(u.check_password("dog"))
|
|
self.assertTrue(u.check_password("cat"))
|
|
|
|
def test_avatar(self):
|
|
u = User(username="john", email="john@example.com")
|
|
self.assertEqual(
|
|
u.avatar(128),
|
|
(
|
|
"https://www.gravatar.com/avatar/"
|
|
"d4c74594d841139328695756648b6bd6"
|
|
"?d=identicon&s=128"
|
|
),
|
|
)
|
|
|
|
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()
|
|
self.assertEqual(u1.followed.all(), [])
|
|
self.assertEqual(u1.followers.all(), [])
|
|
|
|
u1.follow(u2)
|
|
db.session.commit()
|
|
self.assertTrue(u1.is_following(u2))
|
|
self.assertEqual(u1.followed.count(), 1)
|
|
self.assertEqual(u1.followed.first().username, "susan")
|
|
self.assertEqual(u2.followers.count(), 1)
|
|
self.assertEqual(u2.followers.first().username, "john")
|
|
|
|
u1.unfollow(u2)
|
|
db.session.commit()
|
|
self.assertFalse(u1.is_following(u2))
|
|
self.assertEqual(u1.followed.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.utcnow()
|
|
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 followed posts of each user
|
|
f1 = u1.followed_posts().all()
|
|
f2 = u2.followed_posts().all()
|
|
f3 = u3.followed_posts().all()
|
|
f4 = u4.followed_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)
|