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
|
- `old_mood`: The NPC's previous mood
|
||||||
- `confidence`: How confident the AI is about this mood change (0.0-1.0)
|
- `confidence`: How confident the AI is about this mood change (0.0-1.0)
|
||||||
- `reasoning`: AI's explanation for why the mood changed
|
- `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
|
## 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