tests.unit.test_core.test_rest_api_routes   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 117
Duplicated Lines 29.06 %

Test Coverage

Coverage 95.77%

Importance

Changes 0
Metric Value
eloc 79
dl 34
loc 117
ccs 68
cts 71
cp 0.9577
rs 10
c 0
b 0
f 0
wmc 8

7 Functions

Rating   Name   Duplication   Size   Complexity  
A test_new_endpoint() 0 11 1
A test_error_msg() 0 15 2
A test_aget_json_or_400() 16 16 1
A test_new_async_endpoint() 0 12 1
A test_api_500_traceback_by_default() 0 3 1
A test_get_json_or_400() 18 18 1
A test_get_body() 0 16 1

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
"""Test kytos.core.rest_api routes."""
2 1
import asyncio
3 1
from unittest.mock import MagicMock
4
5 1
import pytest
6 1
from pydantic import ValidationError
7
8 1
from kytos.core.auth import UserController
9 1
from kytos.core.config import KytosConfig
10 1
from kytos.core.rest_api import (JSONResponse, Request, aget_json_or_400,
11
                                 error_msg, get_body, get_json_or_400)
12
13
14 1
async def test_new_endpoint(controller, api_client) -> None:
15
    """Test new core endpoint."""
16
17 1
    def handler(_request: Request) -> JSONResponse:
18 1
        return JSONResponse("response")
19
20 1
    endpoint = "prefix/resource"
21 1
    controller.api_server.register_core_endpoint(endpoint, handler)
22 1
    response = await api_client.get(f"kytos/core/{endpoint}")
23 1
    assert response.status_code == 200
24 1
    assert response.json() == "response"
25
26
27 1
async def test_new_async_endpoint(controller, api_client) -> None:
28
    """Test new core async endpoint."""
29
30 1
    async def handler(_request: Request) -> JSONResponse:
31 1
        await asyncio.sleep(0)
32 1
        return JSONResponse("response")
33
34 1
    endpoint = "prefix/resource"
35 1
    controller.api_server.register_core_endpoint(endpoint, handler)
36 1
    response = await api_client.get(f"kytos/core/{endpoint}")
37 1
    assert response.status_code == 200
38 1
    assert response.json() == "response"
39
40
41 1 View Code Duplication
async def test_aget_json_or_400(controller, api_client) -> None:
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
42
    """Test aget_json_or_400."""
43
44 1
    async def handler(request: Request) -> JSONResponse:
45 1
        body = await aget_json_or_400(request)
46 1
        return JSONResponse(body)
47
48 1
    endpoint = "prefix/resource"
49 1
    controller.api_server.register_core_endpoint(endpoint, handler,
50
                                                 methods=["POST"])
51 1
    response = await api_client.post(f"kytos/core/{endpoint}")
52 1
    assert response.status_code == 400
53 1
    body = {"some_key": "some_value"}
54 1
    response = await api_client.post(f"kytos/core/{endpoint}", json=body)
55 1
    assert response.status_code == 200
56 1
    assert response.json() == body
57
58
59 1
def test_api_500_traceback_by_default() -> None:
60
    """Test api 500 traceback by default."""
61 1
    assert KytosConfig().options["daemon"].api_traceback_on_500
62
63
64 1 View Code Duplication
async def test_get_json_or_400(controller, api_client) -> None:
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
65
    """Test get_json_or_400."""
66
67 1
    controller.loop = asyncio.get_running_loop()
68
69 1
    def handler(request: Request) -> JSONResponse:
70 1
        body = get_json_or_400(request, controller.loop)
71 1
        return JSONResponse(body)
72
73 1
    endpoint = "prefix/resource"
74 1
    controller.api_server.register_core_endpoint(endpoint, handler,
75
                                                 methods=["POST"])
76 1
    response = await api_client.post(f"kytos/core/{endpoint}")
77
    assert response.status_code == 400
78
    body = {"some_key": "some_value"}
79
    response = await api_client.post(f"kytos/core/{endpoint}", json=body)
80 1
    assert response.status_code == 200
81 1
    assert response.json() == body
82
83
84 1
async def test_error_msg():
85
    """Test error message"""
86 1
    user = UserController(MagicMock())
87 1
    user_data = {
88
        "username": "test",
89
        "password": "password",
90
        "email": "[email protected]"
91
    }
92 1
    with pytest.raises(ValidationError) as err:
93 1
        user.create_user(user_data)
94 1
    actual_msg = error_msg(err.value.errors())
95 1
    expected_msg = 'password: Value error, value should contain minimun 8 ' \
96
                   'characters, at least one upper case character, at ' \
97
                   'least 1 numeric character [0-9]'
98 1
    assert actual_msg == expected_msg
99
100
101 1
async def test_get_body(controller, api_client) -> None:
102
    """Test get_body (low level-ish usage for validators)."""
103 1
    controller.loop = asyncio.get_running_loop()
104
105 1
    def handler(request: Request) -> JSONResponse:
106 1
        body_bytes = get_body(request, controller.loop)
107 1
        assert body_bytes == b'{"some_key": "some_value"}'
108 1
        return JSONResponse({})
109
110 1
    endpoint = "prefix/resource"
111 1
    controller.api_server.register_core_endpoint(endpoint, handler,
112
                                                 methods=["POST"])
113 1
    body = {"some_key": "some_value"}
114 1
    response = await api_client.post(f"kytos/core/{endpoint}", json=body)
115 1
    assert response.status_code == 200
116
    assert response.json() == {}
117