import logging import os import pytest import requests from flask_api import status BASE_URL = os.environ.get("TEST_BASE_URL", "http://localhost") LOGIN_URI = BASE_URL + "/login" LOGOUT_URI = BASE_URL + "/logout" ADMIN_URI = BASE_URL + "/admin" PASSWORD = os.environ.get("MONSUN_PASSWORD", "password") @pytest.fixture(autouse=True) def log_variables(): logger = logging.getLogger("system tests") logger.info(f"BASE_URL: {BASE_URL}") @pytest.fixture() def session() -> requests.Session: session = requests.Session() response_login = session.post( url=LOGIN_URI, data={"email": "andreasberthoud@gmail.com", "password": PASSWORD}, ) assert response_login.status_code == status.HTTP_200_OK return session def test_login_as_admin_and_accessing_admin_endpoint(): session_admin_ = requests.Session() response_login = session_admin_.post( url=LOGIN_URI, data={"email": "andreasberthoud@gmail.com", "password": PASSWORD}, ) assert response_login.status_code == status.HTTP_200_OK response_admin_logged_in = session_admin_.get( url=ADMIN_URI, ) assert response_admin_logged_in.status_code == status.HTTP_200_OK response_logout = session_admin_.delete( url=LOGOUT_URI, ) assert response_logout.status_code == status.HTTP_200_OK response_admin_logged_out = session_admin_.get( url=ADMIN_URI, ) assert response_admin_logged_out.status_code == status.HTTP_403_FORBIDDEN def test_toggle_client_led_then_status_is_ok(session): response = session.post( url=BASE_URL + "/client/command?cmd=led&id=red&command=toggle", ) assert response.status_code == status.HTTP_200_OK def test_pair_with_server_then_status_is_ok(session): response = session.post(url=BASE_URL + "/client/command?cmd=gp&command_id=1") assert response.status_code == status.HTTP_200_OK def test_toggle_server_led_then_status_is_ok(session): """Requires a connected GATT server""" response = session.post( url=BASE_URL + "/client/command?cmd=led&id=red&command=toggle&target=server", ) assert response.status_code == status.HTTP_200_OK