def test_button_click_should_activate(qtbot): # type: (qtbot) -> None subdiv_manager = MagicMock() ui = SubDivUI(subdiv_manager) qtbot.addWidget(ui) qtbot.mouseClick(ui._btn_apply_subdiv, QtCore.Qt.LeftButton) subdiv_manager.apply_subdiv_to_selection.assert_called_once()
def test_username_valid_password_invalid(botlogin): qtbot, widget = botlogin qtbot.keyClicks(widget.text_username, 'goanpeca') qtbot.keyClicks(widget.text_password, 'wrongpassword') with qtbot.waitSignal(signal=widget.sig_authentication_failed, timeout=5000, raising=True): qtbot.mouseClick(widget.button_login, Qt.LeftButton) assert widget.isVisible()
def test_username_invalid(botlogin): qtbot, widget = botlogin qtbot.keyClicks(widget.text_username, 'hopefully-not-an-existing-user') qtbot.keyClicks(widget.text_password, NAVIGATOR_TEST_PASSWORD) with qtbot.waitSignal(signal=widget.sig_authentication_failed, timeout=5000, raising=True): qtbot.mouseClick(widget.button_login, Qt.LeftButton) assert widget.isVisible()
def test_username_valid_password_valid(botlogin): qtbot, widget = botlogin qtbot.keyClicks(widget.text_username, NAVIGATOR_TEST_USERNAME) qtbot.keyClicks(widget.text_password, NAVIGATOR_TEST_PASSWORD) with qtbot.waitSignal(signal=widget.sig_authentication_succeeded, timeout=5000, raising=True): qtbot.mouseClick(widget.button_login, Qt.LeftButton) assert not widget.isVisible()
def test_deposit_jammed(qtbot): accounts, terminal_status = set_up_accounts_and_terminal_status() terminal_status.current_account = accounts[0] # monkey patch deposit slot to always be jammed terminal_status.is_deposit_slot_functional = lambda: False select_transaction_view = SelectTransactionView() qtbot.addWidget(select_transaction_view) qtbot.mouseClick(select_transaction_view.r2_btn, QtCore.Qt.LeftButton) assert_screen_shows_and_get_new_screen(MalfunctionView)
def test_registerEdit(register, qtbot): register.usernameLineEdit.clear() register.passwordLineEdit.clear() register.confirmPasswordLineEdit.clear() register.emailAddressLineEdit.clear() qtbot.keyClicks(register.usernameLineEdit, "username") qtbot.keyClicks(register.passwordLineEdit, "encryptp") qtbot.keyClicks(register.confirmPasswordLineEdit, "encryptp") qtbot.keyClicks(register.emailLineEdit, "encryptp") qtbot.mouseClick(register.registerButton, QtCore.Qt.LeftButton) assert True
def test_import_ticket_names(qtbot: qtbot.QtBot, mocker: MockerFixture): """Tests the import ticket names feature""" gui_manager.clear_windows() gui_manager.initialize() for window in gui_manager.window_list: qtbot.addWidget(window) # Import ticket names and prizes mocker.patch('PyQt5.QtWidgets.QFileDialog.exec') mocker.patch('PyQt5.QtWidgets.QFileDialog.selectedFiles', return_value=['examples/ticket_names.txt']) gui_manager.window_list[0].import_ticket_names_action.trigger() mocker.patch('PyQt5.QtWidgets.QFileDialog.selectedFiles', return_value=['examples/prizes.txt']) gui_manager.window_list[0].import_prizes_action.trigger() # Restart before starting raffle.restart() # Mock prize alerts mocker.patch('Ui.prize_alert.PrizeAlert') # Draw all of the tickets in a random order ticket_numbers = list(range(1, 226)) shuffle(ticket_numbers) for ticket_number in ticket_numbers: qtbot.mouseClick( gui_manager.window_list[0].ticket_labels[ticket_number - 1], Qt.LeftButton) # Draw the next ticket QApplication.processEvents() sleep(0.01) # Export the results to a csv file mocker.patch('PyQt5.QtWidgets.QFileDialog.getSaveFileName', return_value=['results.csv', 'CSV files (*.csv)']) gui_manager.window_list[0].export_results_action.trigger() QApplication.processEvents() with open("results.csv", 'r') as results: for i, ticket_number in enumerate(ticket_numbers): values = results.readline().strip().split(',') # Verify information is present in results assert values[0] == str(i + 1) assert values[1] == str(ticket_number) assert values[2] == raffle.tickets[ticket_number - 1].name if raffle.get_prize_from_number(i + 1): assert values[3] == raffle.get_prize_from_number( i + 1).description.strip()
def test_registerEdit(forgot, qtbot): forgot.usernameLineEdit.clear() forgot.passwordLineEdit.clear() forgot.confirmPasswordLineEdit.clear() forgot.emailLineEdit.clear() qtbot.keyClicks(forgot.usernameLineEdit, "encrypt") qtbot.keyClicks(forgot.passwordLineEdit, "encryptp") qtbot.keyClicks(forgot.confirmPasswordLineEdit, "encryptp") qtbot.keyClicks(forgot.emailLineEdit, "*****@*****.**") qtbot.mouseClick(forgot.resetButton, QtCore.Qt.LeftButton) assert True
def test_addingUser_noUsername(setUp): controller, qtbot = setUp rows = controller.view.allStudentsTable.rowCount() qtbot.keyClicks(controller.view.addStudent_email, "*****@*****.**") qtbot.mouseClick(controller.view.addStudent_button, QtCore.Qt.LeftButton) time.sleep(0.5) assert(controller.view.allStudentsTable.rowCount() == rows)
def test_addingUser_noEmail(setUp): controller, qtbot = setUp rows = controller.view.allStudentsTable.rowCount() qtbot.keyClicks(controller.view.addStudent_username, "Mario Fentler") qtbot.mouseClick(controller.view.addStudent_button, QtCore.Qt.LeftButton) time.sleep(0.5) assert(controller.view.allStudentsTable.rowCount() == rows)
def test_editingUser_dataChanges(setUp): controller, qtbot = setUp controller.view.allStudentsTable.setItem(1, 1, QtWidgets.QTableWidgetItem("edited")) qtbot.mouseClick(controller.editButtons[1], QtCore.Qt.LeftButton) time.sleep(0.5) url = "http://localhost:5000/user/" + controller.view.allStudentsTable.item(1,0).text() response = requests.get(url).json() assert(response['username'] == "edited")
def test_deleteUser_guiChanges(setUp): controller, qtbot = setUp rows = controller.view.allStudentsTable.rowCount() id = controller.view.allStudentsTable.item(1,0).text() qtbot.mouseClick(controller.deleteButtons[1], QtCore.Qt.LeftButton) time.sleep(0.5) assert((rows-1) == controller.view.allStudentsTable.rowCount())
def test_input_frame(qtbot): app = QtWidgets.QApplication(sys.argv) screen = input_frame.InputFrame() screen.show() qtbot.mouseClick(screen.parse_button, QtCore.Qt.LeftButton) qtbot.mouseClick(screen.quit_button, QtCore.Qt.LeftButton) screen.close() QtWidgets.QApplication.instance().quit() assert screen.isVisible() is False
def test_deleteUser_dataChanges(setUp): controller, qtbot = setUp id = controller.view.allStudentsTable.item(1,0).text() qtbot.mouseClick(controller.deleteButtons[1], QtCore.Qt.LeftButton) time.sleep(0.5) url = "http://localhost:5000/user" response = requests.get(url).json() for user in response: assert (id != user['id'])
def test_valid_pin_entry(qtbot): _, terminal_status = set_up_accounts_and_terminal_status() terminal_status.current_pan = '1' pin_view = PINView(None) qtbot.addWidget(pin_view) qtbot.mouseClick(pin_view.btn_1, QtCore.Qt.LeftButton) qtbot.mouseClick(pin_view.btn_2, QtCore.Qt.LeftButton) qtbot.mouseClick(pin_view.btn_3, QtCore.Qt.LeftButton) qtbot.mouseClick(pin_view.btn_4, QtCore.Qt.LeftButton) qtbot.mouseClick(pin_view.enter_btn, QtCore.Qt.LeftButton) assert_screen_shows_and_get_new_screen(SelectTransactionView)
def test_invalid_pin_entry(qtbot): _, terminal_status = set_up_accounts_and_terminal_status() terminal_status.pin_attempts = 2 pin_view = PINView(None) qtbot.addWidget(pin_view) qtbot.mouseClick(pin_view.btn_9, QtCore.Qt.LeftButton) qtbot.mouseClick(pin_view.btn_9, QtCore.Qt.LeftButton) qtbot.mouseClick(pin_view.btn_9, QtCore.Qt.LeftButton) qtbot.mouseClick(pin_view.btn_9, QtCore.Qt.LeftButton) qtbot.mouseClick(pin_view.enter_btn, QtCore.Qt.LeftButton) assert_screen_shows_and_get_new_screen(WelcomeView)
def test_addingUser_allArgs(setUp): controller, qtbot = setUp rows = controller.view.allStudentsTable.rowCount() qtbot.keyClicks(controller.view.addStudent_username, "Mario Fentler") qtbot.keyClicks(controller.view.addStudent_email, "*****@*****.**") qtbot.keyClicks(controller.view.addStudent_picture, "http://cdn.ebaumsworld.com/mediaFiles/picture/2453506/85677232.jpg") qtbot.mouseClick(controller.view.addStudent_button, QtCore.Qt.LeftButton) time.sleep(0.5) assert(controller.view.allStudentsTable.rowCount() == rows+1)
def test_editingUser_emailEmpty(setUp): controller, qtbot = setUp oldUsername = controller.view.allStudentsTable.item(1,2).text() controller.view.allStudentsTable.setItem(1, 2, QtWidgets.QTableWidgetItem("")) qtbot.mouseClick(controller.editButtons[1], QtCore.Qt.LeftButton) time.sleep(0.5) url = "http://localhost:5000/user/" + controller.view.allStudentsTable.item(1,0).text() response = requests.get(url).json() assert(response['email'] == oldUsername)
def test_matplotlib_preview(qtbot): testdata = os.path.join(os.path.dirname(__file__), 'testdata', 'sample') otfdir = os.path.join(os.path.dirname(__file__), 'testdata', 'otfs') APP = QtWidgets.QApplication([]) mainGUI = main_GUI() mainGUI.loadProgramDefaults() mainGUI.setOTFdirPath(otfdir) assert mainGUI.listbox.rowCount() == 0 mainGUI.listbox.addPath(testdata) assert mainGUI.listbox.rowCount() == 1 def preview_exists(): assert len(mainGUI.spimwins) mainGUI.prevBackendMatplotlibRadio.setChecked(True) qtbot.mouseClick(mainGUI.previewButton, QtCore.Qt.LeftButton) qtbot.waitUntil(preview_exists, timeout=10000) mainGUI.close_all_previews() assert len(mainGUI.spimwins) == 0 mainGUI.quitProgram(save=False)
def test_withdrawal_terminal_insufficient_funds(qtbot): accounts, terminal_status = set_up_accounts_and_terminal_status() terminal_status.current_account = accounts[0] # monkey patch withdrawal slot to always be functional terminal_status.is_withdrawal_slot_functional = lambda: True terminal_status.total_currency = lambda: 200 select_transaction_view = SelectTransactionView() qtbot.addWidget(select_transaction_view) # choose withdrawal qtbot.mouseClick(select_transaction_view.r3_btn, QtCore.Qt.LeftButton) withdrawal_view = assert_screen_shows_and_get_new_screen(WithdrawalView) # enter amount of $300 qtbot.addWidget(withdrawal_view) qtbot.mouseClick(withdrawal_view.btn_3, QtCore.Qt.LeftButton) qtbot.mouseClick(withdrawal_view.btn_0, QtCore.Qt.LeftButton) qtbot.mouseClick(withdrawal_view.btn_0, QtCore.Qt.LeftButton) qtbot.mouseClick(withdrawal_view.enter_btn, QtCore.Qt.LeftButton) assert_screen_shows_and_get_new_screen(WithdrawalFailedView)
def test_plot(qtbot): # create the MVP components services, views, presenter = create_mvp() main_widget = views['main_widget'] main_widget.show() # show widget to test label visibility qtbot.addWidget(main_widget) # aliases for ui elements func_input = main_widget.func_widget.func_input plot_button = main_widget.func_widget.plot_button syntax_error_label = main_widget.syntax_error_label range_error_label = main_widget.range_error_label plot_widget = main_widget.plot_widget # user interaction func_input.setText("x^2") qtbot.mouseClick(plot_button, QtCore.Qt.LeftButton) assert not syntax_error_label.isVisible() assert not range_error_label.isVisible() assert plot_widget.axes.lines # check if there's a plot
def test_first_splash_enable_analytics(botfirstsplash): qtbot, widget = botfirstsplash qtbot.mouseClick(widget.checkbox_track, Qt.LeftButton) qtbot.mouseClick(widget.checkbox_track, Qt.LeftButton) qtbot.mouseClick(widget.button_ok, Qt.LeftButton) provide_analytics = widget.config.get('main', 'provide_analytics') assert provide_analytics
def test_deposit(qtbot): accounts, terminal_status = set_up_accounts_and_terminal_status() terminal_status.current_account = accounts[0] # monkey patch deposit slot to always be functional terminal_status.is_deposit_slot_functional = lambda: True select_transaction_view = SelectTransactionView() qtbot.addWidget(select_transaction_view) # choose deposit qtbot.mouseClick(select_transaction_view.r2_btn, QtCore.Qt.LeftButton) deposit_view = assert_screen_shows_and_get_new_screen(DepositView) # enter amount of $10 qtbot.addWidget(deposit_view) qtbot.mouseClick(deposit_view.btn_1, QtCore.Qt.LeftButton) qtbot.mouseClick(deposit_view.btn_0, QtCore.Qt.LeftButton) qtbot.mouseClick(deposit_view.enter_btn, QtCore.Qt.LeftButton) insert_deposit_view = assert_screen_shows_and_get_new_screen( InsertDepositView) # put money in slot qtbot.addWidget(insert_deposit_view) qtbot.mouseClick(insert_deposit_view.deposit_slot, QtCore.Qt.LeftButton) assert_screen_shows_and_get_new_screen(BalancePrintingView)
def test_withdrawal(qtbot): accounts, terminal_status = set_up_accounts_and_terminal_status() terminal_status.current_account = accounts[0] # monkey patch withdrawal slot to always be functional terminal_status.is_withdrawal_slot_functional = lambda: True select_transaction_view = SelectTransactionView() qtbot.addWidget(select_transaction_view) # choose withdrawal qtbot.mouseClick(select_transaction_view.r3_btn, QtCore.Qt.LeftButton) withdrawal_view = assert_screen_shows_and_get_new_screen(WithdrawalView) # enter amount of $10 qtbot.addWidget(withdrawal_view) qtbot.mouseClick(withdrawal_view.btn_1, QtCore.Qt.LeftButton) qtbot.mouseClick(withdrawal_view.btn_0, QtCore.Qt.LeftButton) qtbot.mouseClick(withdrawal_view.enter_btn, QtCore.Qt.LeftButton) withdrawal_processed_view = assert_screen_shows_and_get_new_screen( WithdrawalProcessedView) # exit qtbot.addWidget(withdrawal_processed_view) qtbot.mouseClick(withdrawal_processed_view.r2_btn, QtCore.Qt.LeftButton) assert_screen_shows_and_get_new_screen(ExitView)
def test_advanced_search_fields(qtbot): # Initially, the number of fields should be zero assert (prog.searchForm.advancedSearchLayout.count() == 0) # Adding a new condition should add 3 widgets into the layout qtbot.mouseClick(prog.searchForm.addConditionBtn, QtCore.Qt.LeftButton) assert (prog.searchForm.advancedSearchLayout.count() == 3) # Adding another qtbot.mouseClick(prog.searchForm.addConditionBtn, QtCore.Qt.LeftButton) assert (prog.searchForm.advancedSearchLayout.count() == 6) # Removing a condition qtbot.mouseClick(prog.searchForm.removeConditionBtn, QtCore.Qt.LeftButton) assert (prog.searchForm.advancedSearchLayout.count() == 3) # Back to our initial state qtbot.mouseClick(prog.searchForm.removeConditionBtn, QtCore.Qt.LeftButton) assert (prog.searchForm.advancedSearchLayout.count() == 0)
def test_gui(qtbot): app = QApplication(sys.argv) screen = gui.MainWindow() screen.show() file = open("QL_output.txt", "w") file.write("hi") file.close() screen.qlInput.setText('form Box1HouseOwning {\ "Did you sell a house in 2010?" hasSoldHouse: boolean\ "Did you by a house in 2010?" hasBoughtHouse: boolean\ "Did you enter a loan for maintenance/reconstruction?" hasMaintLoan: boolean\ }') qtbot.mouseClick(screen.parsebutton, QtCore.Qt.LeftButton) qtbot.mouseClick(screen.submit_button, QtCore.Qt.LeftButton) qtbot.mouseClick(screen.quitbutton, QtCore.Qt.LeftButton) file = open("QL_output.txt") testtext = file.read() file.close() # os.remove("QL_output.txt") assert testtext == 'Did you sell a house in 2010?undefined\nDid you by a house in 2010?undefined\nDid you enter a loan for maintenance/reconstruction?undefined\n'
async def user(task_status): async with qtrio._core.wait_signal_context(dialog.shown): task_status.started() qtbot.keyClicks(dialog.edit_widget, "abc") qtbot.mouseClick(dialog.accept_button, QtCore.Qt.LeftButton)
def test_first_splash_ok_dont_show(botfirstsplash): qtbot, widget = botfirstsplash qtbot.mouseClick(widget.button_ok_dont_show, Qt.LeftButton) show_startup = widget.config.get('main', 'show_startup') assert not show_startup
def test_import_ticket_names(qtbot: qtbot.QtBot, mocker: MockerFixture): """Tests the import ticket names feature""" gui_manager.clear_windows() gui_manager.initialize() gui_manager.create_window(WindowType.CONTROL_PANEL) for window in gui_manager.window_list: qtbot.addWidget(window) # Import ticket names and prizes mocker.patch('PyQt5.QtWidgets.QFileDialog.exec') mocker.patch('PyQt5.QtWidgets.QFileDialog.selectedFiles', return_value=['examples/ticket_names.txt']) gui_manager.window_list[0].import_ticket_names_action.trigger() mocker.patch('PyQt5.QtWidgets.QFileDialog.selectedFiles', return_value=['examples/prizes.txt']) gui_manager.window_list[0].import_prizes_action.trigger() # Restart before starting raffle.restart() # Mock prize alerts mocker.patch('Ui.prize_alert.PrizeAlert') control_panel = gui_manager.window_list[1] ticket_numbers = list(range(1, 226)) shuffle(ticket_numbers) for i, ticket_number in enumerate(ticket_numbers): # Draw the next ticket control_panel.ticket_number_line_edit.clear() qtbot.keyClicks(control_panel.ticket_number_line_edit, str(ticket_number)) qtbot.mouseClick(control_panel.draw_ticket_button, Qt.LeftButton) QApplication.processEvents() sleep(0.05) # Check the header info assert "Tickets Remaining: {}".format(len(ticket_numbers) - (i + 1)) == \ control_panel.tickets_remaining_label.text() assert "Tickets Drawn: {}".format( i + 1) == control_panel.tickets_drawn_label.text() assert "Last Ticket Drawn: {}".format(ticket_number) == \ control_panel.last_ticket_drawn_label.text() # Go through the tickets and do some checks for j, _ in enumerate(ticket_numbers): # Enter the ticket number control_panel.ticket_number_line_edit.clear() qtbot.keyClicks(control_panel.ticket_number_line_edit, str(ticket_numbers[j])) # If this ticket has been drawn if j <= i: assert str(j + 1) in control_panel.number_drawn_label.text() else: assert 'Not Drawn Yet' in control_panel.number_drawn_label.text( ) # Check the prize that is displayed next_prize = None for j in range(i + 2, len(ticket_numbers) + 1): next_prize = raffle.get_prize_from_number(j) if next_prize is not None: break if next_prize is not None: assert str(next_prize.number ) in control_panel.next_prize_number_label.text() assert str(next_prize.description ) in control_panel.next_prize_description_label.text() else: assert control_panel.next_prize_number_label.text() == "-" assert control_panel.next_prize_description_label.text() == "-"
def test_forgotReturnMainButton(forgot, qtbot): qtbot.mouseClick(forgot.returnButton, QtCore.Qt.LeftButton) assert True