Beispiel #1
0
def independent_register_and_verify_email_scope_class() -> dict:
    """
    Verify user with email different from the register email.

    Keys of returned dict:
        - register_email
        - verify_email
        - password
        - account_id
        - token
    """
    register_email = generate_email()
    verify_email = generate_email()
    with register_and_verify_with_diff_emails_impl(register_email,
                                                   verify_email) as user:
        yield user
Beispiel #2
0
def register_login_new_user_impl() -> dict:
    """
    Create a new user, register the new user and log in.

    My own home id will be yield too.

    A dict will be returned, and keys are:
        - client
        - account_id
        - token
        - email
        - password
        - home_id
    """
    client: Client = get_client_from_orm_by_id(3)
    email = generate_email()
    password = "******"

    # register user
    register = TestRegisterNewUserSuccessfully()
    register.config.variables(**{
        "client": client,
        "email": email,
        "password": password
    })
    register.test_start()

    # login
    login = LoginV2()
    login.config.variables(**{
        "client": client,
        "email": email,
        "password": password
    })
    login.test_start()

    # {"account_id": ?, "token": ?}
    token_dict = get_sub_dict(login.get_export_variables(), *['account_id', 'token'])

    get_home_list = GetHomeList()
    get_home_list.config.variables(**token_dict, client=client)
    get_home_list.test_start()
    my_own_home_id = get_home_list.get_export_variables()["my_own_home_id"]

    yield {
        **token_dict,
        "email": email,
        "password": password,
        "client": client,
        "home_id": my_own_home_id
    }

    # delete user
    delete_user = DeleteUser()
    delete_user.with_variables({})  # get rid of the effect on session variables from previous instances
    delete_user.config.variables(client=client, **token_dict)
    delete_user.test_start()
Beispiel #3
0
def register_login_new_users_impl(user_num=None) -> dict:
    """
    Create users, register new users and log in.

    My own home id will be yield too.

    A dict will be returned, and keys are:
        - user_list
    """

    user_list = []
    client: Client = get_client_from_orm_by_name('ios')
    for i in range(user_num):
        email = generate_email()
        password = "******"

        # register user
        register = TestRegisterNewUserSuccessfully()
        register.config.variables(**{
            "client": client,
            "email": email,
            "password": password
        })
        register.run()

        # login
        login = LoginV2()
        login.config.variables(**{
            "client": client,
            "email": email,
            "password": password
        })
        login.run()

        # {"account_id": ?, "token": ?}
        token_dict = get_sub_dict(login.get_export_variables(),
                                  *['account_id', 'token', 'user_info'])
        user_list.append(token_dict)

    yield user_list

    # delete user
    for token_dict in user_list:
        delete_user = DeleteUser()
        delete_user.with_variables(
            {}
        )  # get rid of the effect on session variables from previous instances
        delete_user.config.variables(client=client, **token_dict)
        delete_user.run()
Beispiel #4
0
def setup(request):
    """Arrange for testcase."""
    # acceptable json data
    email = generate_email()
    json_data = {
        "email": email,
        "password": "******",
        "code": "1234",
        "verifyEmail": email,
        "isRequiredVerify": True,
        "country_code": "US",
        "acceptMarketingEmail": False,
        "registerAppVersion": "${getattr($client, client_version)}"
    }

    # decide final json data to be sent
    if (param_len := len(request.param)) == 3:
        param_name, param_value, error_code = request.param
        json_data[param_name] = param_value
Beispiel #5
0
def register_login_new_user_with_no_auth_impl() -> dict:
    """
    Create a new user, register the new user with email not been verified and log in.

    A dict will be returned, and keys are:
        - client
        - account_id
        - token
        - email
        - password
    """
    client = clients.ios
    email = generate_email()
    password = "******"

    # register user
    (TestRegisterWithNoAuth().with_variables({
        "client": client,
        "email": email,
        "password": password
    }).run())

    # login
    login_result = (LoginV2().with_variables({
        "client": client,
        "email": email,
        "password": password
    }).run())

    # {"account_id": <account id>, "token": <token>}
    token_dict = get_sub_dict(login_result.get_export_variables(),
                              *['account_id', 'token'])

    yield {
        **token_dict,
        "email": email,
        "password": password,
        "client": client,
    }

    # delete user
    (DeleteUser().with_variables({"client": client, **token_dict}).run())
from httprunner import HttpRunner, Config, Step, RunTestCase

from runway.apis.iot.vesync.user import DeleteUser
from runway.apis.iot.vesync.user import LoginV2
from runway.apis.store.user import Login
from runway.builtin.email import generate_email
from runway.builtin.hash import get_md5_hex_digest
from runway.configs.client import clients
from .base_testcase_register_with_no_auth import TestRegisterWithNoAuth as RegisterNewUser

plain_password = "******"
hashed_password = get_md5_hex_digest(plain_password)

params = [
    # email, register password, login password
    (generate_email(), hashed_password, hashed_password),
    (generate_email(), plain_password, plain_password),
]


@pytest.fixture(autouse=True, params=params)
def setup(request):
    config: Config = request.cls.config
    email, register_password, login_password = request.param
    config.variables(email=email,
                     register_password=register_password,
                     login_password=login_password)


class TestLoginPasswordSameAsRegisterPassword(HttpRunner):
import pytest
from httprunner import HttpRunner, Config, Step, RunTestCase

from runway.apis.iot.vesync.user import DeleteUser
from runway.apis.iot.vesync.user import LoginV2
from runway.builtin.email import generate_email
from .base_testcase_register_with_no_auth import TestRegisterWithNoAuth as RegisterNewUser

emails = [
    generate_email(),
    generate_email(extra="_"),
    generate_email(extra="%"),
    generate_email(extra="+"),
    generate_email(extra="-")
]


@pytest.fixture(autouse=True, params=emails)
def setup(request):
    config: Config = request.cls.config
    config.variables(email=request.param)


class TestRegisterWithValidEmail(HttpRunner):

    config = (Config("P-使用满足正则表达式的邮箱注册,可以注册成功").variables(
        **{
            "client": "${get_client_from_orm_by_id(1)}",
            "email": None,
            "password": "******"
        }))
Beispiel #8
0
import pytest
from httprunner import HttpRunner, Config, Step, RunTestCase

from runway.apis.iot.vesync.user import DeleteUser
from runway.apis.iot.vesync.user import LoginV2
from runway.apis.iot.vesync.user import RunApiIsAccountExist
from runway.apis.iot.vesync.user import UpgradeGuest
from runway.apis.iot.vesync.user import is_account_exist_error_code
from runway.builtin.email import generate_email
from .base_testcase_upgrade_guest_to_user import TestUpgradeGuestToUser as UpgradeGuestToUser


@pytest.fixture(params=[
    generate_email(),
    generate_email(extra="_"),
    generate_email(extra="%"),
    generate_email(extra="+"),
    generate_email(extra="-")
])
def valid_email(request):
    """Return one email each time."""
    config: Config = request.cls.config
    config.variables(email=request.param)


@pytest.fixture(params=[
    (generate_email(domain_name="@chacuo.net"),
     is_account_exist_error_code.invalid_email),
    (generate_email(domain_name="@027168.com"),
     is_account_exist_error_code.invalid_email),
])
from httprunner import HttpRunner, Config, Step, RunTestCase

from runway.apis.iot.vesync.user import RegisterV2
from runway.apis.iot.vesync.user import RunApiIsAccountExist
from runway.apis.iot.vesync.user import DeleteUser
from runway.apis.iot.vesync.user import LoginV2
from runway.builtin.email import generate_email

lowercase_email = generate_email()
uppercase_email = lowercase_email.upper()


class TestRegisterWithUppercaseEmail(HttpRunner):

    config = (Config("P-使用大写字母邮箱注册成功后,使用大写或小写的形式均能登陆成功").variables(
        **{
            "client": "${get_client_from_orm_by_id(1)}",
            "password": "******"
        }))

    teststeps = [
        Step(
            RunApiIsAccountExist("调用 isAccountExist 时传入大写的邮箱 (但使用小写邮箱获取验证码)").
            with_variables(**{
                "email": uppercase_email,
                "lowercase_email": lowercase_email
            }).request().teardown_hook(
                "${get_verify_code_from_redis($lowercase_email)}",
                "verify_code").export().variable(
                    "verify_code").validate().assert_equal("body.code", 0)),
        Step(
Beispiel #10
0
import pytest
from httprunner import HttpRunner, Config, Step

from runway.apis.iot.vesync.user import RunApiIsAccountExist
from runway.apis.iot.vesync.user import register_v2_error_code
from runway.builtin.email import generate_email

expected_error_code = register_v2_error_code.invalid_email
params = [
    # email, password, error code
    (generate_email(), "12345", expected_error_code),
]


@pytest.fixture(autouse=True, params=params)
def setup(request):
    config: Config = request.cls.config
    email, password, error_code = request.param
    config.variables(email=email, password=password, error_code=error_code)


@pytest.mark.skip("目前后端没有做密码是否合法的校验")
class TestFailToRegisterWithInvalidPassword(HttpRunner):

    config = (Config("N-密码不合法,注册失败").variables(
        **{
            "client": "${get_client_from_orm_by_id(1)}",
            "email": None,
            "password": None,
            "error_code": None
        }))
Beispiel #11
0
def register_login_new_users_and_complete_lottery_impl(user_num=2) -> dict:
    """
    Create users, register new users and log in ,complete three times lottery.

    A dict will be returned, and keys are:
        - user_list
    """

    user_list = []
    expected_lottery_prize_people_list = []
    client: Client = get_client_from_orm_by_id(1)
    for i in range(user_num):
        email = generate_email()
        password = "******"

        # register user
        register = TestRegisterNewUserSuccessfully()
        register.with_variables({
            "client": client,
            "email": email,
            "password": password
        })
        register.run()

        # login
        login = LoginV2()
        login.with_variables({
            "client": client,
            "email": email,
            "password": password
        })
        login.run()

        # {"account_id": ?, "token": ?}
        token_dict = get_sub_dict(login.get_export_variables(),
                                  *['account_id', 'token', 'user_info'])
        user_list.append(token_dict)

        # getRemainingTimes
        get_remaining_times = BaseGetRemainingTimesSuccessfully()
        get_remaining_times.with_variables({
            **get_sub_dict(login.get_export_variables(), *[
                               'account_id', 'token'
                           ]), "client":
            client,
            "award_pool_name":
            anniversary_draw_settings.award_pool_name,
            "trigger_source":
            "$award_pool_name"
        })
        get_remaining_times.run()

        # draw lottery
        draw = BaseDrawSuccessfully()
        draw.with_variables({
            **get_sub_dict(login.get_export_variables(), *[
                               'account_id', 'token', 'user_info'
                           ]), "client":
            client,
            "award_pool_name":
            anniversary_draw_settings.award_pool_name,
            "trigger_source":
            "$award_pool_name",
            "expected_remaining_times":
            0,
            "expected_lottery_prize_people_list":
            expected_lottery_prize_people_list
        })
        draw.run()
        expected_lottery_prize_people_list = draw.get_export_variables(
        )['expected_lottery_prize_people_list']
    yield {
        "user_list": user_list,
        "expected_lottery_prize_people_list":
        expected_lottery_prize_people_list
    }

    # delete user
    for token_dict in user_list:
        delete_user = DeleteUser()
        delete_user.with_variables(
            {}
        )  # get rid of the effect on session variables from previous instances
        delete_user.config.variables(client=client, **token_dict)
        delete_user.run()
Beispiel #12
0
def register_login_web_user_with_no_auth_impl() -> dict:
    """
    Create a new user, register the new user with email not been verified and log in.

    A dict will be returned, and keys are:
        - client
        - account_id
        - token
        - email
        - password
    """
    email = generate_email()
    password = "******"

    # register user
    register = TestRegisterWithNoAuth()
    register.config.variables(**{
        "client": clients.web,
        "email": email,
        "password": password
    })
    register.test_start()

    # log in web
    login = Login()
    login.config.variables(**{
        "client": clients.web,
        "email": email,
        "password": password
    })
    login.test_start()

    # {"account_id": <account id>, "token": <token>}
    token_dict = get_sub_dict(login.get_export_variables(),
                              *['account_id', 'token'])

    yield {
        **token_dict,
        "email": email,
        "password": password,
        "client": clients.ios,
    }
    # log in app
    login = LoginV2()
    login.config.variables(**{
        "client": clients.ios,
        "email": email,
        "password": password
    })
    login.test_start()
    # {"account_id": <account id>, "token": <token>}
    token_dict = get_sub_dict(login.get_export_variables(),
                              *['account_id', 'token'])

    # delete user
    delete_user = DeleteUser()
    delete_user.with_variables(
        {}
    )  # get rid of the effect on session variables from previous instances
    delete_user.config.variables(client=clients.ios, **token_dict)
    delete_user.test_start()
Beispiel #13
0
def register_login_new_user_impl(is_generate_mall_user: bool = False,
                                 client: Client = clients.ios) -> dict:
    """
    Create a new user, register the new user and log in.

    My own home id will be yield too.

    A dict will be returned, and keys are:
        - client
        - account_id
        - token
        - email
        - password
        - home_id
        - user_info
    """
    client = client
    email = generate_email()
    password = "******"

    # register user
    (TestRegisterNewUserSuccessfully().with_variables({
        "client": client,
        "email": email,
        "password": password
    }).run())

    # login
    login_result = (LoginV2().with_variables({
        "client": client,
        "email": email,
        "password": password
    }).run())

    # {"account_id": ?, "token": ?}
    export_vars = login_result.get_export_variables()
    token_dict = get_sub_dict(export_vars, *['account_id', 'token'])
    user_info = export_vars["user_info"]

    get_home_list_result = (GetHomeList().with_variables({
        "client": client,
        **token_dict
    }).run())
    my_own_home_id = get_home_list_result.get_export_variables(
    )["my_own_home_id"]

    # create mall user
    if is_generate_mall_user:
        (CreateMallUserV3().with_variables({
            "client": client,
            **token_dict
        }).run())

    yield {
        **token_dict, "email": email,
        "password": password,
        "client": client,
        "home_id": my_own_home_id,
        "user_info": user_info
    }

    # delete user
    (DeleteUser().with_variables({"client": client, **token_dict}).run())
Beispiel #14
0
import pytest
from httprunner import HttpRunner, Config, Step, RunTestCase

from runway.builtin.email import generate_email
from .register_with_correct_verify_code_test import TestRegisterWithCorrectVerifyCode as RegisterNewUser

emails = [
    (generate_email(), "US"),
    (generate_email(), "GB"),
    (generate_email(), "FR"),
    (generate_email(), "CA"),
]


@pytest.fixture(autouse=True, params=emails)
def setup(request):
    config: Config = request.cls.config
    email, user_country_code = request.param
    config.variables(email=email, user_country_code=user_country_code)


class TestRegisterWithValidCountryCode(HttpRunner):

    config = (Config("P-国家码为 ISO3166 中的国家码,可以注册成功").variables(
        **{
            "client": "${get_client_from_orm_by_id(1)}",
            "email": None,
            "user_country_code": None,
            "password": "******"
        }))
import pytest
from httprunner import HttpRunner, Config, Step

from runway.apis.iot.vesync.user import RunApiIsAccountExist
from runway.apis.iot.vesync.user import register_v2_error_code
from runway.builtin.email import generate_email

emails = [
    (generate_email(domain_name="@chacuo.net"),
     register_v2_error_code.invalid_email),
    (generate_email(domain_name="@027168.com"),
     register_v2_error_code.invalid_email),
]


@pytest.fixture(autouse=True, params=emails)
def setup(request):
    config: Config = request.cls.config
    config.variables(email=request.param[0], error_code=request.param[1])


class TestFailToRegisterWithTemporaryEmail(HttpRunner):

    config = (Config("N-使用临时邮箱后缀注册,注册失败").variables(
        **{
            "client": "${get_client_from_orm_by_id(1)}",
            "email": None,
            "password": "******",
            "error_code": None
        }))