def test_ok_score_admin_request():
    """
    Tests ok request from admin
    """

    arguments = {"phone": "79175002040", "email": "*****@*****.**"}
    request = {
        "account": "horns&hoofs",
        "login": "******",
        "method": "online_score",
        "arguments": arguments
    }
    test_context = dict()
    set_valid_auth(request)
    response, code = api.method_handler(request={
        "body": request,
        "headers": dict()
    },
                                        ctx=test_context,
                                        store=KeyValueTestStorage())
    assert code == api.OK
    score = response.get("score")
    assert score == 42
    assert "has" in test_context
    assert len(test_context["has"]) == 2
    assert "phone" in test_context["has"]
    assert "email" in test_context["has"]
def test_ok_interests_request(param_test_ok_interests_request):
    """
    Tests ok clients interests request
    """

    test_context = dict()
    request_arguments, test_store = param_test_ok_interests_request
    request = {
        "account": "horns&hoofs",
        "login": "******",
        "method": "clients_interests",
        "arguments": request_arguments
    }
    set_valid_auth(request)
    response, code = api.method_handler(request={
        "body": request,
        "headers": dict()
    },
                                        ctx=test_context,
                                        store=test_store)
    assert code == api.OK
    assert len(request_arguments["client_ids"]) == len(response)
    assert all(
        v and isinstance(v, list) and all(isinstance(i, str) for i in v)
        for v in response.values())
    assert test_context.get("nclients") == len(request_arguments["client_ids"])
def test_invalid_method_request(param_test_invalid_method_request):
    """

    :param param_test_invalid_method_request:
    :return:
    """

    set_valid_auth(param_test_invalid_method_request)
    response, code = api.method_handler(request={
        "body": param_test_invalid_method_request,
        "headers": dict()
    },
                                        ctx=dict(),
                                        store=KeyValueTestStorage())
    assert code == api.INVALID_REQUEST
    assert response
def test_invalid_phone_score_request(param_test_invalid_phone_score_request):
    """
    Tests invalid phone score request
    """
    request = {
        "account": "horns&hoofs",
        "login": "******",
        "method": "online_score",
        "arguments": param_test_invalid_phone_score_request
    }
    set_valid_auth(request)
    response, code = api.method_handler(request={
        "body": request,
        "headers": dict()
    },
                                        ctx=dict(),
                                        store=KeyValueTestStorage())
    assert code == api.INVALID_REQUEST
    assert "phone" in response
    assert len(response) == 1
def test_invalid_interests_request(param_test_invalid_interests_request):
    """
    Tests invalid clients interests request
    """

    request = {
        "account": "horns&hoofs",
        "login": "******",
        "method": "clients_interests",
        "arguments": param_test_invalid_interests_request
    }
    set_valid_auth(request)
    response, code = api.method_handler(request={
        "body": request,
        "headers": dict()
    },
                                        ctx=dict(),
                                        store=KeyValueTestStorage())
    assert code == api.INVALID_REQUEST
    assert response
def test_invalid_date_interests_request(
        param_test_invalid_date_interests_request):
    """
    Tests clients_interests request with invalid date
    """

    request_arguments, test_store = param_test_invalid_date_interests_request
    request = {
        "account": "horns&hoofs",
        "login": "******",
        "method": "clients_interests",
        "arguments": request_arguments
    }
    set_valid_auth(request)
    response, code = api.method_handler(request={
        "body": request,
        "headers": dict()
    },
                                        ctx=dict(),
                                        store=test_store)
    assert code == api.INVALID_REQUEST
    assert "date" in response
    assert len(response) == 1
def test_ok_score_request(param_test_ok_score_request):
    """
    Tests ok score request
    """

    request = {
        "account": "horns&hoofs",
        "login": "******",
        "method": "online_score",
        "arguments": param_test_ok_score_request
    }

    set_valid_auth(request)
    test_context = dict()
    response, code = api.method_handler(request={
        "body": request,
        "headers": dict()
    },
                                        ctx=test_context,
                                        store=KeyValueTestStorage())
    assert code == api.OK
    score = response.get("score")
    assert isinstance(score, (int, float)) and score >= 0
    assert sorted(test_context["has"]) == sorted(param_test_ok_score_request)