File size: 4,243 Bytes
4d2ab8d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import json

import pytest

from zevora.cli import main


def test_version_command(capsys):
    main(['version'])
    assert 'Zero-External Vendor Oriented Reasoning Agent' in capsys.readouterr().out


def test_help_command(capsys):
    main(['help'])
    output = capsys.readouterr().out
    assert 'background' in output
    assert 'provider' in output


class FakeProviderService:
    instances = []

    def __init__(self):
        self.calls = []
        self.__class__.instances.append(self)

    def list(self):
        self.calls.append(('list',))
        return [{'provider_id': 'example', 'credential': {'configured': True, 'masked': '***'}}]

    def save(self, payload, *, script=None):
        self.calls.append(('save', payload, script))
        return payload

    def import_manifest(self, payload, *, script=None):
        self.calls.append(('import', payload, script))
        return payload

    def export_manifest(self, provider_id):
        self.calls.append(('export', provider_id))
        return {'provider_id': provider_id, 'credential': {'source': 'environment', 'name': 'TEST_KEY'}}

    def remove(self, provider_id):
        self.calls.append(('remove', provider_id))
        return True

    async def test(self, provider_id, *, runtime_approved=False):
        self.calls.append(('test', provider_id, runtime_approved))
        return {'provider': provider_id, 'success': True}


@pytest.fixture
def provider_service(monkeypatch):
    FakeProviderService.instances.clear()
    monkeypatch.setattr('zevora.cli.ProviderService', FakeProviderService)
    return FakeProviderService


def test_provider_list_is_json_and_secret_free(provider_service, capsys):
    main(['provider', 'list'])
    result = json.loads(capsys.readouterr().out)
    assert result[0]['provider_id'] == 'example'
    assert 'value' not in result[0]['credential']


def test_provider_add_builds_manifest(provider_service, capsys):
    main([
        'provider', 'add', '--id', 'example', '--name', 'Example',
        '--protocol', 'openai-compatible', '--base-url', 'https://example.test/v1',
        '--model', 'example-model', '--credential-env', 'EXAMPLE_API_KEY',
    ])
    service = provider_service.instances[-1]
    payload = service.calls[0][1]
    assert payload['provider_id'] == 'example'
    assert payload['credential']['name'] == 'EXAMPLE_API_KEY'
    assert 'credential_value' not in payload
    assert json.loads(capsys.readouterr().out)['default_model'] == 'example-model'


def test_provider_import_and_export(provider_service, tmp_path, capsys):
    source = tmp_path / 'provider.json'
    source.write_text(json.dumps({'provider_id': 'imported'}), encoding='utf-8')
    output = tmp_path / 'exported.json'
    main(['provider', 'import', str(source)])
    capsys.readouterr()
    main(['provider', 'export', 'imported', '--output', str(output)])
    report = json.loads(capsys.readouterr().out)
    assert report['secret_free'] is True
    assert json.loads(output.read_text(encoding='utf-8'))['provider_id'] == 'imported'


def test_provider_test_and_remove(provider_service, capsys):
    main(['provider', 'test', 'example'])
    assert json.loads(capsys.readouterr().out)['success'] is True
    main(['provider', 'remove', 'example'])
    assert json.loads(capsys.readouterr().out)['removed'] is True


def test_runtime_test_requires_explicit_approval(provider_service):
    with pytest.raises(SystemExit):
        main(['provider', 'runtime-test', 'runtime-provider'])


def test_runtime_test_passes_approval(provider_service, capsys):
    main(['provider', 'runtime-test', 'runtime-provider', '--approve'])
    service = provider_service.instances[-1]
    assert service.calls == [('test', 'runtime-provider', True)]
    assert json.loads(capsys.readouterr().out)['success'] is True


def test_local_command_reports_qwen_model(capsys):
    main(['local'])
    payload = json.loads(capsys.readouterr().out)
    assert payload['provider'] == 'local'
    assert payload['model_id'] == 'qwen3.8-flash-next'
    assert payload['display_name'] == 'Qwen3.8-Flash-Next'
    assert payload['repository'] == 'unsloth/Qwen3.8-Flash-Next-GGUF'
    assert payload['quant'] == 'UD-Q4_K_XL'
    assert payload['cache_signature']