diff --git a/backend/secfit/workouts/seleniumLeaderboardSystemTest.py b/backend/secfit/workouts/seleniumLeaderboardSystemTest.py index 59045b9417fc6318d414d321466021a457e0c8fe..6e1ae6d7af3262000d6d1918fe54b6857879762b 100644 --- a/backend/secfit/workouts/seleniumLeaderboardSystemTest.py +++ b/backend/secfit/workouts/seleniumLeaderboardSystemTest.py @@ -328,6 +328,8 @@ class TestExerciseLeaderboard(unittest.TestCase): # Logs in user 5 self.login_user(self.__class__.uniqueUsername5) + self.scroll_down() + # Finds and clicks the button that views the user's own workouts myWorkoutsButton = driver.find_element_by_id("list-my-workouts-list") myWorkoutsButton.click() @@ -366,12 +368,14 @@ class TestExerciseLeaderboard(unittest.TestCase): # Tests that when the user changes the visibility of a public workout to "coach", the score is decremented accordingly, # (the leaderboard should be correct in regard to size, rank and entrants.) - def test08_coach_workouts_made_private_decrement_leaderboard_score(self): + def test08_public_workouts_made_coach_decrement_leaderboard_score(self): driver = self.driver # Logs in user 4 self.login_user(self.__class__.uniqueUsername4) + self.scroll_down() + # Finds and clicks the button that views the user's own workouts myWorkoutsButton = driver.find_element_by_id("list-my-workouts-list") myWorkoutsButton.click() @@ -387,7 +391,7 @@ class TestExerciseLeaderboard(unittest.TestCase): editButton.click() time.sleep(1) - # Changes the visiblity to private + # Changes the visiblity to coach workoutVisibilityField = driver.find_element_by_id("inputVisibility") workoutVisibilityField.send_keys("CO") @@ -407,6 +411,8 @@ class TestExerciseLeaderboard(unittest.TestCase): self.assert_leaderboard(expected_leaderboard) + # Tests that when the several users have the same score they also have the same rank, + # (the leaderboard should be correct in regard to size, rank and entrants.) def test09_same_score_is_same_rank(self): driver = self.driver @@ -446,6 +452,221 @@ class TestExerciseLeaderboard(unittest.TestCase): self.assert_leaderboard(expected_leaderboard) + # Tests that when the user changes the visibility of a private workout to "public", the score is incremented accordingly, + # (the leaderboard should be correct in regard to size, rank and entrants.) + def test10_test_private_workout_made_public_increments_score(self): + driver = self.driver + + # Logs in user 6 + self.login_user(self.__class__.uniqueUsername6) + + # Creates a new workout + self.register_workout_with_exercise("2") + + # What we expect the leaderboard to be like now + expected_leaderboard = [ + {"rank": "1", "username": self.__class__.uniqueUsername6, "score": "80"}, + {"rank": "2", "username": self.__class__.uniqueUsername2, "score": "70"}, + {"rank": "3", "username": self.__class__.uniqueUsername3, "score": "60"}, + {"rank": "3", "username": self.__class__.uniqueUsername5, "score": "60"}, + {"rank": "5", "username": self.__class__.uniqueUsername1, "score": "50"}, + ] + + # Asserts that the observed leaderboard matches the expected leaderboard + self.assert_leaderboard(expected_leaderboard) + + # Find and clicks the button to go to the workouts page + workoutNavButton = driver.find_element_by_id("nav-workouts") + workoutNavButton.click() + time.sleep(0.5) + + self.scroll_down() + + # Finds and clicks the button that views the user's own workouts + myWorkoutsButton = driver.find_element_by_id("list-my-workouts-list") + myWorkoutsButton.click() + time.sleep(1) + + # Views the workout + workout = driver.find_elements_by_css_selector("a.list-group-item")[-1] + workout.click() + time.sleep(1) + + # Edits the workout + editButton = driver.find_element_by_id("btn-edit-workout") + editButton.click() + time.sleep(1) + + # Changes the visiblity to private + workoutVisibilityField = driver.find_element_by_id("inputVisibility") + workoutVisibilityField.send_keys("PR") + saveEditChangesButton = driver.find_element_by_id("btn-ok-workout") + saveEditChangesButton.click() + time.sleep(1) + + # What we expect the leaderboard to be like now + expected_leaderboard = [ + {"rank": "1", "username": self.__class__.uniqueUsername2, "score": "70"}, + {"rank": "2", "username": self.__class__.uniqueUsername3, "score": "60"}, + {"rank": "2", "username": self.__class__.uniqueUsername5, "score": "60"}, + {"rank": "2", "username": self.__class__.uniqueUsername6, "score": "60"}, + {"rank": "5", "username": self.__class__.uniqueUsername1, "score": "50"}, + ] + + # Asserts that the observed leaderboard matches the expected leaderboard + self.assert_leaderboard(expected_leaderboard) + + # Find and clicks the button to go to the workouts page + workoutNavButton = driver.find_element_by_id("nav-workouts") + workoutNavButton.click() + time.sleep(0.5) + + self.scroll_down() + + # Finds and clicks the button that views the user's own workouts + myWorkoutsButton = driver.find_element_by_id("list-my-workouts-list") + myWorkoutsButton.click() + time.sleep(1) + + # Views the workout + workout = driver.find_elements_by_css_selector("a.list-group-item")[-1] + workout.click() + time.sleep(1) + + # Edits the workout + editButton = driver.find_element_by_id("btn-edit-workout") + editButton.click() + time.sleep(1) + + # Changes the visiblity to public + workoutVisibilityField = driver.find_element_by_id("inputVisibility") + workoutVisibilityField.send_keys("PU") + saveEditChangesButton = driver.find_element_by_id("btn-ok-workout") + saveEditChangesButton.click() + time.sleep(1) + + # What we expect the leaderboard to be like now + expected_leaderboard = [ + {"rank": "1", "username": self.__class__.uniqueUsername6, "score": "80"}, + {"rank": "2", "username": self.__class__.uniqueUsername2, "score": "70"}, + {"rank": "3", "username": self.__class__.uniqueUsername3, "score": "60"}, + {"rank": "3", "username": self.__class__.uniqueUsername5, "score": "60"}, + {"rank": "5", "username": self.__class__.uniqueUsername1, "score": "50"}, + ] + + # Asserts that the observed leaderboard matches the expected leaderboard + self.assert_leaderboard(expected_leaderboard) + + + # Tests that when the user changes the visibility of a coach workout to "public", the score is incremented accordingly, + # (the leaderboard should be correct in regard to size, rank and entrants.) + def test11_test_coach_workout_made_public_increments_score(self): + driver = self.driver + + # Logs in user 6 + self.login_user(self.__class__.uniqueUsername6) + + # Creates a new workout + self.register_workout_with_exercise("4") + + # What we expect the leaderboard to be like now + expected_leaderboard = [ + {"rank": "1", "username": self.__class__.uniqueUsername6, "score": "120"}, + {"rank": "2", "username": self.__class__.uniqueUsername2, "score": "70"}, + {"rank": "3", "username": self.__class__.uniqueUsername3, "score": "60"}, + {"rank": "3", "username": self.__class__.uniqueUsername5, "score": "60"}, + {"rank": "5", "username": self.__class__.uniqueUsername1, "score": "50"}, + ] + + # Asserts that the observed leaderboard matches the expected leaderboard + self.assert_leaderboard(expected_leaderboard) + + # Find and clicks the button to go to the workouts page + workoutNavButton = driver.find_element_by_id("nav-workouts") + workoutNavButton.click() + time.sleep(0.5) + + self.scroll_down() + + # Finds and clicks the button that views the user's own workouts + myWorkoutsButton = driver.find_element_by_id("list-my-workouts-list") + myWorkoutsButton.click() + time.sleep(1) + + # Views the workout + workout = driver.find_elements_by_css_selector("a.list-group-item")[-1] + workout.click() + time.sleep(1) + + # Edits the workout + editButton = driver.find_element_by_id("btn-edit-workout") + editButton.click() + time.sleep(1) + + # Changes the visiblity to private + workoutVisibilityField = driver.find_element_by_id("inputVisibility") + workoutVisibilityField.send_keys("CO") + saveEditChangesButton = driver.find_element_by_id("btn-ok-workout") + saveEditChangesButton.click() + time.sleep(1) + + # What we expect the leaderboard to be like now + expected_leaderboard = [ + {"rank": "1", "username": self.__class__.uniqueUsername2, "score": "70"}, + {"rank": "2", "username": self.__class__.uniqueUsername3, "score": "60"}, + {"rank": "2", "username": self.__class__.uniqueUsername5, "score": "60"}, + {"rank": "2", "username": self.__class__.uniqueUsername6, "score": "60"}, + {"rank": "5", "username": self.__class__.uniqueUsername1, "score": "50"}, + ] + + # Asserts that the observed leaderboard matches the expected leaderboard + self.assert_leaderboard(expected_leaderboard) + + # Find and clicks the button to go to the workouts page + workoutNavButton = driver.find_element_by_id("nav-workouts") + workoutNavButton.click() + time.sleep(0.5) + + self.scroll_down() + + # Finds and clicks the button that views the user's own workouts + myWorkoutsButton = driver.find_element_by_id("list-my-workouts-list") + myWorkoutsButton.click() + time.sleep(1) + + # Views the workout + workout = driver.find_elements_by_css_selector("a.list-group-item")[-1] + workout.click() + time.sleep(1) + + # Edits the workout + editButton = driver.find_element_by_id("btn-edit-workout") + editButton.click() + time.sleep(1) + + # Changes the visiblity to public + workoutVisibilityField = driver.find_element_by_id("inputVisibility") + workoutVisibilityField.send_keys("PU") + saveEditChangesButton = driver.find_element_by_id("btn-ok-workout") + saveEditChangesButton.click() + time.sleep(1) + + # What we expect the leaderboard to be like now + expected_leaderboard = [ + {"rank": "1", "username": self.__class__.uniqueUsername6, "score": "100"}, + {"rank": "2", "username": self.__class__.uniqueUsername2, "score": "70"}, + {"rank": "3", "username": self.__class__.uniqueUsername3, "score": "60"}, + {"rank": "3", "username": self.__class__.uniqueUsername5, "score": "60"}, + {"rank": "5", "username": self.__class__.uniqueUsername1, "score": "50"}, + ] + + # Asserts that the observed leaderboard matches the expected leaderboard + self.assert_leaderboard(expected_leaderboard) + + + + + # *Not a test*, just a cleanup that deletes the workout that was created during the other tests. Tried using # tearDownClass, but that did not let me access the website def test99_cleanup(self):