188 lines
5.1 KiB
Python
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
|