mirror of
https://github.com/fly-apps/live_beats.git
synced 2024-11-21 23:50:59 +00:00
add metas tests
This commit is contained in:
parent
8dfb96c78a
commit
4d0665679c
2 changed files with 55 additions and 13 deletions
|
@ -28,13 +28,9 @@ defmodule Phoenix.Presence.ClientTest do
|
||||||
Process.monitor(presence_process)
|
Process.monitor(presence_process)
|
||||||
|
|
||||||
PresenceMock.track(presence_client, presence_process, topic, presence_key)
|
PresenceMock.track(presence_client, presence_process, topic, presence_key)
|
||||||
|
|
||||||
assert Process.alive?(presence_process)
|
|
||||||
|
|
||||||
assert_receive %{event: "presence_diff"}
|
assert_receive %{event: "presence_diff"}
|
||||||
|
|
||||||
client_state = :sys.get_state(presence_client)
|
client_state = :sys.get_state(presence_client)
|
||||||
|
|
||||||
assert %{topics: %{^topic => %{"1" => [%{phx_ref: _ref}]}}} = client_state
|
assert %{topics: %{^topic => %{"1" => [%{phx_ref: _ref}]}}} = client_state
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -49,24 +45,70 @@ defmodule Phoenix.Presence.ClientTest do
|
||||||
Process.monitor(presence_process)
|
Process.monitor(presence_process)
|
||||||
|
|
||||||
PresenceMock.track(presence_client, presence_process, topic, presence_key)
|
PresenceMock.track(presence_client, presence_process, topic, presence_key)
|
||||||
|
|
||||||
assert Process.alive?(presence_process)
|
assert Process.alive?(presence_process)
|
||||||
|
|
||||||
assert_receive %{event: "presence_diff"}
|
assert_receive %{event: "presence_diff"}
|
||||||
|
|
||||||
client_state = :sys.get_state(presence_client)
|
client_state = :sys.get_state(presence_client)
|
||||||
|
|
||||||
assert %{topics: %{^topic => %{"1" => [%{phx_ref: _ref}]}}} = client_state
|
assert %{topics: %{^topic => %{"1" => [%{phx_ref: _ref}]}}} = client_state
|
||||||
|
|
||||||
send(presence_process, :quit)
|
send(presence_process, :quit)
|
||||||
|
|
||||||
assert_receive {:DOWN, _ref, :process, ^presence_process, _reason}
|
assert_receive {:DOWN, _ref, :process, ^presence_process, _reason}
|
||||||
|
|
||||||
client_state = :sys.get_state(presence_client)
|
client_state = :sys.get_state(presence_client)
|
||||||
|
|
||||||
assert %{topics: %{}} = client_state
|
assert %{topics: %{}} = client_state
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "When there are two presences for the same key, the metas are accumulated" do
|
||||||
|
presence_key = 1
|
||||||
|
topic = topic(100)
|
||||||
|
|
||||||
|
{:ok, presence_client} = Client.start_link(@presence_client_opts)
|
||||||
|
{:ok, presence_process_1} = PresenceMock.start_link(id: presence_key)
|
||||||
|
{:ok, presence_process_2} = PresenceMock.start_link(id: presence_key)
|
||||||
|
|
||||||
|
Phoenix.PubSub.subscribe(@pubsub, topic)
|
||||||
|
|
||||||
|
PresenceMock.track(presence_client, presence_process_1, topic, presence_key, %{m1: :m1})
|
||||||
|
assert_receive %{event: "presence_diff"}
|
||||||
|
|
||||||
|
PresenceMock.track(presence_client, presence_process_2, topic, presence_key, %{m2: :m2})
|
||||||
|
assert_receive %{event: "presence_diff"}
|
||||||
|
|
||||||
|
|
||||||
|
client_state = :sys.get_state(presence_client)
|
||||||
|
|
||||||
|
assert %{topics: %{^topic => %{"1" => [%{m1: :m1}, %{m2: :m2}]}}} = client_state
|
||||||
|
end
|
||||||
|
|
||||||
|
test "When there are two presences for the same key and one leaves, just the meta is deleted" do
|
||||||
|
presence_key = 1
|
||||||
|
topic = topic(100)
|
||||||
|
|
||||||
|
{:ok, presence_client} = Client.start_link(@presence_client_opts)
|
||||||
|
{:ok, presence_process_1} = PresenceMock.start_link(id: presence_key)
|
||||||
|
{:ok, presence_process_2} = PresenceMock.start_link(id: presence_key)
|
||||||
|
|
||||||
|
Phoenix.PubSub.subscribe(@pubsub, topic)
|
||||||
|
Process.monitor(presence_process_1)
|
||||||
|
|
||||||
|
PresenceMock.track(presence_client, presence_process_1, topic, presence_key, %{m1: :m1})
|
||||||
|
assert_receive %{event: "presence_diff"}
|
||||||
|
|
||||||
|
PresenceMock.track(presence_client, presence_process_2, topic, presence_key, %{m2: :m2})
|
||||||
|
assert_receive %{event: "presence_diff"}
|
||||||
|
|
||||||
|
|
||||||
|
client_state = :sys.get_state(presence_client)
|
||||||
|
assert %{topics: %{^topic => %{"1" => [%{m1: :m1}, %{m2: :m2}]}}} = client_state
|
||||||
|
|
||||||
|
send(presence_process_1, :quit)
|
||||||
|
assert_receive {:DOWN, _ref, :process, ^presence_process_1, _reason}
|
||||||
|
assert_receive %{event: "presence_diff"}
|
||||||
|
|
||||||
|
client_state = :sys.get_state(presence_client)
|
||||||
|
assert %{topics: %{^topic => %{"1" => [%{m2: :m2}]}}} = client_state
|
||||||
|
end
|
||||||
|
|
||||||
defp topic(id) do
|
defp topic(id) do
|
||||||
"mock_topic:#{id}"
|
"mock_topic:#{id}"
|
||||||
end
|
end
|
||||||
|
|
|
@ -13,8 +13,8 @@ defmodule Phoenix.Presence.Client.PresenceMock do
|
||||||
{:ok, %{id: id}}
|
{:ok, %{id: id}}
|
||||||
end
|
end
|
||||||
|
|
||||||
def track(client_pid, pid, topic, key) do
|
def track(client_pid, pid, topic, key, meta \\ %{}) do
|
||||||
GenServer.cast(pid, {:track, client_pid, topic, key})
|
GenServer.cast(pid, {:track, client_pid, topic, key, meta})
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
|
@ -24,8 +24,8 @@ defmodule Phoenix.Presence.Client.PresenceMock do
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def handle_cast({:track, client_pid, topic, key}, state) do
|
def handle_cast({:track, client_pid, topic, key, meta}, state) do
|
||||||
Client.track(client_pid, topic, key, %{})
|
Client.track(client_pid, topic, key, meta)
|
||||||
{:noreply, state}
|
{:noreply, state}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue