Skip to content
This repository was archived by the owner on Nov 8, 2022. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 20 additions & 9 deletions lib/groupher_server/cms/delegates/article_curd.ex
Original file line number Diff line number Diff line change
Expand Up @@ -443,25 +443,36 @@ defmodule GroupherServer.CMS.Delegate.ArticleCURD do

defp exec_update_tags(_content, _), do: {:ok, :pass}

# TODO: move to utils
defp strip_struct(struct) do
struct |> Map.from_struct() |> Map.delete(:id)
end

defp update_viewed_user_list(%{meta: nil} = article, user_id) do
new_ids = Enum.uniq([user_id] ++ @default_article_meta.viewed_user_ids)
updated_meta = @default_article_meta |> Map.merge(%{viewed_user_ids: new_ids})
meta = @default_article_meta |> Map.merge(%{viewed_user_ids: new_ids})

article
|> Ecto.Changeset.change()
|> Ecto.Changeset.put_embed(:meta, updated_meta)
|> Repo.update()
do_update_viewed_user_list(article, meta)
end

defp update_viewed_user_list(%{meta: meta} = article, user_id) do
new_ids = Enum.uniq([user_id] ++ meta.viewed_user_ids)
user_not_viewed = not Enum.member?(meta.viewed_user_ids, user_id)

updated_meta =
meta |> Map.merge(%{viewed_user_ids: new_ids}) |> Map.from_struct() |> Map.delete(:id)
case Enum.empty?(meta.viewed_user_ids) or user_not_viewed do
true ->
new_ids = Enum.uniq([user_id] ++ meta.viewed_user_ids)
meta = meta |> Map.merge(%{viewed_user_ids: new_ids}) |> strip_struct
do_update_viewed_user_list(article, meta)

false ->
{:ok, :pass}
end
end

defp do_update_viewed_user_list(article, meta) do
article
|> Ecto.Changeset.change()
|> Ecto.Changeset.put_embed(:meta, updated_meta)
|> Ecto.Changeset.put_embed(:meta, meta)
|> Repo.update()
end

Expand Down
2 changes: 1 addition & 1 deletion test/groupher_server/cms/article_comment_emotions_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ defmodule GroupherServer.Test.CMS.ArticleCommentEmotions do
end

describe "[emotion in paged article comment]" do
@tag :wip2
@tag :wip3
test "login user should got viewer has emotioned status", ~m(post user)a do
total_count = 0
page_number = 10
Expand Down
25 changes: 24 additions & 1 deletion test/groupher_server/cms/job_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ defmodule GroupherServer.Test.Job do

setup do
{:ok, user} = db_insert(:user)
{:ok, user2} = db_insert(:user)
{:ok, community} = db_insert(:community)

job_attrs = mock_attrs(:job, %{community_id: community.id})

{:ok, ~m(user community job_attrs)a}
{:ok, ~m(user user2 community job_attrs)a}
end

describe "[cms jobs curd]" do
Expand All @@ -24,6 +25,28 @@ defmodule GroupherServer.Test.Job do
assert found.title == job.title
end

@tag :wip2
test "read job should update views and meta viewed_user_list",
~m(job_attrs community user user2)a do
{:ok, job} = CMS.create_content(community, :job, job_attrs, user)
{:ok, _} = CMS.read_article(:job, job.id, user)
{:ok, _created} = ORM.find(CMS.Job, job.id)

# same user duplicate case
{:ok, _} = CMS.read_article(:job, job.id, user)
{:ok, created} = ORM.find(CMS.Job, job.id)

assert created.meta.viewed_user_ids |> length == 1
assert user.id in created.meta.viewed_user_ids

{:ok, _} = CMS.read_article(:job, job.id, user2)
{:ok, created} = ORM.find(CMS.Job, job.id)

assert created.meta.viewed_user_ids |> length == 2
assert user.id in created.meta.viewed_user_ids
assert user2.id in created.meta.viewed_user_ids
end

test "created job has origial community info", ~m(user community job_attrs)a do
{:ok, job} = CMS.create_content(community, :job, job_attrs, user)
{:ok, found} = ORM.find(CMS.Job, job.id, preload: :origial_community)
Expand Down
2 changes: 1 addition & 1 deletion test/groupher_server/cms/post_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ defmodule GroupherServer.Test.CMS.Post do
assert post.title == post_attrs.title
end

@tag :wip3
@tag :wip2
test "read post should update views and meta viewed_user_list",
~m(post_attrs community user user2)a do
{:ok, post} = CMS.create_content(community, :post, post_attrs, user)
Expand Down
25 changes: 24 additions & 1 deletion test/groupher_server/cms/repo_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@ defmodule GroupherServer.Test.Repo do

setup do
{:ok, user} = db_insert(:user)
{:ok, user2} = db_insert(:user)
# {:ok, post} = db_insert(:post)
{:ok, community} = db_insert(:community)

repo_attrs = mock_attrs(:repo, %{community_id: community.id})

{:ok, ~m(user community repo_attrs)a}
{:ok, ~m(user user2 community repo_attrs)a}
end

describe "[cms repo curd]" do
Expand All @@ -26,6 +27,28 @@ defmodule GroupherServer.Test.Repo do
assert repo.contributors |> length !== 0
end

@tag :wip2
test "read repo should update views and meta viewed_user_list",
~m(repo_attrs community user user2)a do
{:ok, repo} = CMS.create_content(community, :repo, repo_attrs, user)
{:ok, _} = CMS.read_article(:repo, repo.id, user)
{:ok, _created} = ORM.find(CMS.Repo, repo.id)

# same user duplicate case
{:ok, _} = CMS.read_article(:repo, repo.id, user)
{:ok, created} = ORM.find(CMS.Repo, repo.id)

assert created.meta.viewed_user_ids |> length == 1
assert user.id in created.meta.viewed_user_ids

{:ok, _} = CMS.read_article(:repo, repo.id, user2)
{:ok, created} = ORM.find(CMS.Repo, repo.id)

assert created.meta.viewed_user_ids |> length == 2
assert user.id in created.meta.viewed_user_ids
assert user2.id in created.meta.viewed_user_ids
end

test "created repo has origial community info", ~m(user community repo_attrs)a do
{:ok, repo} = CMS.create_content(community, :repo, repo_attrs, user)
{:ok, found} = ORM.find(CMS.Repo, repo.id, preload: :origial_community)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ defmodule GroupherServer.Test.Mutation.Account.Customization do
}
}
"""
@tag :wip2
@tag :wip3
test "PageSizeProof middleware should lint c11n displayDensity size", ~m(user)a do
user_conn = simu_conn(:user, user)
db_insert_multi(:post, 50)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,7 @@ defmodule GroupherServer.Test.Query.ArticleComment do
assert the_random_comment |> get_in(["meta", "isArticleAuthorUpvoted"])
end

@tag :wip2
@tag :wip3
test "guest user can get paged comment with emotions info",
~m(guest_conn post user user2)a do
total_count = 2
Expand Down