storage: add behavior boundary and postgres adapter skeleton
This commit is contained in:
53
test/parrhesia/storage/behaviour_contracts_test.exs
Normal file
53
test/parrhesia/storage/behaviour_contracts_test.exs
Normal file
@@ -0,0 +1,53 @@
|
||||
defmodule Parrhesia.Storage.BehaviourContractsTest do
|
||||
use ExUnit.Case, async: true
|
||||
|
||||
test "events behavior exposes expected callbacks" do
|
||||
assert callback_names(Parrhesia.Storage.Events) ==
|
||||
[:count, :delete_by_request, :get_event, :purge_expired, :put_event, :query, :vanish]
|
||||
end
|
||||
|
||||
test "moderation behavior exposes expected callbacks" do
|
||||
assert callback_names(Parrhesia.Storage.Moderation) ==
|
||||
[
|
||||
:allow_pubkey,
|
||||
:ban_event,
|
||||
:ban_pubkey,
|
||||
:block_ip,
|
||||
:disallow_pubkey,
|
||||
:event_banned?,
|
||||
:ip_blocked?,
|
||||
:pubkey_allowed?,
|
||||
:pubkey_banned?,
|
||||
:unban_event,
|
||||
:unban_pubkey,
|
||||
:unblock_ip
|
||||
]
|
||||
end
|
||||
|
||||
test "groups behavior exposes expected callbacks" do
|
||||
assert callback_names(Parrhesia.Storage.Groups) ==
|
||||
[
|
||||
:delete_membership,
|
||||
:delete_role,
|
||||
:get_membership,
|
||||
:list_memberships,
|
||||
:list_roles,
|
||||
:put_membership,
|
||||
:put_role
|
||||
]
|
||||
end
|
||||
|
||||
test "admin behavior exposes expected callbacks" do
|
||||
assert callback_names(Parrhesia.Storage.Admin) ==
|
||||
[:append_audit_log, :execute, :list_audit_logs]
|
||||
end
|
||||
|
||||
defp callback_names(behavior_module) do
|
||||
behavior_module
|
||||
|> behaviour_callbacks()
|
||||
|> Enum.map(fn {name, _arity} -> name end)
|
||||
|> Enum.sort()
|
||||
end
|
||||
|
||||
defp behaviour_callbacks(behavior_module), do: behavior_module.behaviour_info(:callbacks)
|
||||
end
|
||||
28
test/parrhesia/storage_test.exs
Normal file
28
test/parrhesia/storage_test.exs
Normal file
@@ -0,0 +1,28 @@
|
||||
defmodule Parrhesia.StorageTest do
|
||||
use ExUnit.Case, async: false
|
||||
|
||||
alias Parrhesia.Storage
|
||||
|
||||
test "resolves default storage modules" do
|
||||
assert Storage.events() == Parrhesia.Storage.Adapters.Postgres.Events
|
||||
assert Storage.moderation() == Parrhesia.Storage.Adapters.Postgres.Moderation
|
||||
assert Storage.groups() == Parrhesia.Storage.Adapters.Postgres.Groups
|
||||
assert Storage.admin() == Parrhesia.Storage.Adapters.Postgres.Admin
|
||||
end
|
||||
|
||||
test "raises when configured module does not implement required behavior" do
|
||||
previous = Application.get_env(:parrhesia, :storage, [])
|
||||
|
||||
Application.put_env(:parrhesia, :storage, events: Parrhesia.Config)
|
||||
|
||||
on_exit(fn ->
|
||||
Application.put_env(:parrhesia, :storage, previous)
|
||||
end)
|
||||
|
||||
assert_raise ArgumentError,
|
||||
~r/does not implement Parrhesia\.Storage\.Events/,
|
||||
fn ->
|
||||
Storage.events()
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user