def test_likes_multiple_users_increment_remove_likes_decrement( self, client, fake_auth, mock_asset): course_users = Course.find_by_id(mock_asset.course_id).users user_iterator = (user for user in course_users if user not in mock_asset.users) different_user_1 = next(user_iterator) different_user_2 = next(user_iterator) fake_auth.login(different_user_1.id) response = self._api_like_asset(asset_id=mock_asset.id, client=client, expected_status_code=200) assert response.json['likes'] == 1 assert response.json['liked'] is True fake_auth.login(different_user_2.id) response = self._api_like_asset(asset_id=mock_asset.id, client=client, expected_status_code=200) assert response.json['likes'] == 2 assert response.json['liked'] is True fake_auth.login(different_user_1.id) response = self._api_remove_like_asset(asset_id=mock_asset.id, client=client, expected_status_code=200) assert response.json['likes'] == 1 assert response.json['liked'] is False fake_auth.login(different_user_2.id) response = self._api_remove_like_asset(asset_id=mock_asset.id, client=client, expected_status_code=200) assert response.json['likes'] == 0 assert response.json['liked'] is False
def test_teacher_view_asset(self, client, fake_auth, mock_asset): """Authorized user can view asset.""" course = Course.find_by_id(mock_asset.course_id) instructors = list(filter(lambda u: is_teaching(u), course.users)) fake_auth.login(instructors[0].id) asset = _api_get_asset(asset_id=mock_asset.id, client=client) assert asset['id'] == mock_asset.id
def test_delete_asset_by_teacher(self, client, fake_auth, mock_asset, mock_category): """Authorized user can delete asset.""" course = Course.find_by_id(mock_asset.course_id) instructors = list(filter(lambda u: is_teaching(u), course.users)) fake_auth.login(instructors[0].id) self._verify_delete_asset(mock_asset.id, client)
def test_teacher_download(self, app, client, fake_auth, mock_asset): """Authorized user can download asset.""" course = Course.find_by_id(mock_asset.course_id) instructors = list(filter(lambda u: is_teaching(u), course.users)) fake_auth.login(instructors[0].id) # TODO: Mock S3 so authorized user actually gets download. For now, 404 oddly indicates success. self._api_download_asset(app, asset_id=mock_asset.id, client=client, expected_status_code=404)
def test_errant_remove_like_does_not_decrement(self, client, fake_auth, mock_asset): course_users = Course.find_by_id(mock_asset.course_id).users different_user = next(user for user in course_users if user not in mock_asset.users) fake_auth.login(different_user.id) asset = _api_get_asset(asset_id=mock_asset.id, client=client) assert asset['likes'] == 0 assert asset['liked'] is False response = self._api_remove_like_asset(asset_id=mock_asset.id, client=client, expected_status_code=200) assert response.json['likes'] == 0 assert response.json['liked'] is False
def test_likes_same_user_does_not_increment(self, client, fake_auth, mock_asset): course_users = Course.find_by_id(mock_asset.course_id).users different_user = next(user for user in course_users if user not in mock_asset.users) fake_auth.login(different_user.id) response = self._api_like_asset(asset_id=mock_asset.id, client=client, expected_status_code=200) assert response.json['likes'] == 1 response = self._api_like_asset(asset_id=mock_asset.id, client=client, expected_status_code=200) assert response.json['likes'] == 1
def test_like_asset_by_course_user(self, client, fake_auth, mock_asset): """Another user in the same court can like an asset.""" course_users = Course.find_by_id(mock_asset.course_id).users different_user = next(user for user in course_users if user not in mock_asset.users) fake_auth.login(different_user.id) asset = _api_get_asset(asset_id=mock_asset.id, client=client) assert asset['likes'] == 0 assert asset['liked'] is False response = self._api_like_asset(asset_id=mock_asset.id, client=client, expected_status_code=200) assert response.json['likes'] == 1 assert response.json['liked'] is True asset = _api_get_asset(asset_id=mock_asset.id, client=client) assert asset['likes'] == 1 assert asset['liked'] is True
def test_increment_asset_view_count(self, client, fake_auth, mock_asset): course = Course.find_by_id(mock_asset.course_id) instructors = list(filter(lambda u: is_teaching(u), course.users)) # Instructor 1 increments view count. fake_auth.login(instructors[0].id) asset = _api_get_asset(asset_id=mock_asset.id, client=client) assert asset['views'] == 1 # Instructor 2 increments view count. fake_auth.login(instructors[1].id) asset = _api_get_asset(asset_id=mock_asset.id, client=client) assert asset['views'] == 2 # Repeat views do not increment, fake_auth.login(instructors[0].id) asset = _api_get_asset(asset_id=mock_asset.id, client=client) assert asset['views'] == 2 # Views by asset owners do not increment. fake_auth.login(mock_asset.users[0].id) asset = _api_get_asset(asset_id=mock_asset.id, client=client) assert asset['views'] == 2