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

Commit af3d668

Browse files
committed
chore(guide): tests
1 parent 13d22a1 commit af3d668

File tree

23 files changed

+3956
-0
lines changed

23 files changed

+3956
-0
lines changed
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
defmodule GroupherServer.Test.Accounts.Published.Guide do
2+
use GroupherServer.TestTools
3+
4+
alias GroupherServer.{Accounts, CMS}
5+
alias Accounts.Model.User
6+
alias Helper.ORM
7+
8+
@publish_count 10
9+
10+
setup do
11+
{:ok, user} = db_insert(:user)
12+
{:ok, user2} = db_insert(:user)
13+
{:ok, guide} = db_insert(:guide)
14+
{:ok, community} = db_insert(:community)
15+
{:ok, community2} = db_insert(:community)
16+
17+
{:ok, ~m(user user2 guide community community2)a}
18+
end
19+
20+
describe "[publised guides]" do
21+
test "create guide should update user published meta", ~m(community user)a do
22+
guide_attrs = mock_attrs(:guide, %{community_id: community.id})
23+
{:ok, _guide} = CMS.create_article(community, :guide, guide_attrs, user)
24+
{:ok, _guide} = CMS.create_article(community, :guide, guide_attrs, user)
25+
26+
{:ok, user} = ORM.find(User, user.id)
27+
assert user.meta.published_guides_count == 2
28+
end
29+
30+
test "fresh user get empty paged published guides", ~m(user)a do
31+
{:ok, results} = Accounts.paged_published_articles(user, :guide, %{page: 1, size: 20})
32+
33+
assert results |> is_valid_pagination?(:raw)
34+
assert results.total_count == 0
35+
end
36+
37+
test "user can get paged published guides", ~m(user user2 community community2)a do
38+
pub_guides =
39+
Enum.reduce(1..@publish_count, [], fn _, acc ->
40+
guide_attrs = mock_attrs(:guide, %{community_id: community.id})
41+
{:ok, guide} = CMS.create_article(community, :guide, guide_attrs, user)
42+
43+
acc ++ [guide]
44+
end)
45+
46+
pub_guides2 =
47+
Enum.reduce(1..@publish_count, [], fn _, acc ->
48+
guide_attrs = mock_attrs(:guide, %{community_id: community2.id})
49+
{:ok, guide} = CMS.create_article(community, :guide, guide_attrs, user)
50+
51+
acc ++ [guide]
52+
end)
53+
54+
# unrelated other user
55+
Enum.reduce(1..5, [], fn _, acc ->
56+
guide_attrs = mock_attrs(:guide, %{community_id: community.id})
57+
{:ok, guide} = CMS.create_article(community, :guide, guide_attrs, user2)
58+
59+
acc ++ [guide]
60+
end)
61+
62+
{:ok, results} = Accounts.paged_published_articles(user, :guide, %{page: 1, size: 20})
63+
64+
assert results |> is_valid_pagination?(:raw)
65+
assert results.total_count == @publish_count * 2
66+
67+
random_guide_id = pub_guides |> Enum.random() |> Map.get(:id)
68+
random_guide_id2 = pub_guides2 |> Enum.random() |> Map.get(:id)
69+
assert results.entries |> Enum.any?(&(&1.id == random_guide_id))
70+
assert results.entries |> Enum.any?(&(&1.id == random_guide_id2))
71+
end
72+
end
73+
74+
describe "[publised guide comments]" do
75+
test "can get published article comments", ~m(guide user)a do
76+
total_count = 10
77+
78+
Enum.reduce(1..total_count, [], fn _, acc ->
79+
{:ok, comment} = CMS.create_comment(:guide, guide.id, mock_comment(), user)
80+
acc ++ [comment]
81+
end)
82+
83+
filter = %{page: 1, size: 20}
84+
{:ok, articles} = Accounts.paged_published_comments(user, :guide, filter)
85+
86+
entries = articles.entries
87+
article = entries |> List.first()
88+
89+
assert article.article.id == guide.id
90+
assert article.article.title == guide.title
91+
end
92+
end
93+
end
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
defmodule GroupherServer.Test.CMS.AbuseReports.GuideReport do
2+
@moduledoc false
3+
4+
use GroupherServer.TestTools
5+
6+
alias Helper.ORM
7+
alias GroupherServer.CMS
8+
alias CMS.Model.Guide
9+
10+
setup do
11+
{:ok, user} = db_insert(:user)
12+
{:ok, user2} = db_insert(:user)
13+
14+
{:ok, community} = db_insert(:community)
15+
guide_attrs = mock_attrs(:guide, %{community_id: community.id})
16+
17+
{:ok, ~m(user user2 community guide_attrs)a}
18+
end
19+
20+
describe "[article guide report/unreport]" do
21+
test "list article reports should work", ~m(community user user2 guide_attrs)a do
22+
{:ok, guide} = CMS.create_article(community, :guide, guide_attrs, user)
23+
{:ok, _report} = CMS.report_article(:guide, guide.id, "reason", "attr_info", user)
24+
{:ok, _report} = CMS.report_article(:guide, guide.id, "reason", "attr_info", user2)
25+
26+
filter = %{content_type: :guide, content_id: guide.id, page: 1, size: 20}
27+
{:ok, all_reports} = CMS.paged_reports(filter)
28+
29+
report = all_reports.entries |> List.first()
30+
assert report.article.id == guide.id
31+
assert report.article.thread == "GUIDE"
32+
end
33+
34+
test "report a guide should have a abuse report record", ~m(community user guide_attrs)a do
35+
{:ok, guide} = CMS.create_article(community, :guide, guide_attrs, user)
36+
{:ok, _report} = CMS.report_article(:guide, guide.id, "reason", "attr_info", user)
37+
38+
filter = %{content_type: :guide, content_id: guide.id, page: 1, size: 20}
39+
{:ok, all_reports} = CMS.paged_reports(filter)
40+
41+
report = List.first(all_reports.entries)
42+
report_cases = report.report_cases
43+
44+
assert report.article.id == guide.id
45+
assert all_reports.total_count == 1
46+
assert report.report_cases_count == 1
47+
assert List.first(report_cases).user.login == user.login
48+
49+
{:ok, guide} = ORM.find(Guide, guide.id)
50+
assert guide.meta.reported_count == 1
51+
assert user.id in guide.meta.reported_user_ids
52+
end
53+
54+
test "can undo a report", ~m(community user guide_attrs)a do
55+
{:ok, guide} = CMS.create_article(community, :guide, guide_attrs, user)
56+
{:ok, _report} = CMS.report_article(:guide, guide.id, "reason", "attr_info", user)
57+
{:ok, _report} = CMS.undo_report_article(:guide, guide.id, user)
58+
59+
filter = %{content_type: :guide, content_id: guide.id, page: 1, size: 20}
60+
{:ok, all_reports} = CMS.paged_reports(filter)
61+
assert all_reports.total_count == 0
62+
63+
{:ok, guide} = ORM.find(Guide, guide.id)
64+
assert user.id not in guide.meta.reported_user_ids
65+
end
66+
67+
test "can undo a existed report", ~m(community user user2 guide_attrs)a do
68+
{:ok, guide} = CMS.create_article(community, :guide, guide_attrs, user)
69+
{:ok, _report} = CMS.report_article(:guide, guide.id, "reason", "attr_info", user)
70+
{:ok, _report} = CMS.report_article(:guide, guide.id, "reason", "attr_info", user2)
71+
{:ok, _report} = CMS.undo_report_article(:guide, guide.id, user)
72+
73+
filter = %{content_type: :guide, content_id: guide.id, page: 1, size: 20}
74+
{:ok, all_reports} = CMS.paged_reports(filter)
75+
assert all_reports.total_count == 1
76+
77+
{:ok, guide} = ORM.find(Guide, guide.id)
78+
79+
assert user2.id in guide.meta.reported_user_ids
80+
assert user.id not in guide.meta.reported_user_ids
81+
end
82+
83+
test "can undo a report with other user report it too",
84+
~m(community user user2 guide_attrs)a do
85+
{:ok, guide} = CMS.create_article(community, :guide, guide_attrs, user)
86+
{:ok, _report} = CMS.report_article(:guide, guide.id, "reason", "attr_info", user)
87+
{:ok, _report} = CMS.report_article(:guide, guide.id, "reason", "attr_info", user2)
88+
89+
filter = %{content_type: :guide, content_id: guide.id, page: 1, size: 20}
90+
{:ok, all_reports} = CMS.paged_reports(filter)
91+
assert all_reports.total_count == 1
92+
93+
report = all_reports.entries |> List.first()
94+
assert report.report_cases |> length == 2
95+
assert Enum.any?(report.report_cases, &(&1.user.login == user.login))
96+
assert Enum.any?(report.report_cases, &(&1.user.login == user2.login))
97+
98+
{:ok, _report} = CMS.undo_report_article(:guide, guide.id, user)
99+
100+
filter = %{content_type: :guide, content_id: guide.id, page: 1, size: 20}
101+
{:ok, all_reports} = CMS.paged_reports(filter)
102+
assert all_reports.total_count == 1
103+
104+
report = all_reports.entries |> List.first()
105+
assert report.report_cases |> length == 1
106+
assert Enum.any?(report.report_cases, &(&1.user.login == user2.login))
107+
end
108+
109+
test "different user report a comment should have same report with different report cases",
110+
~m(community user user2 guide_attrs)a do
111+
{:ok, guide} = CMS.create_article(community, :guide, guide_attrs, user)
112+
113+
{:ok, _report} = CMS.report_article(:guide, guide.id, "reason", "attr_info", user)
114+
{:ok, _report} = CMS.report_article(:guide, guide.id, "reason2", "attr_info 2", user2)
115+
116+
filter = %{content_type: :guide, content_id: guide.id, page: 1, size: 20}
117+
{:ok, all_reports} = CMS.paged_reports(filter)
118+
119+
report = List.first(all_reports.entries)
120+
report_cases = report.report_cases
121+
122+
assert all_reports.total_count == 1
123+
assert length(report_cases) == 2
124+
assert report.report_cases_count == 2
125+
126+
assert List.first(report_cases).user.login == user.login
127+
assert List.last(report_cases).user.login == user2.login
128+
end
129+
130+
test "same user can not report a comment twice", ~m(community guide_attrs user)a do
131+
{:ok, guide} = CMS.create_article(community, :guide, guide_attrs, user)
132+
133+
{:ok, _report} = CMS.report_article(:guide, guide.id, "reason", "attr_info", user)
134+
assert {:error, _report} = CMS.report_article(:guide, guide.id, "reason", "attr_info", user)
135+
end
136+
end
137+
end
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
defmodule GroupherServer.Test.CMS.ArticleCommunity.Guide do
2+
use GroupherServer.TestTools
3+
4+
alias Helper.ORM
5+
alias GroupherServer.CMS
6+
alias CMS.Model.Guide
7+
8+
setup do
9+
{:ok, user} = db_insert(:user)
10+
{:ok, user2} = db_insert(:user)
11+
{:ok, guide} = db_insert(:guide)
12+
{:ok, community} = db_insert(:community)
13+
{:ok, community2} = db_insert(:community)
14+
{:ok, community3} = db_insert(:community)
15+
16+
guide_attrs = mock_attrs(:guide, %{community_id: community.id})
17+
18+
{:ok, ~m(user user2 community community2 community3 guide guide_attrs)a}
19+
end
20+
21+
describe "[article mirror/move]" do
22+
test "created guide has origial community info", ~m(user community guide_attrs)a do
23+
{:ok, guide} = CMS.create_article(community, :guide, guide_attrs, user)
24+
{:ok, guide} = ORM.find(Guide, guide.id, preload: :original_community)
25+
26+
assert guide.original_community_id == community.id
27+
end
28+
29+
test "guide can be move to other community", ~m(user community community2 guide_attrs)a do
30+
{:ok, guide} = CMS.create_article(community, :guide, guide_attrs, user)
31+
assert guide.original_community_id == community.id
32+
33+
{:ok, _} = CMS.move_article(:guide, guide.id, community2.id)
34+
{:ok, guide} = ORM.find(Guide, guide.id, preload: [:original_community, :communities])
35+
36+
assert guide.original_community.id == community2.id
37+
assert not is_nil(Enum.find(guide.communities, &(&1.id == community2.id)))
38+
end
39+
40+
test "guide can be mirror to other community", ~m(user community community2 guide_attrs)a do
41+
{:ok, guide} = CMS.create_article(community, :guide, guide_attrs, user)
42+
43+
{:ok, guide} = ORM.find(Guide, guide.id, preload: :communities)
44+
assert guide.communities |> length == 1
45+
46+
assert not is_nil(Enum.find(guide.communities, &(&1.id == community.id)))
47+
48+
{:ok, _} = CMS.mirror_article(:guide, guide.id, community2.id)
49+
50+
{:ok, guide} = ORM.find(Guide, guide.id, preload: :communities)
51+
assert guide.communities |> length == 2
52+
assert not is_nil(Enum.find(guide.communities, &(&1.id == community.id)))
53+
assert not is_nil(Enum.find(guide.communities, &(&1.id == community2.id)))
54+
end
55+
56+
test "guide can be unmirror from community",
57+
~m(user community community2 community3 guide_attrs)a do
58+
{:ok, guide} = CMS.create_article(community, :guide, guide_attrs, user)
59+
{:ok, _} = CMS.mirror_article(:guide, guide.id, community2.id)
60+
{:ok, _} = CMS.mirror_article(:guide, guide.id, community3.id)
61+
62+
{:ok, guide} = ORM.find(Guide, guide.id, preload: :communities)
63+
assert guide.communities |> length == 3
64+
65+
{:ok, _} = CMS.unmirror_article(:guide, guide.id, community3.id)
66+
{:ok, guide} = ORM.find(Guide, guide.id, preload: :communities)
67+
assert guide.communities |> length == 2
68+
69+
assert is_nil(Enum.find(guide.communities, &(&1.id == community3.id)))
70+
end
71+
72+
test "guide can not unmirror from original community",
73+
~m(user community community2 community3 guide_attrs)a do
74+
{:ok, guide} = CMS.create_article(community, :guide, guide_attrs, user)
75+
{:ok, _} = CMS.mirror_article(:guide, guide.id, community2.id)
76+
{:ok, _} = CMS.mirror_article(:guide, guide.id, community3.id)
77+
78+
{:ok, guide} = ORM.find(Guide, guide.id, preload: :communities)
79+
assert guide.communities |> length == 3
80+
81+
{:error, reason} = CMS.unmirror_article(:guide, guide.id, community.id)
82+
assert reason |> is_error?(:mirror_article)
83+
end
84+
end
85+
end

0 commit comments

Comments
 (0)