コード例 #1
0
ファイル: __init__.py プロジェクト: Mr-Sims/SoftUni_PY
class TestsUser(unittest.TestCase):
    def setUp(self):
        self.user = User(12, 'Valentina')
        self.library = Library()

    def test_init(self):
        self.assertEqual(self.user.user_id, 12)
        self.assertEqual(self.user.username, 'Valentina')
        self.assertEqual(self.user.books, [])

    def test_get_book_method_with_book_available_in_the_library_should_add_it_in_the_books_list(
            self):
        self.library.books_available.update({
            'J.K.Rowling': [
                'Harry Potter and the Philosopher\'s Stone',
                'Harry Potter and the Philosopher\'s Stone',
                'Harry Potter and the Deathly Hallows',
                'Harry Potter and the Order of the Phoenix'
            ]
        })
        result = self.user.get_book('J.K.Rowling',
                                    'Harry Potter and the Deathly Hallows', 17,
                                    self.library)
        self.assertEqual(
            result,
            'Harry Potter and the Deathly Hallows successfully rented for the next 17 days!'
        )
        self.assertEqual(self.user.books,
                         ["Harry Potter and the Deathly Hallows"])
        self.assertEqual(
            self.library.rented_books,
            {'Valentina': {
                'Harry Potter and the Deathly Hallows': 17
            }})
        self.assertEqual(
            self.library.books_available, {
                'J.K.Rowling': [
                    'Harry Potter and the Philosopher\'s Stone',
                    'Harry Potter and the Philosopher\'s Stone',
                    'Harry Potter and the Order of the Phoenix'
                ]
            })

    def test_get_book_method_with_book_already_rented_should_return_a_message(
            self):
        self.library.books_available.update({
            'J.K.Rowling': [
                'Harry Potter and the Philosopher\'s Stone',
                'Harry Potter and the Philosopher\'s Stone',
                'Harry Potter and the Deathly Hallows',
                'Harry Potter and the Order of the Phoenix'
            ]
        })
        self.user.get_book('J.K.Rowling',
                           'Harry Potter and the Deathly Hallows', 17,
                           self.library)
        second_user = User(13, 'Peter')
        result = second_user.get_book('J.K.Rowling',
                                      'Harry Potter and the Deathly Hallows',
                                      17, self.library)
        self.assertEqual(
            result,
            'The book "Harry Potter and the Deathly Hallows" is already rented and will be available in 17 days!'
        )
        self.assertEqual(self.user.books,
                         ["Harry Potter and the Deathly Hallows"])
        self.assertEqual(second_user.books, [])
        self.assertEqual(
            self.library.rented_books,
            {'Valentina': {
                'Harry Potter and the Deathly Hallows': 17
            }})
        self.assertEqual(
            self.library.books_available, {
                'J.K.Rowling': [
                    'Harry Potter and the Philosopher\'s Stone',
                    'Harry Potter and the Philosopher\'s Stone',
                    'Harry Potter and the Order of the Phoenix'
                ]
            })

    def test_return_book_method_with_rented_book_should_remove_from_user_records_and_add_it_back_to_library_records(
            self):
        self.library.books_available.update({
            'J.K.Rowling': [
                'Harry Potter and the Philosopher\'s Stone',
                'Harry Potter and the Deathly Hallows',
                'Harry Potter and the Order of the Phoenix'
            ]
        })
        self.user.get_book('J.K.Rowling',
                           'Harry Potter and the Deathly Hallows', 3,
                           self.library)
        self.user.get_book('J.K.Rowling',
                           'Harry Potter and the Order of the Phoenix', 12,
                           self.library)
        self.assertEqual(self.user.books, [
            'Harry Potter and the Deathly Hallows',
            'Harry Potter and the Order of the Phoenix'
        ])
        self.user.return_book('J.K.Rowling',
                              'Harry Potter and the Deathly Hallows',
                              self.library)
        self.assertEqual(self.user.books,
                         ['Harry Potter and the Order of the Phoenix'])
        self.assertEqual(
            self.library.books_available, {
                'J.K.Rowling': [
                    'Harry Potter and the Philosopher\'s Stone',
                    'Harry Potter and the Deathly Hallows'
                ]
            })
        self.assertEqual(
            self.library.rented_books,
            {'Valentina': {
                'Harry Potter and the Order of the Phoenix': 12
            }})

    def test_return_book_method_with_book_NOT_rented_by_the_user_should_return_message(
            self):
        self.library.books_available.update({
            'J.K.Rowling': [
                'Harry Potter and the Philosopher\'s Stone',
                'Harry Potter and the Deathly Hallows',
                'Harry Potter and the Order of the Phoenix'
            ]
        })
        self.user.get_book('J.K.Rowling',
                           'Harry Potter and the Deathly Hallows', 3,
                           self.library)
        result = self.user.return_book(
            'J.K.Rowling', 'Harry Potter and the Order of the Phoenix',
            self.library)
        self.assertEqual(
            result, f'Valentina doesn\'t have this book in his/her records!')

    def test_info_method_should_return_sorted_books_list(self):
        self.library.books_available.update({
            'J.K.Rowling': [
                'Harry Potter and the Philosophers Stone',
                'Harry Potter and the Deathly Hallows',
                'Harry Potter and the Order of the Phoenix'
            ]
        })
        self.user.get_book('J.K.Rowling',
                           'Harry Potter and the Order of the Phoenix', 3,
                           self.library)
        self.user.get_book('J.K.Rowling',
                           'Harry Potter and the Philosophers Stone', 3,
                           self.library)
        self.user.get_book('J.K.Rowling',
                           'Harry Potter and the Deathly Hallows', 3,
                           self.library)

        result = self.user.info()
        self.assertEqual(
            result,
            "Harry Potter and the Deathly Hallows, Harry Potter and the Order of the Phoenix, Harry Potter and the Philosophers Stone"
        )

    def test_init(self):
        self.assertEqual(self.library.user_records, [])
        self.assertEqual(self.library.books_available, {})
        self.assertEqual(self.library.rented_books, {})

    def test_add_user_already_registered_in_the_library_should_return_message(
            self):
        user = User(12, 'Valentina')
        library = Library()
        library.add_user(user)
        result = library.add_user(user)
        self.assertEqual(
            result, 'User with id = 12 already registered in the library!')

    def test_add_user_method_with_valid_data_should_update_records_properly(
            self):
        user = User(12, 'Valentina')
        library = Library()
        library.add_user(user)
        library.add_user(User(13, 'Peter'))
        self.assertEqual(library.user_records[0].__str__(),
                         '12, Valentina, []')
        self.assertEqual(library.user_records[1].__str__(), '13, Peter, []')

    def test_remove_user_method_with_valid_data_should_update_library_records_properly(
            self):
        user = User(12, 'Valentina')
        library = Library()
        library.add_user(user)
        library.add_user(User(13, 'Peter'))
        library.remove_user(user)
        self.assertEqual(library.user_records[0].__str__(), '13, Peter, []')

    def test_remove_user_method_with_user_not_registered_should_return_message(
            self):
        v = User(12, 'Valentina')
        p = User(13, 'Peter')
        library = Library()
        library.add_user(v)
        result = library.remove_user(p)
        self.assertEqual(result, 'We could not find such user to remove!')

    def test_change_username_method_with_user_id_not_included_in_library_records_should_return_message(
            self):
        v = User(12, 'Valentina')
        p = User(13, 'Peter')
        library = Library()
        library.add_user(v)
        result = library.change_username(13, 'George')
        self.assertEqual(result, 'There is no user with id = 13!')

    def test_change_username_method_with_user_id_included_in_library_records_but_provided_new_username_is_the_same_should_return_message(
            self):
        v = User(12, 'Valentina')
        p = User(13, 'Peter')
        library = Library()
        library.add_user(v)
        result = library.change_username(12, 'Valentina')
        self.assertEqual(
            result,
            'Please check again the provided username - it should be different than the username used so far!'
        )

    def test_change_username_method_with_valid_data_should_return_message_and_update_library_records(
            self):
        v = User(12, 'Valentina')
        p = User(13, 'Peter')
        library = Library()
        library.add_user(v)
        result = library.change_username(12, 'Violeta')
        self.assertEqual(
            result, 'Username successfully changed to: Violeta for userid: 12')
        self.assertEqual(library.user_records[0].__str__(), '12, Violeta, []')
コード例 #2
0
from project.library import Library
from project.user import User

# TODO: Fix if needed- Users not added and removed from the library can access it

user = User(12, 'Peter')
user2 = User(13, 'Simo')
user3 = User(14, 'Boris')

library = Library()

library.books_available.update({
    'J.K.Rowling': [
        'The Chamber of Secrets', 'The Prisoner of Azkaban',
        'The Goblet of Fire', 'The Order of the Phoenix',
        'The Half-Blood Prince', 'The Deathly Hallows'
    ]
})

library.add_user(user)
print(library.remove_user(user))
print(library.remove_user(user))
# print(library.change_username(12, "Asen"))
# print(user.get_book("J.K.Rowling", 'The Chamber of Secrets', 10, library))
# print(user.get_book("J.K.Rowling", 'The Deathly Hallows', 12, library))
# print(user2.get_book("J.K.Rowling", 'The Order of the Phoenix', 14, library))
# print(library.rented_books)
print(user.info())