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

Commit 28ecfe5

Browse files
committed
refactor(mailbox): paged notification & test
1 parent 834391f commit 28ecfe5

File tree

5 files changed

+71
-56
lines changed

5 files changed

+71
-56
lines changed

lib/groupher_server_web/resolvers/accounts_resolver.ex

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,10 +234,13 @@ defmodule GroupherServerWeb.Resolvers.Accounts do
234234
end
235235

236236
def paged_mailbox_mentions(_root, ~m(filter)a, %{context: %{cur_user: cur_user}}) do
237-
IO.inspect(cur_user.login, label: "in resolver")
238237
Accounts.paged_mailbox_messages(:mention, cur_user, filter)
239238
end
240239

240+
def paged_mailbox_notifications(_root, ~m(filter)a, %{context: %{cur_user: cur_user}}) do
241+
Accounts.paged_mailbox_messages(:notification, cur_user, filter)
242+
end
243+
241244
# mailbox end
242245

243246
# 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
@@ -9,6 +9,11 @@ defmodule GroupherServerWeb.Schema.Account.Metrics do
99
pagination_args()
1010
end
1111

12+
input_object :mailbox_notifications_filter do
13+
field(:read, :boolean, default_value: false)
14+
pagination_args()
15+
end
16+
1217
@desc "article_filter doc"
1318
input_object :paged_users_filter do
1419
pagination_args()

lib/groupher_server_web/schema/account/account_queries.ex

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,15 @@ defmodule GroupherServerWeb.Schema.Account.Queries do
4444
resolve(&R.Accounts.paged_mailbox_mentions/3)
4545
end
4646

47+
@desc "get login user's notifications in mailbox"
48+
field :paged_notifications, :paged_mailbox_notifications do
49+
arg(:filter, :mailbox_notifications_filter)
50+
51+
middleware(M.Authorize, :login)
52+
middleware(M.PageSizeProof)
53+
resolve(&R.Accounts.paged_mailbox_notifications/3)
54+
end
55+
4756
@desc "get user's follower"
4857
field :paged_followers, :paged_users do
4958
arg(:login, non_null(:string))

lib/groupher_server_web/schema/account/account_types.ex

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,20 @@ defmodule GroupherServerWeb.Schema.Account.Types do
112112
timestamp_fields()
113113
end
114114

115+
object :mailbox_notification do
116+
field(:id, :id)
117+
field(:action, :string)
118+
field(:thread, :string)
119+
field(:article_id, :id)
120+
field(:title, :string)
121+
field(:comment_id, :id)
122+
field(:read, :boolean)
123+
124+
field(:from_users, list_of(:common_user))
125+
126+
timestamp_fields()
127+
end
128+
115129
# field(:sidebar_layout, :map)
116130
object :customization do
117131
field(:theme, :string)
@@ -220,6 +234,11 @@ defmodule GroupherServerWeb.Schema.Account.Types do
220234
pagination_fields()
221235
end
222236

237+
object :paged_mailbox_notifications do
238+
field(:entries, list_of(:mailbox_notification))
239+
pagination_fields()
240+
end
241+
223242
enum :mailbox_type do
224243
value(:mention)
225244
value(:notification)

test/groupher_server_web/query/accounts/mailbox_test.exs

Lines changed: 34 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -89,72 +89,51 @@ defmodule GroupherServer.Test.Query.Accounts.Mailbox do
8989
}
9090
}
9191
"""
92-
@tag :wip
92+
@tag :wip2
9393
test "can get paged mentions", ~m(user_conn user user2)a do
9494
mock_mention_for(user, user2)
9595

9696
varibles = %{filter: %{page: 1, size: 20}}
97-
9897
results = user_conn |> query_result(@query, varibles, "pagedMentions")
9998

10099
assert results |> is_valid_pagination?
101100
mention = results["entries"] |> List.first()
102101
assert user2.login == mention |> get_in(["user", "login"])
103102
end
104103

105-
test "can get paged notifications" do
106-
#
107-
true
104+
@query """
105+
query($filter: MailboxNotificationsFilter!) {
106+
pagedNotifications(filter: $filter) {
107+
entries {
108+
id
109+
action
110+
thread
111+
articleId
112+
title
113+
commentId
114+
read
115+
fromUsers {
116+
login
117+
nickname
118+
}
119+
}
120+
totalPages
121+
totalCount
122+
pageSize
123+
pageNumber
124+
}
125+
}
126+
"""
127+
128+
@tag :wip
129+
test "can get paged notifications", ~m(user_conn user user2)a do
130+
mock_notification_for(user, user2)
131+
132+
varibles = %{filter: %{page: 1, size: 20}}
133+
results = user_conn |> query_result(@query, varibles, "pagedNotifications")
134+
135+
assert results |> is_valid_pagination?
136+
assert results["totalCount"] == 1
108137
end
109138
end
110-
111-
# describe "[accounts mention]" do
112-
# @query """
113-
# query($filter: MessagesFilter!) {
114-
# mentions(filter: $filter) {
115-
# entries {
116-
# id
117-
# fromUserId
118-
# fromUser {
119-
# id
120-
# avatar
121-
# nickname
122-
# }
123-
# toUserId
124-
# toUser {
125-
# id
126-
# avatar
127-
# nickname
128-
# }
129-
# sourceTitle
130-
# sourcePreview
131-
# sourceType
132-
# community
133-
# read
134-
# }
135-
# totalPages
136-
# totalCount
137-
# pageSize
138-
# pageNumber
139-
# }
140-
# }
141-
# """
142-
# test "auth user can get it's own mentions" do
143-
# {:ok, [user, user2]} = db_insert_multi(:user, 2)
144-
145-
# mock_mentions_for(user, 1)
146-
# mock_mentions_for(user2, 1)
147-
148-
# user_conn = simu_conn(:user, user)
149-
150-
# variables = %{filter: %{page: 1, size: 20, read: false}}
151-
# results = user_conn |> query_result(@query, variables, "mentions")
152-
153-
# assert results |> is_valid_pagination?
154-
# assert results["totalCount"] == 1
155-
156-
# assert results["entries"] |> Enum.any?(&(&1["toUserId"] == to_string(user.id)))
157-
# assert results["entries"] |> Enum.any?(&(&1["community"] == "elixir"))
158-
# end
159-
# end
160139
end

0 commit comments

Comments
 (0)