From 65f2c101c776ed54664957f97a1c73393cdd35e1 Mon Sep 17 00:00:00 2001 From: Benny Ogidan Date: Mon, 4 Dec 2017 12:13:58 +0100 Subject: [PATCH] chore (optimise return book process): Remove Modal from the book components - Implementation of a strategy to re-use a single modal for loan and return - Tests refactored to match new route --- client/src/app/actions/actiontype.js | 4 + client/src/app/actions/api.js | 5 +- client/src/app/actions/fetchbooks.js | 25 ++++- client/src/app/components/Root.jsx | 29 +---- .../container/booklist/DisplayAllBooks.jsx | 12 +- .../booklist/DisplayBorrowedBooks.jsx | 8 +- .../booklist/DisplayOverdueBooks.jsx | 8 +- .../container/booklist/DisplayRecentBooks.jsx | 9 +- .../components/container/booklist/Loader.jsx | 4 +- .../container/common/Pagination.jsx | 8 +- .../container/loanhistory/LoanHistory.jsx | 31 ++--- .../presentation/common/book/BookModal.jsx | 13 ++- .../presentation/common/book/DisplayBook.jsx | 106 +++++++++++------- .../common/book/DisplayBookModal.jsx | 92 +++++++-------- .../loanhistory/LoanHistoryTable.jsx | 10 +- client/src/app/css/style.scss | 8 ++ client/src/app/reducers/bookReducers.js | 22 +++- .../src/controllers/middleware/validators.js | 2 +- server/src/controllers/userbooks.js | 9 +- server/src/routes/index.js | 2 +- server/src/test/books.spec.js | 10 +- 21 files changed, 217 insertions(+), 200 deletions(-) diff --git a/client/src/app/actions/actiontype.js b/client/src/app/actions/actiontype.js index 3881dd1..c52a3a6 100644 --- a/client/src/app/actions/actiontype.js +++ b/client/src/app/actions/actiontype.js @@ -9,6 +9,10 @@ export const SIGN_UP_USER_FAILURE = 'SIGN_UP_USER_FAILURE'; export const SIGNUP_USER_SUCCESS = 'SIGNUP_USER_SUCCESS'; +export const FETCH_SELECTED_BOOK_SUCCESS = 'FETCH_SELECTED_BOOK_SUCCESS'; + +export const FETCH_SELECTED_BOOK_FAILURE = 'FETCH_SELECTED_BOOK_FAILURE'; + export const FETCH_ALL_RECENT_BOOKS = 'FETCH_ALL_RECENT_BOOKS '; export const FETCH_ALL_BOOKS = 'FETCH_ALL_BOOKS '; diff --git a/client/src/app/actions/api.js b/client/src/app/actions/api.js index c7728af..deeb3c5 100644 --- a/client/src/app/actions/api.js +++ b/client/src/app/actions/api.js @@ -34,6 +34,9 @@ export default { .then(res => res.data), fetchAllBooksByCategories: (categoryId, offset, limit) => axios .get(`api/v1/books/category/${categoryId}?offset=${offset}&limit=${limit}`) - .then(res => res.data) + .then(res => res.data), + fetchSelectedBookById: bookId => axios + .get(`api/v1/auth/books/${bookId}`) + .then(res => res.data), } }; diff --git a/client/src/app/actions/fetchbooks.js b/client/src/app/actions/fetchbooks.js index bb8caba..4c84ba4 100644 --- a/client/src/app/actions/fetchbooks.js +++ b/client/src/app/actions/fetchbooks.js @@ -4,8 +4,9 @@ import { FETCH_ALL_BOOKS, FETCH_BOOKS_REJECTED, FETCH_BOOKS_BY_USER_ID, - - FETCH_ALL_OVERDUE_BOOKS + FETCH_ALL_OVERDUE_BOOKS, + FETCH_SELECTED_BOOK_FAILURE, + FETCH_SELECTED_BOOK_SUCCESS } from './actiontype'; import api from './api'; @@ -14,6 +15,8 @@ export const fetchRecentBooks = books => ({ type: FETCH_ALL_RECENT_BOOKS, books export const fetchBooks = books => ({ type: FETCH_ALL_BOOKS, books }); export const fetchBooksByUserId = books => ({ type: FETCH_BOOKS_BY_USER_ID, books }); export const fetchOverdueBooks = books => ({ type: FETCH_ALL_OVERDUE_BOOKS, books }); +export const fetchSelectedBook = book => ({ type: FETCH_SELECTED_BOOK_SUCCESS, book }); +export const fetchSelectedBookFailure = error => ({ type: FETCH_SELECTED_BOOK_FAILURE, error }); /** * async helper function: log in user @@ -90,3 +93,21 @@ export const fetchAllBooksbyId = (offset, limit) => dispatch => api dispatch(showErrorNotification({ error })); dispatch(fetchBooksRejected({ error })); }); + + /** + * async helper function:fetch selected book + * @function fetchSelectedBook + * @param {number} bookId + * @returns {function} asynchronous action + */ +export const fetchBook = bookId => dispatch => api + .book + .fetchSelectedBookById(bookId) + .then((response) => { + dispatch(fetchSelectedBook(response)); + }) + .catch((error) => { + dispatch(showErrorNotification({ error })); + dispatch(fetchSelectedBookFailure({ error })); + }); + diff --git a/client/src/app/components/Root.jsx b/client/src/app/components/Root.jsx index ee9abba..890d812 100644 --- a/client/src/app/components/Root.jsx +++ b/client/src/app/components/Root.jsx @@ -2,36 +2,9 @@ import React from 'react'; import Header from '../components/container/header/Header.jsx'; import UploadModal from '../components/presentation/common/modal/UploadModal.jsx'; -// import BookCoverUpload from './presentation/common/modal/BookCoverUpload.jsx'; -import DisplayBookModal from './presentation/common/book/DisplayBookModal.jsx'; - -// const Modal = ({image, title, author, category, description}) => ( -//
-// -//
+import DisplayBookModal from './presentation/common/book/DisplayBookModal.jsx'; -// ); /* eslint-disable */ const Root = props => ( diff --git a/client/src/app/components/container/booklist/DisplayAllBooks.jsx b/client/src/app/components/container/booklist/DisplayAllBooks.jsx index b227dee..00cb425 100644 --- a/client/src/app/components/container/booklist/DisplayAllBooks.jsx +++ b/client/src/app/components/container/booklist/DisplayAllBooks.jsx @@ -26,12 +26,14 @@ class DisplayAllBooks extends React.Component { * @memberof DisplayAllBooks * @returns {component} Loader */ - componentWillMount() { + componentDidMount() { + $('body').css('background-color', '#ffff'); return (); } + /** * render Display All Books page component * @method render @@ -43,12 +45,7 @@ class DisplayAllBooks extends React.Component { this.props.allBooksList.books.map(book => ( )); const { pagination } = this.props.allBooksList; @@ -81,6 +78,7 @@ class DisplayAllBooks extends React.Component { ); diff --git a/client/src/app/components/container/booklist/DisplayBorrowedBooks.jsx b/client/src/app/components/container/booklist/DisplayBorrowedBooks.jsx index 2d5fa3b..c74fb25 100644 --- a/client/src/app/components/container/booklist/DisplayBorrowedBooks.jsx +++ b/client/src/app/components/container/booklist/DisplayBorrowedBooks.jsx @@ -39,13 +39,8 @@ class DisplayAllBorrowedBooks extends React.Component { } const getAllBooks = this.props.borrowedBooks.books.map(book => ( )); const { pagination } = this.props.borrowedBooks; @@ -67,6 +62,7 @@ class DisplayAllBorrowedBooks extends React.Component { ); } diff --git a/client/src/app/components/container/booklist/DisplayOverdueBooks.jsx b/client/src/app/components/container/booklist/DisplayOverdueBooks.jsx index c708cd5..69991b0 100644 --- a/client/src/app/components/container/booklist/DisplayOverdueBooks.jsx +++ b/client/src/app/components/container/booklist/DisplayOverdueBooks.jsx @@ -38,14 +38,8 @@ class DisplayOverdueBooks extends React.Component { } const getAllBooks = this.props.overdueBooks.books.map(book => ( )); const { pagination } = this.props.overdueBooks; diff --git a/client/src/app/components/container/booklist/DisplayRecentBooks.jsx b/client/src/app/components/container/booklist/DisplayRecentBooks.jsx index 7d2c736..96496b9 100644 --- a/client/src/app/components/container/booklist/DisplayRecentBooks.jsx +++ b/client/src/app/components/container/booklist/DisplayRecentBooks.jsx @@ -22,6 +22,7 @@ class DisplayRecentBooks extends React.Component { * @returns {void} */ componentDidMount() { + $('body').css('background-color', 'rgb(204, 204, 204)'); return ( ()) : []; return ( diff --git a/client/src/app/components/container/booklist/Loader.jsx b/client/src/app/components/container/booklist/Loader.jsx index d5705ce..1bb1862 100644 --- a/client/src/app/components/container/booklist/Loader.jsx +++ b/client/src/app/components/container/booklist/Loader.jsx @@ -9,8 +9,8 @@ const Loader = ({ records, callback }) => { Loader.propTypes = { - records: PropTypes.number.isRequired, - callback: PropTypes.func.isRequired + // records: PropTypes.number.isRequired, + // callback: PropTypes.func.isRequired }; export default (Loader); diff --git a/client/src/app/components/container/common/Pagination.jsx b/client/src/app/components/container/common/Pagination.jsx index b9a95b7..0b7f610 100644 --- a/client/src/app/components/container/common/Pagination.jsx +++ b/client/src/app/components/container/common/Pagination.jsx @@ -15,8 +15,8 @@ class PaginationWrapper extends React.Component { * @memberOf PaginationWrapper * @returns {function} Function fetch */ - onSelect(number) { - let numberOfRecords; + onSelect = (number) => { + const {numberOfRecords} = this.props; this .props .fetch(this.pageLimit(number, numberOfRecords), numberOfRecords); @@ -29,9 +29,9 @@ class PaginationWrapper extends React.Component { * * @memberOf PaginationWrapper */ - pageLimit(pagenumber, numberOfRecords) { + pageLimit = (pagenumber, numberOfRecords)=> { let pageOffset; - this.pageOffset = (pagenumber === 1) + pageOffset = (pagenumber === 1) ? 0 : pagenumber - 1; return pageOffset * numberOfRecords; diff --git a/client/src/app/components/container/loanhistory/LoanHistory.jsx b/client/src/app/components/container/loanhistory/LoanHistory.jsx index 88cf282..c7a74a4 100644 --- a/client/src/app/components/container/loanhistory/LoanHistory.jsx +++ b/client/src/app/components/container/loanhistory/LoanHistory.jsx @@ -12,21 +12,6 @@ import LoanHistoryTable from '../../presentation/loanhistory/LoanHistoryTable.js * @extends {React.Component} */ class LoanHistory extends React.Component { - /** - * Creates an instance of DisplayAllBorrowedBooks. - * @param {any} props - * @param {object} offset - * @param {object} limit - * @memberOf DisplayAllBorrowedBooks - */ - constructor(props) { - super(props); - this.state = { - limit: 5, - offset: 0, - }; - } - /** * @description dispatch actions that help populate the dashboard with loan history * fetch books for the dashboard @@ -35,9 +20,8 @@ class LoanHistory extends React.Component { * @returns {void} */ componentDidMount() { - $('body').css('background-color', '#ffff'); this.props - .loanhistory(this.state.offset, this.state.limit); + .loanhistory(this.props.offset, this.props.limit); } /** * render Loan History component @@ -60,6 +44,7 @@ class LoanHistory extends React.Component { ); @@ -72,9 +57,6 @@ LoanHistory.propTypes = { map: PropTypes.object, pagination: PropTypes.object, books: PropTypes.arrayOf(PropTypes.shape({ - title: PropTypes.string.isRequired, - author: PropTypes.string.isRequired, - quantity: PropTypes.number.isRequired, description: PropTypes.string, })) }), @@ -84,7 +66,14 @@ LoanHistory.propTypes = { LoanHistory.defaultProps = { - bookOperations: null + bookOperations: null, + limit: 5, + offset: 0 +}; + +LoanHistory.propTypes = { + limit: PropTypes.number, + offset: PropTypes.number }; const mapStateToProps = state => ({ diff --git a/client/src/app/components/presentation/common/book/BookModal.jsx b/client/src/app/components/presentation/common/book/BookModal.jsx index 9cb6c29..b824a85 100644 --- a/client/src/app/components/presentation/common/book/BookModal.jsx +++ b/client/src/app/components/presentation/common/book/BookModal.jsx @@ -19,22 +19,22 @@ class BookModal extends React.Component { * @memberOf BookModal */ render() { - const { header, actions } = this.props; + const { header, actions, books } = this.props; return (
- Title + Title
-
Book Number: #
-
Title:
+
Book Number: # {this.props.books.id}
+
Title: {this.props.books.title}

-
Author:
-
Description:
+
Author: {this.props.books.author}
+
Description: {this.props.books.description}
{this.props.children} @@ -45,3 +45,4 @@ class BookModal extends React.Component { } export default BookModal; + diff --git a/client/src/app/components/presentation/common/book/DisplayBook.jsx b/client/src/app/components/presentation/common/book/DisplayBook.jsx index 721be14..de8fb19 100644 --- a/client/src/app/components/presentation/common/book/DisplayBook.jsx +++ b/client/src/app/components/presentation/common/book/DisplayBook.jsx @@ -1,47 +1,75 @@ import React from 'react'; import ReactTooltip from 'react-tooltip'; +import { connect } from 'react-redux'; +import { fetchBook } from '../../../../actions/fetchbooks'; + -// import DisplayBookModal from './DisplayBookModal.jsx'; /** - * @description Book component taking book props - * @param {object} books - * @return {object} list of books - */ -const Book = books => ( -
- -
- { - // / $(`#modal-${books.id}`).modal('open'); - // const bookId = books.id; - $('#modal').modal('open'); - $('#bookImage').attr('src', books.image); - $('#bookTitle').text(books.title); - $('#bookAuthor').text(books.author); - $('#bookDescription').text(books.description); - $('#bookId').text(books.id); - }} - tabIndex="-1" - > -
Title: ${books.title}

Author: ${books.author}

Description:${books.description}

`} - data-html - data-class="booktip" - > - {books.title} + * + * + * + * @class Book + * @extends {React.Component} +* */ +class Book extends React.Component { + /** + * Creates an instance of Book. + * @param {object} props + * + * @memberOf Book + */ + constructor(props) { + super(props); + this.state = { + + }; + this.handleClick = this.handleClick.bind(this); + } + + handleClick(books){ + this.props.fetchBook(books.id) + } + + + /** + * + * + * + * @returns {Component} Book + * + * @memberOf Book + */ + render() { + return ( + +
-
-); +
+ ); + } +} -export default Book; +export default connect(null,{fetchBook})(Book); diff --git a/client/src/app/components/presentation/common/book/DisplayBookModal.jsx b/client/src/app/components/presentation/common/book/DisplayBookModal.jsx index bb7046e..89a51e6 100644 --- a/client/src/app/components/presentation/common/book/DisplayBookModal.jsx +++ b/client/src/app/components/presentation/common/book/DisplayBookModal.jsx @@ -32,8 +32,6 @@ class DisplayBookModal extends React.Component { super(props); this.state = { returnDate: moment(), - bookId: '', - error: '' }; } @@ -54,43 +52,10 @@ class DisplayBookModal extends React.Component { handleReturnClick = (event)=> { this .props - .returnbook({ ...this.state }); + .returnbook({ bookId: this.props.book.id}); $('#modal').modal({ opacity: 0 }); } - - // componentWillMount(){ - // console.log(this.props,'VVVVVVVV') - // } - - /** - * - * - * - * @param {param} loanStatus - * @returns {Component} Component - * - * @memberOf DisplayBookModal - */ - bookActions = (loanStatus)=> { - if (!loanStatus) { - return ( -
- -
- ); - } - return ( -
- -
- ); - } - /** * * @@ -133,11 +98,10 @@ class DisplayBookModal extends React.Component { */ handleBorrowClick =(event)=> { event.preventDefault(); - const bookId = document.getElementById('bookId').innerHTML; const dateString = this.state.returnDate.format('YYYY-MM-DD'); this .props - .borrowbooks({ bookId, returnDate: dateString }) + .borrowbooks({ bookId: this.props.book.id , returnDate: dateString }) .then((response) => { if (response.error) { return; @@ -145,33 +109,60 @@ class DisplayBookModal extends React.Component { $('#modal').modal({ opacity: 0 }); }); } + + /** + * + * + * + * @param {param} loanStatus + * @returns {Component} Component + * + * @memberOf DisplayBookModal + */ + bookActions = (loanStatus)=> { + if (!loanStatus) { + return ( +
+ +
+ ); + } + return ( +
+ +
+ ); + } /** * * - * @returns + * @description This render implements the isBorrowed logic checking whether a selected book has been borrowed * @memberof DisplayBookModal * @returns {Component} Component * * @memberOf DisplayBookModal */ render() { - if (!this.props.isAuthenticated) { return ( - + ); } - // const id = document.getElementById('bookId').innerHTML; - // this.setState({bookId : id}); - // console.log({...this.state},'>>>>>>>>>>') + const isBorrowed = (this.props.borrowedBooksList.books) ? this.props.borrowedBooksList.books.map(book => (book.bookId)) : []; - const loanStatus = isBorrowed.includes(this.state.bookId); + const loanStatus = isBorrowed.includes(this.props.book.id); const bookModalActions = this.bookActions(loanStatus); const chooseReturnDate = this.showDatePicker(loanStatus); - return ( - + + { chooseReturnDate } @@ -180,10 +171,6 @@ class DisplayBookModal extends React.Component { } } -DisplayBookModal.defaultProps = { - - -}; DisplayBookModal.propTypes = { isAuthenticated: PropTypes.bool.isRequired, @@ -192,7 +179,8 @@ DisplayBookModal.propTypes = { const mapStateToProps = state => ({ isAuthenticated: !!state.userReducer.isAuthenticated, - borrowedBooksList: state.bookReducer.borrowedBooksList || [] + borrowedBooksList: state.bookReducer.borrowedBooksList || [], + book: (state.bookReducer.book) ?state.bookReducer.book.book : [], }); diff --git a/client/src/app/components/presentation/loanhistory/LoanHistoryTable.jsx b/client/src/app/components/presentation/loanhistory/LoanHistoryTable.jsx index 7b57491..ac6dbd6 100644 --- a/client/src/app/components/presentation/loanhistory/LoanHistoryTable.jsx +++ b/client/src/app/components/presentation/loanhistory/LoanHistoryTable.jsx @@ -14,10 +14,10 @@ const BorrowHistoryTable = (props) => { {book.book.title} {moment(book.createdAt).format('LL') || 'N/A'} - {moment(book.returndate).format('LL') || 'N/A'} - {book.userReturndate ? moment(book.userReturndate).format('LL') || 'N/A' : '-'} - {book.returnstatus ? 'Returned' : 'Still Out on Loan'} - {(moment(book.returndate) < moment() && book.returnstatus === false) ?
Overdue
: '-'} + {moment(book.returnDate).format('LL') || 'N/A'} + {book.userReturnDate ? moment(book.userReturnDate).format('LL') || 'N/A' : '-'} + {book.returnStatus ? 'Returned' : 'Still Out on Loan'} + {(moment(book.returnDate) < moment() && book.returnStatus === false) ?
Overdue
: '-'} )) : null; return (rows ? @@ -46,7 +46,7 @@ const BorrowHistoryTable = (props) => { BorrowHistoryTable.propTypes = { books: PropTypes.arrayOf(PropTypes.shape({ - index: PropTypes.number.isRequired + index: PropTypes.number })).isRequired, }; diff --git a/client/src/app/css/style.scss b/client/src/app/css/style.scss index 2b59fb0..18fb41b 100644 --- a/client/src/app/css/style.scss +++ b/client/src/app/css/style.scss @@ -331,6 +331,7 @@ i.medium { } + .modal-header, .modal-content h4 { background-color: $base-orange; @@ -475,6 +476,7 @@ i.medium { } } + @media screen and (max-width: 541px) { .signup-wrapper { width: auto; @@ -509,3 +511,9 @@ i.medium { max-width: 100%; } } + +@media screen and (min-width:400px) and (max-width:900px){ + .material-icons { + margin-left: -20px; + } +} diff --git a/client/src/app/reducers/bookReducers.js b/client/src/app/reducers/bookReducers.js index 3ae1acc..f26e293 100644 --- a/client/src/app/reducers/bookReducers.js +++ b/client/src/app/reducers/bookReducers.js @@ -15,7 +15,9 @@ import { FETCH_CATEGORIES_SUCCESS, FETCH_CATEGORIES_FAILURE, FETCH_BOOKS_FOR_CATEGORIES_SUCCESS, - FETCH_BOOKS_FOR_CATEGORIES_FAILURE + FETCH_BOOKS_FOR_CATEGORIES_FAILURE, + FETCH_SELECTED_BOOK_SUCCESS, + FETCH_SELECTED_BOOK_FAILURE } from '../actions/actiontype'; /** @@ -94,6 +96,20 @@ export default function bookReducer(state = { error: action }; } + case FETCH_SELECTED_BOOK_SUCCESS: + { + return { + ...state, + book: action.book + }; + } + case FETCH_SELECTED_BOOK_FAILURE: + { + return { + ...state, + error: action + }; + } case BORROW_BOOKS_SUCCESS: { return { @@ -133,14 +149,14 @@ export default function bookReducer(state = { books: state .borrowedBooksList .books - .filter(book => book.bookid !== action.returnedBook.id) + .filter(book => book.bookId !== action.returnedBook.id) }, overdueBooksList: { ...state.overdueBooksList, books: state .overdueBooksList .books - .filter(book => book.bookid !== action.returnedBook.id) + .filter(book => book.bookId !== action.returnedBook.id) } }; diff --git a/server/src/controllers/middleware/validators.js b/server/src/controllers/middleware/validators.js index 3376ce0..9bfe114 100644 --- a/server/src/controllers/middleware/validators.js +++ b/server/src/controllers/middleware/validators.js @@ -35,7 +35,7 @@ export const nullValidationFnMap = { title: [modifiedIsLength('title')], description: [modifiedIsLength('description')], author: [modifiedIsLength('author')], - categoryName:[modifiedIsLength('categoryName')], + categoryName: [modifiedIsLength('categoryName')], categoryId: [isNumeric], bookId: [isNumeric], quantity: [isNumeric] diff --git a/server/src/controllers/userbooks.js b/server/src/controllers/userbooks.js index 1ff93c4..e981391 100644 --- a/server/src/controllers/userbooks.js +++ b/server/src/controllers/userbooks.js @@ -24,7 +24,7 @@ export default { .status(404) .send({ message: 'Please specify a valid return date' }); } - if (toDate(req.body.returnDate) <= Date.now() || !toDate(req.body.returnDate)) { + if (toDate(req.body.returnDate) <= (Date.now() - 24 * 60 * 60 * 1000)) { return res .status(422) .send({ message: 'Please provide a valid return date' }); @@ -260,6 +260,7 @@ export default { }).then(() => { const returnDetail = { username: user.username, + id: bookToReturn.id, book: bookToReturn.title, expectedReturnDate: history.returnDate, returnedOn: history.userReturnDate @@ -267,11 +268,11 @@ export default { if (returnDetail.expectedReturnDate < returnDetail.returnedOn) { res .status(200) - .send({ success: true, message: `You have just returned ${returnDetail.book} late, A fine will be sent to you` }); + .send({ success: true, message: `You have just returned ${returnDetail.book} late, A fine will be sent to you`, returnedBook: returnDetail }); } else { res .status(200) - .send({ success: true, message: `You have just returned ${returnDetail.book}` }); + .send({ success: true, message: `You have just returned ${returnDetail.book}`, returnedBook: returnDetail }); } }); }); @@ -297,7 +298,7 @@ export default { userId, returnStatus: false, returnDate: { - $lt: Date.now() - 24 * 60 * 60 * 1000 + $lt: (Date.now() - 24 * 60 * 60 * 1000) } }, include: [ diff --git a/server/src/routes/index.js b/server/src/routes/index.js index 51f33bd..3a03bca 100644 --- a/server/src/routes/index.js +++ b/server/src/routes/index.js @@ -49,7 +49,7 @@ Router.get('/books/category/:categoryId', authdecodeToken, CategoryController.di Router.get('/books/search', authdecodeToken, BooksController.searchBooks); -Router.get('/books/:bookId', authdecodeToken, BooksController.viewBook); +Router.get('/auth/books/:bookId', BooksController.viewBook); Router.delete('/admin/books/:bookId', authdecodeToken, checkAdmin, BooksController.deleteBook); diff --git a/server/src/test/books.spec.js b/server/src/test/books.spec.js index 0f6e9c2..a601b59 100644 --- a/server/src/test/books.spec.js +++ b/server/src/test/books.spec.js @@ -155,7 +155,7 @@ describe('HelloBooks', () => { done(); }); }); - }); + }); describe('Edit books', () => { it('should edit a selected book from the database', (done) => { chai @@ -337,7 +337,7 @@ describe('HelloBooks', () => { }); }); it('should return 200 when getting a single book', (done) => { - chai.request(app).get('/api/v1/books/1').set('x-access-token', token) + chai.request(app).get('/api/v1/auth/books/1').set('x-access-token', token) .end((err, res) => { expect(res.status) .to @@ -346,7 +346,7 @@ describe('HelloBooks', () => { }); }); it('should return 400 if the bookId is not valid', (done) => { - chai.request(app).get('/api/v1/books/sfgh').set('x-access-token', token) + chai.request(app).get('/api/v1/auth/books/sfgh').set('x-access-token', token) .end((err, res) => { expect(res.status) .to @@ -357,7 +357,7 @@ describe('HelloBooks', () => { it( 'should return 404 when getting a single book if it does not exist', (done) => { - chai.request(app).get('/api/v1/books/100').set('x-access-token', token) + chai.request(app).get('/api/v1/auth/books/100').set('x-access-token', token) .end((err, res) => { expect(res.status) .to @@ -365,7 +365,7 @@ describe('HelloBooks', () => { done(); }); } - ); + ); it('should throw an error if the selected book undefined', (done) => { chai .request(app)