Executes policy tests and collects results.
The runner provides two main functions:
run_module/1- Run all tests in a single modulerun_all/1- Run tests across multiple modules with summary statistics
Examples
# Run a single module
results = Runner.run_module(MyApp.PolicyTests.DocumentTest)
# Run multiple modules
summary = Runner.run_all(modules: [DocumentTest, PostTest])
# Run with discovery (finds all policy test modules)
summary = Runner.run_all(path: "test/policy_tests/")
Summary
Functions
Discovers policy test modules from a path.
Runs tests across multiple modules and returns a summary.
Runs all tests in a policy test module.
Types
@type summary() :: %{ passed: non_neg_integer(), failed: non_neg_integer(), results: [AshGrant.PolicyTest.Result.t()] }
Functions
Discovers policy test modules from a path.
Finds all modules that use AshGrant.PolicyTest in the given path.
Runs tests across multiple modules and returns a summary.
Options
:modules- List of modules to run tests from:path- Path to directory containing policy test files (discovers modules)
Examples
# Run specific modules
summary = Runner.run_all(modules: [DocumentTest, PostTest])
# Discover and run all policy tests in a directory
summary = Runner.run_all(path: "test/policy_tests/")Returns
%{
passed: 10,
failed: 2,
results: [%Result{}, ...]
}
@spec run_module(module()) :: [AshGrant.PolicyTest.Result.t()]
Runs all tests in a policy test module.
Returns a list of Result structs, one for each test.
Examples
results = Runner.run_module(MyApp.PolicyTests.DocumentTest)
Enum.each(results, fn result ->
if result.passed do
IO.puts("✓ #{result.test_name}")
else
IO.puts("✗ #{result.test_name}: #{result.message}")
end
end)