Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Nov 8, 2022. It is now read-only.

Commitbd7d0b9

Browse files
committed
fix(active_at): sink gq workflow
1 parent70cf4e3 commitbd7d0b9

File tree

9 files changed

+283
-0
lines changed

9 files changed

+283
-0
lines changed

‎lib/groupher_server_web/resolvers/cms_resolver.ex‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ defmodule GroupherServerWeb.Resolvers.CMS do
105105
# #######################
106106
# thread reaction ..
107107
# #######################
108+
defsink_article(_root,~m(id thread)a,_info),do:CMS.sink_article(thread,id)
109+
defundo_sink_article(_root,~m(id thread)a,_info),do:CMS.undo_sink_article(thread,id)
110+
108111
defupvote_article(_root,~m(id thread)a,%{context:%{cur_user:user}})do
109112
CMS.upvote_article(thread,id,user)
110113
end

‎lib/groupher_server_web/schema/Helper/mutations.ex‎

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,34 @@ defmodule GroupherServerWeb.Schema.Helper.Mutations do
55
aliasGroupherServerWeb.Middleware,as:M
66
aliasGroupherServerWeb.Resolvers,as:R
77

8+
defmacroarticle_sink_mutation(thread)do
9+
quotedo
10+
@descunquote("sink a#{thread}")
11+
fieldunquote(:"sink_#{thread}"),:articledo
12+
arg(:id,non_null(:id))
13+
arg(:community_id,non_null(:id))
14+
arg(:thread,unquote(:"#{thread}_thread"),default_value:unquote(thread))
15+
16+
middleware(M.Authorize,:login)
17+
middleware(M.PassportLoader,source::community)
18+
middleware(M.Passport,claim:unquote("cms->c?->#{to_string(thread)}.sink"))
19+
resolve(&R.CMS.sink_article/3)
20+
end
21+
22+
@descunquote("undo sink to#{thread}")
23+
fieldunquote(:"undo_sink_#{thread}"),:articledo
24+
arg(:id,non_null(:id))
25+
arg(:community_id,non_null(:id))
26+
arg(:thread,unquote(:"#{thread}_thread"),default_value:unquote(thread))
27+
28+
middleware(M.Authorize,:login)
29+
middleware(M.PassportLoader,source::community)
30+
middleware(M.Passport,claim:unquote("cms->c?->#{to_string(thread)}.undo_sink"))
31+
resolve(&R.CMS.undo_sink_article/3)
32+
end
33+
end
34+
end
35+
836
defmacroarticle_upvote_mutation(thread)do
937
quotedo
1038
@descunquote("upvote to#{thread}")

‎lib/groupher_server_web/schema/cms/mutations/job.ex‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ defmodule GroupherServerWeb.Schema.CMS.Mutations.Job do
5555
end
5656

5757
#############
58+
article_sink_mutation(:job)
5859
article_upvote_mutation(:job)
5960
article_pin_mutation(:job)
6061
article_mark_delete_mutation(:job)

‎lib/groupher_server_web/schema/cms/mutations/post.ex‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ defmodule GroupherServerWeb.Schema.CMS.Mutations.Post do
4545
end
4646

4747
#############
48+
article_sink_mutation(:post)
4849
article_upvote_mutation(:post)
4950
article_pin_mutation(:post)
5051
article_mark_delete_mutation(:post)

‎lib/groupher_server_web/schema/cms/mutations/repo.ex‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ defmodule GroupherServerWeb.Schema.CMS.Mutations.Repo do
7171
end
7272

7373
#############
74+
article_sink_mutation(:repo)
7475
article_pin_mutation(:repo)
7576
article_mark_delete_mutation(:repo)
7677
article_delete_mutation(:repo)

‎lib/helper/certification.ex‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,21 @@ defmodule Helper.Certification do
5858
"job.community.move",
5959
"job.community.unmirror",
6060
# flag on content
61+
# pin/undo_pin
6162
"post.pin",
6263
"post.undo_pin",
6364
"job.pin",
6465
"job.undo_pin",
6566
"repo.pin",
6667
"repo.undo_pin",
68+
# sink/undo_sink
69+
"post.sink",
70+
"post.undo_sink",
71+
"job.sink",
72+
"job.undo_sink",
73+
"repo.sink",
74+
"repo.undo_sink",
75+
#
6776
"post.mark_delete",
6877
"post.undo_mark_delete",
6978
"job.mark_delete",
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
defmoduleGroupherServer.Test.Mutation.Sink.JobSinkdo
2+
@moduledocfalse
3+
useGroupherServer.TestTools
4+
5+
aliasGroupherServer.CMS
6+
aliasCMS.Job
7+
8+
aliasHelper.ORM
9+
10+
setupdo
11+
{:ok,user}=db_insert(:user)
12+
{:ok,community}=db_insert(:community)
13+
{:ok,job}=CMS.create_article(community,:job,mock_attrs(:job),user)
14+
15+
guest_conn=simu_conn(:guest)
16+
user_conn=simu_conn(:user,user)
17+
18+
{:ok,~m(user_conn guest_conn community job user)a}
19+
end
20+
21+
describe"[job sink]"do
22+
@query"""
23+
mutation($id: ID!, $communityId: ID!){
24+
sinkJob(id: $id, communityId: $communityId) {
25+
id
26+
}
27+
}
28+
"""
29+
@tag:wip
30+
test"login user can sink a job",~m(user_conn community job)ado
31+
variables=%{id:job.id,communityId:community.id}
32+
passport_rules=%{community.raw=>%{"job.sink"=>true}}
33+
rule_conn=simu_conn(:user,cms:passport_rules)
34+
35+
result=rule_conn|>mutation_result(@query,variables,"sinkJob")
36+
assertresult["id"]==to_string(job.id)
37+
38+
{:ok,job}=ORM.find(Job,job.id)
39+
assertjob.meta.is_sinked
40+
assertjob.active_at==job.inserted_at
41+
end
42+
43+
@tag:wip
44+
test"unauth user sink a job fails",~m(guest_conn community job)ado
45+
variables=%{id:job.id,communityId:community.id}
46+
47+
assertguest_conn|>mutation_get_error?(@query,variables,ecode(:account_login))
48+
end
49+
50+
@query"""
51+
mutation($id: ID!, $communityId: ID!){
52+
undoSinkJob(id: $id, communityId: $communityId) {
53+
id
54+
}
55+
}
56+
"""
57+
@tag:wip
58+
test"login user can undo sink to a job",~m(community job)ado
59+
variables=%{id:job.id,communityId:community.id}
60+
61+
passport_rules=%{community.raw=>%{"job.undo_sink"=>true}}
62+
rule_conn=simu_conn(:user,cms:passport_rules)
63+
64+
{:ok,_}=CMS.sink_article(:job,job.id)
65+
updated=rule_conn|>mutation_result(@query,variables,"undoSinkJob")
66+
assertupdated["id"]==to_string(job.id)
67+
68+
{:ok,job}=ORM.find(Job,job.id)
69+
assertnotjob.meta.is_sinked
70+
end
71+
72+
:wip2
73+
74+
test"unauth user undo sink a job fails",~m(guest_conn community job)ado
75+
variables=%{id:job.id,communityId:community.id}
76+
77+
assertguest_conn|>mutation_get_error?(@query,variables,ecode(:account_login))
78+
end
79+
end
80+
end
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
defmoduleGroupherServer.Test.Mutation.Sink.PostSinkdo
2+
@moduledocfalse
3+
useGroupherServer.TestTools
4+
5+
aliasGroupherServer.CMS
6+
aliasCMS.Post
7+
8+
aliasHelper.ORM
9+
10+
setupdo
11+
{:ok,user}=db_insert(:user)
12+
{:ok,community}=db_insert(:community)
13+
{:ok,post}=CMS.create_article(community,:post,mock_attrs(:post),user)
14+
15+
guest_conn=simu_conn(:guest)
16+
user_conn=simu_conn(:user,user)
17+
18+
{:ok,~m(user_conn guest_conn community post user)a}
19+
end
20+
21+
describe"[post sink]"do
22+
@query"""
23+
mutation($id: ID!, $communityId: ID!){
24+
sinkPost(id: $id, communityId: $communityId) {
25+
id
26+
}
27+
}
28+
"""
29+
@tag:wip
30+
test"login user can sink a post",~m(user_conn community post)ado
31+
variables=%{id:post.id,communityId:community.id}
32+
passport_rules=%{community.raw=>%{"post.sink"=>true}}
33+
rule_conn=simu_conn(:user,cms:passport_rules)
34+
35+
result=rule_conn|>mutation_result(@query,variables,"sinkPost")
36+
assertresult["id"]==to_string(post.id)
37+
38+
{:ok,post}=ORM.find(Post,post.id)
39+
assertpost.meta.is_sinked
40+
assertpost.active_at==post.inserted_at
41+
end
42+
43+
@tag:wip
44+
test"unauth user sink a post fails",~m(guest_conn community post)ado
45+
variables=%{id:post.id,communityId:community.id}
46+
47+
assertguest_conn|>mutation_get_error?(@query,variables,ecode(:account_login))
48+
end
49+
50+
@query"""
51+
mutation($id: ID!, $communityId: ID!){
52+
undoSinkPost(id: $id, communityId: $communityId) {
53+
id
54+
}
55+
}
56+
"""
57+
@tag:wip
58+
test"login user can undo sink to a post",~m(community post)ado
59+
variables=%{id:post.id,communityId:community.id}
60+
61+
passport_rules=%{community.raw=>%{"post.undo_sink"=>true}}
62+
rule_conn=simu_conn(:user,cms:passport_rules)
63+
64+
{:ok,_}=CMS.sink_article(:post,post.id)
65+
updated=rule_conn|>mutation_result(@query,variables,"undoSinkPost")
66+
assertupdated["id"]==to_string(post.id)
67+
68+
{:ok,post}=ORM.find(Post,post.id)
69+
assertnotpost.meta.is_sinked
70+
end
71+
72+
:wip2
73+
74+
test"unauth user undo sink a post fails",~m(guest_conn community post)ado
75+
variables=%{id:post.id,communityId:community.id}
76+
77+
assertguest_conn|>mutation_get_error?(@query,variables,ecode(:account_login))
78+
end
79+
end
80+
end
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
defmoduleGroupherServer.Test.Mutation.Sink.RepoSinkdo
2+
@moduledocfalse
3+
useGroupherServer.TestTools
4+
5+
aliasGroupherServer.CMS
6+
aliasCMS.Repo
7+
8+
aliasHelper.ORM
9+
10+
setupdo
11+
{:ok,user}=db_insert(:user)
12+
{:ok,community}=db_insert(:community)
13+
{:ok,repo}=CMS.create_article(community,:repo,mock_attrs(:repo),user)
14+
15+
guest_conn=simu_conn(:guest)
16+
user_conn=simu_conn(:user,user)
17+
18+
{:ok,~m(user_conn guest_conn community repo user)a}
19+
end
20+
21+
describe"[repo sink]"do
22+
@query"""
23+
mutation($id: ID!, $communityId: ID!){
24+
sinkRepo(id: $id, communityId: $communityId) {
25+
id
26+
}
27+
}
28+
"""
29+
@tag:wip
30+
test"login user can sink a repo",~m(user_conn community repo)ado
31+
variables=%{id:repo.id,communityId:community.id}
32+
passport_rules=%{community.raw=>%{"repo.sink"=>true}}
33+
rule_conn=simu_conn(:user,cms:passport_rules)
34+
35+
result=rule_conn|>mutation_result(@query,variables,"sinkRepo")
36+
assertresult["id"]==to_string(repo.id)
37+
38+
{:ok,repo}=ORM.find(Repo,repo.id)
39+
assertrepo.meta.is_sinked
40+
assertrepo.active_at==repo.inserted_at
41+
end
42+
43+
@tag:wip
44+
test"unauth user sink a repo fails",~m(guest_conn community repo)ado
45+
variables=%{id:repo.id,communityId:community.id}
46+
47+
assertguest_conn|>mutation_get_error?(@query,variables,ecode(:account_login))
48+
end
49+
50+
@query"""
51+
mutation($id: ID!, $communityId: ID!){
52+
undoSinkRepo(id: $id, communityId: $communityId) {
53+
id
54+
}
55+
}
56+
"""
57+
@tag:wip
58+
test"login user can undo sink to a repo",~m(community repo)ado
59+
variables=%{id:repo.id,communityId:community.id}
60+
61+
passport_rules=%{community.raw=>%{"repo.undo_sink"=>true}}
62+
rule_conn=simu_conn(:user,cms:passport_rules)
63+
64+
{:ok,_}=CMS.sink_article(:repo,repo.id)
65+
updated=rule_conn|>mutation_result(@query,variables,"undoSinkRepo")
66+
assertupdated["id"]==to_string(repo.id)
67+
68+
{:ok,repo}=ORM.find(Repo,repo.id)
69+
assertnotrepo.meta.is_sinked
70+
end
71+
72+
:wip2
73+
74+
test"unauth user undo sink a repo fails",~m(guest_conn community repo)ado
75+
variables=%{id:repo.id,communityId:community.id}
76+
77+
assertguest_conn|>mutation_get_error?(@query,variables,ecode(:account_login))
78+
end
79+
end
80+
end

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp