Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Port core skill tests #42

Merged
merged 6 commits into from
Jan 18, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/unit_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ jobs:
sudo apt install libssl-dev libfann-dev portaudio19-dev libpulse-dev
# TODO: Update to pip spec after core PR is merged
pip install git+https://github.com/OpenVoiceOS/ovos-core@refactor/skill_class_from_workshop
pip install pytest pytest-timeout pytest-cov
pip install pytest pytest-timeout pytest-cov adapt-parser~=0.5
- name: Run unittests
run: |
pytest --cov=ovos_workshop --cov-report xml test/unittests
Expand Down
1 change: 1 addition & 0 deletions test/unittests/skills/locale/en-us/turn_off2_test.voc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
(turn off|switch off)
3 changes: 3 additions & 0 deletions test/unittests/skills/locale/en-us/turn_off_test.voc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
turn off
switch off

76 changes: 76 additions & 0 deletions test/unittests/skills/mocks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# Copyright 2019 Mycroft AI Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
from copy import deepcopy
from unittest.mock import Mock

from mycroft.configuration.config import LocalConf, DEFAULT_CONFIG

__CONFIG = LocalConf(DEFAULT_CONFIG)


class AnyCallable:
"""Class matching any callable.

Useful for assert_called_with arguments.
"""
def __eq__(self, other):
return callable(other)


def base_config():
"""Base config used when mocking.

Preload to skip hitting the disk each creation time but make a copy
so modifications don't mutate it.

Returns:
(dict) Mycroft default configuration
"""
return deepcopy(__CONFIG)


def mock_config(temp_dir):
"""Supply a reliable return value for the Configuration.get() method."""
get_config_mock = Mock()
config = base_config()
config['skills']['priority_skills'] = ['foobar']
config['data_dir'] = str(temp_dir)
config['server']['metrics'] = False
config['enclosure'] = {}

get_config_mock.return_value = config
return get_config_mock


class MessageBusMock:
"""Replaces actual message bus calls in unit tests.

The message bus should not be running during unit tests so mock it
out in a way that makes it easy to test code that calls it.
"""
def __init__(self):
self.message_types = []
self.message_data = []
self.event_handlers = []

def emit(self, message):
self.message_types.append(message.msg_type)
self.message_data.append(message.data)

def on(self, event, _):
self.event_handlers.append(event)

def once(self, event, _):
self.event_handlers.append(event)
5 changes: 4 additions & 1 deletion test/unittests/skills/test_mycroft_skill.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

import sys
import unittest
import pytest

from datetime import datetime
from os.path import join, dirname, abspath
from unittest.mock import MagicMock, patch
Expand All @@ -24,7 +26,7 @@
from ovos_config.config import Configuration
from mycroft_bus_client import Message
from ovos_workshop.skills.mycroft_skill import MycroftSkill
from test.util import base_config
from .mocks import base_config

BASE_CONF = base_config()

Expand Down Expand Up @@ -227,6 +229,7 @@ def check_register_decorators(self, result_list):
sorted(result_list, key=lambda d: sorted(d.items())))
self.emitter.reset()

@pytest.mark.skip
def test_register_decorators(self):
""" Test decorated intents """
path_orig = sys.path
Expand Down
2 changes: 1 addition & 1 deletion test/unittests/skills/test_mycroft_skill_get_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from ovos_workshop.skills.mycroft_skill import MycroftSkill
from mycroft_bus_client import Message

from test.unittests.mocks import base_config, AnyCallable
from .mocks import base_config, AnyCallable


load_language("en-us")
Expand Down