|
5 | 5 | from micropy.app.stubs import stubs_app as app
|
6 | 6 | from micropy.exceptions import StubError, StubNotFound
|
7 | 7 | from micropy.pyd import PyDevice
|
| 8 | +from micropy.stubs import StubRepositoryPackage |
8 | 9 | from micropy.stubs.source import StubSource
|
9 | 10 | from pytest_mock import MockerFixture
|
10 | 11 | from stubber.codemod.modify_list import ListChangeSet
|
@@ -50,6 +51,24 @@ def stubs_locator_mock(mocker: MockerFixture):
|
50 | 51 | return stubs_locator
|
51 | 52 |
|
52 | 53 |
|
| 54 | +@pytest.fixture() |
| 55 | +def stub_search_data(mocker: MockerFixture): |
| 56 | + stub1 = mocker.MagicMock(StubRepositoryPackage, autospec=True) |
| 57 | + stub2 = mocker.MagicMock(StubRepositoryPackage, autospec=True) |
| 58 | + stub3 = mocker.MagicMock(StubRepositoryPackage, autospec=True) |
| 59 | + stub1.name = "test1" |
| 60 | + stub1.version = "1.0.0" |
| 61 | + stub2.name = "test2" |
| 62 | + stub2.version = "1.1.0" |
| 63 | + stub3.name = "test3" |
| 64 | + stub3.version = "0.9.0" |
| 65 | + return [ |
| 66 | + stub1, |
| 67 | + stub2, |
| 68 | + stub3, |
| 69 | + ] |
| 70 | + |
| 71 | + |
53 | 72 | def test_stubs_create(mocker: MockerFixture, pyb_mock, micropy_obj, runner):
|
54 | 73 | result = runner.invoke(app, ["create", "/dev/port"], obj=micropy_obj)
|
55 | 74 | print(result.stdout)
|
@@ -117,3 +136,31 @@ def test_stubs_list(micropy_obj, runner):
|
117 | 136 | micropy_obj.stubs.iter_by_firmware.assert_called_once()
|
118 | 137 | else:
|
119 | 138 | assert micropy_obj.stubs.iter_by_firmware.call_count == 2
|
| 139 | + |
| 140 | + |
| 141 | +@pytest.mark.parametrize("outdated", [True, False]) |
| 142 | +def test_stubs_search(stub_search_data, micropy_obj, runner, outdated): |
| 143 | + micropy_obj.stubs._loaded = {"test1", "test3"} |
| 144 | + micropy_obj.stubs._firmware = {"test1", "test3"} |
| 145 | + micropy_obj.repo.search.return_value = stub_search_data |
| 146 | + |
| 147 | + args = ["search", "test"] |
| 148 | + if outdated: |
| 149 | + args.append("--show-outdated") |
| 150 | + result = runner.invoke(app, args, obj=micropy_obj, catch_exceptions=False) |
| 151 | + |
| 152 | + assert result.exit_code == 0 |
| 153 | + assert "Results for test" in result.stdout |
| 154 | + assert "test1" in result.stdout |
| 155 | + assert "test2" in result.stdout |
| 156 | + assert "test3" in result.stdout |
| 157 | + assert "Installed" in result.stdout |
| 158 | + |
| 159 | + |
| 160 | +def test_stubs_search_no_results(mocker: MockerFixture, micropy_obj, runner): |
| 161 | + micropy_obj.repo.search.return_value = [] |
| 162 | + |
| 163 | + result = runner.invoke(app, ["search", "nonexistent"], obj=micropy_obj) |
| 164 | + |
| 165 | + assert result.exit_code == 0 |
| 166 | + assert "No results found for: nonexistent" in result.stdout |
0 commit comments