Files
futriix/tests/test_functional.lua

181 lines
6.0 KiB
Lua
Raw Normal View History

2026-05-20 18:28:39 +00:00
-- ============================================================================
-- test_functional.lua - Функциональный тест
-- ============================================================================
-- Назначение: Проверка конкретных бизнес-требований и сценариев использования
-- Покрывает: Вложенные документы (кортежи), ACL, триггеры, MVCC
local function test_nested_documents()
print("[Functional] Testing nested documents (Tuples)...")
-- Create document with nested fields
local user_data = {
_id = "user_full_001",
profile = {
first_name = "Ivan",
last_name = "Petrov",
address = {
city = "Moscow",
street = "Tverskaya",
zip = "101000"
}
},
settings = {
theme = "dark",
notifications = true
}
}
local insert_resp = http.request("POST", "http://localhost:8080/api/db/func_test/profiles",
{["X-Session-ID"] = "test_session"},
user_data
)
assert(insert_resp.success, "Functional: Nested document insert failed")
print(" ✓ Nested document creation")
-- Update nested field
local update_resp = http.request("PUT", "http://localhost:8080/api/db/func_test/profiles/user_full_001",
{["X-Session-ID"] = "test_session"},
{["profile.address.city"] = "Saint Petersburg"}
)
assert(update_resp.success, "Functional: Nested field update failed")
print(" ✓ Nested field update")
return true
end
local function test_acl_permissions()
print("[Functional] Testing ACL system...")
-- Create a test user
local user_resp = http.request("POST", "http://localhost:8080/api/acl/user/testuser",
{["X-Session-ID"] = "admin_session"},
{password = "testpass123", roles = {"guest"}}
)
assert(user_resp.success, "Functional: User creation failed")
print(" ✓ User creation")
-- Grant permission
local grant_resp = http.request("POST", "http://localhost:8080/api/acl/role/guest/grant/func_test.*:read",
{["X-Session-ID"] = "admin_session"}
)
print(" ✓ Permission grant")
-- Verify permission with test user
local test_session = auth.login("testuser", "testpass123")
assert(test_session, "Functional: Test user login failed")
local read_resp = http.request("GET", "http://localhost:8080/api/db/func_test/profiles",
{["X-Session-ID"] = test_session}
)
assert(read_resp.success, "Functional: Read permission check failed")
print(" ✓ Permission verification")
return true
end
local function test_triggers()
print("[Functional] Testing triggers...")
-- Create a trigger that auto-updates timestamp
local trigger_config = {
name = "auto_timestamp",
event = "BEFORE_UPDATE",
action = "modify",
operations = {
{type = "set", field = "updated_at", value = "$$NOW"}
},
description = "Auto-update timestamp on modification"
}
local create_resp = http.request("POST", "http://localhost:8080/api/webui/trigger/func_test/profiles/create",
{["X-Session-ID"] = "test_session"},
trigger_config
)
print(" ✓ Trigger creation")
-- Enable trigger
local enable_resp = http.request("POST", "http://localhost:8080/api/webui/trigger/func_test/profiles/enable/auto_timestamp",
{["X-Session-ID"] = "test_session"}
)
print(" ✓ Trigger enable")
-- Test trigger
local update_resp = http.request("PUT", "http://localhost:8080/api/db/func_test/profiles/user_full_001",
{["X-Session-ID"] = "test_session"},
{profile.first_name = "Petr"}
)
assert(update_resp.success, "Functional: Trigger test update failed")
local read_resp = http.request("GET", "http://localhost:8080/api/db/func_test/profiles/user_full_001",
{["X-Session-ID"] = "test_session"}
)
if read_resp.data.fields.updated_at then
print(" ✓ Trigger executed (updated_at set)")
end
return true
end
local function test_mvcc_isolation()
print("[Functional] Testing MVCC isolation...")
-- Create multiple versions of a document
for i = 1, 5 do
local resp = http.request("PUT", "http://localhost:8080/api/db/func_test/mvcc_test/version_doc",
{["X-Session-ID"] = "test_session"},
{counter = i, version = "v" .. i}
)
assert(resp.success, "Functional: MVCC version update failed")
end
local final_resp = http.request("GET", "http://localhost:8080/api/db/func_test/mvcc_test/version_doc",
{["X-Session-ID"] = "test_session"}
)
if final_resp.data and final_resp.data.fields.counter == 5 then
print(" ✓ MVCC versioning works")
end
return true
end
local function test_backup_restore()
print("[Functional] Testing backup/restore...")
-- Export data
local export_resp = http.request("POST", "http://localhost:8080/api/webui/export",
{["X-Session-ID"] = "test_session"},
{database = "func_test", filename = "backup_test.msgpack"}
)
assert(export_resp.success, "Functional: Export failed")
print(" ✓ Data export")
-- Import to new database
local import_resp = http.request("POST", "http://localhost:8080/api/webui/import",
{["X-Session-ID"] = "test_session"},
{
database = "func_test_restored",
data = export_resp.data.data,
overwrite = true
}
)
assert(import_resp.success, "Functional: Import failed")
print(" ✓ Data import")
return true
end
-- Run functional tests
print("\n" .. string.rep("=", 50))
print("FUNCTIONAL TEST SUITE")
print(string.rep("=", 50))
test_nested_documents()
test_acl_permissions()
test_triggers()
test_mvcc_isolation()
test_backup_restore()
print("\n✓ ALL FUNCTIONAL TESTS PASSED ✓\n")