diff --git a/README.md b/README.md index ba28bf2ab..35d352d94 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,14 @@ # Viewing Party +# Pair Plan +# slack, text if emergency +# schedule: open availability. +# Ericka: usually in at 9am-5pm, Kathleen: can adapt to Ericka +# Learning style: Need some time to process. Struggle for 10 min and then step in to help. if both struggling for 30 min, go to office hours. Both work on code together and switch on/off every 20 min or so. +# Feedback preferences: ask partner for feedback. sandwich method: positive + area for improvement + positive +# Communication skills to improve while working together: talking out and explaining your code +# Be proud of the learning process even if we do not finish project...but we will finish it. + ## Skills Assessed Solving problems with... diff --git a/play_tester.py b/play_tester.py index 9e2aecf48..53d432693 100644 --- a/play_tester.py +++ b/play_tester.py @@ -14,11 +14,11 @@ pp.pprint(FANTASY_1) pp.pprint(FANTASY_2) -# print("\n-----Wave 02 user_data-----") +# # print("\n-----Wave 02 user_data-----") # pp.pprint(clean_wave_2_data()) -#print("\n-----Wave 03 user_data-----") -#pp.pprint(clean_wave_3_data()) +# #print("\n-----Wave 03 user_data-----") +# #pp.pprint(clean_wave_3_data()) # Wave 04 user data #print("\n-----Wave 04 user_data-----") diff --git a/tests/test_wave_01.py b/tests/test_wave_01.py index 669efee6a..f26922b9f 100644 --- a/tests/test_wave_01.py +++ b/tests/test_wave_01.py @@ -4,7 +4,7 @@ from viewing_party.party import * from tests.test_constants import * -@pytest.mark.skip() +# @pytest.mark.skip() def test_create_successful_movie(): # Arrange movie_title = MOVIE_TITLE_1 @@ -19,7 +19,7 @@ def test_create_successful_movie(): assert new_movie["genre"] == GENRE_1 assert new_movie["rating"] == pytest.approx(RATING_1) -@pytest.mark.skip() +# @pytest.mark.skip() def test_create_no_title_movie(): # Arrange movie_title = None @@ -32,7 +32,7 @@ def test_create_no_title_movie(): # Assert assert new_movie is None -@pytest.mark.skip() +# @pytest.mark.skip() def test_create_no_genre_movie(): # Arrange movie_title = "Title A" @@ -45,7 +45,7 @@ def test_create_no_genre_movie(): # Assert assert new_movie is None -@pytest.mark.skip() +# @pytest.mark.skip() def test_create_no_rating_movie(): # Arrange movie_title = "Title A" @@ -58,7 +58,7 @@ def test_create_no_rating_movie(): # Assert assert new_movie is None -@pytest.mark.skip() +# @pytest.mark.skip() def test_adds_movie_to_user_watched(): # Arrange movie = { @@ -79,7 +79,7 @@ def test_adds_movie_to_user_watched(): assert updated_data["watched"][0]["genre"] == GENRE_1 assert updated_data["watched"][0]["rating"] == RATING_1 -@pytest.mark.skip() +# @pytest.mark.skip() def test_adds_movie_to_non_empty_user_watched(): # Arrange movie = { @@ -99,7 +99,7 @@ def test_adds_movie_to_non_empty_user_watched(): assert movie in updated_data["watched"] assert FANTASY_2 in updated_data["watched"] -@pytest.mark.skip() +# @pytest.mark.skip() def test_adds_movie_to_user_watchlist(): # Arrange movie = { @@ -120,7 +120,7 @@ def test_adds_movie_to_user_watchlist(): assert updated_data["watchlist"][0]["genre"] == GENRE_1 assert updated_data["watchlist"][0]["rating"] == RATING_1 -@pytest.mark.skip() +# @pytest.mark.skip() def test_adds_movie_to_non_empty_user_watchlist(): # Arrange movie = { @@ -140,7 +140,7 @@ def test_adds_movie_to_non_empty_user_watchlist(): assert movie in updated_data["watchlist"] assert FANTASY_2 in updated_data["watchlist"] -@pytest.mark.skip() +# @pytest.mark.skip() def test_moves_movie_from_watchlist_to_empty_watched(): # Arrange janes_data = { @@ -156,15 +156,19 @@ def test_moves_movie_from_watchlist_to_empty_watched(): updated_data = watch_movie(janes_data, MOVIE_TITLE_1) # Assert - assert len(updated_data["watchlist"]) == 0 - assert len(updated_data["watched"]) == 1 + try: + assert len(updated_data["watchlist"]) == 0 + assert len(updated_data["watched"]) == 1 + + except: + raise ValueError - raise Exception("Test needs to be completed.") + # ******************************************************************************************* # ****** Add assertions here to test that the correct movie was added to "watched" ********** # ******************************************************************************************* -@pytest.mark.skip() +# @pytest.mark.skip() def test_moves_movie_from_watchlist_to_watched(): # Arrange movie_to_watch = HORROR_1 @@ -182,13 +186,14 @@ def test_moves_movie_from_watchlist_to_watched(): # Assert assert len(updated_data["watchlist"]) == 1 assert len(updated_data["watched"]) == 2 - - raise Exception("Test needs to be completed.") + + assert updated_data["watched"] == [FANTASY_2, HORROR_1] + assert updated_data["watchlist"] == [FANTASY_1] # ******************************************************************************************* # ****** Add assertions here to test that the correct movie was added to "watched" ********** # ******************************************************************************************* -@pytest.mark.skip() +# @pytest.mark.skip() def test_does_nothing_if_movie_not_in_watchlist(): # Arrange movie_to_watch = HORROR_1 diff --git a/tests/test_wave_02.py b/tests/test_wave_02.py index 19f045c79..64b62729d 100644 --- a/tests/test_wave_02.py +++ b/tests/test_wave_02.py @@ -2,7 +2,7 @@ from viewing_party.party import * from tests.test_constants import * -@pytest.mark.skip() +# @pytest.mark.skip() def test_calculates_watched_average_rating(): # Arrange janes_data = clean_wave_2_data() @@ -14,7 +14,7 @@ def test_calculates_watched_average_rating(): assert average == pytest.approx(3.58333) assert janes_data == clean_wave_2_data() -@pytest.mark.skip() +# @pytest.mark.skip() def test_empty_watched_average_rating_is_zero(): # Arrange janes_data = { @@ -27,7 +27,7 @@ def test_empty_watched_average_rating_is_zero(): # Assert assert average == pytest.approx(0.0) -@pytest.mark.skip() +# @pytest.mark.skip() def test_most_watched_genre(): # Arrange janes_data = clean_wave_2_data() @@ -39,7 +39,7 @@ def test_most_watched_genre(): assert popular_genre == "Fantasy" assert janes_data == clean_wave_2_data() -@pytest.mark.skip() +# @pytest.mark.skip() def test_most_watched_genre_order_mixed(): # Arrange janes_data = clean_wave_2b_data() @@ -51,7 +51,7 @@ def test_most_watched_genre_order_mixed(): assert popular_genre == "Fantasy" assert janes_data == clean_wave_2b_data() -@pytest.mark.skip() +# @pytest.mark.skip() def test_genre_is_None_if_empty_watched(): # Arrange janes_data = { diff --git a/tests/test_wave_03.py b/tests/test_wave_03.py index 046429360..fba67c96b 100644 --- a/tests/test_wave_03.py +++ b/tests/test_wave_03.py @@ -2,7 +2,7 @@ from viewing_party.party import * from tests.test_constants import * -@pytest.mark.skip() +# @pytest.mark.skip() def test_my_unique_movies(): # Arrange amandas_data = clean_wave_3_data() @@ -16,7 +16,7 @@ def test_my_unique_movies(): assert INTRIGUE_2 in amandas_unique_movies assert amandas_data == clean_wave_3_data() -@pytest.mark.skip() +# @pytest.mark.skip() def test_my_not_unique_movies(): # Arrange amandas_data = clean_wave_3_data() @@ -28,7 +28,7 @@ def test_my_not_unique_movies(): # Assert assert len(amandas_unique_movies) == 0 -@pytest.mark.skip() +# @pytest.mark.skip() def test_friends_unique_movies(): # Arrange amandas_data = clean_wave_3_data() @@ -43,7 +43,7 @@ def test_friends_unique_movies(): assert FANTASY_4 in friends_unique_movies assert amandas_data == clean_wave_3_data() -@pytest.mark.skip() +# @pytest.mark.skip() def test_friends_unique_movies_not_duplicated(): # Arrange amandas_data = clean_wave_3_data() @@ -55,12 +55,12 @@ def test_friends_unique_movies_not_duplicated(): # Assert assert len(friends_unique_movies) == 3 - raise Exception("Test needs to be completed.") + assert INTRIGUE_3 in friends_unique_movies # ************************************************************************************************* # ****** Add assertions here to test that the correct movies are in friends_unique_movies ********** # ************************************************************************************************** -@pytest.mark.skip() +# @pytest.mark.skip() def test_friends_not_unique_movies(): # Arrange amandas_data = { diff --git a/tests/test_wave_04.py b/tests/test_wave_04.py index 499669077..0b0b3c7e2 100644 --- a/tests/test_wave_04.py +++ b/tests/test_wave_04.py @@ -2,7 +2,7 @@ from viewing_party.party import * from tests.test_constants import * -@pytest.mark.skip() +# @pytest.mark.skip() def test_get_available_friend_rec(): # Arrange amandas_data = clean_wave_4_data() @@ -16,7 +16,7 @@ def test_get_available_friend_rec(): assert FANTASY_4b in recommendations assert amandas_data == clean_wave_4_data() -@pytest.mark.skip() +# @pytest.mark.skip() def test_no_available_friend_recs(): # Arrange amandas_data = { @@ -38,7 +38,7 @@ def test_no_available_friend_recs(): # Assert assert len(recommendations) == 0 -@pytest.mark.skip() +# @pytest.mark.skip() def test_no_available_friend_recs_watched_all(): # Arrange amandas_data = { diff --git a/tests/test_wave_05.py b/tests/test_wave_05.py index b2ba9ad33..382cfa7c2 100644 --- a/tests/test_wave_05.py +++ b/tests/test_wave_05.py @@ -2,7 +2,7 @@ from viewing_party.party import * from tests.test_constants import * -@pytest.mark.skip() +# @pytest.mark.skip() def test_new_genre_rec(): # Arrange sonyas_data = clean_wave_5_data() @@ -17,7 +17,7 @@ def test_new_genre_rec(): assert FANTASY_4b in recommendations assert sonyas_data == clean_wave_5_data() -@pytest.mark.skip() +# @pytest.mark.skip() def test_new_genre_rec_from_empty_watched(): # Arrange sonyas_data = { @@ -38,7 +38,7 @@ def test_new_genre_rec_from_empty_watched(): # Assert assert len(recommendations) == 0 -@pytest.mark.skip() +# @pytest.mark.skip() def test_new_genre_rec_from_empty_friends(): # Arrange sonyas_data = { @@ -53,12 +53,17 @@ def test_new_genre_rec_from_empty_friends(): ] } - raise Exception("Test needs to be completed.") + # Act + recommendations = get_new_rec_by_genre(sonyas_data) + # Assert + assert len(recommendations) == 0 + + # raise Exception("Test needs to be completed.") # ********************************************************************* # ****** Complete the Act and Assert Portions of these tests ********** # ********************************************************************* -@pytest.mark.skip() +# @pytest.mark.skip() def test_unique_rec_from_favorites(): # Arrange sonyas_data = clean_wave_5_data() @@ -72,7 +77,7 @@ def test_unique_rec_from_favorites(): assert INTRIGUE_2b in recommendations assert sonyas_data == clean_wave_5_data() -@pytest.mark.skip() +# @pytest.mark.skip() def test_unique_from_empty_favorites(): # Arrange sonyas_data = { @@ -94,7 +99,7 @@ def test_unique_from_empty_favorites(): # Assert assert len(recommendations) == 0 -@pytest.mark.skip() +# @pytest.mark.skip() def test_new_rec_from_empty_friends(): # Arrange sonyas_data = { diff --git a/viewing_party/party.py b/viewing_party/party.py index 6d34a6b5f..49bd34fc6 100644 --- a/viewing_party/party.py +++ b/viewing_party/party.py @@ -1,23 +1,185 @@ # ------------- WAVE 1 -------------------- - +#---Wave_1_function_1--- def create_movie(title, genre, rating): - pass -# ----------------------------------------- + movie_dict = {} + + if not title: + return None + elif not genre: + return None + elif not rating: + return None + else: + movie_dict["title"] = title + movie_dict["genre"] = genre + movie_dict["rating"] = rating + + return movie_dict + +create_movie("Title", "Genre", "Rating") + + +# #---Wave_1_function_2--- +def add_to_watched(user_data, movie): + + user_data["watched"].append(movie) + return user_data + +add_to_watched({"watched": []}, { + "title": "MOVIE_TITLE_1", + "genre": "GENRE_1", + "rating": "RATING_1"}) + + +# #---Wave_1_function_3--- +def add_to_watchlist(user_data, movie): + + user_data["watchlist"].append(movie) + return user_data + + + +#---Wave_1_function_4--- +def watch_movie(user_data, title): + for movie in user_data["watchlist"]: + if title != (movie["title"]): + continue + else: + user_data["watched"].append(movie) + user_data["watchlist"].remove(movie) + print (user_data) + return user_data + return user_data + # ------------- WAVE 2 -------------------- -# ----------------------------------------- +# ---Wave_2_function_1--- +def get_watched_avg_rating(user_data): + + ratings = [] + + if len(user_data["watched"]) == 0: + return 0.0 + + for movie in user_data["watched"]: + ratings.append((movie["rating"])) + + ratings_sum = sum(ratings) + ratings_average = (ratings_sum) / len(ratings) + + return ratings_average -# ----------------------------------------- -# ------------- WAVE 3 -------------------- -# ----------------------------------------- +# ---Wave_2_function_2--- +def get_most_watched_genre(user_data): + + movie_genre_dict = {} + + if len(user_data["watched"]) == 0: + return None + + for movie in user_data["watched"]: + + + title = movie["title"] + genre = movie["genre"] + + if genre not in movie_genre_dict: + movie_genre_dict[genre] = [] -# ----------------------------------------- + movie_genre_dict[genre].append(title) + + max_genre = None + max_count = 0 + + for genre in movie_genre_dict: + genre_length = len(movie_genre_dict[genre]) + if genre_length >= max_count: + max_genre = genre + max_count = len(movie_genre_dict.values()) + + return max_genre + +# ------------- WAVE 3 -------------------- + +#---Wave_3_function_1--- + +def get_unique_watched(user_data): + user_unique_movies = [] + movies_friends_watched = [] + movies_user_watched = user_data["watched"] + + for friend in user_data["friends"]: + for movie in friend["watched"]: + movies_friends_watched.append(movie) + + for movie in movies_user_watched: + if movie not in movies_friends_watched: + user_unique_movies.append(movie) + + return user_unique_movies + +#---Wave_3_function_2--- + +def get_friends_unique_watched(user_data): + + movies_user_watched = user_data["watched"] + unique_movies_friends_watched = [] + + for friend in user_data["friends"]: + for movie in friend["watched"]: + if (movie not in unique_movies_friends_watched) and (movie not in movies_user_watched): + unique_movies_friends_watched.append(movie) + + # returns list of movie dictionaries + return unique_movies_friends_watched + # ------------- WAVE 4 -------------------- -# ----------------------------------------- +#---Wave_4_function_1--- + +def get_available_recs(user_data): + + friends_unique_movie_list = get_friends_unique_watched(user_data) + + # figure out if host is in user's subscriptions + recommended_movies = [] + for movie in friends_unique_movie_list: + if movie["host"] in user_data["subscriptions"]: + recommended_movies.append(movie) + + return recommended_movies -# ----------------------------------------- # ------------- WAVE 5 -------------------- -# ----------------------------------------- +# ---Wave_5_function_1--- +def get_new_rec_by_genre(user_data): + rec_by_genre = [] + + users_watched = user_data["watched"] + friends_watched = get_friends_unique_watched(user_data) + users_most_freq_genre = get_most_watched_genre(user_data) + if len(users_watched) == 0: + return rec_by_genre + + if len(friends_watched) == 0: + return rec_by_genre + + for movie in friends_watched: + if movie["genre"] == users_most_freq_genre: + rec_by_genre.append(movie) + + return rec_by_genre + +# ---Wave_5_function_2--- +def get_rec_from_favorites(user_data): + recommended = [] + + users_unique_movies = get_unique_watched(user_data) + users_favorites = user_data["favorites"] + + for movie in users_unique_movies: + if movie in users_favorites: + recommended.append(movie) + + return recommended