Skip to content
This repository was archived by the owner on Nov 8, 2022. It is now read-only.

Commit 834391f

Browse files
committed
refactor(mailbox): paged mentions & test
1 parent 8803436 commit 834391f

File tree

9 files changed

+101
-38
lines changed

9 files changed

+101
-38
lines changed

lib/groupher_server/accounts/accounts.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ defmodule GroupherServer.Accounts do
6767
defdelegate mark_read(type, ids, user_id), to: Mailbox
6868
defdelegate mark_read_all(tyoe, user_id), to: Mailbox
6969

70+
defdelegate paged_mailbox_messages(type, user, filter), to: Mailbox
71+
7072
# customization
7173
defdelegate get_customization(user), to: Customization
7274
defdelegate set_customization(user, key, value), to: Customization

lib/groupher_server/accounts/delegates/mailbox.ex

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ defmodule GroupherServer.Accounts.Delegate.Mailbox do
1919

2020
def mark_read_all(type, %User{} = user), do: Delivery.mark_read_all(type, user)
2121

22+
def paged_mailbox_messages(type, user, filter) do
23+
Delivery.fetch(type, user, filter)
24+
end
25+
2226
@doc "update messages count in mailbox"
2327
def update_mailbox_status(user_id) do
2428
with {:ok, user} <- ORM.find(User, user_id),

lib/groupher_server_web/resolvers/accounts_resolver.ex

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,11 @@ defmodule GroupherServerWeb.Resolvers.Accounts do
233233
Accounts.mark_read_all(type, cur_user)
234234
end
235235

236+
def paged_mailbox_mentions(_root, ~m(filter)a, %{context: %{cur_user: cur_user}}) do
237+
IO.inspect(cur_user.login, label: "in resolver")
238+
Accounts.paged_mailbox_messages(:mention, cur_user, filter)
239+
end
240+
236241
# mailbox end
237242

238243
# for check other users subscribed_communities

lib/groupher_server_web/schema/account/account_metrics.ex

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ defmodule GroupherServerWeb.Schema.Account.Metrics do
44
use Absinthe.Schema.Notation
55
import GroupherServerWeb.Schema.Helper.Fields
66

7+
input_object :mailbox_mentions_filter do
8+
field(:read, :boolean, default_value: false)
9+
pagination_args()
10+
end
11+
712
@desc "article_filter doc"
813
input_object :paged_users_filter do
914
pagination_args()

lib/groupher_server_web/schema/account/account_queries.ex

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,14 @@ defmodule GroupherServerWeb.Schema.Account.Queries do
3535
resolve(&R.Accounts.subscribed_communities/3)
3636
end
3737

38-
# @desc "get user's mentions"
39-
# field :mentions, :paged_mentions do
40-
# arg(:filter, :messages_filter)
41-
42-
# middleware(M.Authorize, :login)
43-
# middleware(M.PageSizeProof)
44-
# resolve(&R.Accounts.fetch_mentions/3)
45-
# end
38+
@desc "get login user's mentions in mailbox"
39+
field :paged_mentions, :paged_mailbox_mentions do
40+
arg(:filter, :mailbox_mentions_filter)
41+
42+
middleware(M.Authorize, :login)
43+
middleware(M.PageSizeProof)
44+
resolve(&R.Accounts.paged_mailbox_mentions/3)
45+
end
4646

4747
@desc "get user's follower"
4848
field :paged_followers, :paged_users do

lib/groupher_server_web/schema/account/account_types.ex

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,21 @@ defmodule GroupherServerWeb.Schema.Account.Types do
9797
field(:unread_notifications_count, :integer)
9898
end
9999

100+
object :mailbox_mention do
101+
field(:id, :id)
102+
field(:thread, :string)
103+
field(:article_id, :id)
104+
field(:title, :string)
105+
field(:comment_id, :id)
106+
field(:read, :boolean)
107+
108+
field(:block_linker, list_of(:string))
109+
110+
field(:user, :common_user)
111+
112+
timestamp_fields()
113+
end
114+
100115
# field(:sidebar_layout, :map)
101116
object :customization do
102117
field(:theme, :string)
@@ -200,6 +215,11 @@ defmodule GroupherServerWeb.Schema.Account.Types do
200215
pagination_fields()
201216
end
202217

218+
object :paged_mailbox_mentions do
219+
field(:entries, list_of(:mailbox_mention))
220+
pagination_fields()
221+
end
222+
203223
enum :mailbox_type do
204224
value(:mention)
205225
value(:notification)

test/groupher_server/accounts/mailbx_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ defmodule GroupherServer.Test.Accounts.Mailbox do
1717
end
1818

1919
describe "mailbox status" do
20-
@tag :wip
20+
@tag :wip2
2121
test "can get default mailbox status", ~m(user)a do
2222
{:ok, status} = Accounts.mailbox_status(user)
2323
assert status == @default_mailbox_status

test/groupher_server_web/mutation/accounts/mailbox_test.exs

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ defmodule GroupherServer.Test.Query.Accounts.Mailbox do
2222
}
2323
}
2424
"""
25-
# @tag :wip
25+
# @tag :wip2
2626
test "can mark read a mention", ~m(user_conn user user2)a do
2727
{:ok, _} = mock_mention_for(user, user2)
2828

@@ -37,7 +37,7 @@ defmodule GroupherServer.Test.Query.Accounts.Mailbox do
3737
assert mention.read
3838
end
3939

40-
@tag :wip
40+
@tag :wip2
4141
test "can mark read a notification", ~m(user_conn user user2)a do
4242
{:ok, _} = mock_notification_for(user, user2)
4343

@@ -60,7 +60,7 @@ defmodule GroupherServer.Test.Query.Accounts.Mailbox do
6060
}
6161
}
6262
"""
63-
@tag :wip
63+
@tag :wip2
6464
test "can mark read all mentions", ~m(user_conn user user2 user3)a do
6565
{:ok, _} = mock_mention_for(user, user2)
6666
{:ok, _} = mock_mention_for(user, user3)
@@ -75,7 +75,7 @@ defmodule GroupherServer.Test.Query.Accounts.Mailbox do
7575
assert mentions.total_count == 2
7676
end
7777

78-
@tag :wip
78+
@tag :wip2
7979
test "can mark read all notifications", ~m(user_conn user user2)a do
8080
{:ok, _} = mock_notification_for(user, user2)
8181

@@ -89,16 +89,4 @@ defmodule GroupherServer.Test.Query.Accounts.Mailbox do
8989
assert notifications.total_count == 1
9090
end
9191
end
92-
93-
describe "[paged messages]" do
94-
test "can get paged mentions" do
95-
#
96-
true
97-
end
98-
99-
test "can get paged notifications" do
100-
#
101-
true
102-
end
103-
end
10492
end

test/groupher_server_web/query/accounts/mailbox_test.exs

Lines changed: 52 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ defmodule GroupherServer.Test.Query.Accounts.Mailbox do
55
{:ok, user} = db_insert(:user)
66
{:ok, user2} = db_insert(:user)
77

8-
user_conn = simu_conn(:user)
8+
user_conn = simu_conn(:user, user)
99
guest_conn = simu_conn(:guest)
1010

1111
{:ok, ~m(user_conn guest_conn user user2)a}
@@ -25,10 +25,8 @@ defmodule GroupherServer.Test.Query.Accounts.Mailbox do
2525
}
2626
}
2727
"""
28-
@tag :wip
29-
test "auth user can get it's own default mailbox status", ~m(user)a do
30-
user_conn = simu_conn(:user, user)
31-
28+
@tag :wip2
29+
test "auth user can get it's own default mailbox status", ~m(user_conn user)a do
3230
results = user_conn |> query_result(@query, %{login: user.login}, "user")
3331
mailbox = results["mailbox"]
3432

@@ -38,12 +36,11 @@ defmodule GroupherServer.Test.Query.Accounts.Mailbox do
3836
assert mailbox["unreadNotificationsCount"] == 0
3937
end
4038

41-
@tag :wip
42-
test "auth user can get latest mailbox status after being mentioned", ~m(user user2)a do
39+
@tag :wip2
40+
test "auth user can get latest mailbox status after being mentioned",
41+
~m(user_conn user user2)a do
4342
{:ok, _} = mock_mention_for(user, user2)
4443

45-
user_conn = simu_conn(:user, user)
46-
4744
results = user_conn |> query_result(@query, %{login: user.login}, "user")
4845
mailbox = results["mailbox"]
4946

@@ -53,12 +50,11 @@ defmodule GroupherServer.Test.Query.Accounts.Mailbox do
5350
assert mailbox["unreadNotificationsCount"] == 0
5451
end
5552

56-
@tag :wip
57-
test "auth user can get latest mailbox status after being notified", ~m(user user2)a do
53+
@tag :wip2
54+
test "auth user can get latest mailbox status after being notified",
55+
~m(user_conn user user2)a do
5856
mock_notification_for(user, user2)
5957

60-
user_conn = simu_conn(:user, user)
61-
6258
results = user_conn |> query_result(@query, %{login: user.login}, "user")
6359
mailbox = results["mailbox"]
6460

@@ -69,6 +65,49 @@ defmodule GroupherServer.Test.Query.Accounts.Mailbox do
6965
end
7066
end
7167

68+
describe "[paged messages]" do
69+
@query """
70+
query($filter: MailboxMentionsFilter!) {
71+
pagedMentions(filter: $filter) {
72+
entries {
73+
id
74+
thread
75+
articleId
76+
title
77+
commentId
78+
read
79+
blockLinker
80+
user {
81+
login
82+
nickname
83+
}
84+
}
85+
totalPages
86+
totalCount
87+
pageSize
88+
pageNumber
89+
}
90+
}
91+
"""
92+
@tag :wip
93+
test "can get paged mentions", ~m(user_conn user user2)a do
94+
mock_mention_for(user, user2)
95+
96+
varibles = %{filter: %{page: 1, size: 20}}
97+
98+
results = user_conn |> query_result(@query, varibles, "pagedMentions")
99+
100+
assert results |> is_valid_pagination?
101+
mention = results["entries"] |> List.first()
102+
assert user2.login == mention |> get_in(["user", "login"])
103+
end
104+
105+
test "can get paged notifications" do
106+
#
107+
true
108+
end
109+
end
110+
72111
# describe "[accounts mention]" do
73112
# @query """
74113
# query($filter: MessagesFilter!) {

0 commit comments

Comments
 (0)