Add test files
This commit is contained in:
100
tests/test_history.py
Normal file
100
tests/test_history.py
Normal file
@@ -0,0 +1,100 @@
|
||||
"""Tests for history learning module."""
|
||||
|
||||
import pytest
|
||||
import tempfile
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
from shellgenius.history import HistoryStorage, HistoryLearner, HistoryEntry
|
||||
|
||||
|
||||
class TestHistoryStorage:
|
||||
@pytest.fixture
|
||||
def temp_storage(self):
|
||||
"""Create temporary storage for testing."""
|
||||
with tempfile.NamedTemporaryFile(mode='w', suffix='.yaml', delete=False) as f:
|
||||
f.write("entries: []\nmetadata:\n version: '1.0'")
|
||||
f.flush()
|
||||
yield f.name
|
||||
os.unlink(f.name)
|
||||
|
||||
def test_init_storage(self, temp_storage):
|
||||
"""Test storage initialization."""
|
||||
storage = HistoryStorage(temp_storage)
|
||||
|
||||
assert storage.storage_path == temp_storage
|
||||
|
||||
def test_add_and_get_entry(self, temp_storage):
|
||||
"""Test adding and retrieving history entries."""
|
||||
storage = HistoryStorage(temp_storage)
|
||||
|
||||
entry = HistoryEntry(
|
||||
id="test-id",
|
||||
timestamp="2024-01-01T00:00:00",
|
||||
description="Test command",
|
||||
commands=["echo hello"],
|
||||
shell_type="bash",
|
||||
)
|
||||
|
||||
storage.add_entry(entry)
|
||||
entries = storage.get_entries()
|
||||
|
||||
assert len(entries) == 1
|
||||
assert entries[0].description == "Test command"
|
||||
|
||||
def test_search_history(self, temp_storage):
|
||||
"""Test searching history."""
|
||||
storage = HistoryStorage(temp_storage)
|
||||
|
||||
entry = HistoryEntry(
|
||||
id="test-id",
|
||||
timestamp="2024-01-01T00:00:00",
|
||||
description="List files command",
|
||||
commands=["ls -la"],
|
||||
shell_type="bash",
|
||||
)
|
||||
storage.add_entry(entry)
|
||||
|
||||
results = storage.search("files")
|
||||
|
||||
assert len(results) == 1
|
||||
|
||||
def test_clear_history(self, temp_storage):
|
||||
"""Test clearing history."""
|
||||
storage = HistoryStorage(temp_storage)
|
||||
|
||||
entry = HistoryEntry(
|
||||
id="test-id",
|
||||
timestamp="2024-01-01T00:00:00",
|
||||
description="Test",
|
||||
commands=["echo"],
|
||||
shell_type="bash",
|
||||
)
|
||||
storage.add_entry(entry)
|
||||
|
||||
storage.clear()
|
||||
entries = storage.get_entries()
|
||||
|
||||
assert len(entries) == 0
|
||||
|
||||
|
||||
class TestHistoryLearner:
|
||||
def test_learn_command(self):
|
||||
"""Test learning from generated command."""
|
||||
with tempfile.NamedTemporaryFile(mode='w', suffix='.yaml', delete=False) as f:
|
||||
f.write("entries: []\nmetadata:\n version: '1.0'")
|
||||
f.flush()
|
||||
storage_path = f.name
|
||||
|
||||
try:
|
||||
with patch('shellgenius.history.get_config') as mock_config:
|
||||
mock_config.return_value.get.return_value = storage_path
|
||||
mock_config.return_value.is_history_enabled.return_value = True
|
||||
|
||||
learner = HistoryLearner()
|
||||
entry = learner.learn("list files", ["ls -la"], "bash")
|
||||
|
||||
assert entry.description == "list files"
|
||||
assert "ls -la" in entry.commands
|
||||
finally:
|
||||
os.unlink(storage_path)
|
||||
Reference in New Issue
Block a user