Example #1
0
 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
     )
Example #2
0
    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"
Example #3
0
    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"
Example #4
0
    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"
Example #5
0
    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"
Example #6
0
    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"
Example #7
0
    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()
Example #8
0
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.")