Add .gitignore files and clean up tracked files
This commit is contained in:
parent
8ddda5d5ed
commit
8b13c688d9
4 changed files with 38 additions and 220 deletions
37
.gitignore
vendored
Normal file
37
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
# Godot 4+ specific ignores
|
||||
.godot/
|
||||
*.tmp
|
||||
|
||||
# Godot-specific ignores
|
||||
.import/
|
||||
export.cfg
|
||||
export_presets.cfg
|
||||
|
||||
# Imported translations (automatically generated from CSV files)
|
||||
*.translation
|
||||
|
||||
# Mono/C# specific ignores
|
||||
.mono/
|
||||
data_*/
|
||||
mono_crash.*.json
|
||||
|
||||
# System/tool-specific ignores
|
||||
.directory
|
||||
*~
|
||||
*.uid
|
||||
|
||||
# macOS
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Windows
|
||||
Thumbs.db
|
||||
ehthumbs.db
|
||||
Desktop.ini
|
||||
|
||||
# VS Code
|
||||
.vscode/
|
||||
|
||||
# JetBrains
|
||||
.idea/
|
||||
|
|
@ -252,7 +252,7 @@ Mood transition data includes:
|
|||
- `old_mood`: The NPC's previous mood
|
||||
- `confidence`: How confident the AI is about this mood change (0.0-1.0)
|
||||
- `reasoning`: AI's explanation for why the mood changed
|
||||
- `stress_level`: Current stress level (1-10)
|
||||
- `stress_level`: Current stress level (1-9)
|
||||
|
||||
## NPC Properties
|
||||
|
||||
|
|
|
|||
|
|
@ -1,218 +0,0 @@
|
|||
extends GutTest
|
||||
# Unit tests for NPC chat history and serialization features
|
||||
|
||||
var mock_client
|
||||
var test_npc
|
||||
|
||||
|
||||
func before_each():
|
||||
# Create a mock client
|
||||
mock_client = Node.new()
|
||||
|
||||
# Create a test NPC with sample data
|
||||
var npc_data = {
|
||||
"npc_id": 123456789,
|
||||
"name": "Test Merchant",
|
||||
"profession": "merchant",
|
||||
"personality_type": 7,
|
||||
"universe_id": "test-universe",
|
||||
"seed": 42,
|
||||
"spawned": {"location": "market", "mood": "friendly", "stress_level": 3},
|
||||
"cached": false,
|
||||
"cache_url": ""
|
||||
}
|
||||
test_npc = GumYumNPC.new(npc_data, mock_client)
|
||||
|
||||
|
||||
func after_each():
|
||||
if mock_client:
|
||||
mock_client.queue_free()
|
||||
|
||||
|
||||
func test_chat_history_starts_empty():
|
||||
assert_eq(test_npc.chat_history.size(), 0, "Chat history should start empty")
|
||||
|
||||
|
||||
func test_chat_history_tracking():
|
||||
# Simulate adding messages to history
|
||||
test_npc.chat_history.append({"role": "user", "content": "Hello there!"})
|
||||
test_npc.chat_history.append({"role": "assistant", "content": "Greetings, traveler!"})
|
||||
|
||||
assert_eq(test_npc.chat_history.size(), 2, "Should have 2 messages")
|
||||
assert_eq(test_npc.chat_history[0]["role"], "user")
|
||||
assert_eq(test_npc.chat_history[1]["content"], "Greetings, traveler!")
|
||||
|
||||
|
||||
func test_clear_history():
|
||||
# Add some messages
|
||||
test_npc.chat_history.append({"role": "user", "content": "Test 1"})
|
||||
test_npc.chat_history.append({"role": "assistant", "content": "Response 1"})
|
||||
|
||||
# Clear history
|
||||
test_npc.clear_history()
|
||||
|
||||
assert_eq(test_npc.chat_history.size(), 0, "History should be empty after clear")
|
||||
|
||||
|
||||
func test_chat_history_to_json():
|
||||
# Add test messages
|
||||
test_npc.chat_history.append({"role": "user", "content": "What are you selling?"})
|
||||
test_npc.chat_history.append({"role": "assistant", "content": "Fine weapons and armor!"})
|
||||
|
||||
var json_str = test_npc.chat_history_to_json()
|
||||
assert_ne(json_str, "", "JSON should not be empty")
|
||||
|
||||
# Parse it back to verify
|
||||
var json = JSON.new()
|
||||
var parse_result = json.parse(json_str)
|
||||
assert_eq(parse_result, OK, "Should parse valid JSON")
|
||||
assert_eq(json.data.size(), 2, "Should have 2 messages")
|
||||
assert_eq(json.data[0]["content"], "What are you selling?")
|
||||
|
||||
|
||||
func test_to_dict():
|
||||
# Add some chat history
|
||||
test_npc.chat_history.append({"role": "user", "content": "Hello"})
|
||||
|
||||
var dict = test_npc.to_dict()
|
||||
|
||||
# Verify all fields are present
|
||||
assert_has(dict, "npc_id")
|
||||
assert_has(dict, "name")
|
||||
assert_has(dict, "profession")
|
||||
assert_has(dict, "personality_type")
|
||||
assert_has(dict, "universe_id")
|
||||
assert_has(dict, "seed")
|
||||
assert_has(dict, "spawned")
|
||||
assert_has(dict, "chat_history")
|
||||
|
||||
# Verify values
|
||||
assert_eq(dict["npc_id"], 123456789)
|
||||
assert_eq(dict["name"], "Test Merchant")
|
||||
assert_eq(dict["profession"], "merchant")
|
||||
assert_eq(dict["chat_history"].size(), 1)
|
||||
|
||||
|
||||
func test_to_json():
|
||||
var json_str = test_npc.to_json()
|
||||
assert_ne(json_str, "", "JSON should not be empty")
|
||||
|
||||
# Parse to verify it's valid
|
||||
var json = JSON.new()
|
||||
var parse_result = json.parse(json_str)
|
||||
assert_eq(parse_result, OK, "Should produce valid JSON")
|
||||
assert_eq(json.data["name"], "Test Merchant")
|
||||
|
||||
|
||||
func test_from_dict():
|
||||
# Create dict with test data
|
||||
var test_data = {
|
||||
"npc_id": 987654321,
|
||||
"name": "Guard Captain",
|
||||
"profession": "guard",
|
||||
"personality_type": 1,
|
||||
"universe_id": "kingdom",
|
||||
"seed": 100,
|
||||
"spawned": {"location": "castle", "mood": "stern", "stress_level": 5},
|
||||
"chat_history":
|
||||
[
|
||||
{"role": "user", "content": "Who goes there?"},
|
||||
{"role": "assistant", "content": "State your business!"}
|
||||
]
|
||||
}
|
||||
|
||||
var loaded_npc = GumYumNPC.from_dict(test_data, mock_client)
|
||||
|
||||
assert_not_null(loaded_npc, "Should create NPC from dict")
|
||||
assert_eq(loaded_npc.npc_id, 987654321)
|
||||
assert_eq(loaded_npc.name, "Guard Captain")
|
||||
assert_eq(loaded_npc.profession, "guard")
|
||||
assert_eq(loaded_npc.chat_history.size(), 2)
|
||||
assert_eq(loaded_npc.client, mock_client)
|
||||
|
||||
|
||||
func test_from_json():
|
||||
# Create JSON string
|
||||
var json_data = {
|
||||
"npc_id": 111222333,
|
||||
"name": "Wise Elder",
|
||||
"profession": "sage",
|
||||
"personality_type": 5,
|
||||
"universe_id": "fantasy",
|
||||
"seed": 777,
|
||||
"spawned": {"location": "temple", "mood": "contemplative"},
|
||||
"chat_history": []
|
||||
}
|
||||
var json_str = JSON.stringify(json_data)
|
||||
|
||||
var loaded_npc = GumYumNPC.from_json(json_str, mock_client)
|
||||
|
||||
assert_not_null(loaded_npc, "Should create NPC from JSON")
|
||||
assert_eq(loaded_npc.name, "Wise Elder")
|
||||
assert_eq(loaded_npc.universe_id, "fantasy")
|
||||
|
||||
|
||||
func test_from_json_invalid():
|
||||
var invalid_json = "{ invalid json ["
|
||||
var loaded_npc = GumYumNPC.from_json(invalid_json, mock_client)
|
||||
|
||||
assert_null(loaded_npc, "Should return null for invalid JSON")
|
||||
|
||||
|
||||
func test_round_trip_serialization():
|
||||
# Add chat history
|
||||
test_npc.chat_history.append({"role": "user", "content": "Test message 1"})
|
||||
test_npc.chat_history.append({"role": "assistant", "content": "Test response 1"})
|
||||
|
||||
# Convert to JSON and back
|
||||
var json_str = test_npc.to_json()
|
||||
var restored_npc = GumYumNPC.from_json(json_str, mock_client)
|
||||
|
||||
assert_not_null(restored_npc, "Should restore NPC")
|
||||
assert_eq(restored_npc.npc_id, test_npc.npc_id)
|
||||
assert_eq(restored_npc.name, test_npc.name)
|
||||
assert_eq(restored_npc.chat_history.size(), 2)
|
||||
assert_eq(restored_npc.chat_history[0]["content"], "Test message 1")
|
||||
|
||||
|
||||
func test_save_to_file():
|
||||
# Note: This test requires file system access
|
||||
var test_path = "user://test_npc_save.json"
|
||||
|
||||
# Add some data
|
||||
test_npc.chat_history.append({"role": "user", "content": "Save test"})
|
||||
|
||||
var result = test_npc.save_to_file(test_path)
|
||||
assert_eq(result, OK, "Should save successfully")
|
||||
|
||||
# Verify file exists
|
||||
var file = FileAccess.open(test_path, FileAccess.READ)
|
||||
assert_not_null(file, "File should exist")
|
||||
if file:
|
||||
file.close()
|
||||
|
||||
# Clean up
|
||||
DirAccess.remove_absolute(test_path)
|
||||
|
||||
|
||||
func test_load_from_file():
|
||||
# First save an NPC
|
||||
var test_path = "user://test_npc_load.json"
|
||||
test_npc.chat_history.append({"role": "user", "content": "Load test"})
|
||||
test_npc.save_to_file(test_path)
|
||||
|
||||
# Load it back
|
||||
var loaded_npc = GumYumNPC.load_from_file(test_path, mock_client)
|
||||
|
||||
assert_not_null(loaded_npc, "Should load NPC from file")
|
||||
assert_eq(loaded_npc.name, test_npc.name)
|
||||
assert_eq(loaded_npc.chat_history.size(), 1)
|
||||
assert_eq(loaded_npc.chat_history[0]["content"], "Load test")
|
||||
|
||||
# Clean up
|
||||
DirAccess.remove_absolute(test_path)
|
||||
|
||||
|
||||
func test_load_from_nonexistent_file():
|
||||
var loaded_npc = GumYumNPC.load_from_file("user://does_not_exist.json", mock_client)
|
||||
assert_null(loaded_npc, "Should return null for nonexistent file")
|
||||
|
|
@ -1 +0,0 @@
|
|||
uid://b5q5lpoo3s2dj
|
||||
Loading…
Add table
Add a link
Reference in a new issue