def test_remove_article_by_id(self): # Given articles = [{ "id": "1", "name": ["mlotek", "hammer"], "total_quantity": 2, "quantity": 1, "is_available": False }] with open(self.config_file_name, "w") as f: json.dump(articles, f) config_manager = ConfigManager() config_manager.db_path = self.config_file_name db = DBConnector(DbFileConnector(config_manager)) article_id = '1' expected = [] # When db.remove_article_by_id(article_id) # Then self.assertListEqual(expected, db.get_all_articles())
def test_get_all_articles(self): # Given articles = [{ "id": "1", "name": ["mlotek", "hammer"], "total_quantity": 2, "quantity": 3, "is_available": True }, { "id": "2", "name": ["wiertarka", "driller"], "total_quantity": 4, "quantity": 5, "is_available": False }] with open(self.config_file_name, "w") as f: json.dump(articles, f) config_manager = ConfigManager() config_manager.db_path = self.config_file_name db_file_connector = DbFileConnector(config_manager) db = DBConnector(db_file_connector) expected = [ Article('1', ["mlotek", "hammer"], 2, 3, True), Article('2', ["wiertarka", "driller"], 4, 5, False) ] # When articles = db.get_all_articles() # Then self.assertListEqual(expected, articles)
def test_display_history_command(self): # Given config_manager = ConfigManager() app_info_logger = AppInfoLogger() db = DBConnector(DbFileConnector(config_manager)) logger = LoggerConnector(LoggerFileConnector(config_manager)) config_manager.db_path = self.database_file_name config_manager.logger_path = self.logger_file_name logs = [{ 'id': '1', 'logs': [{ "data": "12-11-2020", "text": "Returned 1" }] }] with open(self.logger_file_name, "w") as f: json.dump(logs, f) INVOKER = Invoker(db, logger, config_manager, app_info_logger) expected = "+------------+------------+" + "\n" \ + "| DATE | TEXT |" + "\n" \ + "+------------+------------+" + "\n" \ + "| 12-11-2020 | 1 RETURNED |" + "\n" \ + "+------------+------------+" # When with mock.patch('builtins.input', return_value="1"): with patch('sys.stdout', new=StringIO()) as result: INVOKER.execute('4') # Then self.assertEqual(expected, result.getvalue())
def test_return_article_command_2(self): # Given config_manager = ConfigManager() app_info_logger = AppInfoLogger() db = DBConnector(DbFileConnector(config_manager)) logger = LoggerConnector(LoggerFileConnector(config_manager)) config_manager.db_path = self.database_file_name config_manager.logger_path = self.logger_file_name articles = [{ "id": "18", "is_available": True, "name": ["Paczka", "Package"], "quantity": 150, "total_quantity": 250 }] with open(self.database_file_name, "w") as f: json.dump(articles, f) with open(self.logger_file_name, "w") as f: json.dump([], f) INVOKER = Invoker(db, logger, config_manager, app_info_logger) expected = [Article('18', ["Paczka", "Package"], 250, 150, True)] # When with mock.patch('builtins.input', side_effect=["18", "101", "\n"]): with patch('sys.stdout', new=StringIO()): INVOKER.execute('14') # Then self.assertEqual(str(expected[0]), str(db.get_articles_by_name('Paczka')[0]))
def test_save_config_command(self): # Given config_manager = ConfigManager() app_info_logger = AppInfoLogger() db = DBConnector(DbFileConnector(config_manager)) logger = LoggerConnector(LoggerFileConnector(config_manager)) config_manager.db_path = self.database_file_name config_manager.logger_path = self.logger_file_name config = { 'db_path': 'db.json', 'language': 'pl', 'logger_path': 'logger.json' } with open(self.config_file_name, "w") as f: json.dump(config, f) config_manager = ConfigManager(self.config_file_name) INVOKER = Invoker(db, logger, config_manager, app_info_logger) expected = "INFO: CONFIGURATION_SAVED\n" with mock.patch('builtins.input', return_value="1"): with patch('sys.stdout', new=StringIO()) as result: INVOKER.execute('12') # Then self.assertEqual(result.getvalue(), expected)
def test_add_article_3(self): # Given articles = [] with open(self.config_file_name, "w") as f: json.dump(articles, f) config_manager = ConfigManager() config_manager.db_path = self.config_file_name db = DBConnector(DbFileConnector(config_manager)) article = Article('1', ["mlotek", "hammer"], 1, 2, False) article2 = Article('2', ["mlotek2", "hammer2"], 3, 6, False) expected = [ Article('1', ["mlotek", "hammer"], 1, 2, False), Article('2', ["mlotek2", "hammer2"], 3, 6, False) ] # When db.add_article(article) db.add_article(article) db.add_article(article2) # Then self.assertListEqual(expected, db.get_all_articles())
def i_get_article_by_id(step, id): config_manager = ConfigManager() config_manager.db_path = world.path_db db_file_connector = DbFileConnector(config_manager) db = DBConnector(db_file_connector) article = db.get_article_by_id(id) world.articles = [db.get_article_by_id(id)] if article else list()
def i_remove_article(step, number): config_manager = ConfigManager() config_manager.db_path = world.path_db db_file_connector = DbFileConnector(config_manager) db = DBConnector(db_file_connector) db.remove_article_by_id(number) world.articles = db.get_all_articles()
def test_change_status_command(self): # Given config_manager = ConfigManager() app_info_logger = AppInfoLogger() db = DBConnector(DbFileConnector(config_manager)) logger = LoggerConnector(LoggerFileConnector(config_manager)) config_manager.db_path = self.database_file_name config_manager.logger_path = self.logger_file_name articles = [{ "id": "3", "is_available": True, "name": ["Szalik", "Scarf"], "quantity": 1, "total_quantity": 1 }] with open(self.database_file_name, "w") as f: json.dump(articles, f) with open(self.logger_file_name, "w") as f: json.dump([], f) INVOKER = Invoker(db, logger, config_manager, app_info_logger) expected = [Article('3', ["Szalik", "Scarf"], 1, 1, False)] # When with mock.patch('builtins.input', side_effect=["3", "1", "1"]): with patch('sys.stdout', new=StringIO()): INVOKER.execute('9') self.assertEqual(str(expected[0]), str(db.get_articles_by_name('szalik')[0]))
def test_get_articles_by_name(self): # Given articles = [{ "id": "1", "name": ["mlotek", "hammer"], "total_quantity": 20, "quantity": 5, "is_available": True }, { "id": "2", "name": ["wiertarka", "driller"], "total_quantity": 10, "quantity": 8, "is_available": False }] with open(self.config_file_name, "w") as f: json.dump(articles, f) config_manager = ConfigManager() config_manager.db_path = self.config_file_name db = DBConnector(DbFileConnector(config_manager)) search_string = 'rka' expected = [Article('2', ["wiertarka", "driller"], 10, 8, False)] # When articles = db.get_articles_by_name(search_string) # Then self.assertListEqual(expected, articles)
def test_get_articles_by_borrowed(self): # Given articles = [{ "id": "1", "name": ["mlotek", "hammer"], "total_quantity": 2, "quantity": 2, "is_available": True }, { "id": "2", "name": ["wiertarka", "driller"], "total_quantity": 3, "quantity": 2, "is_available": False }] with open(self.config_file_name, "w") as f: json.dump(articles, f) config_manager = ConfigManager() config_manager.db_path = self.config_file_name db = DBConnector(DbFileConnector(config_manager)) expected = Article("2", ["wiertarka", "driller"], 3, 2, False) # When article = db.get_articles_by_borrowed()[0] # Then self.assertEqual(expected, article)
def test_add_article_quantity(self): # Given articles = [{ "id": "1", "name": ["mlotek", "hammer"], "total_quantity": 22, "quantity": 2, "is_available": True }, { "id": "2", "name": ["wiertarka", "driller"], "total_quantity": 22, "quantity": 2, "is_available": False }] with open(self.config_file_name, "w") as f: json.dump(articles, f) config_manager = ConfigManager() config_manager.db_path = self.config_file_name db = DBConnector(DbFileConnector(config_manager)) search_id = '2' expected = Article('2', ["wiertarka", "driller"], 22, 22, True) search_id_2 = '1' expected_2 = Article('1', ["mlotek", "hammer"], 22, 12, True) # When article = db.add_article_quantity(search_id, 20, True) article_2 = db.add_article_quantity(search_id_2, 10, True) # Then self.assertEqual(expected, article) self.assertEqual(expected_2, article_2)
def i_change_to_not_available_article(step, number): config_manager = ConfigManager() config_manager.db_path = world.path_db db_file_connector = DbFileConnector(config_manager) db = DBConnector(db_file_connector) new_obj = db.change_article_availability(number, False) if new_obj: db.remove_article_by_id(number) db.add_article(new_obj) world.articles = db.get_all_articles()
def i_borrow_article(step, qty, id): config_manager = ConfigManager() config_manager.db_path = world.path_db db_file_connector = DbFileConnector(config_manager) db = DBConnector(db_file_connector) if db.get_article_by_id(id).quantity + int(qty) <= db.get_article_by_id( id).total_quantity: article = db.add_article_quantity(id, int(qty), True) db.remove_article_by_id(id) db.add_article(article) world.articles = db.get_all_articles()
def test_display_full_history_command(self): # Given config_manager = ConfigManager() app_info_logger = AppInfoLogger() db = DBConnector(DbFileConnector(config_manager)) logger = LoggerConnector(LoggerFileConnector(config_manager)) config_manager.db_path = self.database_file_name config_manager.logger_path = self.logger_file_name articles = [{ "id": "1", "name": ["mlotek", "hammer"], "total_quantity": 2, "quantity": 2, "is_available": True }, { "id": "2", "name": ["wiertarka", "driller"], "total_quantity": 2, "quantity": 2, "is_available": False }] with open(self.database_file_name, "w") as f: json.dump(articles, f) logs = [{ 'id': '1', 'logs': [{ "data": "08-05-2020", "text": "Returned 1" }] }] with open(self.logger_file_name, "w") as f: json.dump(logs, f) INVOKER = Invoker(db, logger, config_manager, app_info_logger) expected = "+----+------------+------------+" + "\n" \ + "| ID | DATE | TEXT |" + "\n" \ + "+----+------------+------------+" + "\n" \ + "| 1 | 08-05-2020 | 1 RETURNED |" + "\n" \ + "+----+------------+------------+" # When with patch('sys.stdout', new=StringIO()) as result: with mock.patch('builtins.input', return_value="2"): INVOKER.execute('3') # Then self.assertEqual(expected, result.getvalue())
def i_borrow_article(step, qty, id): config_manager = ConfigManager() config_manager.db_path = world.path_db db_file_connector = DbFileConnector(config_manager) db = DBConnector(db_file_connector) if db.get_article_by_id( id).is_available and db.get_article_by_id(id).quantity >= int(qty): if db.get_article_by_id(id).quantity == int(qty): article = db.add_article_quantity(id, -int(qty), False) else: article = db.add_article_quantity(id, -int(qty), True) db.remove_article_by_id(id) db.add_article(article) world.articles = db.get_all_articles()
def test_display_borrowed_articles_command(self): # Given config_manager = ConfigManager() app_info_logger = AppInfoLogger() db = DBConnector(DbFileConnector(config_manager)) logger = LoggerConnector(LoggerFileConnector(config_manager)) config_manager.db_path = self.database_file_name config_manager.logger_path = self.logger_file_name articles = [{ "id": "18", "is_available": True, "name": ["Paczka", "Package"], "quantity": 150, "total_quantity": 250 }] with open(self.database_file_name, "w") as f: json.dump(articles, f) logs = [{ "id": "18", "logs": [{ "data": "2020-06-22", "text": "Added" }, { "data": "2020-06-22", "text": "Borrowed 100" }] }] with open(self.logger_file_name, "w") as f: json.dump(logs, f) INVOKER = Invoker(db, logger, config_manager, app_info_logger) expected = "+----+---------+------------------+----------------+----------+--------------+" + "\n" \ + "| ID | NAME | NAME_SECOND_LANG | TOTAL_QUANTITY | QUANTITY | AVAILABILITY |" + "\n" \ + "+----+---------+------------------+----------------+----------+--------------+" + "\n" \ + "| 18 | Package | Paczka | 250 | 150 | YES |" + "\n" \ + "+----+---------+------------------+----------------+----------+--------------+" # When with patch('sys.stdout', new=StringIO()) as result: with mock.patch('builtins.input', return_value="1"): INVOKER.execute('2') # Then self.assertEqual(expected, result.getvalue())
def test_add_article_command(self): # Given config_manager = ConfigManager() app_info_logger = AppInfoLogger() db = DBConnector(DbFileConnector(config_manager)) logger = LoggerConnector(LoggerFileConnector(config_manager)) config_manager.db_path = self.database_file_name config_manager.logger_path = self.logger_file_name logs = [{ 'id': '1', 'logs': [{ "data": "08-05-2020", "text": "Returned 1" }] }, { 'id': '2', 'logs': [{ "data": "08-05-2020", "text": "Borrowed 1" }, { "data": "07-05-2020", "text": "Deleted" }] }] with open(self.database_file_name, "w") as f: json.dump([], f) with open(self.logger_file_name, "w") as f: json.dump(logs, f) INVOKER = Invoker(db, logger, config_manager, app_info_logger) expected = [Article('3', ["szalik", "scarf"], 1, 1, True)] # When with mock.patch('builtins.input', side_effect=["scarf", "szalik", "1", "1"]): with patch('sys.stdout', new=StringIO()): INVOKER.execute('5') self.assertEqual(expected, db.get_articles_by_name('scarf'))
def test_get_all_articles_2(self): # Given articles = [] with open(self.config_file_name, "w") as f: json.dump(articles, f) config_manager = ConfigManager() config_manager.db_path = self.config_file_name db_file_connector = DbFileConnector(config_manager) db = DBConnector(db_file_connector) expected = [] # When articles = db.get_all_articles() # Then self.assertListEqual(expected, articles)
def test_display_all_articles_command(self): # Given config_manager = ConfigManager() app_info_logger = AppInfoLogger() db = DBConnector(DbFileConnector(config_manager)) logger = LoggerConnector(LoggerFileConnector(config_manager)) config_manager.db_path = self.database_file_name config_manager.logger_path = self.logger_file_name articles = [{ "id": "1", "name": ["mlotek", "hammer"], "total_quantity": 20, "quantity": 2, "is_available": True }, { "id": "2", "name": ["wiertarka", "driller"], "total_quantity": 30, "quantity": 5, "is_available": False }] with open(self.database_file_name, "w") as f: json.dump(articles, f) INVOKER = Invoker(db, logger, config_manager, app_info_logger) expected = "+----+---------+------------------+----------------+----------+--------------+" + "\n" \ + "| ID | NAME | NAME_SECOND_LANG | TOTAL_QUANTITY | QUANTITY | AVAILABILITY |" + "\n" \ + "+----+---------+------------------+----------------+----------+--------------+" + "\n" \ + "| 1 | hammer | mlotek | 20 | 2 | YES |" + "\n" \ + "| 2 | driller | wiertarka | 30 | 5 | NO |" + "\n" \ + "+----+---------+------------------+----------------+----------+--------------+" # When with patch('sys.stdout', new=StringIO()) as result: with mock.patch('builtins.input', return_value="1"): INVOKER.execute('1') # Then self.assertEqual(expected, result.getvalue())
def i_add_article(step): article = None for article_dict in deepcopy(step.hashes): if article_dict['is_available'] == 'no': article_dict['is_available'] = False else: article_dict['is_available'] = True name = [article_dict['name_pl'], article_dict['name_en']] article = Article('3', name, int(article_dict['total_quantity']), int(article_dict['quantity']), article_dict['is_available']) config_manager = ConfigManager() config_manager.db_path = world.path_db db_file_connector = DbFileConnector(config_manager) db = DBConnector(db_file_connector) db.add_article(article) world.articles = db.get_all_articles()
def test_change_config_command(self): # Given config = { 'db_path': 'db.json', 'language': 'en', 'logger_path': 'logger.json' } with open(self.config_file_name, "w") as f: json.dump(config, f) config_manager = ConfigManager() app_info_logger = AppInfoLogger() db = DBConnector(DbFileConnector(config_manager)) logger = LoggerConnector(LoggerFileConnector(config_manager)) config_manager.db_path = self.database_file_name config_manager.logger_path = self.logger_file_name config = { 'db_path': 'db.json', 'language': 'en', 'logger_path': 'logger.json' } with open(self.config_file_name, "w") as f: json.dump(config, f) INVOKER = Invoker(db, logger, config_manager, app_info_logger) expected = "CONFIGURATION_CHANGE" + "\n" \ + "1: \"language\"" + "\n" \ + "2: \"db_path\"" + "\n" \ + "3: \"logger_path\"" + "\n" \ + "INFO: NO_SUCH_ATTRIBUTE\n" # When with mock.patch('builtins.input', return_value="db_path"): with mock.patch('builtins.input', return_value="0"): with patch('sys.stdout', new=StringIO()) as result: INVOKER.execute('11') # Then self.assertEqual(expected, result.getvalue())
def test_get_articles_by_availability(self): # Given articles = [{ "id": "1", "name": ["mlotek", "hammer"], "total_quantity": 2, "quantity": 2, "is_available": True }, { "id": "2", "name": ["wiertarka", "driller"], "total_quantity": 2, "quantity": 3, "is_available": False }, { "id": "3", "name": ["wiertarka2", "driller2"], "total_quantity": 40, "quantity": 0, "is_available": False }] with open(self.config_file_name, "w") as f: json.dump(articles, f) config_manager = ConfigManager() config_manager.db_path = self.config_file_name db = DBConnector(DbFileConnector(config_manager)) available = False expected = [ Article('2', ["wiertarka", "driller"], 2, 3, False), Article('3', ["wiertarka2", "driller2"], 40, 0, False) ] # When articles = db.get_articles_by_availability(available) # Then self.assertListEqual(expected, articles)
def test_borrow_article_command2(self): # Given config_manager = ConfigManager() app_info_logger = AppInfoLogger() db = DBConnector(DbFileConnector(config_manager)) logger = LoggerConnector(LoggerFileConnector(config_manager)) config_manager.db_path = self.database_file_name config_manager.logger_path = self.logger_file_name articles = [{ "id": "1", "name": ["mlotek", "hammer"], "total_quantity": 4, "quantity": 1, "is_available": True }, { "id": "2", "name": ["wiertarka", "driller"], "total_quantity": 2, "quantity": 2, "is_available": False }] with open(self.database_file_name, "w") as f: json.dump(articles, f) with open(self.logger_file_name, "w") as f: json.dump([], f) INVOKER = Invoker(db, logger, config_manager, app_info_logger) # When with mock.patch('builtins.input', side_effect=["1", "2", "\n"]): with patch('sys.stdout', new=StringIO()): INVOKER.execute('13') # Then expected = [Article('1', ["mlotek", "hammer"], 4, 1, True)] self.assertEqual(str(expected[0]), str(db.get_articles_by_name('mlotek')[0]))
def test_remove_article_by_id_2(self): # Given articles = [{ "id": "1", "name": ["mlotek", "hammer"], "total_quantity": 2, "quantity": 2, "is_available": True }, { "id": "2", "name": ["wiertarka", "driller"], "total_quantity": 2, "quantity": 3, "is_available": False }, { "id": "3", "name": ["wiertarka2", "driller2"], "total_quantity": 40, "quantity": 0, "is_available": False }] with open(self.config_file_name, "w") as f: json.dump(articles, f) config_manager = ConfigManager() config_manager.db_path = self.config_file_name db = DBConnector(DbFileConnector(config_manager)) article_id = '2' expected = [ Article('1', ["mlotek", "hammer"], 2, 2, True), Article('3', ["wiertarka2", "driller2"], 40, 0, False) ] # When db.remove_article_by_id(article_id) actual = db.get_all_articles() self.assertListEqual(expected, actual)
def test_delete_article_command(self): # Given config_manager = ConfigManager() app_info_logger = AppInfoLogger() db = DBConnector(DbFileConnector(config_manager)) logger = LoggerConnector(LoggerFileConnector(config_manager)) config_manager.db_path = self.database_file_name config_manager.logger_path = self.logger_file_name articles = [{ "id": "1", "name": ["mlotek", "hammer"], "total_quantity": 2, "quantity": 2, "is_available": True }, { "id": "2", "name": ["wiertarka", "driller"], "total_quantity": 2, "quantity": 2, "is_available": False }] with open(self.database_file_name, "w") as f: json.dump(articles, f) with open(self.logger_file_name, "w") as f: # rozroznienie na pliki db i loggera json.dump([], f) INVOKER = Invoker(db, logger, config_manager, app_info_logger) # When with mock.patch('builtins.input', return_value="1"): with patch('sys.stdout', new=StringIO()): INVOKER.execute('6') # Then self.assertEqual(db.get_article_by_id("1"), False)
def test_display_config_command(self): # Given config_manager = ConfigManager() app_info_logger = AppInfoLogger() db = DBConnector(DbFileConnector(config_manager)) logger = LoggerConnector(LoggerFileConnector(config_manager)) config_manager.db_path = self.database_file_name config_manager.logger_path = self.logger_file_name INVOKER = Invoker(db, logger, config_manager, app_info_logger) expected = "CURRENT_CONFIGURATION" + "\n" \ + "language: \"en\"" + "\n" \ + "db_path: \"test_interface_database.json\"" + "\n" \ + "logger_path: \"test_interface_logger.json\"" + "\n" # When with mock.patch('builtins.input', return_value="1"): with patch('sys.stdout', new=StringIO()) as result: INVOKER.execute('10') # Then self.assertEqual(expected, result.getvalue())
def i_show_articles(step): config_manager = ConfigManager() config_manager.db_path = world.path_db db_file_connector = DbFileConnector(config_manager) db = DBConnector(db_file_connector) world.articles = db.get_all_articles()
def i_show_available_articles(step): config_manager = ConfigManager() config_manager.db_path = world.path_db db_file_connector = DbFileConnector(config_manager) db = DBConnector(db_file_connector) world.articles = db.get_articles_by_availability(True)
def i_get_article_by_name(step, name): config_manager = ConfigManager() config_manager.db_path = world.path_db db_file_connector = DbFileConnector(config_manager) db = DBConnector(db_file_connector) world.articles = db.get_articles_by_name(name)