Yield generated for b4580f0a-b26a-494b-aa36-95ff0476b415
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

181 lines
5.2 KiB

# -*- coding: utf-8 -*-
"""Model unit tests."""
import datetime as dt
import pytest
from conduit.user.models import User
from conduit.profile.models import UserProfile
from conduit.articles.models import Article, Tags, Comment
from .factories import UserFactory
@pytest.mark.usefixtures('db')
class TestUser:
"""User tests."""
def test_get_by_id(self):
"""Get user by ID."""
user = User('foo', 'foo@bar.com')
user.save()
retrieved = User.get_by_id(user.id)
assert retrieved == user
def test_created_at_defaults_to_datetime(self):
"""Test creation date."""
user = User(username='foo', email='foo@bar.com')
user.save()
assert bool(user.created_at)
assert isinstance(user.created_at, dt.datetime)
def test_password_is_nullable(self):
"""Test null password."""
user = User(username='foo', email='foo@bar.com')
user.save()
assert user.password is None
def test_factory(self, db):
"""Test user factory."""
user = UserFactory(password='myprecious')
db.session.commit()
assert bool(user.username)
assert bool(user.email)
assert bool(user.created_at)
assert user.check_password('myprecious')
def test_check_password(self):
"""Check password."""
user = User.create(username='foo', email='foo@bar.com',
password='foobarbaz123')
assert user.check_password('foobarbaz123')
assert not user.check_password('barfoobaz')
@pytest.mark.usefixtures('db')
class TestProfile:
def test_follow_user(self):
u1 = User('foo', 'foo@bar.com')
u1.save()
u2 = User('foo1', 'foo1@bar.com')
u2.save()
p1 = UserProfile(u1)
p2 = UserProfile(u2)
p1.save()
p2.save()
p1.follow(p2)
assert p1.is_following(p2)
def test_unfollow_user(self):
u1 = User('foo', 'foo@bar.com')
u1.save()
u2 = User('foo1', 'foo1@bar.com')
u2.save()
p1 = UserProfile(u1)
p2 = UserProfile(u2)
p1.save()
p2.save()
p1.follow(p2)
assert p1.is_following(p2)
p1.unfollow(p2)
assert not p1.is_following(p2)
def test_follow_self(self):
u1 = User('foo', 'foo@bar.com')
u1.save()
p1 = UserProfile(u1)
p1.save()
assert not p1.follow(p1)
def test_unfollow_self(self):
u1 = User('foo', 'foo@bar.com')
u1.save()
p1 = UserProfile(u1)
assert not p1.unfollow(p1)
@pytest.mark.usefixtures('db')
class TestArticles:
def test_create_article(self, user):
u1 = user.get()
article = Article(u1.profile, 'title', 'some body', description='some')
article.save()
assert article.author.user == u1
def test_favorite_an_article(self):
u1 = User('foo', 'foo@bar.com')
u1.save()
p1 = UserProfile(u1)
p1.save()
article = Article(p1, 'title', 'some body', description='some')
article.save()
assert article.favourite(u1.profile)
assert article.is_favourite(u1.profile)
def test_unfavorite_an_article(self):
u1 = User('foo', 'foo@bar.com')
u1.save()
p1 = UserProfile(u1)
p1.save()
u2 = User('foo1', 'fo1o@bar.com')
u2.save()
p2 = UserProfile(u2)
p2.save()
article = Article(p1, 'title', 'some body', description='some')
article.save()
assert article.favourite(p1)
assert article.unfavourite(p1)
assert not article.is_favourite(p1)
def test_add_tag(self, user):
user = user.get()
article = Article(user.profile, 'title', 'some body', description='some')
article.save()
t = Tags(tagname='python')
t1 = Tags(tagname='flask')
assert article.add_tag(t)
assert article.add_tag(t1)
assert len(article.tagList) == 2
def test_remove_tag(self, user):
user = user.get()
article = Article(user.profile, 'title', 'some body', description='some')
article.save()
t1 = Tags(tagname='flask')
assert article.add_tag(t1)
assert article.remove_tag(t1)
assert len(article.tagList) == 0
@pytest.mark.usefixtures('db')
class TestComment:
def test_make_comment(self, user):
user = user.get()
article = Article(user.profile, 'title', 'some body', description='some')
article.save()
comment = Comment(article, user.profile, 'some body')
comment.save()
assert comment.article == article
assert comment.author == user.profile
def test_make_comments(self, user):
user = user.get()
article = Article(user.profile, 'title', 'some body', description='some')
article.save()
comment = Comment(article, user.profile, 'some body')
comment1 = Comment(article, user.profile, 'some body2')
comment.save()
comment1.save()
assert comment.article == article
assert comment.author == user.profile
assert comment1.article == article
assert comment1.author == user.profile
assert len(article.comments.all()) == 2