175 lines
7.5 KiB
Python
175 lines
7.5 KiB
Python
|
|
"""
|
||
|
|
Test basic emoji flag functionality - Issue #37
|
||
|
|
|
||
|
|
Tests the implementation of --emoji flag and MARKITECT_EMOJI environment variable
|
||
|
|
to complement the existing --ascii flag functionality.
|
||
|
|
"""
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
import os
|
||
|
|
import subprocess
|
||
|
|
import sys
|
||
|
|
from pathlib import Path
|
||
|
|
from unittest.mock import patch, mock_open
|
||
|
|
|
||
|
|
|
||
|
|
class TestEmojiFlag:
|
||
|
|
"""Test emoji flag functionality in CLI tools."""
|
||
|
|
|
||
|
|
def test_emoji_flag_exists_in_visualize_schema(self):
|
||
|
|
"""Test that --emoji flag is available in visualize_schema.py - Issue #37."""
|
||
|
|
# Test that the --emoji flag is recognized by the argument parser
|
||
|
|
result = subprocess.run([
|
||
|
|
sys.executable, 'tools/visualize_schema.py', '--help'
|
||
|
|
], capture_output=True, text=True)
|
||
|
|
|
||
|
|
assert result.returncode == 0
|
||
|
|
assert "--emoji" in result.stdout
|
||
|
|
assert "Use emoji output" in result.stdout or "Enable emoji output" in result.stdout
|
||
|
|
|
||
|
|
def test_emoji_flag_exists_in_schema_summary(self):
|
||
|
|
"""Test that --emoji flag is available in schema_summary.py - Issue #37."""
|
||
|
|
result = subprocess.run([
|
||
|
|
sys.executable, 'tools/schema_summary.py', '--help'
|
||
|
|
], capture_output=True, text=True)
|
||
|
|
|
||
|
|
assert result.returncode == 0
|
||
|
|
assert "--emoji" in result.stdout
|
||
|
|
assert "Use emoji output" in result.stdout or "Enable emoji output" in result.stdout
|
||
|
|
|
||
|
|
def test_emoji_flag_mutually_exclusive_with_ascii_visualize_schema(self):
|
||
|
|
"""Test that --emoji and --ascii flags are mutually exclusive in visualize_schema - Issue #37."""
|
||
|
|
# Create a temporary test file
|
||
|
|
test_file = Path("temp_test_schema.json")
|
||
|
|
test_file.write_text('{"type": "object", "properties": {"name": {"type": "string"}}}')
|
||
|
|
|
||
|
|
try:
|
||
|
|
result = subprocess.run([
|
||
|
|
sys.executable, 'tools/visualize_schema.py', str(test_file), '--ascii', '--emoji'
|
||
|
|
], capture_output=True, text=True)
|
||
|
|
|
||
|
|
# Should fail with argument parsing error due to mutual exclusivity
|
||
|
|
assert result.returncode == 2, "Using both --ascii and --emoji should result in argument parsing error"
|
||
|
|
assert "not allowed with argument" in result.stderr, "Error message should indicate mutual exclusivity"
|
||
|
|
|
||
|
|
finally:
|
||
|
|
if test_file.exists():
|
||
|
|
test_file.unlink()
|
||
|
|
|
||
|
|
def test_emoji_flag_mutually_exclusive_with_ascii_schema_summary(self):
|
||
|
|
"""Test that --emoji and --ascii flags are mutually exclusive in schema_summary - Issue #37."""
|
||
|
|
test_file = Path("temp_test_schema.json")
|
||
|
|
test_file.write_text('{"type": "object", "properties": {"name": {"type": "string"}}}')
|
||
|
|
|
||
|
|
try:
|
||
|
|
result = subprocess.run([
|
||
|
|
sys.executable, 'tools/schema_summary.py', str(test_file), '--ascii', '--emoji'
|
||
|
|
], capture_output=True, text=True)
|
||
|
|
|
||
|
|
# Should fail with argument parsing error due to mutual exclusivity
|
||
|
|
assert result.returncode == 2, "Using both --ascii and --emoji should result in argument parsing error"
|
||
|
|
assert "not allowed with argument" in result.stderr, "Error message should indicate mutual exclusivity"
|
||
|
|
|
||
|
|
finally:
|
||
|
|
if test_file.exists():
|
||
|
|
test_file.unlink()
|
||
|
|
|
||
|
|
def test_emoji_output_is_default_in_visualize_schema(self):
|
||
|
|
"""Test that emoji output is the default behavior in visualize_schema - Issue #37."""
|
||
|
|
test_file = Path("temp_test_schema.json")
|
||
|
|
test_file.write_text('{"type": "object", "properties": {"name": {"type": "string"}}}')
|
||
|
|
|
||
|
|
try:
|
||
|
|
# Test default output (should have emojis)
|
||
|
|
result_default = subprocess.run([
|
||
|
|
sys.executable, 'tools/visualize_schema.py', str(test_file)
|
||
|
|
], capture_output=True, text=True)
|
||
|
|
|
||
|
|
# Test explicit emoji flag
|
||
|
|
result_emoji = subprocess.run([
|
||
|
|
sys.executable, 'tools/visualize_schema.py', str(test_file), '--emoji'
|
||
|
|
], capture_output=True, text=True)
|
||
|
|
|
||
|
|
assert result_default.returncode == 0
|
||
|
|
assert result_emoji.returncode == 0
|
||
|
|
|
||
|
|
# Both should contain emoji characters (basic check)
|
||
|
|
default_has_emojis = any(ord(char) > 127 for char in result_default.stdout)
|
||
|
|
emoji_has_emojis = any(ord(char) > 127 for char in result_emoji.stdout)
|
||
|
|
|
||
|
|
assert default_has_emojis, "Default output should contain emoji characters"
|
||
|
|
assert emoji_has_emojis, "Explicit --emoji flag should produce emoji output"
|
||
|
|
|
||
|
|
finally:
|
||
|
|
if test_file.exists():
|
||
|
|
test_file.unlink()
|
||
|
|
|
||
|
|
def test_emoji_output_is_default_in_schema_summary(self):
|
||
|
|
"""Test that emoji output is the default behavior in schema_summary - Issue #37."""
|
||
|
|
test_file = Path("temp_test_schema.json")
|
||
|
|
test_file.write_text('{"type": "object", "properties": {"name": {"type": "string"}}}')
|
||
|
|
|
||
|
|
try:
|
||
|
|
# Test default output (should have emojis)
|
||
|
|
result_default = subprocess.run([
|
||
|
|
sys.executable, 'tools/schema_summary.py', str(test_file)
|
||
|
|
], capture_output=True, text=True)
|
||
|
|
|
||
|
|
# Test explicit emoji flag
|
||
|
|
result_emoji = subprocess.run([
|
||
|
|
sys.executable, 'tools/schema_summary.py', str(test_file), '--emoji'
|
||
|
|
], capture_output=True, text=True)
|
||
|
|
|
||
|
|
assert result_default.returncode == 0
|
||
|
|
assert result_emoji.returncode == 0
|
||
|
|
|
||
|
|
# Both should contain emoji characters (basic check)
|
||
|
|
default_has_emojis = any(ord(char) > 127 for char in result_default.stdout)
|
||
|
|
emoji_has_emojis = any(ord(char) > 127 for char in result_emoji.stdout)
|
||
|
|
|
||
|
|
assert default_has_emojis, "Default output should contain emoji characters"
|
||
|
|
assert emoji_has_emojis, "Explicit --emoji flag should produce emoji output"
|
||
|
|
|
||
|
|
finally:
|
||
|
|
if test_file.exists():
|
||
|
|
test_file.unlink()
|
||
|
|
|
||
|
|
def test_ascii_flag_overrides_emoji_default_visualize_schema(self):
|
||
|
|
"""Test that --ascii flag overrides emoji default in visualize_schema - Issue #37."""
|
||
|
|
test_file = Path("temp_test_schema.json")
|
||
|
|
test_file.write_text('{"type": "object", "properties": {"name": {"type": "string"}}}')
|
||
|
|
|
||
|
|
try:
|
||
|
|
result = subprocess.run([
|
||
|
|
sys.executable, 'tools/visualize_schema.py', str(test_file), '--ascii'
|
||
|
|
], capture_output=True, text=True)
|
||
|
|
|
||
|
|
assert result.returncode == 0
|
||
|
|
|
||
|
|
# Should NOT contain emoji characters
|
||
|
|
has_emojis = any(ord(char) > 127 for char in result.stdout)
|
||
|
|
assert not has_emojis, "ASCII mode should not contain emoji characters"
|
||
|
|
|
||
|
|
finally:
|
||
|
|
if test_file.exists():
|
||
|
|
test_file.unlink()
|
||
|
|
|
||
|
|
def test_ascii_flag_overrides_emoji_default_schema_summary(self):
|
||
|
|
"""Test that --ascii flag overrides emoji default in schema_summary - Issue #37."""
|
||
|
|
test_file = Path("temp_test_schema.json")
|
||
|
|
test_file.write_text('{"type": "object", "properties": {"name": {"type": "string"}}}')
|
||
|
|
|
||
|
|
try:
|
||
|
|
result = subprocess.run([
|
||
|
|
sys.executable, 'tools/schema_summary.py', str(test_file), '--ascii'
|
||
|
|
], capture_output=True, text=True)
|
||
|
|
|
||
|
|
assert result.returncode == 0
|
||
|
|
|
||
|
|
# Should NOT contain emoji characters
|
||
|
|
has_emojis = any(ord(char) > 127 for char in result.stdout)
|
||
|
|
assert not has_emojis, "ASCII mode should not contain emoji characters"
|
||
|
|
|
||
|
|
finally:
|
||
|
|
if test_file.exists():
|
||
|
|
test_file.unlink()
|