def test_year_sheet_accessed(self, mock_first, mock_pyxl): """2020 called on mock_pyxl.__getitem__.""" ligrarian.input_info(mock_pyxl, mock.MagicMock(), '2020', 'path') assert ( mock.call('2020') in mock_pyxl.__getitem__.call_args_list )
def test_accessed_overall_sheet_date_set(self, mock_first, mock_pyxl): """Given date written to Overall sheet on index call.""" fake_date, mock_sides = self.mock_cell_access('2020', "mock date", 11) ligrarian.input_info( mock_pyxl, self.mock_info, '2020', 'path') assert fake_date.value == "2020"
def test_accessed_overall_sheet_category_set(self, mock_first, mock_pyxl): """Given category written to Overall sheet on index call.""" fake_category, mock_sides = self.mock_cell_access('2020', "mock category", 9) ligrarian.input_info( mock_pyxl, self.mock_info, '2020', 'path') assert fake_category.value == "mock category"
def test_accessed_overall_sheet_pages_set(self, mock_first, mock_pyxl): """Given pages written to Overall sheet on index call.""" fake_pages, mock_sides = self.mock_cell_access('2020', "mock pages", 8) ligrarian.input_info( mock_pyxl, self.mock_info, '2020', 'path') assert fake_pages.value == "mock pages"
def test_accessed_overall_sheet_author_set(self, mock_first, mock_pyxl): """Given author written to Overall sheet on index call.""" fake_author, mock_sides = self.mock_cell_access('2020', "mock author", 7) ligrarian.input_info( mock_pyxl, self.mock_info, '2020', 'path') assert fake_author.value == "mock author"
def test_accessed_year_sheet_genre_set(self, mock_first, mock_pyxl): """Given genre written to year sheet on index call.""" fake_genre, mock_sides = self.mock_cell_access('2020', "mock genre", 4) ligrarian.input_info( mock_pyxl, self.mock_info, '2020', 'path') assert fake_genre.value == "mock genre"
def test_workbook_saved(self, mock_first, mock_pyxl): """Save called on workbook (mock_pyxl).""" ligrarian.input_info( mock_pyxl, self.mock_info, '2020', 'path') mock_pyxl.save.assert_called_once()
def run_test(): """Perform the Ligrarian test run.""" email = ligrarian.get_setting('User', 'Email') password = ligrarian.get_setting('User', 'Password') yesterday = dt.strftime(dt.now() - timedelta(1), '%d/%m/%y') today = dt.strftime(dt.now(), '%d/%m/%y') book_info = { 'terms': 'Cannery Row', 'date': yesterday, 'format': 'kindle', 'rating': '4', 'review': 'Test Review', } driver = webdriver.Firefox() driver.implicitly_wait(10) ligrarian.goodreads_login(driver, email, password) ligrarian.goodreads_find(driver, book_info['terms']) url = ligrarian.goodreads_filter(driver, book_info['format']) shelves = ligrarian.goodreads_get_shelves(driver, book_info['rating']) # Check book is correct format info_rows = driver.find_elements_by_class_name('row') row_text = [row.text for row in info_rows] assert 'Kindle' in ''.join(row_text), "Book is in incorrect format." # Test review of a book that hasn't been read by the account before review_function_cluster(driver, book_info, False, shelves, url) undo_elem = driver.find_element_by_class_name('wtrStatusRead.wtrUnshelve') assert undo_elem, "Book wasn't marked as read." print("Book successfully marked as read.") # Need a delay to avoid a Goodreads error popup time.sleep(3) # Change date and run testing for rereading a book book_info['date'] = today review_function_cluster(driver, book_info, True, shelves, url) # Reset Goodreads account driver.get(url) # Reset Goodreads account - Have to redo the find for undo due to refreshes undo_elem = driver.find_element_by_class_name('wtrStatusRead.wtrUnshelve') undo_elem.click() alert_obj = driver.switch_to.alert alert_obj.accept() # Check book no longer marked as read before closing window unread_check = driver.find_element_by_class_name('wtrToRead') assert unread_check, "Problem resetting account - Test run specific error." print('Goodreads account reset correctly.') driver.close() # Spreadsheet entry testing path = ligrarian.get_setting('Settings', 'Path') workbook = openpyxl.load_workbook(path) print('Testing spreadsheet updating.') info = ligrarian.parse_page(url) info['category'], info['genre'] = ligrarian.category_and_genre(shelves) print(info) year_sheet = '20' + book_info['date'][-2:] # Get first blank row before attempting to write pre_year = ligrarian.first_blank_row(workbook[year_sheet]) pre_overall = ligrarian.first_blank_row(workbook['Overall']) workbook.close() # Try to write info to both sheets ligrarian.input_info(year_sheet, info, book_info['date']) # Find blank rows now that the data should have been entered workbook = openpyxl.load_workbook(path) post_year = ligrarian.first_blank_row(workbook[year_sheet]) post_overall = ligrarian.first_blank_row(workbook['Overall']) # Confirm data was entered assert pre_year < post_year, "Data not written to year sheet." assert pre_overall < post_overall, "Data not written to overall sheet." print("Data was written to sheet successfully.") # Delete newly entered data for sheet in [year_sheet, 'Overall']: sheet = workbook[sheet] input_row = ligrarian.first_blank_row(sheet) - 1 sheet.cell(row=input_row, column=1).value = '' sheet.cell(row=input_row, column=2).value = '' sheet.cell(row=input_row, column=3).value = '' sheet.cell(row=input_row, column=4).value = '' sheet.cell(row=input_row, column=5).value = '' sheet.cell(row=input_row, column=6).value = '' workbook.save(path) print("Spreadsheet reset.") print("Test run complete.")