Files

68 lines
2.5 KiB
Python

"""
Prompt Versioning & Role Visibility Tests
PRD Section 21, 23, 25:
- Editing a prompt creates a new immutable version without mutating historical provenance.
- Non-admin users cannot view full system/user prompt templates.
"""
import pytest
from thinkstorm.database import init_db
from thinkstorm.prompts.catalog import (
get_all_prompts, get_prompt_version, update_prompt, duplicate_prompt
)
def test_prompt_versioning_immutability():
init_db()
prompt_id = "test-versioning-prompt"
# 1. Create a fresh test prompt definition
from thinkstorm.database import get_db
with get_db() as conn:
conn.execute("DELETE FROM prompt_versions WHERE prompt_definition_id = ?", (prompt_id,))
conn.execute("DELETE FROM prompt_definitions WHERE id = ?", (prompt_id,))
duplicate_prompt("normalize-idea", prompt_id, "Test Versioning Prompt", created_by="test_user")
# Verify baseline v1
v1 = get_prompt_version(prompt_id, version=1, is_admin=True)
assert v1 is not None
assert v1["version"] == 1
old_hash = v1["prompt_hash"]
# 2. Update prompt -> creates v2
new_version = update_prompt(
prompt_id=prompt_id,
system_prompt="Updated system prompt for normalizer v2.",
user_prompt_template="Analyze: {{submission_text}}",
model_policy="fast",
updated_by="admin_test"
)
assert new_version == 2
# 3. Check current is v2
current = get_prompt_version(prompt_id, is_admin=True)
assert current["version"] == 2
assert current["system_prompt"] == "Updated system prompt for normalizer v2."
assert current["prompt_hash"] != old_hash
# 4. Verify historical v1 remains unchanged and intact
v1_recheck = get_prompt_version(prompt_id, version=1, is_admin=True)
assert v1_recheck["version"] == 1
assert v1_recheck["prompt_hash"] == old_hash
assert "Updated system prompt" not in v1_recheck["system_prompt"]
def test_non_admin_prompt_masking():
init_db()
prompt_id = "prior-art-search"
# Non-admin retrieval
public_view = get_prompt_version(prompt_id, is_admin=False)
assert public_view["system_prompt"] == "[REDACTED: ADMIN ONLY]"
assert public_view["user_prompt_template"] == "[REDACTED: ADMIN ONLY]"
assert public_view["name"] is not None
assert public_view["model_policy"] is not None
# Admin retrieval
admin_view = get_prompt_version(prompt_id, is_admin=True)
assert admin_view["system_prompt"] != "[REDACTED: ADMIN ONLY]"
assert admin_view["user_prompt_template"] != "[REDACTED: ADMIN ONLY]"