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

Commit 0afb2c9

Browse files
committed
chore(works): tests
1 parent 3e5047c commit 0afb2c9

File tree

22 files changed

+3985
-0
lines changed

22 files changed

+3985
-0
lines changed
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
defmodule GroupherServer.Test.CMS.AbuseReports.WorksReport do
2+
@moduledoc false
3+
4+
use GroupherServer.TestTools
5+
6+
alias Helper.ORM
7+
alias GroupherServer.CMS
8+
alias CMS.Model.Works
9+
10+
setup do
11+
{:ok, user} = db_insert(:user)
12+
{:ok, user2} = db_insert(:user)
13+
14+
{:ok, community} = db_insert(:community)
15+
works_attrs = mock_attrs(:works, %{community_id: community.id})
16+
17+
{:ok, ~m(user user2 community works_attrs)a}
18+
end
19+
20+
describe "[article works report/unreport]" do
21+
test "list article reports should work", ~m(community user user2 works_attrs)a do
22+
{:ok, works} = CMS.create_article(community, :works, works_attrs, user)
23+
{:ok, _report} = CMS.report_article(:works, works.id, "reason", "attr_info", user)
24+
{:ok, _report} = CMS.report_article(:works, works.id, "reason", "attr_info", user2)
25+
26+
filter = %{content_type: :works, content_id: works.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 == works.id
31+
assert report.article.thread == "WORKS"
32+
end
33+
34+
test "report a works should have a abuse report record", ~m(community user works_attrs)a do
35+
{:ok, works} = CMS.create_article(community, :works, works_attrs, user)
36+
{:ok, _report} = CMS.report_article(:works, works.id, "reason", "attr_info", user)
37+
38+
filter = %{content_type: :works, content_id: works.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 == works.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, works} = ORM.find(Works, works.id)
50+
assert works.meta.reported_count == 1
51+
assert user.id in works.meta.reported_user_ids
52+
end
53+
54+
test "can undo a report", ~m(community user works_attrs)a do
55+
{:ok, works} = CMS.create_article(community, :works, works_attrs, user)
56+
{:ok, _report} = CMS.report_article(:works, works.id, "reason", "attr_info", user)
57+
{:ok, _report} = CMS.undo_report_article(:works, works.id, user)
58+
59+
filter = %{content_type: :works, content_id: works.id, page: 1, size: 20}
60+
{:ok, all_reports} = CMS.paged_reports(filter)
61+
assert all_reports.total_count == 0
62+
63+
{:ok, works} = ORM.find(Works, works.id)
64+
assert user.id not in works.meta.reported_user_ids
65+
end
66+
67+
test "can undo a existed report", ~m(community user user2 works_attrs)a do
68+
{:ok, works} = CMS.create_article(community, :works, works_attrs, user)
69+
{:ok, _report} = CMS.report_article(:works, works.id, "reason", "attr_info", user)
70+
{:ok, _report} = CMS.report_article(:works, works.id, "reason", "attr_info", user2)
71+
{:ok, _report} = CMS.undo_report_article(:works, works.id, user)
72+
73+
filter = %{content_type: :works, content_id: works.id, page: 1, size: 20}
74+
{:ok, all_reports} = CMS.paged_reports(filter)
75+
assert all_reports.total_count == 1
76+
77+
{:ok, works} = ORM.find(Works, works.id)
78+
79+
assert user2.id in works.meta.reported_user_ids
80+
assert user.id not in works.meta.reported_user_ids
81+
end
82+
83+
test "can undo a report with other user report it too",
84+
~m(community user user2 works_attrs)a do
85+
{:ok, works} = CMS.create_article(community, :works, works_attrs, user)
86+
{:ok, _report} = CMS.report_article(:works, works.id, "reason", "attr_info", user)
87+
{:ok, _report} = CMS.report_article(:works, works.id, "reason", "attr_info", user2)
88+
89+
filter = %{content_type: :works, content_id: works.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(:works, works.id, user)
99+
100+
filter = %{content_type: :works, content_id: works.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 works_attrs)a do
111+
{:ok, works} = CMS.create_article(community, :works, works_attrs, user)
112+
113+
{:ok, _report} = CMS.report_article(:works, works.id, "reason", "attr_info", user)
114+
{:ok, _report} = CMS.report_article(:works, works.id, "reason2", "attr_info 2", user2)
115+
116+
filter = %{content_type: :works, content_id: works.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 works_attrs user)a do
131+
{:ok, works} = CMS.create_article(community, :works, works_attrs, user)
132+
133+
{:ok, _report} = CMS.report_article(:works, works.id, "reason", "attr_info", user)
134+
assert {:error, _report} = CMS.report_article(:works, works.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.Works do
2+
use GroupherServer.TestTools
3+
4+
alias Helper.ORM
5+
alias GroupherServer.CMS
6+
alias CMS.Model.Works
7+
8+
setup do
9+
{:ok, user} = db_insert(:user)
10+
{:ok, user2} = db_insert(:user)
11+
{:ok, works} = db_insert(:works)
12+
{:ok, community} = db_insert(:community)
13+
{:ok, community2} = db_insert(:community)
14+
{:ok, community3} = db_insert(:community)
15+
16+
works_attrs = mock_attrs(:works, %{community_id: community.id})
17+
18+
{:ok, ~m(user user2 community community2 community3 works works_attrs)a}
19+
end
20+
21+
describe "[article mirror/move]" do
22+
test "created works has origial community info", ~m(user community works_attrs)a do
23+
{:ok, works} = CMS.create_article(community, :works, works_attrs, user)
24+
{:ok, works} = ORM.find(Works, works.id, preload: :original_community)
25+
26+
assert works.original_community_id == community.id
27+
end
28+
29+
test "works can be move to other community", ~m(user community community2 works_attrs)a do
30+
{:ok, works} = CMS.create_article(community, :works, works_attrs, user)
31+
assert works.original_community_id == community.id
32+
33+
{:ok, _} = CMS.move_article(:works, works.id, community2.id)
34+
{:ok, works} = ORM.find(Works, works.id, preload: [:original_community, :communities])
35+
36+
assert works.original_community.id == community2.id
37+
assert not is_nil(Enum.find(works.communities, &(&1.id == community2.id)))
38+
end
39+
40+
test "works can be mirror to other community", ~m(user community community2 works_attrs)a do
41+
{:ok, works} = CMS.create_article(community, :works, works_attrs, user)
42+
43+
{:ok, works} = ORM.find(Works, works.id, preload: :communities)
44+
assert works.communities |> length == 1
45+
46+
assert not is_nil(Enum.find(works.communities, &(&1.id == community.id)))
47+
48+
{:ok, _} = CMS.mirror_article(:works, works.id, community2.id)
49+
50+
{:ok, works} = ORM.find(Works, works.id, preload: :communities)
51+
assert works.communities |> length == 2
52+
assert not is_nil(Enum.find(works.communities, &(&1.id == community.id)))
53+
assert not is_nil(Enum.find(works.communities, &(&1.id == community2.id)))
54+
end
55+
56+
test "works can be unmirror from community",
57+
~m(user community community2 community3 works_attrs)a do
58+
{:ok, works} = CMS.create_article(community, :works, works_attrs, user)
59+
{:ok, _} = CMS.mirror_article(:works, works.id, community2.id)
60+
{:ok, _} = CMS.mirror_article(:works, works.id, community3.id)
61+
62+
{:ok, works} = ORM.find(Works, works.id, preload: :communities)
63+
assert works.communities |> length == 3
64+
65+
{:ok, _} = CMS.unmirror_article(:works, works.id, community3.id)
66+
{:ok, works} = ORM.find(Works, works.id, preload: :communities)
67+
assert works.communities |> length == 2
68+
69+
assert is_nil(Enum.find(works.communities, &(&1.id == community3.id)))
70+
end
71+
72+
test "works can not unmirror from original community",
73+
~m(user community community2 community3 works_attrs)a do
74+
{:ok, works} = CMS.create_article(community, :works, works_attrs, user)
75+
{:ok, _} = CMS.mirror_article(:works, works.id, community2.id)
76+
{:ok, _} = CMS.mirror_article(:works, works.id, community3.id)
77+
78+
{:ok, works} = ORM.find(Works, works.id, preload: :communities)
79+
assert works.communities |> length == 3
80+
81+
{:error, reason} = CMS.unmirror_article(:works, works.id, community.id)
82+
assert reason |> is_error?(:mirror_article)
83+
end
84+
end
85+
end
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
defmodule GroupherServer.Test.CMS.ArticleTag.WorksTag do
2+
use GroupherServer.TestTools
3+
4+
alias GroupherServer.CMS
5+
alias CMS.Model.{Community, ArticleTag, Works}
6+
alias Helper.{ORM}
7+
8+
setup do
9+
{:ok, user} = db_insert(:user)
10+
{:ok, works} = db_insert(:works)
11+
{:ok, community} = db_insert(:community)
12+
article_tag_attrs = mock_attrs(:article_tag)
13+
article_tag_attrs2 = mock_attrs(:article_tag)
14+
15+
works_attrs = mock_attrs(:works)
16+
17+
{:ok, ~m(user community works works_attrs article_tag_attrs article_tag_attrs2)a}
18+
end
19+
20+
describe "[works tag CURD]" do
21+
test "create article tag with valid data", ~m(community article_tag_attrs user)a do
22+
{:ok, article_tag} = CMS.create_article_tag(community, :works, article_tag_attrs, user)
23+
assert article_tag.title == article_tag_attrs.title
24+
assert article_tag.group == article_tag_attrs.group
25+
end
26+
27+
test "can update an article tag", ~m(community article_tag_attrs user)a do
28+
{:ok, article_tag} = CMS.create_article_tag(community, :works, article_tag_attrs, user)
29+
30+
new_attrs = article_tag_attrs |> Map.merge(%{title: "new title"})
31+
32+
{:ok, article_tag} = CMS.update_article_tag(article_tag.id, new_attrs)
33+
assert article_tag.title == "new title"
34+
end
35+
36+
test "create article tag with non-exsit community fails", ~m(article_tag_attrs user)a do
37+
assert {:error, _} =
38+
CMS.create_article_tag(
39+
%Community{id: non_exsit_id()},
40+
:works,
41+
article_tag_attrs,
42+
user
43+
)
44+
end
45+
46+
test "tag can be deleted", ~m(community article_tag_attrs user)a do
47+
{:ok, article_tag} = CMS.create_article_tag(community, :works, article_tag_attrs, user)
48+
{:ok, article_tag} = ORM.find(ArticleTag, article_tag.id)
49+
50+
{:ok, _} = CMS.delete_article_tag(article_tag.id)
51+
52+
assert {:error, _} = ORM.find(ArticleTag, article_tag.id)
53+
end
54+
55+
test "assoc tag should be delete after tag deleted",
56+
~m(community works article_tag_attrs article_tag_attrs2 user)a do
57+
{:ok, article_tag} = CMS.create_article_tag(community, :works, article_tag_attrs, user)
58+
{:ok, article_tag2} = CMS.create_article_tag(community, :works, article_tag_attrs2, user)
59+
60+
{:ok, works} = CMS.set_article_tag(:works, works.id, article_tag.id)
61+
{:ok, works} = CMS.set_article_tag(:works, works.id, article_tag2.id)
62+
63+
{:ok, works} = ORM.find(Works, works.id, preload: :article_tags)
64+
assert exist_in?(article_tag, works.article_tags)
65+
assert exist_in?(article_tag2, works.article_tags)
66+
67+
{:ok, _} = CMS.delete_article_tag(article_tag.id)
68+
69+
{:ok, works} = ORM.find(Works, works.id, preload: :article_tags)
70+
assert not exist_in?(article_tag, works.article_tags)
71+
assert exist_in?(article_tag2, works.article_tags)
72+
73+
{:ok, _} = CMS.delete_article_tag(article_tag2.id)
74+
75+
{:ok, works} = ORM.find(Works, works.id, preload: :article_tags)
76+
assert not exist_in?(article_tag, works.article_tags)
77+
assert not exist_in?(article_tag2, works.article_tags)
78+
end
79+
end
80+
81+
describe "[create/update works with tags]" do
82+
test "can create works with exsited article tags",
83+
~m(community user works_attrs article_tag_attrs article_tag_attrs2)a do
84+
{:ok, article_tag} = CMS.create_article_tag(community, :works, article_tag_attrs, user)
85+
{:ok, article_tag2} = CMS.create_article_tag(community, :works, article_tag_attrs2, user)
86+
87+
works_with_tags = Map.merge(works_attrs, %{article_tags: [article_tag.id, article_tag2.id]})
88+
89+
{:ok, created} = CMS.create_article(community, :works, works_with_tags, user)
90+
{:ok, works} = ORM.find(Works, created.id, preload: :article_tags)
91+
92+
assert exist_in?(article_tag, works.article_tags)
93+
assert exist_in?(article_tag2, works.article_tags)
94+
end
95+
96+
test "can not create works with other community's article tags",
97+
~m(community user works_attrs article_tag_attrs article_tag_attrs2)a do
98+
{:ok, community2} = db_insert(:community)
99+
{:ok, article_tag} = CMS.create_article_tag(community, :works, article_tag_attrs, user)
100+
{:ok, article_tag2} = CMS.create_article_tag(community2, :works, article_tag_attrs2, user)
101+
102+
works_with_tags = Map.merge(works_attrs, %{article_tags: [article_tag.id, article_tag2.id]})
103+
104+
{:error, reason} = CMS.create_article(community, :works, works_with_tags, user)
105+
is_error?(reason, :invalid_domain_tag)
106+
end
107+
end
108+
109+
describe "[works tag set /unset]" do
110+
test "can set a tag ", ~m(community works article_tag_attrs article_tag_attrs2 user)a do
111+
{:ok, article_tag} = CMS.create_article_tag(community, :works, article_tag_attrs, user)
112+
{:ok, article_tag2} = CMS.create_article_tag(community, :works, article_tag_attrs2, user)
113+
114+
{:ok, works} = CMS.set_article_tag(:works, works.id, article_tag.id)
115+
assert works.article_tags |> length == 1
116+
assert exist_in?(article_tag, works.article_tags)
117+
118+
{:ok, works} = CMS.set_article_tag(:works, works.id, article_tag2.id)
119+
assert works.article_tags |> length == 2
120+
assert exist_in?(article_tag, works.article_tags)
121+
assert exist_in?(article_tag2, works.article_tags)
122+
123+
{:ok, works} = CMS.unset_article_tag(:works, works.id, article_tag.id)
124+
assert works.article_tags |> length == 1
125+
assert not exist_in?(article_tag, works.article_tags)
126+
assert exist_in?(article_tag2, works.article_tags)
127+
128+
{:ok, works} = CMS.unset_article_tag(:works, works.id, article_tag2.id)
129+
assert works.article_tags |> length == 0
130+
assert not exist_in?(article_tag, works.article_tags)
131+
assert not exist_in?(article_tag2, works.article_tags)
132+
end
133+
end
134+
end

0 commit comments

Comments
 (0)