예제 #1
0
 def generate_data_for_feedback():
     """
     Генерируем тестовые данные для отзыва
     :return:
     """
     FEEDBACK_VISITOR = {
         'name': 'Test_%s' % common_utils.random_string(params='letters', length=5),
         'email': Reg.get_new_email(databases.db1).lower(),
         'phone': str(random.randrange(70000000000, 70999999999, 1)),
         'message': common_utils.random_string(params='letters', length=200),
     }
     return FEEDBACK_VISITOR
예제 #2
0
    def test_edit_store_description(self):
        """
        Title: Я могу отредактировать описание свеого магазина и сохранить изменения (Существующий пользователь.)
        Description:
        Если у меня уже заполнены данные о магазине, Я могу изменить их и сохранить изменения.
        Любой пользователь увидит новую информацию зайдя на страницу моего магазина.
        Проверить:
        * в БД корректно сохранилась новая информация
        * изменения отображаются на странице своего магазина
        """
        # Устанавливаем новый пароль для пользователя
        default_new_passwd = AccountingMethods.get_default_password()
        hash_res_new = generate_sha256(default_new_passwd, self.user["salt"])
        databases.db1.accounting.update_user_password(self.user["id"], hash_res_new)
        self.go_main(self.driver, phone=self.user["phone"], passwd=default_new_passwd, flag_api=False)
        self.get_page(self.driver, self.path_settings.URL_SHOP_INFO)
        self.assertIsNotNone(self.user["shop_id"], "У user_id='%s' нет идентификатора магазина" % self.user["id"])
        shop_details = databases.db1.accounting.get_shop_details_by_shop_id(self.user["shop_id"])[0]
        self.assertIsNotNone(shop_details, "У user_id='%s' не найдено данных в таблице shop_details" % self.user["id"])
        time.sleep(self.time_sleep)
        store = self.get_store_form(self.driver, user_id=self.user["id"], shop=shop_details)
        self.clear_input_row(self.driver, store["name_input"])
        self.clear_input_row(self.driver, store["address_input"])
        self.clear_input_row(self.driver, store["description_input"])
        info_new = {
            'name': common_utils.random_string(params="letters"),
            'address': common_utils.random_string(length=30),
            'description': common_utils.random_string(length=150)
        }
        store["name_input"].send_keys(info_new["name"])
        store["address_input"].send_keys(info_new["address"])
        store["description_input"].send_keys(info_new["description"])
        self.click_button(store["save_btn"])
        self.get_element_navigate(self.driver, self.check_settings.CHANGE_STORE_INFO_SUCCESS)

        self.driver.refresh()
        HelpProfileSettingsCheckMethods.progress(self.driver)
        time.sleep(self.time_sleep)
        self.get_store_form(self.driver, user_id=self.user["id"], shop=info_new)
        info_user = databases.db1.accounting.get_user_by_account_id(self.user["id"])[0]
        shop_id = str(info_user["shop_id"])
        criteria = "shop_id=%s and name='%s' and address='%s' and description='%s'" % (shop_id, info_new["name"],
                                                                                       info_new["address"],
                                                                                       info_new["description"])
        store_new = databases.db1.accounting.get_shop_details_by_criteria(criteria)[0]
        self.assertIsNotNone(store_new, "Не найдено записей в таблице shop_details по запросу %s" % criteria)
        self.get_store_form(self.driver, user_id=self.user["id"], shop=store_new)

        self.get_page(self.driver, self.path_shop.URL_SHOP % self.user["id"])
        self.get_element_navigate(self.driver, self.check_shop.NAME_STORE % info_new["name"])
        self.get_element_navigate(self.driver, self.check_shop.ADDRESS_STORE % info_new["address"])
        self.get_element_navigate(self.driver, self.check_shop.DESCRIPTION_STORE % info_new["description"])
예제 #3
0
    def test_fill_store_description(self):
        """
        Title: Я могу заполнить описание свеого магазина и сохранить изменения. Новый пользователь.
        Description:
        Если у меня не заполнены данные о магазине, Я могу заполнить их на страниц и сохранить.
        Любой пользователь увидит эту информацию зайдя на страницу моего магазина.
        Проверить:
        * в БД созадалась запись о новом магазине пользователя
        * изменения отображаются на странице своего магазина
        """
        self.go_to_main_page(self.driver)
        user = self.registration(link_db=databases.db1)
        store = {
            'name': None,
            'address': None,
            'description': None
        }
        self.get_page(self.driver, self.path_settings.URL_SHOP_INFO)
        store = self.get_store_form(self.driver, user_id=user["id"], shop=store)
        info_new = {
            'name': common_utils.random_string(params="letters"),
            'address': common_utils.random_string(length=30),
            'description': common_utils.random_string(length=150)
        }
        store["name_input"].send_keys(info_new["name"])
        store["address_input"].send_keys(info_new["address"])
        store["description_input"].send_keys(info_new["description"])
        self.click_button(store["save_btn"])
        self.get_element_navigate(self.driver, self.check_settings.CHANGE_STORE_INFO_SUCCESS)

        self.driver.refresh()
        time.sleep(self.time_sleep)
        HelpProfileSettingsCheckMethods.progress(self.driver)
        self.get_store_form(self.driver, user_id=user["id"], shop=info_new)
        info_user = databases.db1.accounting.get_user_by_account_id(user["id"])[0]
        shop_id = str(info_user["shop_id"])
        criteria = "shop_id=%s and name='%s' and address='%s' and description='%s'" % (shop_id, info_new["name"],
                                                                                       info_new["address"],
                                                                                       info_new["description"])
        store_new = databases.db1.accounting.get_shop_details_by_criteria(criteria)[0]
        self.assertIsNotNone(store_new, "Не найдено записей в таблице shop_details по запросу %s" % criteria)
        self.get_store_form(self.driver, user_id=user["id"], shop=store_new)

        self.get_page(self.driver, self.path_shop.URL_SHOP % user["id"])
        time.sleep(self.time_sleep)
        self.get_element_navigate(self.driver, self.check_shop.NAME_STORE % info_new["name"])
        self.get_element_navigate(self.driver, self.check_shop.ADDRESS_STORE % info_new["address"])
        self.get_element_navigate(self.driver, self.check_shop.DESCRIPTION_STORE % info_new["description"])
예제 #4
0
    def test_registration_by_email_incorrect_already_in_db(self):
        """
        Title: Я не могу зарегистрироваться по e-mail, если на этот e-mail уже регистрировались ранее.
        Description:
        * Отображается сообщение "Пользователь с указанным email-адресом уже зарегистрирован"
        """
        service_log.run(self)
        # Регистрация
        self.click_reg_and_auth(self.driver)
        reg_email = self.get_reg_email_form(self.driver)

        name = common_utils.random_string()
        stamp = str(time.time())
        email = '*****@*****.**' % stamp
        password = AccountingMethods.get_default_password(5)

        crt = "id=%s" % AccountingMethods.get_default_user_id('seller')
        user = databases.db1.accounting.get_user_by_criteria_only(criteria=crt)[0]
        databases.db1.accounting.update_account_details_by_criteria(user["id"], "email='%s'" % email.lower())

        reg_email["name_input"].send_keys(name)
        reg_email["email_input"].send_keys(email)
        reg_email["password_input"].send_keys(password)
        self.click_button(reg_email["reg_btn"])
        self.get_element_navigate(self.driver, self.check_reg.E_ALREADY_REG_EMAIL)
        self.go_to_main_page(self.driver)
        self.check_header_widget_visitor(self.driver)
예제 #5
0
 def generate_test_data_edit(self):
     EDIT_USER_DATA = {
         'name': 'Test_%s' % common_utils.random_string(params='letters', length=10),
         'gender': "MALE",
         'passwd': str(random.randrange(10000, 99999, 1)),
     }
     return EDIT_USER_DATA
예제 #6
0
    def test_registration_by_email_incorrect_user_disabled(self):
        """
        Title: Я не могу зарегистрироваться по e-mail, если мой пользователь ранее был заблокирован (DISABLED)
        Description: Отображается соответствующее сообщение
        """
        service_log.run(self)
        # Регистрация
        self.click_reg_and_auth(self.driver)
        reg_email = self.get_reg_email_form(self.driver)

        name = common_utils.random_string()
        stamp = str(time.time())
        email = '*****@*****.**' % stamp
        password = AccountingMethods.get_default_password(5)

        user = databases.db1.accounting.get_user_by_criteria(account_status="DISABLED", criteria="id is not NULL")[0]
        databases.db1.accounting.update_account_details_by_criteria(user["id"], "email='%s'" % email.lower())

        reg_email["name_input"].send_keys(name)
        reg_email["email_input"].send_keys(email)
        reg_email["password_input"].send_keys(password)
        self.click_button(reg_email["reg_btn"])
        self.get_element_navigate(self.driver, self.check_reg.E_ALREADY_REG_EMAIL)
        self.go_to_main_page(self.driver)
        self.check_header_widget_visitor(self.driver)
예제 #7
0
    def test_edit_user_profile(self):
        """
        Title: Я могу отредактировать Имя и Пол в своем профиле. На всех моих карточках будет новое Имя. Существующий пользователь.
        """
        # Устанавливаем новый пароль для пользователя
        default_new_passwd = AccountingMethods.get_default_password()
        hash_res_new = generate_sha256(default_new_passwd, self.user["salt"])
        databases.db1.accounting.update_user_password(self.user["id"], hash_res_new)
        self.go_to_main_page(self.driver)
        self.go_main(self.driver, phone=self.user["phone"], passwd=default_new_passwd, flag_auth=True, flag_api=False)

        self.get_page(self.driver, self.path_settings.PATH_PROFILE_SETTINGS)
        profile = self.get_user_profile_form(self.driver, self.user)
        gender = self.get_gender_user(self.driver, self.user["gender"])
        self.clear_input_row(self.driver, profile["name_input"])
        new_name = common_utils.random_string()
        profile["name_input"].send_keys(new_name)
        gender_ui = self.set_gender(gender, self.user["gender"])
        self.click_button(profile["save_btn"])
        self.get_element_navigate(self.driver, self.check_main.WU_NAME % new_name)
        criteria = "gender='%s' and display_name='%s' and id=%s" % (gender_ui, new_name, self.user["id"])
        user_updated = databases.db1.accounting.get_user_by_criteria_only(criteria)[0]
        self.driver.refresh()
        time.sleep(2)
        HelpProfileSettingsCheckMethods.progress(self.driver)
        self.get_user_profile_form(self.driver, user_updated)
        self.get_gender_user(self.driver, user_updated["gender"])
        self.check_header_widget_seller_all(self.driver, user_updated)
예제 #8
0
    def test_registration_by_email(self):
        """
        Title: Регистрация пользователя.
        """
        service_log.run(self)
        # Регистрация
        url_main = self.driver.current_url.encode('utf-8')
        self.click_reg_and_auth(self.driver)
        reg_email = self.get_reg_email_form(self.driver)
        name = u'Тест %s' % common_utils.random_string(length=4)

        email = '*****@*****.**' % str(time.time())
        password = AccountingMethods.get_default_password(5)

        reg_email["name_input"].send_keys(name)
        reg_email["email_input"].send_keys(email)
        reg_email["password_input"].send_keys(password)
        self.element_click(self.driver, reg_email["reg_btn"], change_page_url=False)
        start_work = self.get_reg_email_success(self.driver, email.lower())
        self.element_click(self.driver, start_work, change_page_url=True)
        work = time.time()
        messages = None
        while time.time() - work < self.email_timeout:
            try:
                messages = self.get_email(to_email=email)
                self.assertNotEqual(len(messages), 0, "Не получено сообщение")
                break
            except Exception:
                pass
        self.assertIsNotNone(messages, "Не получено сообщение")
        message = messages[0]
        mail_from = message['From']
        mail_body = message['Body']
        valid = mail_body.split(self.URL_VALIDATE_PATH)
        valid_hash = valid[1][:64]
        validate_path = self.URL_VALIDATE_EMAIL % valid_hash
        err_msg_1 = "Полученный урл активации емайла не найден в теле полученного письма"
        self.assertIn('*****@*****.**', mail_from, "Почта отправителя: %s" % mail_from)
        self.assertIn(validate_path, mail_body, err_msg_1)
        # Переход по ссылке валидации емайла
        self.get_page(self.driver, validate_path)
        url_web = self.driver.current_url.encode('utf-8')
        url_need = self.ENV_BASE_URL + self.path_reg.URL_VALIDATED_EMAIL
        err_msg = "Урл страницы успешной валидации емайла: %s не соответствует целевому урлу: %s"
        self.assertEqual(url_web, url_need, err_msg % (url_web, url_need))
        # начать работу
        start_work = self.get_validated_email_success(self.driver)
        self.element_click(self.driver, start_work)

        # Проверка, что после нажатия на кнопку Начать работу произошел переход обратно на главную
        url_web = self.driver.current_url.encode('utf-8')
        err_msg = "Не произошел переход на главную страницу %s, пользователь остался на странице %s"
        self.assertEqual(url_web, url_main, err_msg % (url_main, url_web))

        # Проверка виджета профиля
        self.check_menu_profile_widget_total(self.driver, name)
예제 #9
0
 def generate_test_data(self):
     CREATE_USER_DATA = {
         'name': 'Test_666_%s' % common_utils.random_string(params='letters', length=5),
         'gender': "MALE",
         'email': Reg.get_new_email(databases.db1).lower(),
         'city': u'Москва',
         'phone': str(random.randrange(70000000000, 70999999999, 1)),
         'passwd': '123',
     }
     return CREATE_USER_DATA
예제 #10
0
    def test_smoke_user_settings(self):
        """
        Title: Тест сценарий изменений настроек пользователя.
        Description:
            1) Авторизоваться пользователем
            2) Перейти на страницу "Настройки"
                - Проверить, что отображаемые данные  = тому что в базе (включая аватар)
                - Проверить, что Имя и Аватар отображаемом в виджете "Профиль пользователя" = тому что в базе
            3) Изменить Имя пользователя и пол
                - Проверить что изменения отображаются и в базе и в интерфейсе
            4) Изменить аватар (старый удалить)
                - Проверить, что отображается заглушка фото (в настройках и в профиле продавца)
            5) Изменить аватар (добавить новый)
                - Проверить, что отображается новая фото (в настройках и в профиле продавца)
        """

        # 1) Авторизоваться Пользователем через e-mail и проверить успешность операции.
        self.go_to_main_page(self.driver)
        self.click_reg_and_auth(self.driver)
        self.click_tab_login(self.driver)
        auth_form = self.get_auth_email_form(self.driver)
        auth_form["email_input"].send_keys(self.user['email'])
        auth_form["password_input"].send_keys(self.default_passwd)
        self.click_button(auth_form["login_btn"])

        # Перейти на страницу "Настройки"
        self.get_page(self.driver, self.path_settings.PATH_PROFILE_SETTINGS)
        profile = self.get_user_profile_form(self.driver, self.user)
        gender = self.get_gender_user2(self.driver, self.user["gender"])

        # Изменить Имя пользователя и пол
        self.clear_input_row(self.driver, profile["name_input"])
        new_name = common_utils.random_string()
        profile["name_input"].send_keys(new_name)
        gender_ui = self.set_gender(gender, self.user["gender"])
        self.click_button(profile["save_btn"])

        # Проверяем, что изменения вступили в силу, как в БД, так и в интерфейсе
        criteria = "gender='%s' and display_name='%s' and id=%s" % (gender_ui, new_name, self.user["id"])
        user_updated = databases.db1.accounting.get_user_by_criteria_only(criteria)[0]
        self.driver.refresh()
        Navigate.progress(self.driver)
        self.get_user_profile_form(self.driver, user_updated)
        self.get_gender_user(self.driver, user_updated["gender"])

        # Изменить аватар (старый удалить)
        btn_avatar = self.get_delete_avatar_button(self.driver)  # TODO: У пользователя уже должен быть аватар!
        btn_avatar.click()

        # Изменить аватар (добавить новый)
        img_path = self.IMG_AVATAR[0]
        add_img_btn = self.get_element_navigate(self.driver, self.click_my_goods.ADD_AVATAR)
        add_img_btn.click()
        self.add_photo(img_path)
        self.assertIsNotNone(self.get_delete_avatar_button(self.driver))
예제 #11
0
 def test_phone_validate_length(self):
     """
     Title: Поле поиска контактов по номеру телефона имеет маску для ввода номера телефона,
     не принимает больше чем 10 чисел (без +7)
     """
     self.element_click(self.driver, self.click_user_contact.BTN_NEW_CONTACT, change_page_url=False)
     inp = self.get_element_navigate(self.driver, self.input_user_contact.PHONE)
     input_str = self.user["phone"][1:] + common_utils.random_string(params="digits", length=3)
     inp.send_keys(input_str)
     check_str = self.user["phone"][1:]
     self.check_input_string(self.driver, check_str)
예제 #12
0
    def test_restore_by_email_link_to_restore(self):
        """
        Title: Ссылка в письме на форму "Установите новый пароль" одноразовая.
        Description:
        * Если попытаться пройти по ней во второй раз, отображается сообщение "Истек срок действия активационной ссылки,
         повторите активацию еще раз"
        """
        service_log.run(self)
        self.email = self.get_new_email(databases.db1)
        databases.db1.accounting.update_account_details_by_criteria(self.default_user_id, "email='%s'" % self.email.lower())

        url_main = self.driver.current_url.encode('utf-8')
        self.get_page(self.driver, self.path_restore.URL_RESTORE_EMAIL)

        # Ввод емайл для восстановления пароля и клик Выслать пароль
        restore_form = self.get_restore_email_form(self.driver)
        restore_form["email_input"].send_keys(self.email)
        self.element_click(self.driver, restore_form["restore_btn"], change_page_url=False)
        time.sleep(self.time_sleep)
        # Проверка, что в БД появилась запись о письме и статус письма
        # Проверка что сформирован хеш для подтеврждения емайл при регистрации
        criteria = "auth_type='PASSWORD_CHANGE' and account_details_id=%s" % self.user["id"]
        auth_user = databases.db1.accounting.get_auths_criteria(criteria)[0]
        err_msg = "Из БД не получено записей о формировании хеша восстановления пароля по емайлу для user_id=%s"
        self.assertIsNotNone(auth_user, err_msg % self.user["id"])
        # Проверка статуса отправленного сообщения
        email_statuses = databases.db6.accounting.get_email_statuses_by_email(self.email.lower())[0]
        #self.assertEqual(email_statuses["status_id"], 2, "Сообщение не доставлено на mail=%s" % self.email)
        # Проверка отправленного сообщения и ссылки для завершения регистрации
        hash_value = auth_user["code_value"]
        emails = databases.db6.accounting.get_emails_by_hash(hash_value)[0]
        err_msg_1 = "Из БД не получено писем о восстановлении пароля с хешом=%s, для user_id=%s"
        self.assertIsNotNone(emails, err_msg_1 % (hash_value, self.user["id"]))
        restore_path = self.URL_RESTORE_EMAIL % hash_value
        url_validate = self.ENV_BASE_URL + restore_path

        # Переход по ссылке валидации емайла
        self.get_page(self.driver, restore_path)
        url_web = self.driver.current_url.encode('utf-8')
        err_msg = "Урл страницы ввода нового пароля из письма: %s не соответствует целевому урлу: %s"
        self.assertEqual(url_web, url_validate, err_msg % (url_web, url_validate))

        self.get_restore_email_input_pass_form(self.driver, self.email)
        # Проверка формы ввода нового пароля и ввод
        input_pass_form = self.get_restore_email_input_pass_form(self.driver, self.email)
        new_password = common_utils.random_string()
        input_pass_form["password_input"].send_keys(new_password)
        input_pass_form["password_repeat_input"].send_keys(new_password)
        self.element_click(self.driver, input_pass_form["set_pass_btn"], change_page_url=False)
        self.driver.delete_all_cookies()
        # Повторный переход по ссылке валидации емайла
        self.get_page(self.driver, restore_path)
        self.element_is_present(self.driver, self.check_restore.ERR_VALIDATE_URL)
예제 #13
0
 def test_select_all_delivery(self):
     """
     Title: Я могу включить все доступные варианты доставки. Любой посетитель увидит их на карточке любого моего товара.
     Description:
     * проверить, сохранение изменений в ui
     * проверить сохранение данных в Бд
     * проверить отображение всех включенных вариантов доставки на карточке любого своего товара.
     """
     text_tk = "SDEK, B2C, RZD, %s" % common_utils.random_string()
     text_courier = "Moscow, %s" % common_utils.random_string()
     text_pickup = "Moscow, %s" % common_utils.random_string()
     self.get_page(self.driver, self.path_settings.URL_DELIVERY_INFO)
     delivery_db = databases.db1.accounting.get_delivery_details_by_user_id(self.user["id"])
     err_msg_1 = "У пользователя есть активные варианты доставки: %s. Метод setUp отработал некорректно"
     self.assertEqual(len(delivery_db), 0, err_msg_1 % delivery_db)
     delivery_info = self.get_status_delivery_options(delivery_db)
     time.sleep(self.time_sleep)
     delivery = self.get_delivery_form(self.driver, delivery_info)
     self.change_all_delivery_options(self.driver, delivery_info, drop=False)
     delivery["tk_input"].send_keys(text_tk)
     delivery["courier_input"].send_keys(text_courier)
     delivery["pickup_input"].send_keys(text_pickup)
     self.click_button(delivery["save_btn"])
     self.element_is_present(self.driver, self.check_settings.CHANGE_DELIVERY_SUCCESS)
     delivery_db_updated = databases.db1.accounting.get_delivery_details_by_user_id(self.user["id"])
     err_msg = "В БД добавлено только %s записей, вместо 5"
     self.assertEqual(len(delivery_db_updated), 5, err_msg % len(delivery_db_updated))
     self.driver.refresh()
     HelpProfileSettingsCheckMethods.progress(self.driver)
     delivery_info_updated = self.get_status_delivery_options(delivery_db_updated)
     time.sleep(self.time_sleep)
     self.get_delivery_form(self.driver, delivery_info_updated)
     # переход на страницу магазина и в товар
     self.get_page(self.driver, self.path_shop.URL_SHOP % self.user["id"])
     obj_good = self.get_element_navigate(self.driver, self.click_shop.GOOD % 1)
     good_name = obj_good.text.encode('utf-8')
     self.click_button(obj_good)
     self.get_element_navigate(self.driver, self.check_good.NAME_GOOD % good_name)
     # Проверка блока Варианты доставки на странице товара
     self.check_all_delivery_options_in_good(self.driver, text_tk, text_courier, text_pickup)
예제 #14
0
def create_request(method, params, ensure_ascii=False, dump=True):
    """ Создаём окончательный запрос в формате JSON.
    :param method: type(str) - наименование метода к которому посылается запрос
    :param params: type(dict) - параметры json-запроса
    """
    params = {"jsonrpc": "2.0",
              "method": method,
              "params": params,
              "id": common_utils.random_string(params="digits", length=10)}
    if dump is True:
        return json.dumps(params, ensure_ascii=ensure_ascii)
    else:
        return params
예제 #15
0
 def setUp(cls):
     # Подготовка работы с selenium
     cls.driver = HelpLifeCycleCheckMethods.get_driver()
     cls.go_to_main_page(cls.driver)
     # Подготовка тестовых данных
     cls.name = common_utils.random_string()
     stamp = str(time.time())
     cls.email = '*****@*****.**' % stamp
     cls.password = AccountingMethods.get_default_password(5)
     # Переход на страницу регистрации по емайл
     cls.click_reg_and_auth(cls.driver)
     cls.reg_email = cls.get_reg_email_form(cls.driver)
     service_log.preparing_env(cls)
예제 #16
0
    def test_as_buyer_to_chat(self, test_good=HelpNavigateCheckMethods.SHP_TO_GOOD):
        """
        Title: Написать текст от покупателя продавцу по поводу его активного товара и перейти в чат с ним.
        Description: Я, как Покупатель, могу написать продавцу сообщение по Активному товару,
        нажав на "Связаться с продавцом" и ввести свой текст. После этого я могу перейти в чат с продавцом (...)
        """
        databases.db1.accounting.update_account_details_by_criteria(self.default_user_id, "locale='ru'")
        self.user = databases.db1.accounting.get_user_by_account_id(self.default_user_id)[0]
        self.shop = databases.db1.accounting.get_shop_details_by_shop_id(self.user["shop_id"])[0]

        AccountingMethods.save_user_password(user_id=self.user["id"], hash_passwd=self.user["code_value"])

        # Устанавливаем новый пароль для пользователя
        self.default_new_passwd = AccountingMethods.get_default_password()
        hash_res_new = generate_sha256(self.default_new_passwd, self.user["salt"])
        databases.db1.accounting.update_user_password(self.user["id"], hash_res_new)

        self.go_main(self.driver, phone=self.user["phone"], passwd=self.default_new_passwd, flag_auth=True)

        self.get_page(self.driver, self.path_shop.URL_SHOP % self.default_seller_id)
        self.check_navigate_in_good_page(self.driver, test_good, random.randrange(1, 10, 1))
        self.data_good, good_str = self.get_good_data(self.driver)
        btn_to_call = self.get_element_navigate(self.driver, self.click_good.BTN_CALL_SELLER)
        self.click_button(btn_to_call)
        # ищем товар с нужным id
        obj_good = self.get_element_navigate(self.driver, self.click_good.GOOD_BY_ID_POPUP % self.data_good['good_id'])
        self.check_express_card_good(obj_good, good_str)
        # проверяем фото товара
        self.get_element_navigate(self.driver, (self.click_good.GOOD_BY_ID_POPUP % self.data_good['good_id']) +
                                  (self.path_category.PATH_IMG % self.data_good['image']))
        # Проверка текста в попапе
        popup_text = self.get_element_navigate(self.driver, self.check_good.POPUP_MSG_FROM_GOOD % '')
        Settings.clear_input_row(self.driver, popup_text)
        text = common_utils.random_string(length=50)
        popup_text.send_keys(text)
        obj_send = self.get_element_navigate(self.driver, self.click_good.BTN_SEND)
        self.click_button(obj_send)
        # После отправки сообщения отображается окно "Сообщение отправлено"
        btn_to_good, btn_to_chat = self.get_sent_success_btn(self.driver)
        self.click_button(btn_to_chat)
        # После нажатия на "Перейти в чат" я перехожу на страницу чата с данным продавцом
        self.assertEqual(self.ENV_BASE_URL + self.path_chat.URL_CHAT_WITH_USER % self.default_seller_id,
                         self.driver.current_url)
        # В чате с продавцом есть отправленное от меня сообщение и карточка товара. Проверить соответствие текста и товара.
        last_msg = self.get_last_msg(self.driver)
        self.assertIn(good_str, last_msg, "Экспресс карточка='%s' не совпадает с последним сообщением='%s'" %
                      (good_str, last_msg))
        str_msg_to_good = self.TEXT_MSG_TO_GOOD.replace(' ', '')
        self.assertIn(text, last_msg, "Свое сообщение о товаре='%s' не совпадает с последним "
                                      "сообщением='%s'" % (str_msg_to_good, last_msg))
예제 #17
0
    def test_only_users_found(self):
        """
        Title: Если по запросу поиска не найдено товаров, но найдены пользователи - то отображается соответствующая заглушка.
        Description:
        * Текст заглушки "По запросу %запрос% товаров не найдено. Зато мы нашли [n] пользователей по этому запросу"
        * Счетчик кол-ва товаров равен нулю.
        * Я могу перейти на вкладку "Пользователи" по кнопке "Смотреть пользователей"
        """
        service_log.run(self)
        # Берем тестового продавца на магазине которого будут проводиться проверки
        test_seller_id = AccountingMethods.get_default_user_id(role='seller')
        user = databases.db1.accounting.get_user_by_account_id(test_seller_id)[0]

        # Подготавливаем тестовое мия
        test_name = common_utils.random_string(length=20)

        AccountingMethods.save_user_password(user_id=user["id"], hash_passwd=user["code_value"], salt=user["salt"])

        # Устанавливаем новый пароль для пользователя
        default_new_passwd = AccountingMethods.get_default_password()
        hash_res_new = generate_sha256(default_new_passwd, user["salt"])
        databases.db1.accounting.update_user_password(user["id"], hash_res_new)

        self.go_main(self.driver, phone=user["phone"], passwd=default_new_passwd, flag_auth=True)

        # Переход на настройки пользователя и изменение имени на тестовое
        self.get_page(self.driver, self.path_settings.PATH_PROFILE_SETTINGS)

        # Получаем объекты input оформ
        display_name = self.get_obj_input(self.driver, user["display_name"],
                                          path_block=self.path_settings.PATH_COMMON_INFO,
                                          path_input=self.input_settings.FORM_DISPLAY_NAME)

        self.clear_input_row(self.driver, display_name)  # Очистка введенных данных из input форм
        display_name.send_keys(test_name)  # Ввод тестовых данных

        # Получаем объект кнопки Сохранить и нажимаем Сохранить
        common_info_submit = self.get_submit_button(self.driver, self.path_settings.PATH_COMMON_INFO)
        self.element_click(self.driver, common_info_submit, change_page_url=False)
        self.go_to_main_page(self.driver)
        u_user = databases.db1.accounting.get_user_by_account_id(test_seller_id)[0]
        s_form = self.search_form(self.driver)
        self.input_str(s_form["input"], string=test_name)
        self.element_click(self.driver, s_form["btn"], change_page_url=True)
        l_menu = self.left_menu(self.driver)
        self.assertEqual(int(l_menu['count_goods']), 0, "Количество товаров не 0")
        self.assertEqual(int(l_menu['count_users']), 1, "Количество пользователей не 1")
        only_users_form = self.found_only_users(self.driver, test_name)
        self.element_click(self.driver, only_users_form['btn_to_users'])
        self.search_by_user(self.driver, u_user, l_menu['count_users'])
예제 #18
0
    def test_as_buyer_cancel_msg(self, test_good=HelpNavigateCheckMethods.SHP_TO_GOOD):
        """
        Title: Я, как Покупатель, могу не Связываться с продавцом, выбрав Отменить, на форме ввода текста сообщения
        """
        databases.db1.accounting.update_account_details_by_criteria(self.default_user_id, "locale='ru'")
        self.user = databases.db1.accounting.get_user_by_account_id(self.default_user_id)[0]
        self.shop = databases.db1.accounting.get_shop_details_by_shop_id(self.user["shop_id"])[0]

        AccountingMethods.save_user_password(user_id=self.user["id"], hash_passwd=self.user["code_value"])

        # Устанавливаем новый пароль для пользователя
        self.default_new_passwd = AccountingMethods.get_default_password()
        hash_res_new = generate_sha256(self.default_new_passwd, self.user["salt"])
        databases.db1.accounting.update_user_password(self.user["id"], hash_res_new)

        self.go_main(self.driver, phone=self.user["phone"], passwd=self.default_new_passwd, flag_auth=True)

        self.get_page(self.driver, self.path_shop.URL_SHOP % self.default_seller_id)
        self.check_navigate_in_good_page(self.driver, test_good, 1)
        self.data_good, good_str = self.get_good_data(self.driver)
        btn_to_call = self.get_element_navigate(self.driver, self.click_good.BTN_CALL_SELLER)
        self.click_button(btn_to_call)

        # ищем товар с нужным id
        obj_good = self.get_element_navigate(self.driver, self.click_good.GOOD_BY_ID_POPUP % self.data_good['good_id'])
        self.check_express_card_good(obj_good, good_str)

        # проверяем фото товара
        good = (self.click_good.GOOD_BY_ID_POPUP % self.data_good['good_id'])
        img = (self.path_category.PATH_IMG % self.data_good['image'])
        self.get_element_navigate(self.driver, good + img)

        # Проверка текста в попапе
        popup_text = self.element_is_present(self.driver, self.check_good.POPUP_MSG_FROM_GOOD % '')
        Settings.clear_input_row(self.driver, popup_text)
        text = common_utils.random_string(length=50)
        popup_text.send_keys(text)
        obj_cancel = self.element_is_present(self.driver, self.click_good.BTN_CANCEL_CALL)
        self.click_button(obj_cancel)

        #После нажатия на "Отмена" я остаюсь на карточке этого же товара
        data_url = self.driver.current_url[self.driver.current_url.rfind('/') + 1:].encode('utf-8')
        self.assertIn(self.data_good["good_id"], data_url)

        # В чате с продавцом есть отправленное от меня сообщение и карточка товара. Проверить соответствие.
        self.get_page(self.driver, self.path_chat.URL_CHAT_WITH_USER % self.default_seller_id)
        last_msg = self.get_last_msg(self.driver)
        msg = "Свое сообщение о товаре='%s' совпадает с последним сообщением='%s'" % (text, last_msg)
        self.assertNotIn(text, last_msg, msg)
예제 #19
0
 def test_select_all_payments(self):
     """
     Title: Я могу включить все доступные варианты оплаты. Любой посетитель увидит их на карточке любого моего товара.
     Description:
     * проверить, сохранение изменений в ui
     * проверить сохранение данных в Бд
     * проверить отображение всех включенных вариантов оплаты на карточке любого своего товара.
     """
     text_card = "Visa, Master Card, %s" % common_utils.random_string()
     text_e_money = "Webmoney, Bitcoint, %s" % common_utils.random_string()
     self.get_page(self.driver, self.path_settings.URL_PAYMENT_INFO)
     payment_db = databases.db1.accounting.get_payment_details_by_user_id(self.user["id"])
     err_msg_1 = "У пользователя есть активные варианты оплаты: %s. Метод setUp отработал некорректно"
     self.assertEqual(len(payment_db), 0, err_msg_1 % payment_db)
     payment_info = self.get_status_payment_options(payment_db)
     payments = self.get_payment_form(self.driver, payment_info)
     self.change_all_payment_options(self.driver, payment_info, drop=False)
     payments["card_input"].send_keys(text_card)
     payments["e_money_input"].send_keys(text_e_money)
     self.click_button(payments["save_btn"])
     self.element_is_present(self.driver, self.check_settings.CHANGE_PAYMENTS_SUCCESS)
     payment_db_updated = databases.db1.accounting.get_payment_details_by_user_id(self.user["id"])
     err_msg = "В БД добавлено только %s записей, вместо 5"
     self.assertEqual(len(payment_db_updated), 5, err_msg % len(payment_db_updated))
     self.driver.refresh()
     HelpProfileSettingsCheckMethods.progress(self.driver)
     payment_info_updated = self.get_status_payment_options(payment_db_updated)
     self.get_payment_form(self.driver, payment_info_updated)
     # переход на страницу магазина и в товар
     self.get_page(self.driver, self.path_shop.URL_SHOP % self.user["id"])
     obj_good = self.get_element_navigate(self.driver, self.click_shop.GOOD % 1)
     good_name = obj_good.text.encode('utf-8')
     self.click_button(obj_good)
     self.get_element_navigate(self.driver, self.check_good.NAME_GOOD % good_name)
     # Проверка блока Варианты оплаты на странице товара
     self.check_all_payment_options_in_good(self.driver, text_card, text_e_money)
예제 #20
0
def create_request(method, params, ensure_ascii=False, dump=True):
    """ Создаём окончательный запрос в формате JSON.
    :param method: type(str) - наименование метода к которому посылается запрос
    :param params: type(dict) - параметры json-запроса
    """
    params = {
        "jsonrpc": "2.0",
        "method": method,
        "params": params,
        "id": common_utils.random_string(params="digits", length=10)
    }
    if dump is True:
        return json.dumps(params, ensure_ascii=ensure_ascii)
    else:
        return params
예제 #21
0
 def test_authorization_by_email_incorrect_password(self):
     """
     Title: Я не могу войти в систему, введя корректный e-mail и неверный пароль.
     Description:
     * Отображается соответствующее сообщение
     """
     service_log.run(self)
     self.click_reg_and_auth(self.driver)
     self.click_tab_login(self.driver)
     auth_form = self.get_auth_email_form(self.driver)
     auth_form["email_input"].send_keys(self.email)
     auth_form["password_input"].send_keys(self.default_new_passwd + common_utils.random_string())
     self.click_button(auth_form["login_btn"])
     self.get_element_navigate(self.driver, self.check_auth.ERR_CHECK_EMAIL_AND_PASS)
     self.go_to_main_page(self.driver)
     self.check_header_widget_visitor(self.driver)
예제 #22
0
    def test_only_goods_found(self):
        """
        Title: Если по запросу поиска не найдено пользователей, но найдены товары- то отображается соответствующая заглушка (...)
        Description:
        * Текст заглушки "По запросу %запрос% пользователей не найдено. Зато мы нашли [n] товаров по этому запросу"
        * Счетчик кол-ва пользователей равен нулю.
        * Я могу перейти на вкладку "Товары" по кнопке "Смотреть товары"
        """
        service_log.run(self)
        service_log.run(self)
        # Берем тестового продавца на магазине которого будут проводиться проверки
        test_seller_id = AccountingMethods.get_default_user_id(role='seller')
        user = databases.db1.accounting.get_user_by_account_id(test_seller_id)[0]

        # Подготавливаем тестовое мия
        test_name = common_utils.random_string(length=20)

        AccountingMethods.save_user_password(user_id=user["id"], hash_passwd=user["code_value"], salt=user["salt"])

        # Устанавливаем новый пароль для пользователя
        default_new_passwd = AccountingMethods.get_default_password()
        hash_res_new = generate_sha256(default_new_passwd, user["salt"])
        databases.db1.accounting.update_user_password(user["id"], hash_res_new)

        self.go_main(self.driver, phone=user["phone"], passwd=default_new_passwd, flag_auth=True)
        good = databases.db1.warehouse.get_wares_by_criteria(criteria="shop_id=%s and stock_state_id=2" % user['id'])[0]
        # Переход на едактирование товара и изменение названия на тестовое
        self.get_page(self.driver, self.path_my_goods.URL_EDIT_GOOD % good['ware_id'])
        # Получаем объекты input оформ
        display_name = self.element_is_present(self.driver, self.input_my_goods.ADD_GOOD_NAME)
        self.clear_input_row(self.driver, display_name)  # Очистка введенных данных из input форм
        display_name.send_keys(test_name)  # Ввод тестовых данных

        # Получаем объект кнопки Сохранить и нажимаем Сохранить
        self.element_click(self.driver, self.click_my_goods.ADD_GOOD_BTN_PUBLISH, change_page_url=True)
        self.go_to_main_page(self.driver)
        u_good = databases.db1.warehouse.get_wares_by_criteria(criteria="ware_id='%s'" % good['ware_id'])[0]
        s_form = self.search_form(self.driver)
        self.input_str(s_form["input"], string=test_name)
        self.element_click(self.driver, s_form["btn"], change_page_url=True)
        l_menu = self.left_menu(self.driver)
        self.assertEqual(int(l_menu['count_goods']), 1, "Количество товаров не 1")
        self.assertEqual(int(l_menu['count_users']), 0, "Количество пользователей не 0")
        self.element_click(self.driver, l_menu['users'])
        only_users_form = self.found_only_goods(self.driver, test_name)
        self.element_click(self.driver, only_users_form['btn_to_goods'])
        self.search_by_good(self.driver, u_good, l_menu['count_goods'])
예제 #23
0
 def test_on_request_none_found(self):
     """
     Title: Если по запросу поиска не найдено ни товаров, ни пользователей - то отображается соответствующая заглушка.
     Description:
     * Текст заглушки "По запросу %запрос% пользователей и товаров не найдено Пожалуйста, проверьте правильность написания или воспользуйтесь каталогом"
     * Счетчики кол-ва товаров и кол-ва пользователей по нулям
     * Я могу перейти в каталог по кнопке "Перейти в каталог"
     """
     service_log.run(self)
     s_form = self.search_form(self.driver)
     test_str = common_utils.random_string(length=20)
     self.input_str(s_form["input"], string=test_str)
     self.element_click(self.driver, s_form["btn"], change_page_url=True)
     l_menu = self.left_menu(self.driver)
     self.assertEqual(int(l_menu['count_goods']), 0, "Количество товаров не 0")
     self.assertEqual(int(l_menu['count_users']), 0, "Количество пользователей не 0")
     none_form = self.none_found(self.driver, test_str)
     self.element_click(self.driver, none_form['btn_catalog'], change_page_url=True)
예제 #24
0
 def test_seller_card_for_visitor(self):
     """
     Title: Проверка карточки продавца на странице поиска для посетителя
     """
     self.go_main(self.driver, phone=self.user["phone"], passwd=self.default_new_password, flag_auth=True)
     self.get_page(self.driver, self.path_settings.PATH_PROFILE_SETTINGS)
     profile = Settings.get_user_profile_form(self.driver, self.user)
     Settings.clear_input_row(self.driver, profile["name_input"])
     new_name = common_utils.random_string()
     profile["name_input"].send_keys(new_name)
     self.element_click(self.driver, profile["save_btn"], change_page_url=False)
     time.sleep(self.timeout)
     self.driver.delete_all_cookies()
     self.go_to_main_page(self.driver)
     u_user = databases.db1.accounting.get_user_by_criteria(account_status='ENABLED',
                                                          criteria='id=%s' % self.default_test_id)[0]
     self.search_user(self.driver, u_user['display_name'])
     self.check_user_card_in_search_page(self.driver, u_user)
예제 #25
0
 def test_fill_user_profile(self):
     """
     Title: Я могу отредактировать Имя и Пол в своем профиле. На всех моих карточках будет новое Имя. Новый пользователь.
     """
     self.go_to_main_page(self.driver)
     user = self.registration(link_db=databases.db1)
     self.get_page(self.driver, self.path_settings.PATH_PROFILE_SETTINGS)
     profile = self.get_user_profile_form(self.driver, user)
     gender = self.get_gender_user(self.driver, user["gender"])
     self.clear_input_row(self.driver, profile["name_input"])
     new_name = common_utils.random_string()
     profile["name_input"].send_keys(new_name)
     gender_ui = self.set_gender(gender, user["gender"])
     self.click_button(profile["save_btn"])
     self.get_element_navigate(self.driver, self.check_main.WU_NAME % new_name)
     criteria = "gender='%s' and display_name='%s' and id=%s" % (gender_ui, new_name, user["id"])
     user_updated = databases.db1.accounting.get_user_by_criteria_only(criteria)[0]
     self.driver.refresh()
     time.sleep(2)
     HelpProfileSettingsCheckMethods.progress(self.driver)
     self.get_user_profile_form(self.driver, user_updated)
     self.get_gender_user(self.driver, user_updated["gender"])
     self.check_header_widget_seller_all(self.driver, user_updated)
예제 #26
0
    def test_change_password(self):
        """
        Title: Я могу сменить свой пароль, на новый. После этого я не смогу войти под старым, но смогу под новым
        """
        # Устанавливаем новый пароль для пользователя
        default_new_passwd = AccountingMethods.get_default_password()
        hash_res_new = generate_sha256(default_new_passwd, self.user["salt"])
        databases.db1.accounting.update_user_password(self.user["id"], hash_res_new)
        self.go_to_main_page(self.driver)
        self.go_main(self.driver, phone=self.user["phone"], passwd=default_new_passwd, flag_api=False)

        new_password = common_utils.random_string(length=6)

        self.get_page(self.driver, self.path_settings.URL_CHANGE_PASSWORD)
        pass_form = self.get_password_form(self.driver)
        pass_form["password_input"].send_keys(default_new_passwd)
        pass_form["new_password_input"].send_keys(new_password)
        pass_form["repeat_password_input"].send_keys(new_password)
        self.click_button(pass_form["save_btn"])

        self.get_element_navigate(self.driver, self.check_settings.CHANGE_PASSWORD_SUCCESS)
        time.sleep(4)
        menu = self.get_element_navigate(self.driver, self.check_main.CHECK_MENU_USER)
        self.element_click(self.driver, menu, change_page_url=False)
        exit_btn = self.get_element_navigate(self.driver, self.click_main.MENU_PROFILE_EXIT)
        self.element_click(self.driver, exit_btn)

        # self.click_to_phone(self.driver)
        obj_phone, obj_password, obj_submit_button = self.get_data_authorization(self.driver)

        # Вводим данные на авторизацию
        self.send_phone(phone_object=obj_phone, phone_number=self.user["phone"])
        self.send_password(password_object=obj_password, password_number=new_password)
        # Нажатие на кнопку авторизации
        self.element_click(self.driver, obj_submit_button)

        self.check_header_widget_seller(self.driver, self.user["id"])
예제 #27
0
    def test_fill_store_requisites(self):
        """
        Title: Я могу заполнить реквизиты компании и сохранить изменения. Новый пользователь.
        Description:
        Блок "О компании" и "Банковские реквизиты"
        Проверить:
        * в БД сохранились данные
        * изменения отображаются на странице задания  реквизитов
        """
        self.go_to_main_page(self.driver)
        self.user = self.registration(link_db=databases.db1)

        self.get_page(self.driver, self.path_settings.URL_COMPANY_DETAILS)
        details = self.get_details_form(self.driver, self.user)

        self.clear_input_row(self.driver, details["legal_name_input"])
        self.clear_input_row(self.driver, details["inn_input"])
        self.clear_input_row(self.driver, details["kpp_input"])
        self.clear_input_row(self.driver, details["ogrn_input"])
        self.clear_input_row(self.driver, details["legal_address_input"])
        self.clear_input_row(self.driver, details["real_address_input"])
        self.clear_input_row(self.driver, details["bik_input"])
        self.clear_input_row(self.driver, details["name_bank_input"])
        self.clear_input_row(self.driver, details["account_input"])
        self.clear_input_row(self.driver, details["correspondent_input"])

        details_new = {
            'legal_name': common_utils.random_string(params="russian"),
            'inn': common_utils.random_string(params='digits', length=12),
            'kpp': common_utils.random_string(params='digits', length=9),
            'ogrn': common_utils.random_string(params='digits', length=13),
            'legal_address': common_utils.random_string(params="russian", length=30),
            'real_address': common_utils.random_string(params="russian", length=35),
            'bik': common_utils.random_string(params='digits', length=9),
            'name_bank': common_utils.random_string(params="russian", length=30),
            'account': common_utils.random_string(params='digits', length=20),
            'correspondent': common_utils.random_string(params='digits', length=20),
        }

        details["legal_name_input"].send_keys(details_new["legal_name"])
        details["inn_input"].send_keys(details_new["inn"])
        details["kpp_input"].send_keys(details_new["kpp"])
        details["ogrn_input"].send_keys(details_new["ogrn"])
        details["legal_address_input"].send_keys(details_new["legal_address"])
        details["real_address_input"].send_keys(details_new["real_address"])
        details["bik_input"].send_keys(details_new["bik"])
        details["name_bank_input"].send_keys(details_new["name_bank"])
        details["account_input"].send_keys(details_new["account"])
        details["correspondent_input"].send_keys(details_new["correspondent"])

        self.click_button(details["save_btn"])
        err_msg = "Не появилось сообщение об успешном сохранении."
        self.element_is_present(self.driver, self.check_settings.CHANGE_STORE_INFO_SUCCESS)
        self.driver.refresh()
        HelpProfileSettingsCheckMethods.progress(self.driver)
        criteria_1 = "legal_name='%s' and inn='%s' and kpp='%s' and ogrn='%s' and "
        criteria_2 = "legal_address='%s' and actual_address='%s' and bank_bic='%s' and "
        criteria_3 = "bank_name_and_address='%s' and bank_account='%s' and bank_correspondent_account='%s'"
        legal_name = details_new["legal_name"].encode('utf-8')
        legal_address = details_new["legal_address"].encode('utf-8')
        real_address = details_new["real_address"].encode('utf-8')
        name_bank = details_new["name_bank"].encode('utf-8')
        crt_1 = criteria_1 % (legal_name, details_new["inn"], details_new["kpp"], details_new["ogrn"])
        crt_2 = criteria_2 % (legal_address, real_address, details_new["bik"])
        crt_3 = criteria_3 % (name_bank, details_new["account"], details_new["correspondent"])
        criteria = crt_1 + crt_2 + crt_3
        user_updated = databases.db1.accounting.get_user_by_criteria_only(criteria)[0]
        self.assertIsNotNone(user_updated, "Не найдено записей в таблице account_details по запросу %s" % criteria)
        self.get_details_form(self.driver, user_updated)
예제 #28
0
    def test_restore_by_email_correct(self):
        """
        Title: Я могу восстановить пароль, введя свой e-mail, на который зарегистрирован аккаунт
        Description:
        1. Ввести корректный зарегистрированный номер e-mail в нажать "Выслать пароль"
            * отображается страница с информационным сообщением о том, что ссылка на сброс пароля высланы письмом
            * при нажатии на главную выполнен переход на главную страницу
            * на указанный e-mail отправлено письмо с сылкой на страницу смены пароля (кнопка "Сбросить пароль")
        2. Получив письмо, нажать на "Сбросить пароль"
            * выполнен переход на страницу сервиса \reset-password?token=
            [специально_сгенерированный_уникальный_токен_одноразового_перехоа_по_ссылке]
            * форма содержит поля "Эл. почта", "Пароль" и "Повторите пароль" и кнопку "Установить новый пароль"
            * поле "Эл. почта" заблокировано для изменения и содержит email аккаунта для которого восстанавливали пароль
        3. Ввести новый пароль на форме "Установить новый пароль" и подтверждение и нажать "Установить новый пароль":
            * отображается страница с сообщением, что новый пароль установлен и кнопкой "Начать работу"
            * в БД для пользователя записывается новый пароль = вводимому на предыдущем шаге (хеш пароля).
            * статус пользователя и другие данные (кроме пароля) не меняется
        4. Нажать "Начать работу"
            * Происходит успешный вход в систему под учетной записью, для которой восстанавливали пароль.
            * Проверить что под ней можно снова войти после  логаута из системы
        """
        service_log.run(self)
        self.email = self.get_new_email(databases.db1)
        databases.db1.accounting.update_account_details_by_criteria(self.default_user_id, "email='%s'" % self.email.lower())

        url_main = self.driver.current_url.encode('utf-8')
        self.get_page(self.driver, self.path_restore.URL_RESTORE_EMAIL)

        # Ввод емайл для восстановления пароля и клик Выслать пароль
        restore_form = self.get_restore_email_form(self.driver)
        restore_form["email_input"].send_keys(self.email)
        self.element_click(self.driver, restore_form["restore_btn"], change_page_url=False)

        # Проверка, что в БД появилась запись о письме и статус письма
        # Проверка что сформирован хеш для подтеврждения емайл при регистрации
        criteria = "auth_type='PASSWORD_CHANGE' and account_details_id=%s" % self.user["id"]
        auth_user = databases.db1.accounting.get_auths_criteria(criteria)[0]
        err_msg = "Из БД не получено записей о формировании хеша восстановления пароля по емайлу для user_id=%s"
        self.assertIsNotNone(auth_user, err_msg % self.user["id"])
        # Проверка статуса отправленного сообщения
        email_statuses = databases.db6.accounting.get_email_statuses_by_email(self.email.lower())[0]
        #self.assertEqual(email_statuses["status_id"], 2, "Сообщение не доставлено на mail=%s" % self.email)
        # Проверка отправленного сообщения и ссылки для завершения регистрации
        hash_value = auth_user["code_value"]
        emails = databases.db6.accounting.get_emails_by_hash(hash_value)[0]
        err_msg_1 = "Из БД не получено писем о восстановлении пароля с хешом=%s, для user_id=%s"
        self.assertIsNotNone(emails, err_msg_1 % (hash_value, self.user["id"]))
        restore_path = self.URL_RESTORE_EMAIL % hash_value
        url_validate = self.ENV_BASE_URL + restore_path
        url_validate_path = url_validate[url_validate.find('//')+2:]
        err_msg_url = "Полученный урл восстановления пароля по емайлу %s не найден в теле отправленного письма id=%s"
        self.assertIn(url_validate_path, emails["body"], err_msg_url % (url_validate, emails["id"]))

        # Проверка страницы На ваш эл. ящик выслано письмо
        email_sent_form = self.get_restore_email_sent_form(self.driver)
        self.element_click(self.driver, email_sent_form["to_main_btn"])
        # Проверка, что после нажатия на кнопку На главную произошел переход обратно на главную
        url_web = self.driver.current_url.encode('utf-8')
        err_msg = "Не произошел переход на главную страницу %s, пользователь остался на странице %s"
        self.assertEqual(url_web, url_main, err_msg % (url_main, url_web))
        self.get_element_navigate(self.driver, self.check_main.MAIN_MENU_HOME_ACTIVE)
        work = time.time()
        messages = None
        while time.time() - work < self.email_timeout:
            try:
                messages = self.get_email(to_email=self.email)
                self.assertNotEqual(len(messages), 0, "Не получено сообщение")
                break
            except Exception:
                pass
        self.assertIsNotNone(messages, "Не получено сообщение")
        message = messages[0]
        mail_from = message['From']
        mail_body = message['Body']
        err_msg_url_1 = "Полученный урл восстановления пароля по емайл %s не найден в теле полученного письма id=%s"
        #self.assertEqual(mail_subject, 'OORRAA.com - сброс пароля', "Тема письма: %s" % mail_subject)
        self.assertIn('*****@*****.**', mail_from, "Почта отправителя: %s" % mail_from)
        self.assertIn(url_validate_path, mail_body, err_msg_url_1 % (url_validate, mail_body))

        # Переход по ссылке валидации емайла
        self.get_page(self.driver, restore_path)
        url_web = self.driver.current_url.encode('utf-8')
        err_msg = "Урл страницы ввода нового пароля из письма: %s не соответствует целевому урлу: %s"
        self.assertEqual(url_web, url_validate, err_msg % (url_web, url_validate))

        # Проверка формы ввода нового пароля и ввод
        input_pass_form = self.get_restore_email_input_pass_form(self.driver, self.email)
        new_password = common_utils.random_string()
        input_pass_form["password_input"].send_keys(new_password)
        input_pass_form["password_repeat_input"].send_keys(new_password)
        self.element_click(self.driver, input_pass_form["set_pass_btn"], change_page_url=False)

        # Проверка что хеш пароля изменился и статус пользователя не изменился
        user_new = databases.db1.accounting.get_user_by_criteria_only("id=%s" % self.default_user_id)[0]
        self.assertNotEqual(self.user['code_value'], user_new['code_value'], "Хеш нового пароля совпадает со старым")
        err = "Статус аккаунта пользователя изменился на %s"
        self.assertEqual(self.user['account_status'], user_new['account_status'], err % user_new['account_status'])

        # Проверка, что из БД удален активационный хеш
        crt = "auth_type='PASSWORD_CHANGE' and account_details_id=%s and creation_timestamp=%s"
        a_user = databases.db1.accounting.get_auths_criteria(crt % (self.user["id"], auth_user["creation_timestamp"]))
        err_msg = "Из БД не удалена запись о формировании хеша восстановления пароля для user_id=%s"
        self.assertEqual(a_user, list(), err_msg % self.user["id"])
        start_work = self.get_restore_password_by_email_success(self.driver)
        self.element_click(self.driver, start_work["start_work_btn"])
        time.sleep(self.time_sleep)
        # Проверка, что после нажатия на кнопку Начать работу произошел переход обратно на главную
        url_web = self.driver.current_url.encode('utf-8')
        err_msg = "Не произошел переход на главную страницу %s, пользователь остался на странице %s"
        self.assertEqual(url_web, url_main, err_msg % (url_main, url_web))
        self.get_element_navigate(self.driver, self.check_main.MAIN_MENU_HOME_ACTIVE)
        # Проверка виджета продавца
        self.check_header_widget_seller_all(self.driver, self.user)

        exit_btn = self.get_element_navigate(self.driver, self.click_main.MENU_PROFILE_EXIT)
        self.element_click(self.driver, exit_btn, change_page_url=False)

        # Проверка успешного логина с новым паролем
        self.go_authorization_page(self.driver)
        auth_form = self.get_auth_email_form(self.driver)
        auth_form["email_input"].send_keys(self.email)
        auth_form["password_input"].send_keys(new_password)
        self.element_click(self.driver, auth_form["login_btn"])
        time.sleep(self.time_sleep)
        self.check_header_widget_seller_all(self.driver, self.user)
예제 #29
0
    def test_registration_by_email_correct(self, new_messages=2):
        """
        Title: Я могу зарегистрироваться по e-mail
        Description:
        1. Заполнить форму регистрации, указав имя, корректный адрес почты и пароль, нажать "Зарегистрироваться"
            * Отображается страница "Регистрация завершена"
            * Проверить содержимое страницы (текст и иконку)
            * Проверить наличие кнопки "Начать работу"
            * В базу сохранен новый пользователь, с введенным им паролем. Статус пользователя: "Активный", роль Продавец.
        2. Нажать на кнопку "Начать работу"
            * Произошел вход в систему под созданной учетной записью, в  профиле (справа-сверху)
            корректно отображается имя пользователя в соответствии с созданным
            * на странице настроек профиля  корректно отображается информация в соответствии с введеным
            при регистрации (сразу после создания отображается, e-mail, роль и имя)
            * Проверить наличие двух сообщений в мессенджере.
        3. Проверить что на введенный при регистрации e-mail пришло подтверждающее письмо
        """
        service_log.run(self)
        # Регистрация
        url_main = self.driver.current_url.encode('utf-8')
        self.click_reg_and_auth(self.driver)
        reg_email = self.get_reg_email_form(self.driver)
        name = common_utils.random_string()

        email = self.get_new_email(databases.db1)

        password = AccountingMethods.get_default_password(5)
        reg_email["name_input"].send_keys(name)
        reg_email["email_input"].send_keys(email)
        reg_email["password_input"].send_keys(password)
        self.element_click(self.driver, reg_email["reg_btn"], change_page_url=False)
        crt = "display_name='%s' and email='%s'" % (name, email.lower())
        user = databases.db1.accounting.get_user_by_criteria(account_status="ENABLED", criteria=crt)[0]
        start_work = self.get_reg_email_success(self.driver, email.lower())
        self.check_count_roles_and_status(user_id=user["id"], count_roles=2, roles='1,2')
        self.element_click(self.driver, start_work)
        # Проверка, что после нажатия на кнопку Начать работу произошел переход обратно на главную
        url_web = self.driver.current_url.encode('utf-8')
        err_msg = "Не произошел переход на главную страницу %s, пользователь остался на странице %s"
        self.assertEqual(url_web, url_main, err_msg % (url_main, url_web))

        # Проверка что сформирован хеш для подтеврждения емайл при регистрации
        criteria = "auth_type='EMAIL_VALIDATION' and account_details_id=%s" % user["id"]
        auth_user = databases.db1.accounting.get_auths_criteria(criteria)[0]
        err_msg = "Из БД не получено записей о формировании хеша валидации емайла для user_id=%s"
        self.assertIsNotNone(auth_user, err_msg % user["id"])
        # Проверка статуса отправленного сообщения
        email_statuses = databases.db6.accounting.get_email_statuses_by_email(user["email"])[0]
        self.assertEqual(email_statuses["status_id"], 2, "Сообщение не доставлено на mail=%s" % user["email"])
        # Проверка отправленного сообщения и ссылки для завершения регистрации
        hash_value = auth_user["code_value"]
        emails = databases.db6.accounting.get_emails_by_hash(hash_value)[0]
        validate_path = self.URL_VALIDATE_EMAIL % hash_value
        url_validate = self.ENV_BASE_URL + validate_path
        url_validate_path = url_validate[url_validate.find('//')+2:]
        err_msg_url = "Полученный урл активации емайла %s не найден в теле отправленного письма id=%s"
        self.assertIn(url_validate_path, emails["body"], err_msg_url % (url_validate, emails["id"]))
        work = time.time()
        messages = None
        while time.time() - work < self.email_timeout:
            try:
                messages = self.get_email(to_email=email)
                self.assertNotEqual(len(messages), 0, "Не получено сообщение")
                break
            except Exception:
                pass
        self.assertIsNotNone(messages, "Не получено сообщение")
        message = messages[0]
        mail_from = message['From']
        mail_body = message['Body']
        err_msg_url_1 = "Полученный урл активации емайла %s не найден в теле полученного письма id=%s"
        #self.assertEqual(mail_subject, 'OORRAA.com - активация аккаунта', "Тема письма: %s" % mail_subject)
        self.assertIn('*****@*****.**', mail_from, "Почта отправителя: %s" % mail_from)
        self.assertIn(url_validate_path, mail_body, err_msg_url_1 % (url_validate, mail_body))
        # Проверка виджета продавца
        self.check_header_widget_seller_all(self.driver, user)
        # Проверка количества новых сообщений в мессенждере
        self.get_element_navigate(self.driver, self.check_main.COUNT_NEW_MSG % new_messages)
        # Чтение сообщений
        self.get_page(self.driver, self.path_chat.URL_CHAT)
        self.progress(self.driver)
        msg = self.reading_unread_messages_after_reg(self.driver, new_messages)
        self.assertEqual(msg, "Сообщения", "Остались непрочитанные %s" % msg)

        # Переход по ссылке валидации емайла
        self.get_page(self.driver, validate_path)
        url_web = self.driver.current_url.encode('utf-8')
        url_need = self.ENV_BASE_URL + self.path_reg.URL_VALIDATED_EMAIL
        err_msg = "Урл страницы успешной валидации емайла: %s не соответствует целевому урлу: %s"
        self.assertEqual(url_web, url_need, err_msg % (url_web, url_need))
        # Проверка, что из БД удален активационный хеш
        criteria = "auth_type='EMAIL_VALIDATION' and account_details_id=%s and creation_timestamp=%s"
        a_user = databases.db1.accounting.get_auths_criteria(criteria % (user["id"], auth_user["creation_timestamp"]))
        err_msg = "Из БД не удалена запись о формировании хеша валидации емайла для user_id=%s"
        self.assertEqual(a_user, list(), err_msg % user["id"])
        start_work = self.get_validated_email_success(self.driver)
        self.element_click(self.driver, start_work)

        # Проверка, что после нажатия на кнопку Начать работу произошел переход обратно на главную
        url_web = self.driver.current_url.encode('utf-8')
        err_msg = "Не произошел переход на главную страницу %s, пользователь остался на странице %s"
        self.assertEqual(url_web, url_main, err_msg % (url_main, url_web))
        # Проверка виджета продавца
        self.check_header_widget_seller_all(self.driver, user)
예제 #30
0
    def test_smoke_user_work(self):
        """
        Title: Тест сценария работы пользователя.
        Description: 1. Зайти на сайт oorraa.com.:
            Проверить наличие кнопки "Вход"
            Логотипа УУРРАА
            Пунктов меню, главного меню (Одежда | Обувь и акссесуары | и пр.)
        2. Кликнуть на карточку любого товара на странице:
            Проверить что перешли на нужный товар (название и наличие всех фото)
            Проверить что хлебные крошки отображаются корректно
            Проверить что имя продавца отображается корректно
            Проверить что кнопка "Связаться с продавцом" активная
        3. Кликнуть на "Вход" ---> выбрать авторизацию по телефону ---> ввести корректные данные:
            Проверить что зашли под нужным пользователем (имя и телефон)
            Проверить наличие иконок "Сообщения" и "Контакты"
        4. Выполнить поиск товара
            Проверить что товар найден в результатах поиска
            Кликнуть на его карточку:
        5. Связаться с продавцом
            По окончанию перейти в чат и проверить то в области переписки есть сообщение
        6. Добавить контакт в контакт-лист
            Проверить что контакт добавился
            По окончании нужно удалить добавленный в избранное, контакт
        7.  Выполнить Logout
            Проверить что логаут выполнен, есть кнопка "Вход"
        """
        service_log.run(self)
        ware_for_search = self.wares[0]

        # 1. Заходим на сайт и выполняем проверку главной страницы.
        self.go_to_main_page(self.driver)
        self.check_header_widget_visitor(self.driver)
        logo_main_page = self.driver.find_element_by_xpath(self.LOGO_HEADER_MAIN_PAGE)
        self.assertIsNotNone(logo_main_page, u"Not found logo in main page.")
        self.check_menu_no_prod()

        # 2. Кликнуть на карточку любого товара на странице
        # выбираем первый товар в разделе "Одежда"
        num_element = 1
        clothing_ware_1 = MainPage.Path.BLOCK_CLOTHING % num_element
        obj_clothing_ware_1 = self.get_element_navigate(self.driver, clothing_ware_1)
        name_ware_from_main_page = obj_clothing_ware_1.text
        obj_clothing_ware_1.click()

        breadcrumb_list = self.get_breadcrumb_list(self.driver)  # запоминаем хлебные крошки
        # выковыриваем идентификатор товара из url и берем по нему и по продовцу инфу из БД
        name_ware = self.get_element_navigate(self.driver, GoodPage.Check.TITLE_WARE)
        ware_id = name_ware.parent.current_url.split('/')[-1]
        db_ware_data = databases.db1.warehouse.get_wares_by_ware_id(ware_id)
        data_user = databases.db1.accounting.get_data_user_by_id(db_ware_data[0]["shop_id"])
        name = self.driver.find_element_by_xpath(GoodPage.Check.USER_NAME_SELLER)
        button = self.driver.find_element_by_xpath(GoodPage.Click.BTN_CALL_SELLER2)
        # проверка имени продавца, названия товара, наличия
        self.assertEqual(data_user[0]["display_name"], name.text)
        self.assertEqual(len(db_ware_data), 1, u"Find several ware with one id.")
        self.assertEqual(name_ware_from_main_page, name_ware.text)
        self.assertEqual(len(breadcrumb_list), 3, u"Does not match the number of levels of categories.")
        self.assertTrue(button.is_displayed(), u"Button is not active.")

        # 3. Переходим на страницу авторизации
        self.do_login(self.driver)
        #self.click_to_phone(self.driver)
        self.check_page_authorization(self.driver)  # Проверка страница авторизации
        # вводим данные на авторизацию и авторизовываемся
        user_phone = self.data_auths[0]["phone"][1:]
        obj_phone, obj_password, obj_submit_button = self.get_data_authorization(self.driver)
        self.send_password(password_object=obj_password, password_number=self.default_passwd)
        self.send_phone(phone_object=obj_phone, phone_number=user_phone)
        self.submit_button(obj_submit_button, sleep=3)

        # 4. Выполнить поиск товара
        # Получаем инпут поиска, кнопку поиска с главной страницы, вводим данные и жмем кнопку поиска
        input_search = self.get_element_navigate(self.driver, self.input_main.SEARCH)
        btn_search = self.get_element_navigate(self.driver, self.click_main.BTN_SEARCH)
        input_search.send_keys(ware_for_search["name"].decode('utf-8'))
        btn_search.click()
        # Проверяем, что перешли в результаты поиска
        self.get_element_navigate(self.driver, self.check_search.TITLE_SEARCH)
        # Ищем на странице товар, заданный в поиске и переходим на страницу товара, проверяем урл страницы и название
        path_ware = self.click_search.LNK_GOOD_WITH_HREF % (ware_for_search["id"], ware_for_search["name"])
        ware_in_search = self.get_element_navigate(self.driver, path_ware)
        ware_in_search.click()
        self.check_url_ware(ware_for_search["id"], self.driver.current_url)
        obj_ware_title = self.get_element_navigate(self.driver, self.check_good.TITLE_GOOD)
        self.assertEqual(self.get_name(obj_ware_title), ware_for_search["name"])

        # 5. Связаться с продавцом
        data_good, good_str = HelpChatMethods.get_good_data(self.driver)
        button_call = self.driver.find_element_by_xpath(GoodPage.Click.BTN_CALL_SELLER2)
        button_call.click()
        dialog_window = self.driver.find_element_by_xpath(GoodPage.Check.POPUP_MESSAGE_TO_SELLER)
        button_answer = self.driver.find_element_by_xpath(GoodPage.Click.BTN_ANSWER_TO_SELLER)

        self.assertIsNotNone(dialog_window, "Not found dialog window for answer seller!")
        self.assertTrue(button_answer.is_displayed(), "Button is not active.")
        text = common_utils.random_string(length=50)
        link_popup = self.check_good.POPUP_MSG_FROM_GOOD % HelpChatMethods.TEXT_MSG_TO_GOOD
        popup_text = self.get_element_navigate(self.driver, link_popup)

        HelpProfileSettingsMethods.clear_input_row(self.driver, popup_text) # очищаем сообщение
        popup_text.send_keys(text)
        button_answer.click()
        time.sleep(3)
        button_go_to_chat = self.driver.find_element_by_xpath(GoodPage.Click.BTN_GO_TO_CHAT)
        button_go_to_good_page = self.driver.find_element_by_xpath(GoodPage.Click.BTN_GO_TO_GOOD_PAGE)
        self.assertTrue(button_go_to_chat.is_displayed(), "Button 'go to chat' is not active.")
        self.assertTrue(button_go_to_good_page.is_displayed(), "Button 'go to good page' is not active.")
        button_go_to_chat.click()

        # В чате с продавцом есть отправленное сообщение и карточка товара. Проверить соответствие текста и товара.
        last_msg = HelpChatMethods.get_last_msg(self.driver)
        msg_error1 = "Экспресс карточка='%s' не совпадает с последним сообщением='%s'" % (good_str, last_msg)
        self.assertIn(good_str, last_msg, msg_error1)
        str_msg_to_good = HelpChatMethods.TEXT_MSG_TO_GOOD.replace(' ', '')
        msg_error2 = "Сообщение о товаре='%s' не совпадает с последним сообщением='%s'" % (str_msg_to_good, last_msg)
        self.assertIn(text, last_msg, msg_error2)

        # 6. Добавить контакт в контакт-лист
        HelpUserContactsMethods.click_in_contact(self.driver, ware_for_search["store_id"])

        # переходим в избранное и удаляем пользователя
        self.get_page(self.driver, self.path_user_contact.URL_FAVORITES_USERS)
        data_user = databases.db1.accounting.get_data_user_by_id(ware_for_search["store_id"])
        HelpUserContactsMethods.delete_first_user_in_cl(self.driver, fav_user=data_user[0])

        # 7.  Выполнить Logout и выполнить проверку.
        self.driver.refresh()
        Navigate.progress(self.driver)
        self.logout(self.driver)
        logo_main_page = self.driver.find_element_by_xpath(self.LOGO_HEADER_PAGE)
        self.assertIsNotNone(logo_main_page, u"Not found logo in main page.")
        self.go_to_main_page(self.driver)
        self.check_header_widget_visitor(self.driver)
        self.check_menu_no_prod()