コード例 #1
0
ファイル: test_view.py プロジェクト: jrgrafton/tweet-debate
    def test_view_tasks_twitter_post_status(self):
        if os.getenv('TWITTER_TESTS') == "FALSE":
            return # Modify in runtests.sh

        load_fixture('tests/states.json', kind={'State': State})
        load_fixture('tests/questions.json', 
                        kind={'Question': Question,'State': State})
        current_question = Question.get_current_question()

        # Add user with vote so we can test sway points
        vote_current = Vote(
            question = current_question.key,
            replyid = "123",
            state_abbreviation = "CA",
            party = 1,
            sway_points = 20
        )
        user = User(
            userid = "jrgrafton",
            votes = [vote_current],
            # Used 20 sway points upon creation
            sway_points = 30
        )
        user.put()
        original_sway_points = user.sway_points # Store initial sway points

        # Delete all previous tweets before proceeding
        twitter_api = TwitterAPI()
        twitter_api.delete_all_tweets()

        reponse = \
            self.app.get('/tasks/twitter_post_status' \
                '?question_cadence_minutes=1&post_to_twitter=True')
        current_question = Question.get_current_question()
        ndb.get_context().clear_cache()
        assert current_question.twitterid != None
        assert "Posted new status" in reponse.data
        assert status.is_success(reponse.status_code) == True

        # Ensure user had sway points returned
        assert user.sway_points == original_sway_points + \
                          sway_points_tasks["submit_answer"] + \
                          sway_points_tasks["submit_winning_answer"] + \
                          int(vote_current.sway_points * \
                              sway_points_tasks["refund"])

        # Ensure Twitter timeline has been updated
        twitter_status = twitter_api.get_last_tweet().text
        question_entity = Question.get_current_question()
        assert twitter_status == question_entity.question_text

        # Expect question not to be posted as time is not yet up
        reponse = \
            self.app.get('/tasks/twitter_post_status' \
                '?question_cadence_minutes=52560000')
        assert "New question not ready" in reponse.data
        assert status.is_success(reponse.status_code) == True
コード例 #2
0
    def process_retweet_from_screename(self, current_question, target_id,
                                       screen_name, profile_image_url):
        # Has to retweet active poll
        if current_question.twitterid == target_id:
            user = User.query_by_userid(screen_name).get()
            # Add user if they don't exist
            if user == None:
                user = User(userid=screen_name,
                            profile_image_url=profile_image_url)
                user.put()

            # Users can cheat by deleting and retweeting
            if user.last_retweet_id != current_question.twitterid:
                # Attribute sway points
                user.last_retweet_id = str(current_question.twitterid)
                user.sway_points += sway_points["rewteet_poll"]
コード例 #3
0
ファイル: test_view.py プロジェクト: jrgrafton/tweet-debate
    def test_view_tasks_attribute_sway_points_for_user(self):
        load_fixture('tests/states.json', kind={'State': State})
        load_fixture('tests/questions.json', 
                        kind={'Question': Question,'State': State})
        current_question = Question.get_current_question()
        vote_previous = Vote(
            question = current_question.key,
            replyid = "123",
            state_abbreviation = "CA",
            party = 1,
            sway_points = 20,
            winning_vote = True
        )
        vote_current = Vote(
            question = current_question.key,
            replyid = "123",
            state_abbreviation = "CA",
            party = 0,
            sway_points = 20,
            winning_vote = None
        )
        user = User(
            userid = "jrgrafton",
            votes = [vote_current],
            # Can use sway points upon creation
            sway_points = 30
        )

        # So that we can determine if user had winning vote
        State.update_state_scores_for_completed_question(current_question)
        Question.tally_college_and_vote_scores(current_question)

        # Vote - loosing (party 0 has least electoral_votes for this question)
        original_sway_points = user.sway_points
        tasks.__dict__\
            ["__attribute_sway_points_for_user"](current_question, user)
        assert user.sway_points == original_sway_points + \
                                   sway_points_tasks["submit_answer"]

        # Vote - winning (party 1 has most electoral_votes for this question)
        original_sway_points = user.sway_points
        vote_current.party = 1
        tasks.__dict__\
            ["__attribute_sway_points_for_user"](current_question, user)

        assert user.sway_points == original_sway_points + \
                                  sway_points_tasks["submit_answer"] + \
                                  sway_points_tasks["submit_winning_answer"] + \
                                  int(vote_current.sway_points * \
                                      sway_points_tasks["refund"])

        # Vote - winning + streak
        original_sway_points = user.sway_points
        user.votes.insert(0, vote_previous)
        tasks.__dict__\
            ["__attribute_sway_points_for_user"](current_question, user)
        assert user.sway_points == original_sway_points + \
                                  sway_points_tasks["submit_answer"] + \
                                  sway_points_tasks["submit_winning_answer"] + \
                                  sway_points_tasks["streak_bonus"] + \
                                  int(vote_current.sway_points * \
                                      sway_points_tasks["refund"])
コード例 #4
0
ファイル: test_view.py プロジェクト: jrgrafton/tweet-debate
    def test_view_tasks_twitter_stream_listener_process_retweet_from_screename(self):
        load_fixture('tests/states.json', kind={'State': State})
        load_fixture('tests/questions.json', 
                        kind={'Question': Question,'State': State})
        twitter_stream_listener = TwitterStreamListener()
        current_question = Question.get_current_question()
        
        # Invalid retweet id
        twitter_stream_listener.\
            process_retweet_from_screename(current_question,
                                            -1,
                                           "jrgrafton",
                                           "https://pbs.twimg.com// \
                                            profile_images//440698495// \
                                            9929_128442162134_504357134_ \
                                            2556732_5649977_n_bigger.jpg")
        users = User.get_all()
        assert len(users) == 0

        # Valid retweet id - new user
        twitter_stream_listener.\
            process_retweet_from_screename(current_question,
                                           current_question.twitterid,
                                           "jrgrafton",
                                           "https://pbs.twimg.com// \
                                            profile_images//440698495// \
                                            9929_128442162134_504357134_ \
                                            2556732_5649977_n_bigger.jpg")
        users = User.get_all()
        assert len(users) == 1
        assert users[0].sway_points == User.get_starting_sway_points() + \
                                       sway_points_backend["rewteet_poll"]
        assert "https" in users[0].profile_image_url

        # Ensure no extra sway given for retweet
        twitter_stream_listener.\
            process_retweet_from_screename(current_question,
                                           current_question.twitterid,
                                           "jrgrafton",
                                           "https://pbs.twimg.com// \
                                            profile_images//440698495// \
                                            9929_128442162134_504357134_ \
                                            2556732_5649977_n_bigger.jpg")
        users = User.get_all()
        assert len(users) == 1
        assert users[0].sway_points == User.get_starting_sway_points() + \
                                       sway_points_backend["rewteet_poll"]

        # Test existing user reweet
        user = User(
            userid = "jrgrafton2",
            sway_points = 30
        )
        user.put()

        # Valid retweet id - new user
        twitter_stream_listener.\
            process_retweet_from_screename(current_question,
                                           current_question.twitterid,
                                           "jrgrafton2",
                                           "https://pbs.twimg.com// \
                                            profile_images//440698495// \
                                            9929_128442162134_504357134_ \
                                            2556732_5649977_n_bigger.jpg")
        users = User.get_all()
        assert len(users) == 2
        assert users[1].sway_points == 30 + sway_points_backend["rewteet_poll"]