Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ocelots - Jennifer Dai #22

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 16 additions & 13 deletions tests/test_wave_01.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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()

def test_create_no_title_movie():
# Arrange
movie_title = None
Expand All @@ -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"
Expand All @@ -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"
Expand All @@ -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 = {
Expand All @@ -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_user_watchlist():
# Arrange
movie = {
Expand All @@ -100,7 +100,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_moves_movie_from_watchlist_to_empty_watched():
# Arrange
janes_data = {
Expand All @@ -118,13 +118,14 @@ def test_moves_movie_from_watchlist_to_empty_watched():
# Assert
assert len(updated_data["watchlist"]) == 0
assert len(updated_data["watched"]) == 1

raise Exception("Test needs to be completed.")
assert updated_data["watched"][0]["title"] == MOVIE_TITLE_1


# *******************************************************************************************
# ****** 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
Expand All @@ -142,13 +143,15 @@ 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 movie_to_watch not in updated_data["watchlist"]
assert movie_to_watch in updated_data["watched"]


# *******************************************************************************************
# ****** 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
Expand Down
8 changes: 4 additions & 4 deletions tests/test_wave_02.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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 = {
Expand All @@ -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()
Expand All @@ -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_genre_is_None_if_empty_watched():
# Arrange
janes_data = {
Expand Down
13 changes: 7 additions & 6 deletions tests/test_wave_03.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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()
Expand All @@ -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()
Expand All @@ -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()
Expand All @@ -55,12 +55,13 @@ 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
#raise Exception("Test needs to be completed.")
# *************************************************************************************************
# ****** 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 = {
Expand Down
6 changes: 3 additions & 3 deletions tests/test_wave_04.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -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 = {
Expand All @@ -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 = {
Expand Down
9 changes: 8 additions & 1 deletion tests/test_wave_05.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,14 @@ 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 theis tests **********
# *********************************************************************
Expand Down
110 changes: 107 additions & 3 deletions viewing_party/party.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,127 @@
# ------------- WAVE 1 --------------------

def create_movie(title, genre, rating):
pass
movie = {}
if title == None or genre == None or rating == None:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What would happen with an empty string as one of the parameters?

return None
else:
movie = {"title" : title, "genre" : genre, "rating" : rating}
return movie

def add_to_watched(user_data,movie):
user_data["watched"].append(movie)

return user_data

def add_to_watchlist(user_data,movie):
user_data["watchlist"].append(movie)
return user_data

def watch_movie(user_data,title):
for movie in user_data["watchlist"]:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note, while this may work here, it's considered dangerous practice to modify the content of a data structure that you're looping over. Especially in more complex code, this can open you up to complex errors. A simple alternative here could be to save a copy of what you get from movie in user_data["watchlist"] and iterate over that, so that as you modify user_data["watchlist"], there's no risk.

if movie["title"] == title:
user_data["watchlist"].remove(movie)
user_data["watched"].append(movie)
return user_data

# -----------------------------------------
# ------------- WAVE 2 --------------------
# -----------------------------------------
def get_watched_avg_rating(user_data):
rating_total = 0
rating_avg = 0.0

if len(user_data["watched"]) == 0:
return rating_avg
else:
for movie in user_data["watched"]:
rating_total += movie["rating"]
rating_avg = rating_total/len(user_data["watched"])

return rating_avg

def get_most_watched_genre(user_data):
genre_count = {}
genre_temp = ""
count_temp = 0
if len(user_data["watched"]) == 0:
return None
else:
for movie in user_data["watched"]:
if movie["genre"] not in genre_count.keys():
genre_count[movie["genre"]] = 1
else:
genre_count[movie["genre"]] += 1

for genre,count in genre_count.items():
if count > count_temp:
count_temp = count
genre_temp = genre

return genre_temp

# -----------------------------------------
# ------------- WAVE 3 --------------------
# -----------------------------------------


#return list of movie that friends watched
def friends_watched_movie(user_data):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could sets have been useful as an alternative to the nested loops?

friend_watched_movie = []
for friend in user_data["friends"]:
for movie in friend["watched"]:
friend_watched_movie.append(movie)
return friend_watched_movie

def get_unique_watched(user_data):
unique_watch = []
friends_list = friends_watched_movie(user_data)
for movie in user_data["watched"]:
if movie not in friends_list:
unique_watch.append(movie)

return unique_watch

#Return movies at least one of the user's friends have watched, but the user has not watched.
def get_friends_unique_watched(user_data):
friend_unique_watched = []
friends_list = friends_watched_movie(user_data)
for movie in friends_list:
if (movie not in user_data["watched"] and movie not in friend_unique_watched):
friend_unique_watched.append(movie)
return friend_unique_watched


# -----------------------------------------
# ------------- WAVE 4 --------------------
# -----------------------------------------
#Return the list of recommended movies
def get_available_recs(user_data):
recs_movie = []
friend_unique_movie = get_friends_unique_watched(user_data)
for i in range(len(friend_unique_movie)):
if friend_unique_movie[i]["host"] in user_data["subscriptions"]:
recs_movie.append(friend_unique_movie[i])

return recs_movie


# -----------------------------------------
# ------------- WAVE 5 --------------------
# -----------------------------------------
#return a list of recomended movies with user's most watched genre
def get_new_rec_by_genre(user_data):
recs_movie = []
most_watched_genre = get_most_watched_genre(user_data)
friend_unique_movie = get_friends_unique_watched(user_data)
for i in range(len(friend_unique_movie)):
if friend_unique_movie[i]["genre"] == most_watched_genre:
recs_movie.append(friend_unique_movie[i])
return recs_movie

#return a list of recomended movies none of friends watched
def get_rec_from_favorites(user_data):
recs_movie = []
user_unique_watched = get_unique_watched(user_data)
for i in range(len(user_unique_movie)):
if friend_unique_movie[i] in user_data["favorites"]:
recs_movie.append(user_unique_movie[i])
return recs_movie