def test_books_returned_fields(self, client): books_url = reverse('books-list') BookFactory.create() resp = simplejson.loads(client.get(books_url).content) resp_keys = resp[0].keys() expected_keys = ['id', 'title', 'authors'] assert expected_keys == list(resp_keys)
def test_get_goal_per_day_should_return_fifty_if_date_object_passed(self): today_date = datetime.datetime.today() end_date = today_date + datetime.timedelta(days=5) book = BookFactory(page_count=500) book.save() target = TargetFactory(end_date=end_date.date(), start_date=today_date, current_page_progress=250, book=book) target.save() goal_value = ProgressService(target).get_pages_daily_target() expected_result = 50 assert goal_value == expected_result
def test_get_goal_per_day_should_return_none_if_end_day_less_then_today( self): today_date = datetime.datetime.today() end_date = today_date - datetime.timedelta(days=5) book = BookFactory(page_count=500) book.save() target = TargetFactory(end_date=end_date, start_date=today_date, current_page_progress=250, book=book) target.save() goal_value = ProgressService(target).get_pages_daily_target() assert goal_value is None
def test_books_detail_view_get_detail_book(self, client): book_params = { 'title': 'test', 'page_count': 500, 'description': 'test_description' } author_params = { 'first_name':'John', 'last_name':'Dad', 'bio': 'test' } genre_params = { 'title': 'test', 'description': 'test' } author = AuthorFactory.create(**author_params) genre = GenreFactory.create(**genre_params) book = BookFactory.create(**book_params, authors=[author], genres=[genre]) books_url = reverse('books-detail', args=[book.id]) resp = simplejson.loads(client.get(books_url).content) expected_resp = { 'id': 1, 'title': 'test', 'page_count': 500, 'description': 'test_description', 'authors': [{'first_name': 'John', 'last_name': 'Dad', 'bio': 'test'}], 'genres': [{'title': 'test', 'description': 'test'}] } assert resp == expected_resp
def test_authenticated_users_can_add_target(self, client): targets_url = reverse('targets-list') book = BookFactory.create() end_date = datetime.datetime.now() + datetime.timedelta(days=21) params = simplejson.dumps({ 'title': 'Test title', 'description': 'test', 'book': book.id, 'start_date': datetime.datetime.now().strftime('%Y-%m-%d'), 'end_date': end_date.strftime('%Y-%m-%d'), }) login_params = { 'username': '******', 'email': '*****@*****.**', 'password': '******' } UserFactory.create(**login_params) token_dict = get_login_params_dict(client, login_params) resp = simplejson.loads( client.post(targets_url, params, **token_dict).content) expected_resp_title = 'Test title' assert expected_resp_title == resp.get('title')
def test_books_list_view_should_return_three_books(self, client): books_url = reverse('books-list') BookFactory.create() BookFactory.create() BookFactory.create() expected_len = 3 resp = simplejson.loads(client.get(books_url).content) assert len(resp) == expected_len
def test_not_owner_can_not_change_target(self, client): targets_url = reverse('targets-list') user_params_owner = { 'username': '******', 'email': '*****@*****.**', 'password': '******' } user_params_not_owner = { 'username': '******', 'email': '*****@*****.**', 'password': '******' } book = BookFactory.create() end_date = datetime.datetime.now() + datetime.timedelta(days=21) targets_create_params = { 'title': 'Test title', 'description': 'test', 'book': book.id, 'start_date': datetime.datetime.now().strftime('%Y-%m-%d'), 'end_date': end_date.strftime('%Y-%m-%d'), } UserFactory.create(**user_params_owner) UserFactory.create(**user_params_not_owner) token_dict_owner = get_login_params_dict(client, user_params_owner) client.post(targets_url, simplejson.dumps(targets_create_params), **token_dict_owner) created_target = Target.objects.get(title='Test title') targets_detail = reverse('targets-detail', args=[created_target.id]) user_params_not_owner.pop('email') token_dict_not_owner = get_login_params_dict(client, user_params_not_owner) resp = simplejson.loads( client.put(targets_detail, simplejson.dumps({'name': 'new'}), **token_dict_not_owner).content) expected_resp = { 'detail': 'You do not have permission to perform this action.' } assert resp == expected_resp
def test_detail_target_view_should_contain_pages_per_day(self, client): book = BookFactory.create() book.page_count = 700 book.save() end_date = datetime.datetime.now() + datetime.timedelta(days=21) params = { 'title': 'Test title', 'description': 'test', 'book': book, 'start_date': datetime.datetime.now().strftime('%Y-%m-%d'), 'end_date': end_date.strftime('%Y-%m-%d'), } target = TargetFactory(**params) target.save() targets_url = reverse('targets-detail', args=[target.id]) resp = simplejson.loads(client.get(targets_url).content) assert resp.get('pages_per_day') == 33.3
def test_owner_can_change_target(self, client): targets_url = reverse('targets-list') user_params_owner = { 'username': '******', 'email': '*****@*****.**', 'password': '******' } book = BookFactory.create() end_date = datetime.datetime.now() + datetime.timedelta(days=21) targets_create_params = { 'title': 'Test title', 'description': 'test', 'book': book.id, 'start_date': datetime.datetime.now().strftime('%Y-%m-%d'), 'end_date': end_date.strftime('%Y-%m-%d'), } new_title = 'test_new' UserFactory.create(**user_params_owner) token_dict_owner = get_login_params_dict(client, user_params_owner) client.post(targets_url, simplejson.dumps(targets_create_params), **token_dict_owner) created_target = Target.objects.get(title='Test title') targets_detail = reverse('targets-detail', args=[created_target.id]) token_dict_owner = get_login_params_dict(client, user_params_owner) resp = simplejson.loads( client.patch(targets_detail, simplejson.dumps({'title': new_title}), **token_dict_owner).content) assert resp.get('title') == new_title