#!/usr/bin/env python3 import pytest from starlette.authentication import UnauthenticatedUser from starlette.testclient import TestClient from pyheatpump.config import app, config, \ CONFIG_FILES, get_config, get_config_dict, set_config, config_route, ROUTES, \ mac_address_init, save_config, get_last_update, set_last_update, \ last_update_route from unittest.mock import patch, MagicMock from pprint import pprint import json from tempfile import mkstemp from configparser import ConfigParser import os from requests import Request from uuid import uuid4 from datetime import datetime @pytest.fixture def tmpconf(testdir): tmp_conf_filepath = os.path.join(testdir.tmpdir, 'pyheatpump.ini') config = ConfigParser( default_section='heatpump') with open(tmp_conf_filepath, 'w') as f: f.write("[heatpump]\nmac_address = 'None'") #CONFIG_FILES = [tmp_conf_filepath] config.read(filenames=CONFIG_FILES) return config def test_get_(tmpconf): c = TestClient(app) r = c.get('/') assert r.status_code == 200 class RequestMock(MagicMock): def __get__(self, key): if key == 'method': return 'GET' def test_get_config(tmpconf): c = TestClient(app) resp = c.get('/') assert resp.status_code == 200 d_resp = resp.json() assert type(d_resp) == dict """ for sect in default_config.keys(): assert sect in d_resp.keys() for item in default_config[sect].keys(): assert item in d_resp[sect].keys() """ @pytest.mark.skip def test_set_config(tmpconf): c = TestClient(app) _, tmpconf = mkstemp() CONFIG_FILES.append(tmpconf) rand = str(uuid4()) r = c.post('/', json=json.dumps({ 'supervisor': { 'scheme':rand } })) config = ConfigParser() config.read(filenames=[tmpconf]) assert r.status_code == 200 assert config.get('supervisor', 'scheme') == rand assert type(get_config_dict()) == dict d_config =get_config_dict() assert 'supervisor' in d_config.keys() assert 'scheme' in d_config['supervisor'].keys() assert d_config['supervisor']['scheme'] == rand os.unlink(tmpconf) def test_mac_address(testdir, tmpconf): c = TestClient(app) _, tmpconf = mkstemp() CONFIG_FILES.append(tmpconf) mac_address = mac_address_init() assert type(get_config_dict()) == dict d_config = get_config_dict() assert d_config['heatpump']['mac_address'] == mac_address resp = c.get('/mac') assert resp.status_code == 200 mac_address = resp.content.decode() assert d_config['heatpump']['mac_address'] == mac_address @pytest.mark.skip def test_last_update(testdir, tmpconf): c = TestClient(app) resp = c.get('/last_update') last_update_0 = int(resp.content.decode()) print(f'update0 {last_update_0}') resp = c.post('/last_update', str(datetime.now().strftime('%s'))) last_update_1 = int(resp.content.decode()) print(f'update1 {last_update_1}') assert last_update_0 == last_update_1