def test_failed_login(self, env_config, driver): """ Confirm the error message appears when attempting to log in with the wrong password """ login = LoginPage(driver) login.enter(env_config['addresses']['login']) login.submit_login(env_config['customer_info_spend_save']['email'], WRONG_PASSWORD) assert login.get_login_status() == LoginStatus.INVALID_CREDENTIALS
def test_login_logout(self, env_config, driver): """ Confirm a user can successfully log in and log out """ login = LoginPage(driver) login.enter(env_config['addresses']['login']) login.submit_login(env_config['customer_info_spend_save']['email'], env_config['customer_info_spend_save']['password']) dashboard = DashboardPage(driver) dashboard.wait_until_dashboard_displayed() navigation = NavigationPage(driver) navigation.logout() login.wait_until_login_ready()
def test_cma_transaction_details_display(self, env_config, driver): """ Confirm CMA transaction data is displayed on the Transaction Page """ user_details = env_config['customer_info_spend_save'] login_page = LoginPage(driver) login_page.enter(env_config['addresses']['login']) login_page.submit_login(user_details['email'], user_details['password']) dashboard = DashboardPage(driver) dashboard.wait_until_dashboard_displayed() navigation = NavigationPage(driver) navigation.show_spend_transactions() transactions_page = TransactionsPage(driver) # view transaction details transactions_page.wait_until_transaction_page_displayed( transactions_page.SPEND_ACCOUNT) transaction_details = transactions_page.get_most_recent_transaction_summary( ) assert '$' in transaction_details['amount'] assert len(transaction_details['description']) > 0 # view transaction modal details transactions_page.open_transaction_modal_details() transaction_modal_details = transactions_page.get_transaction_modal_details( ) assert transaction_details['description'] == transaction_modal_details[ 'description'] assert transaction_details['amount'] == transaction_modal_details[ 'amount']
def test_insurance_button_navigates_to_lemonade_website(self, env_config, driver): """ Confirm Lemonade Insurance page button navigates to Lemonade Website """ login_page = LoginPage(driver) login_page.enter(env_config['addresses']['login']) login_page.submit_login(env_config['customer_info_spend_save']['email'], env_config['customer_info_spend_save']['password']) dashboard_page = DashboardPage(driver) dashboard_page.wait_until_dashboard_displayed() navigation_page = NavigationPage(driver) navigation_page.navigate_to_insurance_page() insurance_page = InsurancePage(driver) lemonade_renters_url = "https://www.lemonade.com/l/aspiration?utm_source=aspiration&utm_campaign=app_cta" \ "&utm_content=renters&utm_term=" lemonade_home_owners_url = "https://www.lemonade.com/l/aspiration?utm_source=aspiration&utm_campaign=app_cta" \ "&utm_content=homeowners&utm_term=" insurance_page.wait_until_insurance_displayed() insurance_page.navigate_to_lemonade_renters_page() insurance_page.wait_until_lemonade_insurance_page_displayed() current_url = driver.current_url assert lemonade_renters_url in current_url original_browser_tab_index = 0 close_current_browser_tab(driver) switch_browser_tab(driver, original_browser_tab_index) insurance_page.navigate_to_lemonade_homeowners_page() insurance_page.wait_until_lemonade_insurance_page_displayed() current_url = driver.current_url assert lemonade_home_owners_url in current_url
def test_investment_balance_displays(self, env_config, driver): """ Confirm that a valid Investment Product balance is displayed """ login_page = LoginPage(driver) login_page.enter(env_config['addresses']['login']) login_page.submit_login(env_config['customer_info_investment']['email'], env_config['customer_info_investment']['password']) dashboard = DashboardPage(driver) dashboard.wait_until_dashboard_displayed() assert dashboard.get_product_balance(Products.REDWOOD) >= 0
def test_save_balance_displays(self, env_config, driver): """ Confirm that a positive save balance is displayed """ login_page = LoginPage(driver) login_page.enter(env_config['addresses']['login']) login_page.submit_login(env_config['customer_info_save']['email'], env_config['customer_info_save']['password']) dashboard = DashboardPage(driver) dashboard.wait_until_dashboard_displayed() assert dashboard.get_product_balance(Products.SAVE) > 0
def test_save_balance_accurate(self, env_config, driver): """ Confirm that the displayed save balance matches what's in Galileo's records """ login_page = LoginPage(driver) login_page.enter(env_config['addresses']['login']) login_page.submit_login(env_config['customer_info_save']['email'], env_config['customer_info_save']['password']) dashboard = DashboardPage(driver) dashboard.wait_until_dashboard_displayed() assert dashboard.get_product_balance(Products.SAVE) == get_galileo_balance( env_config['customer_info_save']['prn'])
def test_schedule_and_cancel_ach_deposit(self, env_config, driver): """ Schedule & cancel an ACH deposit from an external account into the customer's Spend product """ user_config = env_config['customer_info_spend_save'] login_page = LoginPage(driver) login_page.enter(env_config['addresses']['login']) login_page.submit_login(user_config['email'], user_config['password']) dashboard = DashboardPage(driver) dashboard.wait_until_dashboard_displayed() navigation = NavigationPage(driver) navigation.show_transfers() transfers_page = TransfersPage(driver) transfers_page.wait_until_transfers_displayed() transfers_page.cancel_all_scheduled_transfers() # create transfer transfer_amount = utils.generate_random_dollar_amount( MAXIMUM_TRANSFER_AMOUNT) transfers_page.prepare_transfer(transfer_amount, transfers_page.SPEND_ACCOUNT, user_config["linked_account"]) transfers_page.schedule_transfer(days_in_future=31) transfers_page.submit_transfer_request() preview_details = transfers_page.transfer_request_result() assert preview_details["status"] == TransferStatus.SCHEDULED assert preview_details['amount'] == transfer_amount assert transfers_page.SPEND_ACCOUNT in preview_details['from'] assert user_config["linked_account"] in preview_details['to'] transfers_page.dismiss_transfer_result() # Bank-1781 todo: We must navigate back to the dashboard first to see the scheduled transfer display navigation.return_to_dashboard() navigation.show_transfers() transfers_page.wait_until_transfers_displayed() transfers_page.show_scheduled_transfers() # verify scheduled transfer displays expected_date = utils.future_business_day(31) expected_month_day = (expected_date.strftime('%B') + ' ' + str(expected_date.day)).lower() scheduled_details = transfers_page.next_scheduled_transfer_summary() assert expected_month_day in scheduled_details['date'].lower() # BANK-1683 To-Do: Verify the summary once the locators allow it # assert transfer_amount == scheduled_details['amount'] # assert transfers_page.SPEND_ACCOUNT in scheduled_details['from'] # assert user_config["linked_account"] == scheduled_details['to'] transfers_page.cancel_all_scheduled_transfers()
def test_verify_db_records_ach_deposit(self, env_config, driver, web_db_connection): """ confirm DB records and audits the creation of an ACH deposit transfer """ user_config = env_config['customer_info_spend_save'] login_page = LoginPage(driver) login_page.enter(env_config['addresses']['login']) login_page.submit_login(user_config['email'], user_config['password']) dashboard = DashboardPage(driver) dashboard.wait_until_dashboard_displayed() navigation = NavigationPage(driver) navigation.show_transfers() transfers_page = TransfersPage(driver) transfers_page.cancel_all_scheduled_transfers() # create transfer transfer_amount = utils.generate_random_dollar_amount( MAXIMUM_TRANSFER_AMOUNT) transfers_page.prepare_transfer(transfer_amount, transfers_page.SPEND_ACCOUNT, user_config["linked_account"]) transfers_page.schedule_transfer(days_in_future=4) transfers_page.submit_transfer_request() transfers_page.dismiss_transfer_result() # verify scheduled transfer in the database transfer_data = get_latest_db_transfer(web_db_connection, user_config['user_id'], user_config["linked_account"]) assert transfer_data.status == TransferStatus.SCHEDULED audit_data = get_latest_specific_db_audit_trail( web_db_connection, user_config['user_id'], 'ACH transfer') assert audit_data.audit_trail == ( 'ACH transfer from {0} to {1} with id {2} created'.format( transfers_page.SPEND_ACCOUNT, user_config["linked_account"], transfer_data.id)) clear_db_transfers(web_db_connection, user_config['user_id'])
def test_instant_internal_transfers(self, env_config, driver): """ Perform instant transfers between Spend and Save accounts """ user_config = env_config['customer_info_spend_save'] login_page = LoginPage(driver) login_page.enter(env_config['addresses']['login']) login_page.submit_login(user_config['email'], user_config['password']) dashboard = DashboardPage(driver) dashboard.wait_until_dashboard_displayed() initial_spend_balance = dashboard.get_product_balance(Products.SPEND) initial_save_balance = dashboard.get_product_balance(Products.SAVE) navigation = NavigationPage(driver) navigation.show_transfers() transfers_page = TransfersPage(driver) transfers_page.wait_until_transfers_displayed() # create first instant transfer transfer_amount = utils.generate_random_dollar_amount( MAXIMUM_TRANSFER_AMOUNT) transfers_page.prepare_transfer(transfer_amount, transfers_page.SPEND_ACCOUNT, transfers_page.SAVE_ACCOUNT) transfers_page.schedule_transfer(days_in_future=0) transfers_page.submit_transfer_request() preview_details = transfers_page.transfer_request_result() assert preview_details["status"] == TransferStatus.COMPLETED transfers_page.dismiss_transfer_result() # transfer funds back transfers_page.prepare_transfer(transfer_amount, transfers_page.SAVE_ACCOUNT, transfers_page.SPEND_ACCOUNT) transfers_page.schedule_transfer(days_in_future=0) transfers_page.submit_transfer_request() preview_details = transfers_page.transfer_request_result() # BANK-1871 todo: remove when we no longer have to wait an arbitrary time for the app to update its balances confirmation_time = datetime.datetime.now() + datetime.timedelta( seconds=20) assert preview_details["status"] == TransferStatus.COMPLETED transfers_page.dismiss_transfer_result() # Verify the post-transfer amounts navigation.return_to_dashboard() # BANK-1871 todo: remove when we no longer have to wait an arbitrary time for the app to update its balances # Keep leaving & returning to the dashboard looking for updated balances until the confirmation time passes after_spend_balance = dashboard.get_product_balance(Products.SPEND) after_save_balance = dashboard.get_product_balance(Products.SAVE) while (after_spend_balance != initial_spend_balance) or (after_save_balance != initial_save_balance) and \ datetime.datetime.now() < confirmation_time: navigation.show_transfers() navigation.return_to_dashboard() after_spend_balance = dashboard.get_product_balance(Products.SPEND) after_save_balance = dashboard.get_product_balance(Products.SAVE) assert dashboard.get_product_balance( Products.SPEND) == initial_spend_balance assert dashboard.get_product_balance( Products.SAVE) == initial_save_balance
def test_schedule_and_cancel_investment_buy_order(self, env_config, driver): """ Schedule & cancel an investment order from the redwood fund """ user_config = env_config['customer_info_investment'] login_page = LoginPage(driver) login_page.enter(env_config['addresses']['login']) login_page.submit_login(user_config['email'], user_config['password']) dashboard = DashboardPage(driver) dashboard.wait_until_dashboard_displayed() navigation = NavigationPage(driver) navigation.show_redwood_investment_orders() investment_page = InvestmentBuySellPage(driver) action = investment_page.BUY investment_page.wait_until_investment_buy_sell_page_displayed() # TODO: Clear canceled orders # Verify there are no scheduled orders investment_page.navigate_to_scheduled_tab() assert investment_page.scheduled_tab_is_empty(), "There is already a scheduled investment order. " \ "Please delete it and run the test again" # Submit purchase request investment_page.open_buy_sell_modal() bank = investment_page.get_origin_bank_name() purchase_amount = utils.generate_random_dollar_amount( MAXIMUM_PURCHASE_AMOUNT) investment_page.prepare_buy_order(purchase_amount) investment_page.finish_purchase_order() # Confirm and place purchase order place_order_details = investment_page.get_investment_place_order_details( ) purchase_amount_string = str(purchase_amount) assert purchase_amount_string in place_order_details["amount"] assert investment_page.REDWOOD_SYMBOL == place_order_details[ "fund_symbol"] assert investment_page.REDWOOD_FUND_NAME in place_order_details[ "fund_name"] assert purchase_amount_string in place_order_details[ "amount_confirmation"] assert bank in place_order_details["origin_bank"] investment_page.finish_place_order() # Review order confirmation investment_page.wait_until_confirmation_page_is_displayed() confirmation_details = investment_page.get_confirmation_details() assert action in confirmation_details["action"] assert investment_page.REDWOOD_SYMBOL == confirmation_details["symbol"] assert investment_page.REDWOOD_FUND_NAME in confirmation_details[ "description"] assert bank in confirmation_details["payment_method"] assert purchase_amount_string in confirmation_details["amount"] investment_page.return_to_orders_page() # Navigate to scheduled purchases and confirm receipt modal investment_page.wait_until_investment_buy_sell_page_displayed() investment_page.navigate_to_scheduled_tab() line_item_summary_details = investment_page.get_line_item_summary_details( ) assert bank in line_item_summary_details["bank"] assert purchase_amount_string in line_item_summary_details["amount"] investment_page.open_summary_modal() receipt_modal_details = investment_page.get_modal_summary_details() assert bank in receipt_modal_details["bank"] assert purchase_amount_string in receipt_modal_details["amount"] # Cancel order, will direct to a new confirm cancel page investment_page.cancel_scheduled_purchase_order() cancel_confirmation_details = investment_page.get_cancel_confirmation_details( ) assert purchase_amount_string in cancel_confirmation_details["amount"] assert investment_page.REDWOOD_SYMBOL == cancel_confirmation_details[ "fund_symbol"] assert investment_page.REDWOOD_FUND_NAME in cancel_confirmation_details[ "fund_name"] investment_page.finish_cancel_order() investment_page.wait_until_investment_buy_sell_page_displayed()