Exemplo n.º 1
0
class TestBookModel(BaseTestCase):

    def setUp(self):
        super().setUp()
        self.user = User(
            email='*****@*****.**',
            password='******',
            registered_on=datetime.datetime.utcnow()
        )
        db.session.add(self.user)
        self.book = Book(
            name='Test'
        )
        db.session.add(self.user)
        db.session.add(self.book)
        db.session.commit()
        self.ratings_len = 5
        self.ratings = [Rating(user_id=self.user.id, book_id=self.book.id, value=randint(1, 5))
                        for _ in range(self.ratings_len)]
        db.session.add_all(self.ratings)
        for rating in self.ratings:
            self.book.add_rating_count()
            self.book.add_rating_sum(rating.value)
        db.session.add(self.book)
        db.session.commit()

    def test_ratings_value(self):
        avg = sum(rating.value for rating in self.ratings) / self.ratings_len
        self.assertEqual(self.book.rating, avg)
Exemplo n.º 2
0
 def test_add_book_rating(self):
     book_with_empty_rating = Book(name='book_with_empty_rating')
     db.session.add(book_with_empty_rating)
     db.session.commit()
     rating_value = 4
     success_response_object = {
         'status': 'success',
         'message': 'New rating for book successfully added.',
     }
     fail_response_object = {
         'status': 'fail',
         'message': 'Book or user does not exists.',
     }
     response_object, code = add_book_rating(self.user.id,
                                             book_with_empty_rating.id,
                                             {'value': rating_value})
     self.assertEqual(response_object, success_response_object)
     self.assertEqual(code, 201)
     self.assertEqual(book_with_empty_rating.rating, rating_value)
     response_object, code = add_book_rating(self.user.id, 999,
                                             {'value': rating_value})
     self.assertEqual(response_object, fail_response_object)
     self.assertEqual(code, 404)
     response_object, code = add_book_rating(999, book_with_empty_rating.id,
                                             {'value': rating_value})
     self.assertEqual(response_object, fail_response_object)
     self.assertEqual(code, 404)
     with self.assertRaises(AssertionError):
         add_book_rating(999, book_with_empty_rating.id, {'value': 999})
Exemplo n.º 3
0
 def setUp(self):
     super().setUp()
     self.user = User(email='*****@*****.**',
                      password='******',
                      registered_on=datetime.datetime.utcnow())
     db.session.add(self.user)
     self.book = Book(name='Test')
     db.session.add(self.user)
     db.session.add(self.book)
     db.session.commit()
     self.ratings_len = 5
     self.ratings = [
         Rating(user_id=self.user.id,
                book_id=self.book.id,
                value=randint(1, 5)) for _ in range(self.ratings_len)
     ]
     db.session.add_all(self.ratings)
     db.session.commit()
Exemplo n.º 4
0
 def setUp(self):
     super().setUp()
     self.user = User(
         email='*****@*****.**',
         password='******',
         registered_on=datetime.datetime.utcnow()
     )
     self.writer = Writer(
         first_name='Test',
         last_name='Test'
     )
     self.writer_books = [Book(name=f'Book{i}', authors=[self.writer]) for i in range(10)]
     db.session.add(self.user)
     db.session.add(self.writer)
     db.session.add_all(self.writer_books)
     db.session.commit()
     self.ratings = [Rating(user_id=self.user.id, book_id=book.id, value=randint(1, 5)) for book in self.writer_books]
     db.session.add_all(self.ratings)
     db.session.commit()
Exemplo n.º 5
0
 def test_delete_book(self):
     book_for_delete = Book(name='TestForDelete')
     db.session.add(book_for_delete)
     db.session.commit()
     deleted_book_id = book_for_delete.id
     success_response_object = {
         'status': 'success',
         'message': 'Book successfully deleted.',
     }
     fail_response_object = {
         'status': 'fail',
         'message': 'Book does not exists.',
     }
     response_object, code = delete_book(deleted_book_id)
     self.assertEqual(response_object, success_response_object)
     self.assertEqual(code, 204)
     response_object, code = delete_book(9999)
     self.assertEqual(response_object, fail_response_object)
     self.assertEqual(code, 404)
Exemplo n.º 6
0
def save_new_book(data):
    book_exists = Book.query.filter_by(name=data['name']).first()
    if not book_exists:
        authors_data = data.get('authors', [])
        authors = []
        for author_data in authors_data:
            author = get_or_create(db,
                                   Writer,
                                   first_name=author_data.get('first_name'),
                                   last_name=author_data.get('last_name'))
            authors.append(author)
        new_book = Book(name=data['name'], authors=authors)
        save_changes(new_book)
        response_object = {
            'status': 'success',
            'message': 'Book successfully created.',
        }
        return response_object, 201
    else:
        response_object = {
            'status': 'fail',
            'message': 'Book already exists. Please try other name.',
        }
        return response_object, 409