Files
shell-history-automation-tool/shellhist/tests/test_export.py

188 lines
5.1 KiB
Python

"""Tests for export functionality."""
import os
import tempfile
from shellhist.core.export import (
generate_alias,
generate_alias_name,
generate_script,
generate_script_name,
)
from shellhist.core.patterns import CommandPattern
class TestGenerateAlias:
"""Test alias generation functionality."""
def test_generate_alias_single_command(self):
"""Test generating alias for single command."""
pattern = CommandPattern(
commands=("git status",),
frequency=5,
percentage=10.0,
)
alias = generate_alias(pattern)
assert alias.startswith("alias ")
assert "git status" in alias
def test_generate_alias_multiple_commands(self):
"""Test generating alias for multiple commands."""
pattern = CommandPattern(
commands=("git add .", "git commit", "git push"),
frequency=3,
percentage=5.0,
)
alias = generate_alias(pattern)
assert "git add ." in alias
assert "git commit" in alias
assert "git push" in alias
def test_generate_alias_custom_name(self):
"""Test generating alias with custom name."""
pattern = CommandPattern(
commands=("echo test",),
frequency=1,
percentage=1.0,
)
alias = generate_alias(pattern, alias_name="mytest")
assert "mytest" in alias
class TestGenerateAliasName:
"""Test alias name generation."""
def test_alias_name_from_command(self):
"""Test generating alias name from command."""
pattern = CommandPattern(
commands=("git status",),
frequency=1,
percentage=1.0,
)
name = generate_alias_name(pattern)
assert "git" in name.lower() or "status" in name.lower()
def test_alias_name_from_multiple_commands(self):
"""Test generating alias name from multiple commands."""
pattern = CommandPattern(
commands=("git add .", "git commit", "git push"),
frequency=1,
percentage=1.0,
)
name = generate_alias_name(pattern)
assert len(name) > 0
class TestGenerateScript:
"""Test script generation functionality."""
def test_generate_script_dry_run(self):
"""Test script generation in dry-run mode."""
pattern = CommandPattern(
commands=("echo hello", "echo world"),
frequency=5,
percentage=10.0,
)
path, content = generate_script(pattern, dry_run=True)
assert "echo hello" in content
assert "echo world" in content
assert "shellhist_" in path
def test_generate_script_with_custom_name(self):
"""Test script generation with custom name."""
pattern = CommandPattern(
commands=("ls -la",),
frequency=1,
percentage=1.0,
)
path, content = generate_script(
pattern,
script_name="my_custom_script",
dry_run=True,
)
assert "my_custom_script" in path
def test_generate_script_actual_write(self):
"""Test actual script file creation."""
pattern = CommandPattern(
commands=("echo test",),
frequency=1,
percentage=1.0,
)
with tempfile.TemporaryDirectory() as tmpdir:
path, content = generate_script(
pattern,
output_dir=tmpdir,
dry_run=False,
)
assert os.path.exists(path)
with open(path, "r") as f:
saved_content = f.read()
assert "echo test" in saved_content
def test_script_permissions(self):
"""Test that generated scripts are executable."""
pattern = CommandPattern(
commands=("echo test",),
frequency=1,
percentage=1.0,
)
with tempfile.TemporaryDirectory() as tmpdir:
path, _ = generate_script(
pattern,
output_dir=tmpdir,
dry_run=False,
)
mode = os.stat(path).st_mode
assert mode & 0o111
class TestGenerateScriptName:
"""Test script name generation."""
def test_script_name_from_commands(self):
"""Test generating script name from commands."""
pattern = CommandPattern(
commands=("git status", "git log"),
frequency=1,
percentage=1.0,
)
name = generate_script_name(pattern)
assert len(name) > 0
assert name.startswith("shellhist_")
def test_script_name_sanitization(self):
"""Test that script names are sanitized."""
pattern = CommandPattern(
commands=("ls -la /tmp",),
frequency=1,
percentage=1.0,
)
name = generate_script_name(pattern)
assert "/" not in name