forked from edgurgel/poxa
-
Notifications
You must be signed in to change notification settings - Fork 0
/
subscription_test.exs
125 lines (102 loc) · 4.04 KB
/
subscription_test.exs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
defmodule Poxa.SubscriptionTest do
use ExUnit.Case, async: true
alias Poxa.AuthSignature
alias Poxa.PresenceSubscription
alias Poxa.Channel
alias Poxa.PusherEvent
use Mimic
import Poxa.Subscription
setup do
stub(Poxa.registry())
stub(AuthSignature)
stub(PresenceSubscription)
stub(PusherEvent)
:ok
end
test "subscription to a public channel" do
expect(Channel, :member?, fn _, _ -> false end)
expect(Poxa.registry(), :register!, fn _ -> :registered end)
assert subscribe!(%{"channel" => "public-channel"}, nil) == {:ok, "public-channel"}
end
test "subscription to a missing channel name" do
expect(PusherEvent, :pusher_error, fn _ -> :error_message end)
assert subscribe!(%{}, nil) == {:error, :error_message}
end
test "subscription to a public channel but already subscribed" do
pid = self()
expect(Channel, :member?, fn "public-channel", ^pid -> true end)
assert subscribe!(%{"channel" => "public-channel"}, nil) == {:ok, "public-channel"}
end
test "subscription to a private channel" do
pid = self()
expect(Channel, :member?, fn "private-channel", ^pid -> false end)
expect(Poxa.registry(), :register!, fn _ -> :registered end)
expect(AuthSignature, :valid?, fn _, _ -> true end)
assert subscribe!(
%{"channel" => "private-channel", "auth" => "signeddata"},
"SocketId"
) == {:ok, "private-channel"}
end
test "subscription to a private channel having a channel_data" do
pid = self()
expect(Channel, :member?, fn "private-channel", ^pid -> false end)
expect(Poxa.registry(), :register!, fn _ -> :registered end)
expect(AuthSignature, :valid?, fn _, _ -> true end)
assert subscribe!(
%{
"channel" => "private-channel",
"auth" => "signeddata",
"channel_data" => "{\"user_id\" : \"id123\", \"user_info\" : \"info456\"}"
},
"SocketId"
) == {:ok, "private-channel"}
end
test "subscription to a presence channel" do
expect(AuthSignature, :valid?, fn _, _ -> true end)
expect(PresenceSubscription, :subscribe!, fn _, _ -> :ok end)
assert subscribe!(
%{
"channel" => "presence-channel",
"auth" => "signeddata",
"channel_data" => "{\"user_id\" : \"id123\", \"user_info\" : \"info456\""
},
"SocketId"
) == :ok
end
test "subscription to a private-channel having bad authentication" do
expect(AuthSignature, :valid?, fn _, _ -> false end)
expect(PusherEvent, :pusher_error, fn _ -> :error_message end)
assert subscribe!(
%{"channel" => "private-channel", "auth" => "signeddate"},
"SocketId"
) == {:error, :error_message}
end
test "subscription to a presence-channel having bad authentication" do
expect(AuthSignature, :valid?, fn _, _ -> false end)
expect(PusherEvent, :pusher_error, fn _ -> :error_message end)
assert subscribe!(
%{"channel" => "presence-channel", "auth" => "signeddate"},
"SocketId"
) == {:error, :error_message}
end
test "unsubscribe channel being subscribed" do
pid = self()
expect(Channel, :member?, fn "a_channel", ^pid -> true end)
expect(Poxa.registry(), :unregister!, fn _ -> :ok end)
assert unsubscribe!(%{"channel" => "a_channel"}) == {:ok, "a_channel"}
end
test "unsubscribe channel being not subscribed" do
pid = self()
expect(Channel, :member?, fn "a_channel", ^pid -> false end)
assert unsubscribe!(%{"channel" => "a_channel"}) == {:ok, "a_channel"}
end
test "unsubscribe from a presence channel" do
pid = self()
expect(Channel, :member?, fn "presence-channel", ^pid -> true end)
expect(PresenceSubscription, :unsubscribe!, fn "presence-channel" ->
{:ok, "presence-channel"}
end)
expect(Poxa.registry(), :unregister!, fn "presence-channel" -> :ok end)
assert unsubscribe!(%{"channel" => "presence-channel"}) == {:ok, "presence-channel"}
end
end