def test_model_question(self): # Load fixtures load_fixture('tests/states.json', kind={'State': State}) load_fixture('tests/questions.json', kind={'Question': Question,'State': State}) question_entity = Question.get_current_question() # Check current question assert question_entity.key.id() == "q2" State.update_state_scores_for_completed_question(question_entity) Question.tally_college_and_vote_scores(question_entity) # NY and TX was a draw so random 2 votes will be added assert question_entity.vote_score[0] == (505 + 120 + 100 + 150) or \ (505 + 120 + 100 + 150) + 1 or \ (505 + 120 + 100 + 150) + 2 assert question_entity.vote_score[1] == (510 + 240 + 100 + 150) or \ (510 + 240 + 100 + 150) +1 or \ (510 + 240 + 100 + 150) +2 # NY and TX was a draw so could go either way (29, 38) assert question_entity.college_score[0] == 0 or 29 or 38 or (29 + 38) assert question_entity.college_score[1] == (55 + 12) + 0 or \ (55 + 12) + 29 or \ (55 + 12) + 38 or \ (55 + 12) + (29 + 38) # Check get next questions question_entity = Question.get_next_question() assert question_entity.key.id() == "q3" # Check get last question start time current_question_start_time = Question.get_current_question_start_time() current_question_start_time_string = str(current_question_start_time) assert current_question_start_time_string == "2016-01-23 00:00:00"
def test_view_tasks_twitter_stream_listener_add_vote_for_question(self): load_fixture("tests/states.json", kind={"State": State}) load_fixture("tests/questions_no_votes.json", kind={"Question": Question, "State": State}) current_question = Question.get_current_question() assert len(current_question.state_scores) == 0 twitter_stream_listener = TwitterStreamListener() twitter_stream_listener.add_vote_for_question(0, 30, "CA", current_question) current_question = Question.get_current_question() assert len(current_question.state_scores) == 1 assert current_question.state_scores[0].state_abbreviation == "CA" assert current_question.state_scores[0].party_score_votes[0] == 1 assert current_question.state_scores[0].party_score_votes[1] == 0 assert current_question.state_scores[0].party_score_sway[0] == 30 assert current_question.state_scores[0].party_score_sway[1] == 0 twitter_stream_listener.add_vote_for_question(0, 50, "CA", current_question) twitter_stream_listener.add_vote_for_question(1, 20, "CA", current_question) assert current_question.state_scores[0].party_score_votes[0] == 2 assert current_question.state_scores[0].party_score_votes[1] == 1 assert current_question.state_scores[0].party_score_sway[0] == 80 assert current_question.state_scores[0].party_score_sway[1] == 20 twitter_stream_listener.add_vote_for_question(1, 30, "WA", current_question) assert len(current_question.state_scores) == 2 assert current_question.state_scores[1].state_abbreviation == "WA" assert current_question.state_scores[1].party_score_votes[0] == 0 assert current_question.state_scores[1].party_score_votes[1] == 1 assert current_question.state_scores[1].party_score_sway[0] == 0 assert current_question.state_scores[1].party_score_sway[1] == 30
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
def test_model_question_unstarted(self): # Load fixtures load_fixture('tests/questions_unstarted.json', kind={'Question': Question}) # Check get next questions question_entity = Question.get_next_question() assert question_entity.key.id() == "q1" # Check get current question start time current_question_start_time = Question.get_current_question_start_time() assert current_question_start_time == None
def test_model_question_complete(self): # Load fixtures load_fixture('tests/questions_complete.json', kind={'Question': Question}) # Check get next questions question_entity = Question.get_next_question() assert question_entity == None # Check get current question start time current_question_start_time = Question.get_current_question_start_time() assert current_question_start_time == None
def load_questions(self): # Load questions logging.info('load_questions:') questions = self.bootstrap_json["questions"] for question in questions: image = question["image"] question_text = question["question_text"] party = question["party"] question = Question(image=image, question_text=question_text, party=party) question.put()
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"])
def load_questions(self): # Load questions logging.info('load_questions:') questions = self.bootstrap_json["questions"] for question in questions: image = question["image"] question_text = question["question_text"] party = question["party"] question = Question( image = image, question_text = question_text, party = party) question.put()
def test_model_question_unstarted(self): # Load fixtures load_fixture('tests/questions_unstarted.json', kind={'Question': Question}) # Check get next questions question_entity = Question.get_next_question() assert question_entity.key.id() == "q1" # Check get current question start time current_question_start_time = Question.get_current_question_start_time( ) assert current_question_start_time == None
def test_model_question_complete(self): # Load fixtures load_fixture('tests/questions_complete.json', kind={'Question': Question}) # Check get next questions question_entity = Question.get_next_question() assert question_entity == None # Check get current question start time current_question_start_time = Question.get_current_question_start_time( ) assert current_question_start_time == None
def parse_data(self, data): # Process replies logging.info("parse_data: %s" % str(data)) current_question = Question.get_current_question() # Avoid race condition triggered by first question post if current_question == None: return # Retweeted poll if "event" in data and data["event"] == "quoted_tweet": target_id = str(data["target_object"]["quoted_status_id"]) screen_name = data["source"]["screen_name"] profile_image_url = data["source"] \ ["profile_image_url_https"] \ .replace("_normal", "_bigger") self.process_retweet_from_screename(current_question, target_id, screen_name, profile_image_url) # Replied to status if "in_reply_to_status_id" in data: reply_status_id = str(data["in_reply_to_status_id"]) # Only acknowledge replies to current question if reply_status_id == current_question.twitterid: screen_name = data["user"]["screen_name"] vote_text = data["text"] profile_image_url = data["user"] \ ["profile_image_url_https"] \ .replace("_normal", "_bigger") state_abbreviation = self.get_state_from_string(data["text"]) party = self.get_party_from_string_using_question( data["text"], current_question) sway_points = self.get_sway_from_string(data["text"]) user = User.query_by_userid(screen_name).get() # Cap sway points if user != None: if user.sway_points < sway_points: sway_points = user.sway_points elif sway_points > User.get_starting_sway_points(): sway_points = User.get_starting_sway_points() # Only add vote for question if user vote was valid if self.add_vote_for_screenname(current_question, str(data["id"]), vote_text, state_abbreviation, party, sway_points, screen_name, profile_image_url): # Add vote for question if vote was valid self.add_vote_for_question(party, sway_points, state_abbreviation, current_question)
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
def test_view_tasks_twitter_stream_listener_add_vote_for_question(self): load_fixture('tests/states.json', kind={'State': State}) load_fixture('tests/questions_no_votes.json', kind={'Question': Question,'State': State}) current_question = Question.get_current_question() assert len(current_question.state_scores) == 0 twitter_stream_listener = TwitterStreamListener() twitter_stream_listener.add_vote_for_question(0, 30, "CA", current_question) current_question = Question.get_current_question() assert len(current_question.state_scores) == 1 assert current_question.state_scores[0].state_abbreviation == "CA" assert current_question.state_scores[0].party_score_votes[0] == 1 assert current_question.state_scores[0].party_score_votes[1] == 0 assert current_question.state_scores[0].party_score_sway[0] == 30 assert current_question.state_scores[0].party_score_sway[1] == 0 twitter_stream_listener.add_vote_for_question(0, 50, "CA", current_question) twitter_stream_listener.add_vote_for_question(1, 20, "CA", current_question) assert current_question.state_scores[0].party_score_votes[0] == 2 assert current_question.state_scores[0].party_score_votes[1] == 1 assert current_question.state_scores[0].party_score_sway[0] == 80 assert current_question.state_scores[0].party_score_sway[1] == 20 twitter_stream_listener.add_vote_for_question(1, 30, "WA", current_question) assert len(current_question.state_scores) == 2 assert current_question.state_scores[1].state_abbreviation == "WA" assert current_question.state_scores[1].party_score_votes[0] == 0 assert current_question.state_scores[1].party_score_votes[1] == 1 assert current_question.state_scores[1].party_score_sway[0] == 0 assert current_question.state_scores[1].party_score_sway[1] == 30
def __is_time_for_new_question(question_cadence_minutes): current_question = Question.get_current_question() if current_question == None: return True else: question_start_time = current_question.start_time next_question_start_time = question_start_time + \ datetime.timedelta(minutes=question_cadence_minutes) return datetime.datetime.now() > next_question_start_time
def test_view_tasks_twitter_stream(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}) # Start new thread with Twitter Stream listener stream_thread = Thread(target=self._start_twitter_stream) stream_thread.daemon = True stream_thread.start() # 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() # Post reply twitter_status_id = twitter_api.get_last_tweet().id twitter_api.update_status("#yes for #WA #sway10", twitter_status_id) # Wait for stream to be updated time.sleep(2) # Test to see reply has been registered ndb.get_context().clear_cache() users = User.get_all() assert len(users) == 1 users[0].sway_points = User.get_starting_sway_points() - 10 users[0].votes[0].vote_text == "#yes for #WA" current_question = Question.get_current_question() assert len(current_question.state_scores) == 1 assert current_question.state_scores[0].state_abbreviation == "WA" assert current_question.state_scores[0].party_score_votes[0] == 1 assert current_question.state_scores[0].party_score_votes[1] == 0 assert current_question.state_scores[0].party_score_sway[0] == 10 assert current_question.state_scores[0].party_score_sway[1] == 0
def twitter_post_status(): """ Potentially post a new status to Twitter """ # Can be overriden in GET request question_cadence_minutes = \ int(request.args.get('question_cadence_minutes', 60 * 6)) post_to_twitter = request.args.get('post_to_twitter', False) next_question = Question.get_next_question() if next_question is not None \ and __is_time_for_new_question(question_cadence_minutes): current_question = Question.get_current_question() if post_to_twitter != False: try: twitter_api = TwitterAPI() status = twitter_api.update_status(next_question.question_text) next_question.twitterid = str(status.id) next_question.put() except TweepError as e: pass #TODO: do something - message to monitoring? if current_question is not None: # Update overall state scores State.update_state_scores_for_completed_question(current_question) # Update overall question scores Question.tally_college_and_vote_scores(current_question) # Update end of question user sway scores users = User.get_all() for user in users: __attribute_sway_points_for_user(current_question, user) current_question.end_time = datetime.datetime.now() current_question.put() next_question.start_time = datetime.datetime.now() next_question.put() return 'Posted new status [%s]' % next_question.question_text, 200 return 'New question not ready', 200
def test_view_tasks_twitter_stream(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}) # Start new thread with Twitter Stream listener stream_thread = Thread(target=self._start_twitter_stream) stream_thread.daemon = True stream_thread.start() # 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() # Post reply twitter_status_id = twitter_api.get_last_tweet().id twitter_api.update_status("#yes for #WA #sway10", twitter_status_id) # Wait for stream to be updated time.sleep(2) # Test to see reply has been registered ndb.get_context().clear_cache() users = User.get_all() assert len(users) == 1 users[0].sway_points = User.get_starting_sway_points() - 10 users[0].votes[0].vote_text == "#yes for #WA" current_question = Question.get_current_question() assert len(current_question.state_scores) == 1 assert current_question.state_scores[0].state_abbreviation == "WA" assert current_question.state_scores[0].party_score_votes[0] == 1 assert current_question.state_scores[0].party_score_votes[1] == 0 assert current_question.state_scores[0].party_score_sway[0] == 10 assert current_question.state_scores[0].party_score_sway[1] == 0
def test_model_question(self): # Load fixtures load_fixture('tests/states.json', kind={'State': State}) load_fixture('tests/questions.json', kind={ 'Question': Question, 'State': State }) question_entity = Question.get_current_question() # Check current question assert question_entity.key.id() == "q2" State.update_state_scores_for_completed_question(question_entity) Question.tally_college_and_vote_scores(question_entity) # NY and TX was a draw so random 2 votes will be added assert question_entity.vote_score[0] == (505 + 120 + 100 + 150) or \ (505 + 120 + 100 + 150) + 1 or \ (505 + 120 + 100 + 150) + 2 assert question_entity.vote_score[1] == (510 + 240 + 100 + 150) or \ (510 + 240 + 100 + 150) +1 or \ (510 + 240 + 100 + 150) +2 # NY and TX was a draw so could go either way (29, 38) assert question_entity.college_score[0] == 0 or 29 or 38 or (29 + 38) assert question_entity.college_score[1] == (55 + 12) + 0 or \ (55 + 12) + 29 or \ (55 + 12) + 38 or \ (55 + 12) + (29 + 38) # Check get next questions question_entity = Question.get_next_question() assert question_entity.key.id() == "q3" # Check get last question start time current_question_start_time = Question.get_current_question_start_time( ) current_question_start_time_string = str(current_question_start_time) assert current_question_start_time_string == "2016-01-23 00:00:00"
def index(): current_question = Question.get_current_question() local_tz = pytz.timezone('America/Los_Angeles') # Convert from UTC to PST current_question.end_time = \ current_question.start_time.replace( tzinfo=pytz.utc).astimezone(local_tz) # Add six hours current_question.end_time = current_question.end_time + timedelta(hours=6) return render_template('index.html', current_question = JSONEncoder().encode(current_question.to_dict()) #states = json.dumps(State.get_all()) )
def test_view_tasks_twitter_stream_listener_get_party(self): load_fixture('tests/states.json', kind={'State': State}) load_fixture('tests/questions_no_votes.json', kind={'Question': Question,'State': State}) twitter_stream_listener = TwitterStreamListener() # party from string extraction current_question = Question.get_current_question() current_question_party = current_question.party test_text = "#NO #no I disagree" result = twitter_stream_listener. \ get_party_from_string_using_question(test_text, current_question) assert result == 1 - current_question_party # Inverse current party test_text = "I disagree #no" result = twitter_stream_listener. \ get_party_from_string_using_question(test_text, current_question) assert result == 1 - current_question_party # Inverse current party test_text = "#YeS I agree" result = twitter_stream_listener. \ get_party_from_string_using_question(test_text, current_question) assert result == current_question_party test_text = "#YeSssir I agree" result = twitter_stream_listener. \ get_party_from_string_using_question(test_text, current_question) assert result == None test_text = "#nobody agree(s)" result = twitter_stream_listener. \ get_party_from_string_using_question(test_text, current_question) assert result == None test_text = "NO no I disagree" result = twitter_stream_listener. \ get_party_from_string_using_question(test_text, current_question) assert result == None test_text = "#Yes #Yes #no I agree" result = twitter_stream_listener. \ get_party_from_string_using_question(test_text, current_question) assert result == None
def test_model_state(self): # Load fixtures load_fixture('tests/states.json', kind={'State': State}) load_fixture('tests/questions.json', kind={ 'Question': Question, 'State': State }) question_entity = Question.get_current_question() State.update_state_scores_for_completed_question(question_entity) state_entity = State.get_state_by_abbreviation("CA") assert state_entity.party_score_votes[0] == 0 assert state_entity.party_score_votes[1] == 1 assert state_entity.party_score_sway[0] == 5 assert state_entity.party_score_sway[1] == 500 assert state_entity.last_winning_party == 1 state_entity = State.get_state_by_abbreviation("WA") assert state_entity.party_score_votes[0] == 0 assert state_entity.party_score_votes[1] == 1 assert state_entity.party_score_sway[0] == 50 assert state_entity.party_score_sway[1] == 100 assert state_entity.last_winning_party == 1 # Random winner is allocated for state drawing state_entity = State.get_state_by_abbreviation("TX") assert state_entity.party_score_votes[0] == 1 or \ state_entity.party_score_votes[1] == 1 assert state_entity.party_score_sway[0] == 80 assert state_entity.party_score_sway[1] == 70 assert state_entity.last_winning_party != None # What happens when state hasn't been voted on? state_entity = State.get_state_by_abbreviation("NY") assert state_entity.party_score_votes[0] == 0 or \ state_entity.party_score_votes[1] == 0 assert state_entity.last_winning_party != None assert State.is_valid_state("CA") == True assert State.is_valid_state("WA") == True assert State.is_valid_state("INVALID") == False
def test_model_state(self): # Load fixtures load_fixture('tests/states.json', kind={'State': State}) load_fixture('tests/questions.json', kind={'Question': Question,'State': State}) question_entity = Question.get_current_question() State.update_state_scores_for_completed_question(question_entity) state_entity = State.get_state_by_abbreviation("CA") assert state_entity.party_score_votes[0] == 0 assert state_entity.party_score_votes[1] == 1 assert state_entity.party_score_sway[0] == 5 assert state_entity.party_score_sway[1] == 500 assert state_entity.last_winning_party == 1 state_entity = State.get_state_by_abbreviation("WA") assert state_entity.party_score_votes[0] == 0 assert state_entity.party_score_votes[1] == 1 assert state_entity.party_score_sway[0] == 50 assert state_entity.party_score_sway[1] == 100 assert state_entity.last_winning_party == 1 # Random winner is allocated for state drawing state_entity = State.get_state_by_abbreviation("TX") assert state_entity.party_score_votes[0] == 1 or \ state_entity.party_score_votes[1] == 1 assert state_entity.party_score_sway[0] == 80 assert state_entity.party_score_sway[1] == 70 assert state_entity.last_winning_party != None # What happens when state hasn't been voted on? state_entity = State.get_state_by_abbreviation("NY") assert state_entity.party_score_votes[0] == 0 or \ state_entity.party_score_votes[1] == 0 assert state_entity.last_winning_party != None assert State.is_valid_state("CA") == True assert State.is_valid_state("WA") == True assert State.is_valid_state("INVALID") == False
def test_view_tasks_twitter_stream_listener_get_party(self): load_fixture("tests/states.json", kind={"State": State}) load_fixture("tests/questions_no_votes.json", kind={"Question": Question, "State": State}) twitter_stream_listener = TwitterStreamListener() # party from string extraction current_question = Question.get_current_question() current_question_party = current_question.party test_text = "#NO #no I disagree" result = twitter_stream_listener.get_party_from_string_using_question(test_text, current_question) assert result == 1 - current_question_party # Inverse current party test_text = "I disagree #no" result = twitter_stream_listener.get_party_from_string_using_question(test_text, current_question) assert result == 1 - current_question_party # Inverse current party test_text = "#YeS I agree" result = twitter_stream_listener.get_party_from_string_using_question(test_text, current_question) assert result == current_question_party test_text = "#YeSssir I agree" result = twitter_stream_listener.get_party_from_string_using_question(test_text, current_question) assert result == None test_text = "#nobody agree(s)" result = twitter_stream_listener.get_party_from_string_using_question(test_text, current_question) assert result == None test_text = "NO no I disagree" result = twitter_stream_listener.get_party_from_string_using_question(test_text, current_question) assert result == None test_text = "#Yes #Yes #no I agree" result = twitter_stream_listener.get_party_from_string_using_question(test_text, current_question) assert result == None
def __init__(self, app): self.questions = Question.query().get() self.app = app
def test_model_user(self): # Load fixtures load_fixture('tests/states.json', kind={'State': State}) load_fixture('tests/questions.json', kind={'Question': Question,'State': State}) current_question_entity = Question.get_current_question() User.add_user_vote(None, "jrgrafton_test", "https://pbs.twimg.com//profile_images//440698495// \ 9929_128442162134_504357134_2556732_5649977_n_\ bigger.jpg", Vote( question = current_question_entity.key, replyid = "692368266292023296", state_abbreviation = "CA", party = 0, sway_points = 40 )) # Ensure user was created user_entity = User.query_by_userid("jrgrafton_test").fetch() assert len(user_entity) == 1 assert user_entity[0].sway_points == User.get_starting_sway_points() - \ 40 assert user_entity[0].userid == "jrgrafton_test" assert "https" in user_entity[0].profile_image_url assert user_entity[0].votes[0].question == current_question_entity.key assert user_entity[0].votes[0].replyid == "692368266292023296" assert user_entity[0].votes[0].state_abbreviation == "CA" assert user_entity[0].votes[0].party == 0 # Ensure a reply to a different question is tallied next_question_entity = Question.get_current_question() User.add_user_vote(user_entity[0], "jrgrafton_test", "https://pbs.twimg.com//profile_images//440698495// \ 9929_128442162134_504357134_2556732_5649977_n_\ bigger.jpg", Vote( question = next_question_entity.key, replyid = "692368266292023297", state_abbreviation = "WA", party = 1, sway_points = 10 )) # Ensure new vote was collated under existing user user_entity = User.query_by_userid("jrgrafton_test").fetch() assert len(user_entity) == 1 assert len(user_entity[0].votes) == 2 assert user_entity[0].sway_points == User.get_starting_sway_points() - \ (40 + 10) # Verify integrity of new vote assert user_entity[0].votes[1].question == next_question_entity.key assert user_entity[0].votes[1].replyid == "692368266292023297" assert user_entity[0].votes[1].state_abbreviation == "WA" assert user_entity[0].votes[1].party == 1 # Verify integrity of old vote assert user_entity[0].userid == "jrgrafton_test" assert "https" in user_entity[0].profile_image_url assert user_entity[0].votes[0].question == current_question_entity.key assert user_entity[0].votes[0].replyid == "692368266292023296" assert user_entity[0].votes[0].state_abbreviation == "CA" assert user_entity[0].votes[0].party == 0
def test_model_user(self): # Load fixtures load_fixture('tests/states.json', kind={'State': State}) load_fixture('tests/questions.json', kind={ 'Question': Question, 'State': State }) current_question_entity = Question.get_current_question() User.add_user_vote( None, "jrgrafton_test", "https://pbs.twimg.com//profile_images//440698495// \ 9929_128442162134_504357134_2556732_5649977_n_\ bigger.jpg", Vote(question=current_question_entity.key, replyid="692368266292023296", state_abbreviation="CA", party=0, sway_points=40)) # Ensure user was created user_entity = User.query_by_userid("jrgrafton_test").fetch() assert len(user_entity) == 1 assert user_entity[0].sway_points == User.get_starting_sway_points() - \ 40 assert user_entity[0].userid == "jrgrafton_test" assert "https" in user_entity[0].profile_image_url assert user_entity[0].votes[0].question == current_question_entity.key assert user_entity[0].votes[0].replyid == "692368266292023296" assert user_entity[0].votes[0].state_abbreviation == "CA" assert user_entity[0].votes[0].party == 0 # Ensure a reply to a different question is tallied next_question_entity = Question.get_current_question() User.add_user_vote( user_entity[0], "jrgrafton_test", "https://pbs.twimg.com//profile_images//440698495// \ 9929_128442162134_504357134_2556732_5649977_n_\ bigger.jpg", Vote(question=next_question_entity.key, replyid="692368266292023297", state_abbreviation="WA", party=1, sway_points=10)) # Ensure new vote was collated under existing user user_entity = User.query_by_userid("jrgrafton_test").fetch() assert len(user_entity) == 1 assert len(user_entity[0].votes) == 2 assert user_entity[0].sway_points == User.get_starting_sway_points() - \ (40 + 10) # Verify integrity of new vote assert user_entity[0].votes[1].question == next_question_entity.key assert user_entity[0].votes[1].replyid == "692368266292023297" assert user_entity[0].votes[1].state_abbreviation == "WA" assert user_entity[0].votes[1].party == 1 # Verify integrity of old vote assert user_entity[0].userid == "jrgrafton_test" assert "https" in user_entity[0].profile_image_url assert user_entity[0].votes[0].question == current_question_entity.key assert user_entity[0].votes[0].replyid == "692368266292023296" assert user_entity[0].votes[0].state_abbreviation == "CA" assert user_entity[0].votes[0].party == 0
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"]
def test_view_tasks_twitter_stream_listener_add_vote_for_screenname(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() result = twitter_stream_listener.add_vote_for_screenname( current_question, "Vote text #yes", "123", None, # Invalid state 1, 0, "jrgrafton", "https://pbs.twimg.com// \ profile_images//440698495// \ 9929_128442162134_504357134_ \ 2556732_5649977_n_bigger.jpg", ) assert result == False result = twitter_stream_listener.add_vote_for_screenname( current_question, "Vote text #CA", "123", "CA", None, # Invalid party 0, "jrgrafton", "https://pbs.twimg.com// \ profile_images//440698495// \ 9929_128442162134_504357134_ \ 2556732_5649977_n_bigger.jpg", ) assert result == False # First valid user result = twitter_stream_listener.add_vote_for_screenname( current_question, "Vote text #CA #yes", "123", "CA", 0, 100, "jrgrafton", "https://pbs.twimg.com// \ profile_images//440698495// \ 9929_128442162134_504357134_ \ 2556732_5649977_n_bigger.jpg", ) assert result == True user = User.query_by_userid("jrgrafton").get() assert user != None assert len(user.votes) == 1 assert user.votes[0].question.get().key == current_question.key assert user.votes[0].vote_text == "Vote text #CA #yes" assert user.votes[0].replyid == "123" assert user.votes[0].state_abbreviation == "CA" assert user.votes[0].party == 0 assert user.votes[0].sway_points == 100 # Second vote for user on same question result = twitter_stream_listener.add_vote_for_screenname( current_question, "Vote text #WA #no", "123", "WA", 1, 0, "jrgrafton", "https://pbs.twimg.com// \ profile_images//440698495// \ 9929_128442162134_504357134_ \ 2556732_5649977_n_bigger.jpg", ) assert result == False # Second valid user result = twitter_stream_listener.add_vote_for_screenname( current_question, "Vote text for user 2 #WA #no", "123", "WA", 1, 50, "jrgrafton_test", "https://pbs.twimg.com// \ profile_images//440698495// \ 9929_128442162134_504357134_ \ 2556732_5649977_n_bigger.jpg", ) assert result == True users = User.get_all() assert len(users) == 2 user = users[1] assert len(user.votes) == 1 assert user.votes[0].question.get().key == current_question.key assert user.votes[0].vote_text == "Vote text for user 2 #WA #no" assert user.votes[0].replyid == "123" assert user.votes[0].state_abbreviation == "WA" assert user.votes[0].party == 1 assert user.votes[0].sway_points == 50 # Go to new question and test valid votes reponse = self.app.get("/tasks/twitter_post_status" "?question_cadence_minutes=1") current_question = Question.get_current_question() # Second vote for new question should work result = twitter_stream_listener.add_vote_for_screenname( current_question, "Vote second question text #WA #no", "124", "WA", 1, 10, "jrgrafton", "https://pbs.twimg.com// \ profile_images//440698495// \ 9929_128442162134_504357134_ \ 2556732_5649977_n_bigger.jpg", ) assert result == True user = User.query_by_userid("jrgrafton").get() assert user != None assert len(user.votes) == 2 assert user.votes[1].vote_text == "Vote second question text #WA #no" assert user.votes[1].question.get().key == current_question.key assert user.votes[1].replyid == "124" assert user.votes[1].state_abbreviation == "WA" assert user.votes[1].party == 1 assert user.votes[1].sway_points == 10
def test_view_tasks_twitter_stream_listener_on_data(self): load_fixture("tests/states.json", kind={"State": State}) load_fixture("tests/questions_no_votes.json", kind={"Question": Question, "State": State}) twitter_stream = open(os.path.join(os.path.dirname(__file__), "twitter_stream.json")) twitter_stream = json.load(twitter_stream) twitter_stream_listener = TwitterStreamListener() twitter_stream_listener.on_data(json.dumps(twitter_stream["twitter_reply_old"])) users = User.get_all() assert len(users) == 0 twitter_stream_listener.on_data(json.dumps(twitter_stream["twitter_reply_old"])) users = User.get_all() assert len(users) == 0 twitter_stream_listener.on_data(json.dumps(twitter_stream["twitter_reply_current_invalid"])) users = User.get_all() assert len(users) == 0 twitter_stream_listener.on_data(json.dumps(twitter_stream["twitter_post"])) users = User.get_all() assert len(users) == 0 twitter_stream_listener.on_data(json.dumps(twitter_stream["twitter_mention"])) users = User.get_all() assert len(users) == 0 twitter_stream_listener.on_data(json.dumps(twitter_stream["twitter_favourite"])) users = User.get_all() assert len(users) == 0 twitter_stream_listener.on_data(json.dumps(twitter_stream["twitter_favourite_reply"])) users = User.get_all() assert len(users) == 0 current_question = Question.get_current_question() assert len(current_question.state_scores) == 0 twitter_stream_listener.on_data(json.dumps(twitter_stream["twitter_reply_current_valid_user1"])) users = User.get_all() assert len(users) == 1 assert "https" in users[0].profile_image_url current_question = Question.get_current_question() assert len(current_question.state_scores) == 1 assert current_question.state_scores[0].state_abbreviation == "CA" assert current_question.state_scores[0].party_score_votes[0] == 0 assert current_question.state_scores[0].party_score_votes[1] == 1 assert current_question.state_scores[0].party_score_sway[0] == 0 assert current_question.state_scores[0].party_score_sway[1] == User.get_starting_sway_points() assert users[0].sway_points == 0 twitter_stream_listener.on_data(json.dumps(twitter_stream["twitter_reply_current_valid_user1"])) users = User.get_all() assert len(users) == 1 assert len(users[0].votes) == 1 assert users[0].sway_points == 0 current_question = Question.get_current_question() assert len(current_question.state_scores) == 1 assert current_question.state_scores[0].state_abbreviation == "CA" assert current_question.state_scores[0].party_score_votes[0] == 0 assert current_question.state_scores[0].party_score_votes[1] == 1 assert current_question.state_scores[0].party_score_sway[0] == 0 assert current_question.state_scores[0].party_score_sway[1] == User.get_starting_sway_points() assert users[0].sway_points == 0 twitter_stream_listener.on_data(json.dumps(twitter_stream["twitter_reply_current_valid_user2"])) users = User.get_all() assert len(users) == 2 assert "https" in users[1].profile_image_url current_question = Question.get_current_question() assert len(current_question.state_scores) == 2 assert current_question.state_scores[1].state_abbreviation == "WA" assert current_question.state_scores[1].party_score_votes[0] == 1 assert current_question.state_scores[1].party_score_votes[1] == 0 assert current_question.state_scores[1].party_score_sway[0] == 20 assert current_question.state_scores[1].party_score_sway[1] == 0 assert users[1].sway_points == User.get_starting_sway_points() - 20 twitter_stream_listener.on_data(json.dumps(twitter_stream["twitter_reply_current_valid_user2"])) users = User.get_all() assert len(users) == 2 assert current_question.state_scores[1].state_abbreviation == "WA" assert current_question.state_scores[1].party_score_votes[0] == 1 assert current_question.state_scores[1].party_score_votes[1] == 0 assert current_question.state_scores[1].party_score_sway[0] == 20 assert current_question.state_scores[1].party_score_sway[1] == 0 assert users[1].sway_points == User.get_starting_sway_points() - 20 twitter_stream_listener.on_data(json.dumps(twitter_stream["twitter_retweet"])) users = User.get_all() assert len(users) == 3 assert users[2].sway_points == User.get_starting_sway_points() + sway_points_backend["rewteet_poll"] assert "https" in users[2].profile_image_url
def test_view_tasks_twitter_stream_listener_on_data(self): load_fixture('tests/states.json', kind={'State': State}) load_fixture('tests/questions_no_votes.json', kind={'Question': Question,'State': State}) twitter_stream = open(os.path.join(os.path.dirname(__file__), 'twitter_stream.json')) twitter_stream = json.load(twitter_stream) twitter_stream_listener = TwitterStreamListener() twitter_stream_listener.on_data( json.dumps(twitter_stream["twitter_reply_old"])) users = User.get_all() assert len(users) == 0 twitter_stream_listener.on_data( json.dumps(twitter_stream["twitter_reply_old"])) users = User.get_all() assert len(users) == 0 twitter_stream_listener.on_data( json.dumps(twitter_stream["twitter_reply_current_invalid"])) users = User.get_all() assert len(users) == 0 twitter_stream_listener.on_data( json.dumps(twitter_stream["twitter_post"])) users = User.get_all() assert len(users) == 0 twitter_stream_listener.on_data( json.dumps(twitter_stream["twitter_mention"])) users = User.get_all() assert len(users) == 0 twitter_stream_listener.on_data( json.dumps(twitter_stream["twitter_favourite"])) users = User.get_all() assert len(users) == 0 twitter_stream_listener.on_data( json.dumps(twitter_stream["twitter_favourite_reply"])) users = User.get_all() assert len(users) == 0 current_question = Question.get_current_question() assert len(current_question.state_scores) == 0 twitter_stream_listener.on_data( json.dumps(twitter_stream["twitter_reply_current_valid_user1"])) users = User.get_all() assert len(users) == 1 assert "https" in users[0].profile_image_url current_question = Question.get_current_question() assert len(current_question.state_scores) == 1 assert current_question.state_scores[0].state_abbreviation == "CA" assert current_question.state_scores[0].party_score_votes[0] == 0 assert current_question.state_scores[0].party_score_votes[1] == 1 assert current_question.state_scores[0].party_score_sway[0] == 0 assert current_question.state_scores[0].party_score_sway[1] == \ User.get_starting_sway_points() assert users[0].sway_points == 0 twitter_stream_listener.on_data( json.dumps(twitter_stream["twitter_reply_current_valid_user1"])) users = User.get_all() assert len(users) == 1 assert len(users[0].votes) == 1 assert users[0].sway_points == 0 current_question = Question.get_current_question() assert len(current_question.state_scores) == 1 assert current_question.state_scores[0].state_abbreviation == "CA" assert current_question.state_scores[0].party_score_votes[0] == 0 assert current_question.state_scores[0].party_score_votes[1] == 1 assert current_question.state_scores[0].party_score_sway[0] == 0 assert current_question.state_scores[0].party_score_sway[1] == \ User.get_starting_sway_points() assert users[0].sway_points == 0 twitter_stream_listener.on_data( json.dumps(twitter_stream["twitter_reply_current_valid_user2"])) users = User.get_all() assert len(users) == 2 assert "https" in users[1].profile_image_url current_question = Question.get_current_question() assert len(current_question.state_scores) == 2 assert current_question.state_scores[1].state_abbreviation == "WA" assert current_question.state_scores[1].party_score_votes[0] == 1 assert current_question.state_scores[1].party_score_votes[1] == 0 assert current_question.state_scores[1].party_score_sway[0] == 20 assert current_question.state_scores[1].party_score_sway[1] == 0 assert users[1].sway_points == User.get_starting_sway_points() - 20 twitter_stream_listener.on_data( json.dumps(twitter_stream["twitter_reply_current_valid_user2"])) users = User.get_all() assert len(users) == 2 assert current_question.state_scores[1].state_abbreviation == "WA" assert current_question.state_scores[1].party_score_votes[0] == 1 assert current_question.state_scores[1].party_score_votes[1] == 0 assert current_question.state_scores[1].party_score_sway[0] == 20 assert current_question.state_scores[1].party_score_sway[1] == 0 assert users[1].sway_points == User.get_starting_sway_points() - 20 twitter_stream_listener.on_data( json.dumps(twitter_stream["twitter_retweet"])) users = User.get_all() assert len(users) == 3 assert users[2].sway_points == User.get_starting_sway_points() + \ sway_points_backend["rewteet_poll"] assert "https" in users[2].profile_image_url
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"])
def get_question(): last_modified = request.args.get('last_modified', datetime(1970,1,1)) return JSONEncoder().encode(Question.get_current_question().to_dict()), 200
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"]
def test_view_tasks_twitter_stream_listener_add_vote_for_screenname(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() result = twitter_stream_listener.\ add_vote_for_screenname(current_question, "Vote text #yes", "123", None, # Invalid state 1, 0, "jrgrafton", "https://pbs.twimg.com// \ profile_images//440698495// \ 9929_128442162134_504357134_ \ 2556732_5649977_n_bigger.jpg") assert result == False result = twitter_stream_listener.\ add_vote_for_screenname(current_question, "Vote text #CA", "123", "CA", None, # Invalid party 0, "jrgrafton", "https://pbs.twimg.com// \ profile_images//440698495// \ 9929_128442162134_504357134_ \ 2556732_5649977_n_bigger.jpg") assert result == False # First valid user result = twitter_stream_listener.\ add_vote_for_screenname(current_question, "Vote text #CA #yes", "123", "CA", 0, 100, "jrgrafton", "https://pbs.twimg.com// \ profile_images//440698495// \ 9929_128442162134_504357134_ \ 2556732_5649977_n_bigger.jpg") assert result == True user = User.query_by_userid("jrgrafton").get() assert user != None assert len(user.votes) == 1 assert user.votes[0].question.get().key == current_question.key assert user.votes[0].vote_text == "Vote text #CA #yes" assert user.votes[0].replyid == "123" assert user.votes[0].state_abbreviation == "CA" assert user.votes[0].party == 0 assert user.votes[0].sway_points == 100 # Second vote for user on same question result = twitter_stream_listener.\ add_vote_for_screenname(current_question, "Vote text #WA #no", "123", "WA", 1, 0, "jrgrafton", "https://pbs.twimg.com// \ profile_images//440698495// \ 9929_128442162134_504357134_ \ 2556732_5649977_n_bigger.jpg") assert result == False # Second valid user result = twitter_stream_listener.\ add_vote_for_screenname(current_question, "Vote text for user 2 #WA #no", "123", "WA", 1, 50, "jrgrafton_test", "https://pbs.twimg.com// \ profile_images//440698495// \ 9929_128442162134_504357134_ \ 2556732_5649977_n_bigger.jpg") assert result == True users = User.get_all() assert len(users) == 2 user = users[1] assert len(user.votes) == 1 assert user.votes[0].question.get().key == current_question.key assert user.votes[0].vote_text == "Vote text for user 2 #WA #no" assert user.votes[0].replyid == "123" assert user.votes[0].state_abbreviation == "WA" assert user.votes[0].party == 1 assert user.votes[0].sway_points == 50 # Go to new question and test valid votes reponse = self.app.get('/tasks/twitter_post_status' \ '?question_cadence_minutes=1') current_question = Question.get_current_question() # Second vote for new question should work result = twitter_stream_listener.\ add_vote_for_screenname(current_question, "Vote second question text #WA #no", "124", "WA", 1, 10, "jrgrafton", "https://pbs.twimg.com// \ profile_images//440698495// \ 9929_128442162134_504357134_ \ 2556732_5649977_n_bigger.jpg") assert result == True user = User.query_by_userid("jrgrafton").get() assert user != None assert len(user.votes) == 2 assert user.votes[1].vote_text == "Vote second question text #WA #no" assert user.votes[1].question.get().key == current_question.key assert user.votes[1].replyid == "124" assert user.votes[1].state_abbreviation == "WA" assert user.votes[1].party == 1 assert user.votes[1].sway_points == 10