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()
示例#3
0
    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']
示例#4
0
    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
示例#5
0
 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
示例#6
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
示例#7
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'])
示例#8
0
    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()
示例#9
0
    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'])
示例#10
0
    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
示例#11
0
    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()