def test_digest_task(client, database, smtp_server): # Here because it requires the app context to be set from monolith.task import send_digest no_stories = 'Start following your favourite users to get ' \ 'periodic digests.' send_digest.apply() for msg in smtp_server.messages: assert msg.get_payload() == no_stories now = dt.datetime.now() s1 = Story(author_id=2, text='Story 1', likes=42, dislikes=69, is_draft=False, deleted=False) s1.dice_set = ['dice', 'set'] s1.date = now - dt.timedelta(days=1) database.session.add(s1) s2 = Story(author_id=2, text='Story 2', likes=42, dislikes=69, is_draft=False, deleted=False) s2.dice_set = ['dice', 'set'] s2.date = now - dt.timedelta(days=60) database.session.add(s2) s3 = Story(author_id=3, text='Story 3', likes=42, dislikes=69, is_draft=False, deleted=False) s3.dice_set = ['dice', 'set'] s3.date = now - dt.timedelta(days=4) database.session.add(s3) u1 = User.query.get(1) u2 = User.query.get(2) u3 = User.query.get(3) u4 = User.query.get(4) u1.follows.append(u2) u2.follows.append(u3) u3.follows.append(u4) database.session.commit() smtp_server.reset() send_digest.apply() for msg in smtp_server.messages: u = User.query.filter_by(email=msg['To']).one() digest = digests.build_user_digest(u, now - dt.timedelta(weeks=4), now) payload = msg.get_payload().replace('\r\n', '\n').strip() digest = digest.get_payload().replace('\r\n', '\n').strip() assert payload == digest
def test_get_random_story(client, database, templates, story_actions): example = Story() example.text = 'very not recent story (months/years ago)' example.likes = 0 example.author_id = 1 example.date = dt.datetime(2019, 9, 5) example.is_draft = False example.deleted = False example.dice_set = ['a', 'b', 'c'] database.session.add(example) example = Story() example.text = 'not recent story (yesterday)' example.date = dt.datetime.now() - dt.timedelta(days=1) example.likes = 0 example.author_id = 2 example.is_draft = False example.deleted = False example.dice_set = ['a', 'b', 'c'] database.session.add(example) example = Story() example.text = 'drafted story' example.date = dt.datetime.now() - dt.timedelta(days=1) example.likes = 0 example.author_id = 1 example.is_draft = True example.deleted = False example.dice_set = ['a', 'b', 'c'] database.session.add(example) example = Story() example.text = 'deleted story' example.date = dt.datetime.now() - dt.timedelta(days=1) example.likes = 0 example.author_id = 1 example.is_draft = False example.deleted = True example.dice_set = ['a', 'b', 'c'] database.session.add(example) database.session.commit() # story found reply = story_actions.get_random_recent_story() assert reply.status_code == 200 template_context = templates[-1] id = template_context['story'].id message = template_context['message'] assert id == 1 or id == 2 assert message == 'no stories today. Here is a random one:'
def test_getuser(client, auth, database, templates): reply = auth.login() assert reply.status_code == 302 reply = client.get('/users/2') assert reply.status_code == 200 user = templates[-1]['user'] stories = templates[-1]['stories'] assert user == 'test1' assert stories == [] example = Story() example.text = 'First story of test1 user :)' example.author_id = 2 example.is_draft = False example.deleted = False example.dice_set = ['a', 'b', 'c'] database.session.add(example) database.session.commit() reply = client.get('/users/2') assert reply.status_code == 200 user = templates[-1]['user'] stories = templates[-1]['stories'] assert user == 'test1' assert len(stories) == 1 assert stories[0].id == example.id
def test_story_with_unmarked_dislike(client, auth, database, templates, story_actions): # example story and unmarked reaction s = Story() s.text = 'Trial story of example admin user :)' s.likes = 42 s.dislikes = 0 s.author_id = 1 s.dice_set = ['dice1', 'dice2'] s.is_draft = False s.deleted = False database.session.add(s) r = Reaction() r.reactor_id = 1 r.author = s r.reaction_val = -1 r.marked = False database.session.add(r) database.session.commit() # get the story auth.login() reply = story_actions.get_story(1) template_capture = templates[-1] assert reply.status_code == 200 assert template_capture['story'].likes == 42 # check that the unmarked dislike is counted assert template_capture['story'].dislikes == 1 database.session.commit()
def test_get_story(client, auth, database, templates, story_actions): example = Story() example.text = 'Trial story of example admin user :)' example.likes = 42 example.author_id = 1 example.dice_set = ['dice1', 'dice2'] database.session.add(example) database.session.commit() auth.login() # story found reply = story_actions.get_story(1) template_capture = templates[-1] assert reply.status_code == 200 assert template_capture['story'].id == 1 # assert template_capture['message'] == '' # story not found reply = story_actions.get_story(0) assert reply.status_code == 404 # invalid input reply = story_actions.get_story('ciao') assert reply.status_code == 404 # deleted story reply = story_actions.delete_story(1) assert reply.status_code == 200 reply = story_actions.get_story(1) assert reply.status_code == 410
def test_check_mywall(client, auth, database, templates): reply = client.get('/') assert reply.status_code == 302 auth.login() reply = client.get('/') stories = templates[-1]['stories'] assert reply.status_code == 200 assert stories == [] example = Story() # gets story_id=1 as user_id or as the first? example.text = 'Trial story of example admin user :)' example.likes = 42 example.dislikes = 0 example.author_id = 1 example.dice_set = 'face1?face2?face3?face4' database.session.add(example) database.session.commit() reply = client.get('/') stories = templates[-1]['stories'] assert reply.status_code == 200 assert len(stories) == 1 assert stories[0].id == example.id example2 = Story() # gets story_id=1 as user_id or as the first? example2.text = 'New story of example admin user :)' example2.likes = 42 example2.dislikes = 0 example2.author_id = 1 example2.dice_set = 'face1?face2?face3?face4' database.session.add(example2) database.session.commit() reply = client.get('/') stories = templates[-1]['stories'] assert reply.status_code == 200 assert len(stories) == 2 for story in stories: assert story.id == example.id or story.id == example2.id
def init_database(database): example = Story() example.text = 'lorem ipsum dolor sit amet' example.likes = 42 example.author_id = 1 example.date = dt.datetime(year=2018, month=12, day=1) example.is_draft = False example.deleted = False example.dice_set = ['a', 'b', 'c'] database.session.add(example) example = Story() example.text = 'bird drink coffee baloon' example.likes = 42 example.author_id = 1 example.date = dt.datetime(year=2019, month=1, day=1) example.is_draft = False example.deleted = False example.dice_set = ['a', 'b', 'c'] database.session.add(example) example = Story() example.text = 'lorem Coffee dolor sit amet' example.likes = 42 example.author_id = 1 example.date = dt.datetime(year=2019, month=3, day=12) example.is_draft = False example.deleted = False example.dice_set = ['a', 'b', 'c'] database.session.add(example) example = Story() example.text = 'bird cofFee baloon amet' example.likes = 42 example.author_id = 1 example.date = dt.datetime(year=2017, month=10, day=1) example.is_draft = False example.deleted = False example.dice_set = ['a', 'b', 'c'] database.session.add(example) database.session.commit()
def test_get_by_interest(client, auth, database, templates, story_actions): auth.login() example1 = Story() example1.theme = 'halloween' example1.text = 'Halloween story of test1 user :)' example1.author_id = 2 example1.is_draft = False example1.deleted = False example1.dice_set = ['a', 'b', 'c'] database.session.add(example1) database.session.commit() example2 = Story() example2.theme = 'xmas' example2.text = 'Xmas story of test2 user :)' example2.author_id = 3 example2.is_draft = False example2.deleted = False example2.dice_set = ['a', 'b', 'c'] database.session.add(example2) database.session.commit() example3 = Story() example3.theme = 'xmas' example3.theme = 'Old xmas story of test3 user :)' example3.date = dt.datetime.now() - dt.timedelta(days=6) example3.author_id = 4 example3.is_draft = False example3.deleted = False example3.dice_set = ['a', 'b', 'c'] database.session.add(example3) database.session.commit() reply = story_actions.get_all_stories(theme='xmas') assert reply.status_code == 200 assert templates[-1]['stories'].all() == [example2]
def test_statistics(client, auth, database, templates): auth.login() reply = client.get('/') assert reply.status_code == 200 # As soon as I create a new user I shouldn't have stats # since I have no stories stats = templates[-1]['stats'] assert stats == {} example = Story() example.text = 'Lorem ipsum dolor sit amet' example.likes = 0 example.dislikes = 0 example.author_id = 1 example.dice_set = ["face1", "face2", "face3", "face4"] database.session.add(example) database.session.commit() reply = client.get('/') stats = templates[-1]['stats'] assert reply.status_code == 200 # List index 0 refers to number of stories, # index 1 refers to the number of likes, # index 2 to the number of dislikes assert stats['stories'][0] == 1 \ and stats['stories'][1] == 0 \ and stats['stories'][2] == 0 # I threw one set of four dice only once assert stats['avg_dice'] == 4 # Published only only one story assert stats['stories_frequency'] == 1 # Active user, it has been published at least one story in the last 7 days assert stats['active']
def test_story_digest_format(): u = User() u.username = '******' u.email = '*****@*****.**' u.firstname = 'Firstname' u.lastname = 'Lastname' date = dt.datetime.now() s = Story() s.author = u s.text = 'Lorem ipsum dolor sit amet' s.date = date s.likes = 42 s.dislikes = 69 s.dice_set = ['lorem', 'ipsum', 'dolor', 'sit', 'amet'] s.deleted = False s.is_draft = False lines = digests.story_digest(s).split('\n') assert lines[0] == 'author: Firstname Lastname (Username)' assert lines[1] == 'roll: lorem, ipsum, dolor, sit, amet' assert lines[2] == f'date: {date}' assert lines[3] == 'story: Lorem ipsum dolor sit amet' assert lines[4] == 'likes: 42 -- dislikes: 69'
def _rollDice(): ''' Rolls the dice and enables the user to start writing a story. The story is created as a draft, so that it can be edited. Raises: Exception: due to eventual failures during the commit of the created story into the database. Returns: 302 -> the user is redirected to the page in which he/she can start writing the story on the faces which came out. ''' diceset = request.args.get('diceset', 'standard') dicenum = request.args.get('dicenum', 6, type=int) try: dice = DiceSet(diceset, dicenum) roll = dice.throw_dice() story = Story() story.text = '' story.theme = diceset story.likes = 0 story.dislikes = 0 story.dice_set = roll story.author_id = current_user.id db.session.add(story) db.session.commit() except Exception as e: print(e) db.session.rollback() abort(400) return redirect(url_for('stories._story_edit', storyid=story.id))
def test_user_digest_format(client, database): now = dt.datetime.now() s1 = Story(author_id=2, text='Story 1', likes=42, dislikes=69, is_draft=False, deleted=False) s1.dice_set = ['dice', 'set'] s1.date = now - dt.timedelta(days=1) database.session.add(s1) s2 = Story(author_id=2, text='Story 2', date=now, likes=42, dislikes=69, is_draft=False, deleted=False) s2.dice_set = ['dice', 'set'] s2.date = now database.session.add(s2) s3 = Story(author_id=2, text='Story 3', likes=42, dislikes=69, is_draft=False, deleted=False) s3.dice_set = ['dice', 'set'] s3.date = now - dt.timedelta(days=7) database.session.add(s3) s4 = Story(author_id=3, text='Story 4', likes=42, dislikes=69, is_draft=False, deleted=False) s4.dice_set = ['dice', 'set'] s4.date = now database.session.add(s4) s5 = Story(author_id=2, text='Story 5', likes=42, dislikes=69, is_draft=True, deleted=False) s5.dice_set = ['dice', 'set'] s5.date = now database.session.add(s5) s6 = Story(author_id=2, text='Story 5', likes=42, dislikes=69, is_draft=False, deleted=True) s6.dice_set = ['dice', 'set'] s6.date = now database.session.add(s6) u = User.query.get(1) u.follows.append(User.query.get(2)) database.session.commit() digest = digests.build_user_digest(u, now - dt.timedelta(days=2), now + dt.timedelta(days=2)) \ .get_content().split('----------\n') assert len(digest) == 2 assert digest[0] == digests.story_digest(s2) assert digest[1] == digests.story_digest(s1)
def test_getusers(client, database, auth, templates): reply = auth.login('Admin', 'admin') assert reply.status_code == 302 reply = client.get('/users') template_capture = templates[-1]['result'] users = [(r[0], r[1]) for r in template_capture] assert users == [('Admin', None), ('test1', None), ('test2', None), ('test3', None)] example = Story() example.text = 'First story of admin user :)' example.author_id = 1 example.is_draft = False example.deleted = False example.dice_set = ['a', 'b', 'c'] database.session.add(example) database.session.commit() reply = client.get('/users') template_capture = templates[-1]['result'] users = [(r[0], r[1]) for r in template_capture] assert users == [('Admin', 'First story of admin user :)'), ('test1', None), ('test2', None), ('test3', None)] client.get('/logout') client.post('/signup', data={'email': '*****@*****.**', 'username': '******', 'password': '******'}) reply = client.get('/users') template_capture = templates[-1]['result'] users = [(r[0], r[1]) for r in template_capture] assert users == [('Admin', 'First story of admin user :)'), ('test1', None), ('test2', None), ('test3', None), ('prova', None)] example = Story() example.text = 'First story of prova user :)' example.author_id = 5 example.is_draft = False example.deleted = False example.dice_set = ['a', 'b', 'c'] database.session.add(example) database.session.commit() reply = client.get('/users') template_capture = templates[-1]['result'] users = [(r[0], r[1]) for r in template_capture] assert users == [('Admin', 'First story of admin user :)'), ('test1', None), ('test2', None), ('test3', None), ('prova', 'First story of prova user :)')] example = Story() example.text = 'Second story of admin user :)' example.author_id = 1 example.is_draft = False example.deleted = False example.dice_set = ['a', 'b', 'c'] database.session.add(example) database.session.commit() reply = client.get('/users') template_capture = templates[-1]['result'] users = [(r[0], r[1]) for r in template_capture] assert users == [('Admin', 'Second story of admin user :)'), ('test1', None), ('test2', None), ('test3', None), ('prova', 'First story of prova user :)')]