Add initial test suite
This commit is contained in:
@@ -0,0 +1,246 @@
|
||||
import os
|
||||
import stat
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
from unittest.mock import patch, PropertyMock
|
||||
|
||||
import qmk_cli.helpers
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def reset_env():
|
||||
cur_dir = os.getcwd()
|
||||
|
||||
yield cur_dir
|
||||
|
||||
os.chdir(cur_dir)
|
||||
qmk_cli.helpers.find_qmk_firmware.cache_clear()
|
||||
qmk_cli.helpers.in_qmk_firmware.cache_clear()
|
||||
qmk_cli.helpers.find_qmk_userspace.cache_clear()
|
||||
qmk_cli.helpers.in_qmk_userspace.cache_clear()
|
||||
|
||||
|
||||
def test_abspath(temp_directory):
|
||||
tmp = temp_directory.absolute()
|
||||
ret = qmk_cli.helpers.AbsPath(tmp)
|
||||
assert ret.samefile(tmp)
|
||||
|
||||
|
||||
def test_abspath_str(temp_directory):
|
||||
tmp = temp_directory.absolute().as_posix()
|
||||
ret = qmk_cli.helpers.AbsPath(tmp)
|
||||
assert ret.samefile(tmp)
|
||||
|
||||
|
||||
def test_abspath_rel(temp_directory):
|
||||
with patch.dict('os.environ', {'ORIG_CWD': temp_directory.as_posix()}, clear=True):
|
||||
tmp = './asdf'
|
||||
ret = qmk_cli.helpers.AbsPath(tmp)
|
||||
assert ret.as_posix() == (temp_directory / 'asdf').as_posix()
|
||||
|
||||
|
||||
def test_rmtree(temp_directory):
|
||||
tmp = temp_directory / 'asdf.txt'
|
||||
tmp.touch()
|
||||
|
||||
qmk_cli.helpers.rmtree(temp_directory)
|
||||
|
||||
assert tmp.exists() is False
|
||||
|
||||
|
||||
@pytest.mark.skipif(os.name != "nt", reason="Only triggers issue on windows")
|
||||
def test_rmtree_readonly(temp_directory):
|
||||
tmp = temp_directory / 'asdf.txt'
|
||||
tmp.touch()
|
||||
os.chmod(tmp, stat.S_IREAD)
|
||||
|
||||
qmk_cli.helpers.rmtree(temp_directory)
|
||||
|
||||
assert tmp.exists() is False
|
||||
|
||||
|
||||
def test_is_qmk_firmware(temp_directory):
|
||||
(temp_directory / 'quantum').mkdir(parents=True)
|
||||
(temp_directory / 'lib/python/qmk/cli').mkdir(parents=True)
|
||||
(temp_directory / 'requirements.txt').touch()
|
||||
(temp_directory / 'requirements-dev.txt').touch()
|
||||
(temp_directory / 'lib/python/qmk/cli/__init__.py').touch()
|
||||
|
||||
assert qmk_cli.helpers.is_qmk_firmware(temp_directory) is True
|
||||
|
||||
|
||||
def test_is_qmk_firmware_partially_missing(temp_directory):
|
||||
(temp_directory / 'lib/python/qmk/cli').mkdir(parents=True)
|
||||
(temp_directory / 'lib/python/qmk/cli/__init__.py').touch()
|
||||
|
||||
assert qmk_cli.helpers.is_qmk_firmware(temp_directory) is False
|
||||
|
||||
|
||||
def test_find_qmk_firmware(temp_directory):
|
||||
(temp_directory / 'quantum').mkdir(parents=True)
|
||||
(temp_directory / 'lib/python/qmk/cli').mkdir(parents=True)
|
||||
(temp_directory / 'requirements.txt').touch()
|
||||
(temp_directory / 'requirements-dev.txt').touch()
|
||||
(temp_directory / 'lib/python/qmk/cli/__init__.py').touch()
|
||||
os.chdir(temp_directory)
|
||||
|
||||
assert qmk_cli.helpers.find_qmk_firmware().as_posix() == temp_directory.as_posix()
|
||||
|
||||
|
||||
def test_find_qmk_firmware_env(temp_directory):
|
||||
with patch.dict('os.environ', {'QMK_HOME': temp_directory.as_posix()}, clear=True):
|
||||
assert qmk_cli.helpers.find_qmk_firmware().as_posix() == temp_directory.as_posix()
|
||||
|
||||
|
||||
def test_find_qmk_firmware_env_missing(temp_directory):
|
||||
with patch.dict('os.environ', {'QMK_HOME': (temp_directory / 'asdf').as_posix()}, clear=True):
|
||||
assert qmk_cli.helpers.find_qmk_firmware().as_posix() == (temp_directory / 'asdf').as_posix()
|
||||
|
||||
|
||||
def test_find_qmk_firmware_config(temp_directory):
|
||||
with patch.object(qmk_cli.helpers, 'cli') as cli:
|
||||
type(cli.config.user).qmk_home = PropertyMock(return_value=temp_directory.as_posix())
|
||||
|
||||
assert qmk_cli.helpers.find_qmk_firmware().as_posix() == temp_directory.as_posix()
|
||||
|
||||
|
||||
def test_find_qmk_firmware_config_user():
|
||||
with patch.object(qmk_cli.helpers, 'cli') as cli:
|
||||
type(cli.config.user).qmk_home = PropertyMock(return_value='~/asdf')
|
||||
|
||||
assert qmk_cli.helpers.find_qmk_firmware().as_posix() == (Path.home() / 'asdf').as_posix()
|
||||
|
||||
|
||||
def test_find_qmk_firmware_default(temp_directory):
|
||||
with patch('pathlib.Path.home') as home:
|
||||
home.return_value = temp_directory
|
||||
|
||||
assert qmk_cli.helpers.find_qmk_firmware().as_posix() == (temp_directory / 'qmk_firmware').as_posix()
|
||||
|
||||
|
||||
def test_in_qmk_firmware(temp_directory):
|
||||
(temp_directory / 'quantum').mkdir(parents=True)
|
||||
(temp_directory / 'lib/python/qmk/cli').mkdir(parents=True)
|
||||
(temp_directory / 'requirements.txt').touch()
|
||||
(temp_directory / 'requirements-dev.txt').touch()
|
||||
(temp_directory / 'lib/python/qmk/cli/__init__.py').touch()
|
||||
os.chdir(temp_directory)
|
||||
|
||||
assert qmk_cli.helpers.in_qmk_firmware().as_posix() == temp_directory.as_posix()
|
||||
|
||||
|
||||
def test_in_qmk_firmware_sub(temp_directory):
|
||||
(temp_directory / 'quantum').mkdir(parents=True)
|
||||
(temp_directory / 'lib/python/qmk/cli').mkdir(parents=True)
|
||||
(temp_directory / 'requirements.txt').touch()
|
||||
(temp_directory / 'requirements-dev.txt').touch()
|
||||
(temp_directory / 'lib/python/qmk/cli/__init__.py').touch()
|
||||
os.chdir(temp_directory / 'quantum')
|
||||
|
||||
assert qmk_cli.helpers.in_qmk_firmware().as_posix() == temp_directory.as_posix()
|
||||
|
||||
|
||||
def test_in_qmk_firmware_sub_sub(temp_directory):
|
||||
(temp_directory / 'quantum').mkdir(parents=True)
|
||||
(temp_directory / 'lib/python/qmk/cli').mkdir(parents=True)
|
||||
(temp_directory / 'requirements.txt').touch()
|
||||
(temp_directory / 'requirements-dev.txt').touch()
|
||||
(temp_directory / 'lib/python/qmk/cli/__init__.py').touch()
|
||||
os.chdir(temp_directory / 'lib' / 'python')
|
||||
|
||||
assert qmk_cli.helpers.in_qmk_firmware().as_posix() == temp_directory.as_posix()
|
||||
|
||||
|
||||
def test_in_qmk_firmware_invalid(temp_directory):
|
||||
os.chdir(temp_directory)
|
||||
|
||||
assert qmk_cli.helpers.in_qmk_firmware() is None
|
||||
|
||||
|
||||
def test_is_qmk_userspace(temp_directory):
|
||||
(temp_directory / 'qmk.json').write_text('{"userspace_version": 2}')
|
||||
|
||||
assert qmk_cli.helpers.is_qmk_userspace(temp_directory) is True
|
||||
|
||||
|
||||
def test_is_qmk_userspace_missing(temp_directory):
|
||||
assert qmk_cli.helpers.is_qmk_userspace(temp_directory) is False
|
||||
|
||||
|
||||
def test_is_qmk_userspace_invalid(temp_directory):
|
||||
(temp_directory / 'qmk.json').write_text('asdf')
|
||||
|
||||
assert qmk_cli.helpers.is_qmk_userspace(temp_directory) is False
|
||||
|
||||
|
||||
def test_is_qmk_userspace_empty(temp_directory):
|
||||
(temp_directory / 'qmk.json').touch()
|
||||
|
||||
assert qmk_cli.helpers.is_qmk_userspace(temp_directory) is False
|
||||
|
||||
|
||||
def test_find_qmk_userspace(temp_directory):
|
||||
(temp_directory / 'qmk.json').write_text('{"userspace_version": 2}')
|
||||
os.chdir(temp_directory)
|
||||
|
||||
assert qmk_cli.helpers.find_qmk_userspace().as_posix() == temp_directory.as_posix()
|
||||
|
||||
|
||||
def test_find_qmk_userspace_env(temp_directory):
|
||||
with patch.dict('os.environ', {'QMK_USERSPACE': temp_directory.as_posix()}, clear=True):
|
||||
assert qmk_cli.helpers.find_qmk_userspace().as_posix() == temp_directory.as_posix()
|
||||
|
||||
|
||||
def test_find_qmk_userspace_env_missing(temp_directory):
|
||||
with patch.dict('os.environ', {'QMK_USERSPACE': (temp_directory / 'asdf').as_posix()}, clear=True):
|
||||
assert qmk_cli.helpers.find_qmk_userspace().as_posix() == (temp_directory / 'asdf').as_posix()
|
||||
|
||||
|
||||
def test_find_qmk_userspace_config(temp_directory):
|
||||
with patch.object(qmk_cli.helpers, 'cli') as cli:
|
||||
type(cli.config.user).overlay_dir = PropertyMock(return_value=temp_directory.as_posix())
|
||||
|
||||
assert qmk_cli.helpers.find_qmk_userspace().as_posix() == temp_directory.as_posix()
|
||||
|
||||
|
||||
def test_find_qmk_userspace_config_user():
|
||||
with patch.object(qmk_cli.helpers, 'cli') as cli:
|
||||
type(cli.config.user).overlay_dir = PropertyMock(return_value='~/asdf')
|
||||
|
||||
assert qmk_cli.helpers.find_qmk_userspace().as_posix() == (Path.home() / 'asdf').as_posix()
|
||||
|
||||
|
||||
def test_find_qmk_userspace_default(temp_directory):
|
||||
with patch('pathlib.Path.home') as home:
|
||||
home.return_value = temp_directory
|
||||
|
||||
assert qmk_cli.helpers.find_qmk_userspace().as_posix() == (temp_directory / 'qmk_userspace').as_posix()
|
||||
|
||||
|
||||
def test_in_qmk_userspace(temp_directory):
|
||||
(temp_directory / 'qmk.json').write_text('{"userspace_version": 2}')
|
||||
os.chdir(temp_directory)
|
||||
|
||||
assert qmk_cli.helpers.in_qmk_userspace().as_posix() == temp_directory.as_posix()
|
||||
|
||||
|
||||
def test_in_qmk_userspace_sub(temp_directory):
|
||||
(temp_directory / 'qmk.json').write_text('{"userspace_version": 2}')
|
||||
(temp_directory / 'keymaps' / 'test').mkdir(parents=True)
|
||||
os.chdir(temp_directory / 'keymaps')
|
||||
|
||||
assert qmk_cli.helpers.in_qmk_userspace().as_posix() == temp_directory.as_posix()
|
||||
|
||||
|
||||
def test_in_qmk_userspace_sub_sub(temp_directory):
|
||||
(temp_directory / 'qmk.json').write_text('{"userspace_version": 2}')
|
||||
(temp_directory / 'keymaps' / 'test').mkdir(parents=True)
|
||||
os.chdir(temp_directory / 'keymaps' / 'test')
|
||||
|
||||
assert qmk_cli.helpers.in_qmk_userspace().as_posix() == temp_directory.as_posix()
|
||||
|
||||
|
||||
def test_in_qmk_userspace_invalid(temp_directory):
|
||||
os.chdir(temp_directory)
|
||||
|
||||
assert qmk_cli.helpers.in_qmk_userspace() is None
|
||||
Reference in New Issue
Block a user