# Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
# For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
import pytest
from harness.interface.defs import status, key_codes
from harness.interface.CDCSerial import Keytype
from harness import log
import time
import random
def change_auto_lock_timer(harness, value: str):
body = {"changeAutoLockTimeout": value}
ret = harness.endpoint_request("developerMode", "put", body)
assert ret["status"] == status["NoContent"]
@pytest.fixture(scope='function')
def phone_ends_with_default_auto_lock(harness):
yield
timeout = str(180)
log.info("Setting back default timeout to {}ms".format(timeout))
change_auto_lock_timer(harness, timeout)
app_navigation_to_name_mapping = {
"messages": "ApplicationMessages",
"calllog": "ApplicationCallLog",
"contacts": "ApplicationPhonebook",
"music": "ApplicationMusicPlayer",
# "meditation": "ApplicationMeditation",
# "settings": "ApplicationSettings",
"tools": "ApplicationDesktop", # other MenuPage
"alarm": "ApplicationAlarmClock",
"calendar": "ApplicationCalendar"
}
def enter_application(harness, nav_name, app_name):
harness.connection.send_key_code(key_codes["enter"])
harness.open_application(nav_name)
if harness.get_application_name() != app_name:
time.sleep(1)
assert harness.get_application_name() == app_name
def open_random_application(harness):
navigation, name = random.choice(list(app_navigation_to_name_mapping.items()))
print(navigation)
print(name)
# enter_application(harness, navigation, name)
enter_application(harness, "calendar", "ApplicationCalendar")
return "ApplicationCalendar"
# return name
def contains_value(body: dict, attr_name, attr_value):
if attr_name in body:
return body[attr_name] == attr_value
def contains_value_recursively(body: dict, attr_name, attr_value):
if len(body) == 1:
print(next(iter(body)))
return contains_value_recursively(next(iter(body.values())), attr_name, attr_value)
if contains_value(body, attr_name, attr_value):
return True
if 'Children' in body:
for child in body['Children']:
value_found = contains_value_recursively(child, attr_name, attr_value)
if value_found:
return True
return False
def get_dom(harness):
body = {"ui": True, "getWindow": True}
result = harness.endpoint_request("developerMode", "get", body)
# log.info("data {}".format(find_item_depth_first(result['body']['dom'], 'StatusBar')))
assert result['body']
assert 'Window' in result['body']['dom']
return result
@pytest.mark.rt1051
@pytest.mark.usefixtures("phone_ends_test_in_desktop")
@pytest.mark.usefixtures("phone_in_desktop")
@pytest.mark.usefixtures("phone_ends_with_default_auto_lock")
@pytest.mark.usefixtures("phone_unlocked")
def test_auto_lock(harness):
# change timer lock value
change_auto_lock_timer(harness, str(5))
assert harness.get_application_name() == "ApplicationDesktop"
time.sleep(6)
assert harness.connection.is_phone_locked() is True
harness.unlock_phone()
app = open_random_application(harness)
# we should go back to desktop an be locked after 6 seconds
time.sleep(6)
assert harness.connection.is_phone_locked() is True
harness.unlock_phone()
# we should go back to previously chosen application
assert harness.get_application_name() == app
@pytest.mark.rt1051
@pytest.mark.usefixtures("phone_ends_test_in_desktop")
@pytest.mark.usefixtures("phone_ends_with_default_auto_lock")
@pytest.mark.usefixtures("phone_unlocked")
def test_no_auto_lock_for_meditation_app(harness):
# change timer lock value
change_auto_lock_timer(harness, str(5))
assert harness.get_application_name() == "ApplicationDesktop"
time.sleep(6)
assert harness.connection.is_phone_locked() is True
harness.unlock_phone()
enter_application(harness, "meditation", "ApplicationMeditation")
# we should go back to desktop an be locked after 4 seconds
time.sleep(6)
assert harness.connection.is_phone_locked() is False
# we should go back to previously chosen application
assert harness.get_application_name() == "ApplicationMeditation"
# go back to main screen
harness.connection.send_key_code(key_codes["fnRight"], Keytype.long_press)