File: test_autarco.py

package info (click to toggle)
python-autarco 3.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 808 kB
  • sloc: python: 742; makefile: 3
file content (125 lines) | stat: -rw-r--r-- 3,454 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
"""Basic tests for the Autarco API."""

# pylint: disable=protected-access
import asyncio
from unittest.mock import patch

import pytest
from aiohttp import ClientError, ClientResponse, ClientSession
from aresponses import Response, ResponsesMockServer

from autarco import Autarco
from autarco.exceptions import (
    AutarcoConnectionError,
    AutarcoError,
)


async def test_json_request(
    aresponses: ResponsesMockServer,
    autarco_client: Autarco,
) -> None:
    """Test JSON response is handled correctly."""
    aresponses.add(
        "my.autarco.com",
        "/api/site/test",
        "GET",
        aresponses.Response(
            status=200,
            headers={"Content-Type": "application/json"},
        ),
    )
    response = await autarco_client._request("test")
    assert response is not None
    await autarco_client.close()


async def test_internal_session(aresponses: ResponsesMockServer) -> None:
    """Test internal session is created and closed."""
    aresponses.add(
        "my.autarco.com",
        "/api/site/test",
        "GET",
        aresponses.Response(
            status=200,
            headers={"Content-Type": "application/json"},
        ),
    )
    async with Autarco(email="test@autarco.com", password="energy") as client:
        await client._request("test")


async def test_timeout(aresponses: ResponsesMockServer) -> None:
    """Test request timeout from Autarco API."""

    # Faking a timeout by sleeping
    async def response_handler(_: ClientResponse) -> Response:
        await asyncio.sleep(0.2)
        return aresponses.Response(
            body="Goodmorning!",
        )

    aresponses.add(
        "my.autarco.com",
        "/api/site/test",
        "GET",
        response_handler,
    )

    async with ClientSession() as session:
        client = Autarco(
            email="test@autarco.com",
            password="energy",
            session=session,
            request_timeout=0.1,
        )
        with pytest.raises(AutarcoConnectionError):
            assert await client._request("test")


async def test_content_type(
    aresponses: ResponsesMockServer,
    autarco_client: Autarco,
) -> None:
    """Test request content type error from Autarco API."""
    aresponses.add(
        "my.autarco.com",
        "/api/site/test",
        "GET",
        aresponses.Response(
            status=200,
            headers={"Content-Type": "blabla/blabla"},
        ),
    )
    with pytest.raises(AutarcoError):
        assert await autarco_client._request("test")


async def test_client_error() -> None:
    """Test request client error from Autarco API."""
    async with ClientSession() as session:
        client = Autarco(email="test@autarco.com", password="energy", session=session)
        with (
            patch.object(
                session,
                "request",
                side_effect=ClientError,
            ),
            pytest.raises(AutarcoConnectionError),
        ):
            assert await client._request("test")


async def test_response_status_404(
    aresponses: ResponsesMockServer,
    autarco_client: Autarco,
) -> None:
    """Test HTTP 404 response handling."""
    aresponses.add(
        "my.autarco.com",
        "/api/site/test",
        "GET",
        aresponses.Response(text="GIVE ME SOLARPOWER!", status=404),
    )
    with pytest.raises(AutarcoConnectionError):
        assert await autarco_client._request("test")