Files
wanderer/test/unit/database_test.exs
2025-11-24 11:33:08 +01:00

100 lines
2.6 KiB
Elixir

defmodule WandererApp.DatabaseTest do
use WandererApp.DataCase, async: false
import Mox
setup :verify_on_exit!
@moduletag :skip
describe "database connectivity" do
test "can connect to test database" do
# Simple connectivity test
result = Repo.query!("SELECT 1 as test_value")
assert %{rows: [[1]]} = result
end
test "can create and query test data using Ecto" do
# This tests that our basic Ecto setup works
test_data = %{
id: 1,
name: "Test Connection",
created_at: NaiveDateTime.utc_now()
}
# We'll use a raw query since we don't have schemas set up yet
Repo.query!("""
CREATE TEMP TABLE test_connection (
id INTEGER,
name VARCHAR(255),
created_at TIMESTAMP
)
""")
Repo.query!(
"""
INSERT INTO test_connection (id, name, created_at)
VALUES ($1, $2, $3)
""",
[test_data.id, test_data.name, test_data.created_at]
)
result = Repo.query!("SELECT * FROM test_connection")
assert length(result.rows) == 1
end
test "database sandbox isolation works" do
# This test verifies that our sandbox setup works
# Data created in this test should not be visible in other tests
Repo.query!("CREATE TEMP TABLE isolation_test (id INTEGER)")
Repo.query!("INSERT INTO isolation_test (id) VALUES (42)")
result = Repo.query!("SELECT COUNT(*) FROM isolation_test")
assert %{rows: [[1]]} = result
end
end
describe "test helpers" do
test "assert_ash_success helper works" do
success_result = {:ok, "test data"}
assert assert_ash_success(success_result) == "test data"
end
test "assert_ash_error helper works" do
error_result = {:error, "test error"}
assert assert_ash_error(error_result) == error_result
end
test "assert_maps_equal helper works" do
actual = %{a: 1, b: 2, c: 3}
expected = %{a: 1, b: 2}
# Should pass - expected is subset of actual
assert_maps_equal(actual, expected)
end
test "eventually helper works for async operations" do
# Start a process that will set a value after a delay
test_pid = self()
spawn(fn ->
:timer.sleep(100)
send(test_pid, :done)
end)
# Use eventually to wait for the message
eventually(
fn ->
receive do
:done -> :ok
after
100 -> flunk("Message not received")
end
end,
timeout: 1000
)
end
end
end