Nomad changes
All checks were successful
Deploy fil (kreuzberg) / deploy (push) Successful in 49s

This commit is contained in:
Henrik Jess Nielsen
2026-06-01 23:40:55 +02:00
parent 72b1a0a6ed
commit b4c07d3693
5723 changed files with 1130655 additions and 0 deletions

View File

@@ -0,0 +1,157 @@
```elixir title="Elixir"
alias Kreuzberg.Plugin
# Plugin Testing Example
# This demonstrates how to test custom plugins with various scenarios.
defmodule MyApp.Plugins.CustomJsonExtractor do
@behaviour Kreuzberg.Plugin.PostProcessor
require Logger
@impl true
def name do
"CustomJsonExtractor"
end
@impl true
def processing_stage do
:post
end
@impl true
def version do
"1.0.0"
end
@impl true
def initialize do
:ok
end
@impl true
def shutdown do
:ok
end
@impl true
def process(result, _options) do
mime_type = result["mime_type"] || ""
if mime_type == "application/json" do
Logger.debug("Processing JSON content")
{:ok, Map.put(result, "is_json", true)}
else
Logger.debug("Not JSON content, skipping")
{:ok, result}
end
end
end
# Test setup
defmodule MyApp.Plugins.Test do
require Logger
def run_tests do
IO.puts("\n=== Running Plugin Tests ===\n")
test_json_processing()
test_non_json_processing()
test_empty_content()
test_missing_mime_type()
IO.puts("\n=== All Tests Completed ===\n")
end
defp test_json_processing do
IO.puts("Test 1: JSON Content Processing")
result = %{
"content" => ~s({"message": "Hello, world!"}),
"mime_type" => "application/json",
"metadata" => %{}
}
case MyApp.Plugins.CustomJsonExtractor.process(result, %{}) do
{:ok, processed} ->
if processed["is_json"] == true do
IO.puts(" PASS: JSON content marked correctly\n")
else
IO.puts(" FAIL: JSON flag not set\n")
end
{:error, reason} ->
IO.puts(" FAIL: #{reason}\n")
end
end
defp test_non_json_processing do
IO.puts("Test 2: Non-JSON Content Processing")
result = %{
"content" => "Plain text content",
"mime_type" => "text/plain",
"metadata" => %{}
}
case MyApp.Plugins.CustomJsonExtractor.process(result, %{}) do
{:ok, processed} ->
if not Map.has_key?(processed, "is_json") or !processed["is_json"] do
IO.puts(" PASS: Non-JSON content not marked\n")
else
IO.puts(" FAIL: Non-JSON content incorrectly marked as JSON\n")
end
{:error, reason} ->
IO.puts(" FAIL: #{reason}\n")
end
end
defp test_empty_content do
IO.puts("Test 3: Empty Content")
result = %{
"content" => "",
"mime_type" => "application/json",
"metadata" => %{}
}
case MyApp.Plugins.CustomJsonExtractor.process(result, %{}) do
{:ok, _processed} ->
IO.puts(" PASS: Empty content handled gracefully\n")
{:error, reason} ->
IO.puts(" FAIL: #{reason}\n")
end
end
defp test_missing_mime_type do
IO.puts("Test 4: Missing MIME Type")
result = %{
"content" => "Some content",
"metadata" => %{}
}
case MyApp.Plugins.CustomJsonExtractor.process(result, %{}) do
{:ok, _processed} ->
IO.puts(" PASS: Missing MIME type handled gracefully\n")
{:error, reason} ->
IO.puts(" FAIL: #{reason}\n")
end
end
end
# Register the custom plugin
Plugin.register_post_processor(:custom_json_extractor, MyApp.Plugins.CustomJsonExtractor)
# Run the test suite
MyApp.Plugins.Test.run_tests()
# List all registered post-processors
{:ok, processors} = Plugin.list_post_processors()
IO.puts("Registered Post-Processors:")
Enum.each(processors, fn {name, module} ->
IO.puts(" - #{name}: #{module}")
end)
```