def test_movie_without_likes_is_not_recommended(service, movies_repo): user = User('root') movie_a = Movie('a') movie_b = Movie('b') movies_repo.store(movie_a) movies_repo.store(movie_b) user.add_to_liked_movies(movie_b) result = service.recommend(user) assert_recommendations(result, [])
def test_user_can_follow_another_user(client, users_repo): eve = User(name='Eve') adam = User(name='Adam') users_repo.store(eve) users_repo.store(adam) response = client.post('/users/{}/follow'.format(eve.pk), data=json.dumps({'pk': adam.pk}), content_type='application/json') assert response.status_code == 200 response = client.get('/users/{}'.format(eve.pk)) assert response.status_code == 200 followed_users = json.loads(response.data)['followed_users'] followed_users_names = [u['name'] for u in followed_users] assert 'Adam' in followed_users_names
def test_liked_movie_is_not_included(service, movies_repo): user = User('root') other = User('other') movie_a = Movie('a') movie_b = Movie('b') movies_repo.store(movie_a) movies_repo.store(movie_b) user.add_to_liked_movies(movie_a) other.add_to_liked_movies(movie_b) result = service.recommend(user) assert_recommendations(result, [movie_b])
def test_user_can_unfollow_user(client, users_repo): eve = User(name='Eve') adam = User(name='Adam') eve.add_to_followed_users(adam) users_repo.store(eve) users_repo.store(adam) response = client.delete('/users/{}/follow/{}'.format(eve.pk, adam.pk)) assert response.status_code == 204 assert len(eve.get_followed_users()) == 0
def test_globally_liked_movies_are_more_influential(service, movies_repo): user = User('root') movie_a = Movie('a') movie_b = Movie('b') movie_c = Movie('c') movies_repo.store(movie_a) movies_repo.store(movie_b) movies_repo.store(movie_c) user_a = User('a') user_b = User('b') user_a.add_to_liked_movies(movie_a) user_a.add_to_liked_movies(movie_b) user_b.add_to_liked_movies(movie_b) result = service.recommend(user) assert_recommendations(result, [movie_b, movie_a])
def followed_user(users_repo): user = User('Andrew') users_repo.store(user) return user
def user(users_repo): user = User('John') users_repo.store(user) return user
def test_similar_users_are_more_influential(service, movies_repo): movie_a = Movie('a') movie_b = Movie('b') movie_c = Movie('c') movies_repo.store(movie_a) movies_repo.store(movie_b) movies_repo.store(movie_c) user = User('root') followed_user_1 = User('followed 1') followed_user_2 = User('followed 2') user.add_to_followed_users(followed_user_1) user.add_to_followed_users(followed_user_2) followed_user_1.add_to_liked_movies(movie_a) followed_user_2.add_to_liked_movies(movie_b) followed_user_2.add_to_liked_movies(movie_c) # User shares a common movie with followed_user_2 user.add_to_liked_movies(movie_c) result = service.recommend(user) assert_recommendations(result, [movie_b, movie_a])
def test_nested_follows_are_more_influential(service, movies_repo): movie_a = Movie('a') movie_b = Movie('b') movies_repo.store(movie_b) movies_repo.store(movie_a) user = User('root') followed_user_1 = User('followed 1') followed_user_2 = User('followed 2') user.add_to_followed_users(followed_user_1) user.add_to_followed_users(followed_user_2) followed_user_2.add_to_followed_users(followed_user_1) followed_user_1.add_to_liked_movies(movie_a) followed_user_2.add_to_liked_movies(movie_b) result = service.recommend(user) assert_recommendations(result, [movie_a, movie_b])
def test_followed_users_movie_is_more_influential(service, movies_repo): user = User('root') other_user = User('other') followed_user = User('followed') movie_a = Movie('a') movie_b = Movie('b') movies_repo.store(movie_a) movies_repo.store(movie_b) user.add_to_followed_users(followed_user) followed_user.add_to_liked_movies(movie_a) other_user.add_to_liked_movies(movie_b) result = service.recommend(user) assert_recommendations(result, [movie_a, movie_b])