コード例 #1
0
 def setUp(self):
     user_json = open('test/data/user.json')
     self.logged_user_json = json.load(user_json)
     user_json.close()
     self.manage_users = ManageUsers()
     self.manage_users.get_user = MagicMock(
         return_value=User(self.logged_user_json))
コード例 #2
0
from flask import Blueprint, render_template, request, url_for, session, flash
from werkzeug.utils import redirect

from app.auth.views import login_required
from src.bookshelf.manage_books.manage_books import ManageBooks
from src.bookshelf.manage_reviews.manage_reviews import ManageReviews
from src.bookshelf.manage_users.manage_users import ManageUsers

review = Blueprint('review', __name__, template_folder='templates')
books = ManageBooks()
reviews = ManageReviews()
users = ManageUsers()


@review.route('/add_review/<book_title>', methods=["GET", "POST"])
@login_required
def add(book_title):
    book = books.get_by_title(book_title)
    if request.method == "POST":
        user_id = users.get_user(session['user']).get_id()
        reviews.add_new_review(book.get_id(), user_id,
                               request.form.get("book_rate"),
                               request.form.get("book_review"))
        return redirect(url_for('book.book_page', book_title=book_title))
    return render_template('add_review.html', book=book)


@review.route('/remove/<review_id>', methods=["GET", "POST"])
@login_required
def delete(review_id):
    delete_review = reviews.delete_review_by_id(review_id)
コード例 #3
0
 def setUp(self):
     user_json = open('test/data/user.json')
     self.user_from_query = json.load(user_json)
     user_json.close()
     self.manage_user = ManageUsers()
     self.manage_user.get_user = MagicMock(return_value=User(self.user_from_query))
コード例 #4
0
class ManageUsersTest(unittest.TestCase):

    def setUp(self):
        user_json = open('test/data/user.json')
        self.user_from_query = json.load(user_json)
        user_json.close()
        self.manage_user = ManageUsers()
        self.manage_user.get_user = MagicMock(return_value=User(self.user_from_query))

    def test_login_non_existing_user(self):
        """
        Tries to login with non-existent user, Session is None
        flash_message = "Invalid Credentials"
        """
        login = self.manage_user.login("Joseph", "password")
        self.assertIsNone(login["session"])

    def test_login_with_existing_user_not_matching_password(self):
        """
        Tries to login with user, but wrong password Session is None
        flash_message = "Invalid Credentials"
        """
        login = self.manage_user.login("Joseph", "password")
        self.assertIsNone(login["session"])

    def test_login_with_existing_user_matching_password(self):
        """
        Tries to login with correct user credentials, Returns valid session

        """
        login = self.manage_user.login("willfarnaby", "12345")
        self.assertIsNone(login["session"])

    # Register
    def test_register_with_passwords_not_matching(self):
        """
        Tries to register new user with passwords that do not match

        """
        register = self.manage_user.register("new_user", "12345", "1234")
        self.assertEqual("Passwords do not match", register)

    def test_register_with_existing_username(self):
        """
            Fail to register with existing User
        """

        register = self.manage_user.register("willfarnaby", "12345", "12345")
        self.assertEqual("username already in use", register)

    def test_register_new_user(self):
        """
            Fail to register with user already in DB
        """
        self.manage_user.get_user = MagicMock(return_value=None)
        self.manage_user.create_user = MagicMock(return_value=None)
        register = self.manage_user.register("new_user", "12345", "12345")
        self.assertEqual("Registration Successful!", register)

    def test_register_new_user_create_returns_Error(self):
        """
            Fail to register with user already in DB
        """
        self.manage_user.get_user = MagicMock(return_value=None)
        self.manage_user.create_user = MagicMock(return_value="Error")
        register = self.manage_user.register("new_user", "12345", "12345")
        self.assertEqual("There was a problem when trying to create this user, Try Again!", register)
コード例 #5
0
ファイル: views.py プロジェクト: diogo-pessoa/the-bookshelf
from functools import wraps

from flask import Blueprint, request, flash, redirect, url_for, render_template, session

from src.bookshelf.manage_users.manage_users import ManageUsers

auth = Blueprint('auth', __name__, template_folder='templates')

manage_users = ManageUsers()


@auth.route("/register", methods=["GET", "POST"])
def register():
    if request.method == "POST":
        register_message = manage_users.register(
            request.form.get("username"), request.form.get("password"),
            request.form.get("repeat_password"))
        flash(register_message)
        if register_message == "Registration Successful!":
            return redirect(url_for('auth.login'))
        else:
            return render_template("register.html")
    return render_template("register.html")


@auth.route("/login", methods=["GET", "POST"])
def login():
    if request.method == "POST":
        user_login = manage_users.login(request.form.get("username"),
                                        request.form.get("password"))
        flash(user_login["flash_message"])
コード例 #6
0
 def __init__(self):
     super().__init__()
     self.manage_users = ManageUsers()
コード例 #7
0
class ManageReviews(ManageReviewSuper):
    """
        manage to handles Book Reviews
    """

    def __init__(self):
        super().__init__()
        self.manage_users = ManageUsers()

    def get_rate_by_book_id(self, book_id: str):
        """
            Calculates book average rate from all reviews book received
        :param book_id:
        :return: int() rounded rate average or 0
        """
        book_rate = []
        book_reviews = self.get_many(book_id, "book_id")
        if book_reviews:
            for review in book_reviews:
                review = review
                book_rate.append(review.get_rate())
            if len(book_rate) == 0:
                return 0
            return round(statistics.mean(book_rate))
        else:
            return 0

    def delete_review_by_id(self, review_id: str):
        """
        Delete Review by Id, then returns flash message and book_title
        :param review_id: str
        :return: response: dict
        """
        response = {
            'flash_message': "Could Not delete review, Try Again",
            'book_id': ''
        }
        review = self.get_by_id(review_id)
        book_id = review.get_book_id()
        self.delete(review_id)
        response['flash_message'] = 'Review deleted successfully.'
        response['book_id'] = review.get_book_id()
        return response

    def add_new_review(self, book: Book, user: User, book_rate: int, book_review: str):
        """
        Adds new review from dict with information passed from web form
        :param book:
        :param user:
        :param book_rate:
        :param book_review:
        :return: response with flash message
        """
        response = {
            "flash_message": "Review created successfully."
        }
        review = Review({
            'book_id': ObjectId(book),
            'rate': book_rate,
            'reviewer_id': ObjectId(user),
            'feedback': book_review
        })
        create_review = self.create(review)
        if create_review is not None:
            response['flash_message'] = "Could Not create review, Try Again"
        return response

    def get_reviews(self, value: str, field_name: str):
        """
        Queries Data Storage for reviews, Supports either book_id or reviewer_id
        :param value:
        :param field_name: book_id or reviewer_id to specify which is the Id being passed to the query
        :return: dict of reviews or None
        """
        if field_name == 'reviewer_id' or field_name == 'book_id':
            reviews = []
            reviews_from_storage = self.get_many(value, field_name)
            if reviews_from_storage:
                for review in reviews_from_storage:
                    review.get_reviewer_id()
                    user_name = self.manage_users.get_by_id(review.get_reviewer_id())
                    if user_name:
                        review.set_reviewer_name(user_name.get_first_name())
                    else:
                        review.set_reviewer_name("Anonymous")
                    reviews.append(review)
                    print(review)
                return reviews
        else:
            raise Exception(f'field_name has to be either reviewer_id or book_id. Received: {field_name}')
        return reviews
コード例 #8
0
class UpdateUsersTest(unittest.TestCase):
    def setUp(self):
        user_json = open('test/data/user.json')
        self.logged_user_json = json.load(user_json)
        user_json.close()
        self.manage_users = ManageUsers()
        self.manage_users.get_user = MagicMock(
            return_value=User(self.logged_user_json))

    def test_first_and_last_update(self):
        """
         Test update of first and last name.
         Expect to succeed and return success flash message
        """
        user = User(self.logged_user_json)
        updated_information_from_form = {
            'first_name': 'Will',
            'last_name': 'Farna'
        }
        self.manage_users.update_user_information = MagicMock(
            return_value=None)
        update_details = self.manage_users.update_details(
            user, updated_information_from_form)
        self.assertEqual(update_details["flash_message"],
                         "Information Updated successfully")

    def test_fail_update_password_unmatching_fields(self):
        """
         Test update of password.
         Expect to return warning message and never call DB for update information
        """
        user = User(self.logged_user_json)
        updated_information_from_form = {
            'password': '******',
            'repeat_password': '******'
        }
        update_details = self.manage_users.update_details(
            user, updated_information_from_form)
        self.assertEqual(update_details["flash_message"],
                         "Password do not match, couldn't update information")

    def test_correct_update_password_matching_fields(self):
        """
         Test update of password
         Expect to succeed and return success flash message
        """
        user = User(self.logged_user_json)
        updated_information_from_form = {
            'password': '******',
            'repeat_password': '******'
        }
        self.manage_users.update_user_information = MagicMock(
            return_value=None)
        update_details = self.manage_users.update_details(
            user, updated_information_from_form)
        self.assertEqual(update_details["flash_message"],
                         "Information Updated successfully")

    def test_update_correct_fields_db_error_response(self):
        """
         Test update of password
         Expect to succeed and return success flash message
        """
        user = User(self.logged_user_json)
        updated_information_from_form = {
            'password': '******',
            'repeat_password': '******',
            'first_name': 'Will',
            'last_name': 'Farna'
        }
        self.manage_users.update_user_information = MagicMock(
            return_value="Error")
        update_details = self.manage_users.update_details(
            user, updated_information_from_form)
        self.assertEqual(
            update_details["flash_message"],
            "Something went wrong whe trying to update information, Try Again."
        )