Exemplo n.º 1
0
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()
Exemplo n.º 2
0
def make_story(userid, text="test text", likes=0, dislikes=0):
    example = Story()
    example.text = text
    example.likes = likes
    example.dislikes = dislikes
    example.author_id = userid
    return example
Exemplo n.º 3
0
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
Exemplo n.º 4
0
    def test_die_init(self):
        example = User()
        example.id = random.randint(0, 2048)
        example.firstname = 'userwall'
        example.lastname = 'theWall'
        example.email = '*****@*****.**'
        example.dateofbirth = datetime.datetime(2020, 10, 5)
        example.is_admin = True
        example.set_password('daddysflownacrosstheocean')

        some_stories = [
            'story1', 'story2', 'story3', 'story4', 'story5', 'story6'
        ]

        wall = Wall(example)

        for s in some_stories:
            story = Story()
            story.id = random.randint(0, 2048)
            story.text = s
            story.likes = 0
            story.dislikes = 0
            wall.add_story(story)

        wall.storyLimit = len(wall.stories)

        story = Story()
        story.id = random.randint(0, 2048)
        story.text = 'an extra story'
        story.likes = 0
        story.dislikes = 0
        wall.add_story(story)

        wall.add_story(story)

        self.assertEqual(len(wall.stories), wall.storyLimit)
Exemplo n.º 5
0
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']
Exemplo n.º 6
0
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'
Exemplo n.º 7
0
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))
Exemplo n.º 8
0
def _stories(message='', error=False, res_msg='', info_bar=False):
    form = SelectDiceSetForm()
    if 'POST' == request.method:
        # Create a new story
        new_story = Story()
        new_story.author_id = current_user.id
        new_story.likes = 0
        new_story.dislikes = 0

        if form.validate_on_submit():
            text = request.form.get('text')
            roll = request.form.get('roll')
            # for the tests
            if re.search('"', roll):
                roll = json.loads(request.form.get('roll'))

        if (type(roll) is str):
            roll = roll.replace("[", "")
            roll = roll.replace("]", "")
            roll = roll.replace("'", "")
            roll = roll.replace(" ", "")
            aux = roll.split(",")
            roll = aux

        dicenumber = len(roll)
        try:
            check_storyV2(text, roll)
            new_story.text = text
            new_story.roll = {'dice': roll}
            new_story.dicenumber = dicenumber
            db.session.add(new_story)
            db.session.commit()
        except WrongFormatStoryError:
            # print('ERROR 1', file=sys.stderr)
            message = "There was an error. Try again."

        except WrongFormatDiceError:
            # print('ERROR 2', file=sys.stderr)
            message = "There was an error. Try again."

        except TooLongStoryError:
            # print('ERROR 3', file=sys.stderr)
            message = "The story is too long. The length is > 1000 characters."

        except TooSmallStoryError:
            # print('ERROR 4', file=sys.stderr)
            message = "The number of words of the story must greater or equal of the number of resulted faces."

        except WrongFormatSingleDiceError:
            # print('ERROR 5', file=sys.stderr)
            message = "There was an error. Try again."

        except InvalidStory:
            # print('ERROR 6', file=sys.stderr)
            message = "Invalid story. Try again!"

        allstories = db.session.query(Story, User).join(User).all()
        allstories = list(
            map(
                lambda x:
                (x[0], x[1], "hidden"
                 if x[1].id == current_user.id else "", "unfollow"
                 if _is_follower(current_user.id, x[1].id) else "follow",
                 reacted(current_user.id, x[0].id)), allstories))
        return render_template("stories.html",
                               message=message,
                               form=form,
                               stories=allstories,
                               active_button="stories",
                               like_it_url="/stories/reaction",
                               details_url="/stories",
                               error=error,
                               info_bar=info_bar,
                               res_msg=str(res_msg))
    elif 'GET' == request.method:
        allstories = db.session.query(Story, User).join(User).all()
        allstories = list(
            map(
                lambda x:
                (x[0], x[1], "hidden"
                 if x[1].id == current_user.id else "", "unfollow"
                 if _is_follower(current_user.id, x[1].id) else "follow",
                 reacted(current_user.id, x[0].id)), allstories))

        return render_template("stories.html",
                               message=message,
                               form=form,
                               stories=allstories,
                               active_button="stories",
                               like_it_url="/stories/reaction",
                               details_url="/stories",
                               error=error,
                               info_bar=info_bar,
                               res_msg=str(res_msg))
Exemplo n.º 9
0
    def test1(self):
        global _app
        tested_app = create_app(debug=True)
        _app = tested_app
        with tested_app.test_client() as client:
            with client.session_transaction() as sess:
                db.drop_all()
                db.create_all()

                # create user
                user_a = User()
                user_a.email = '*****@*****.**'
                user_a.set_password('test')
                db.session.add(user_a)
                db.session.commit()

                user_b = User()
                user_b.email = '*****@*****.**'
                user_b.set_password('test')
                db.session.add(user_b)
                db.session.commit()

                # create story
                story = Story()
                story.text = 'Text a'
                story.likes = 0
                story.dislikes = 0
                story.author_id = user_a.get_id()
                story.roll = {
                    'dice':
                    ['bike', 'tulip', 'happy', 'cat', 'ladder', 'rain']
                }
                db.session.add(story)
                db.session.commit()

                # add like
                like = Reaction()
                like.marked = 0
                like.story_id = story.id
                like.user_id = user_b.id
                like.type = 1
                db.session.add(story)
                db.session.commit()

                # create 1000 user and like the story
                users = []
                for i in range(10):
                    user = User()
                    user.email = 'user' + str(i) + '@test.com'
                    user.set_password('test')
                    db.session.add(user)
                    users.append(user)
                    db.session.add(story)

                db.session.commit()
                for u in users:
                    add_reaction(u.id, 1, 1)
                #
                # reaction = Reaction.query.count()
                # print(str(reaction)))
                res = update_reactions.apply_async(args=[1], time_limit=3)
                res.get()
                q = Story.query.filter_by(author_id=1).first()
                self.assertEqual(int(q.likes), 10)