Skip to content

Commit

Permalink
Fix failing test for #665
Browse files Browse the repository at this point in the history
  • Loading branch information
rrrene committed Jul 16, 2019
1 parent 0362c52 commit 9a53f4b
Show file tree
Hide file tree
Showing 2 changed files with 207 additions and 2 deletions.
2 changes: 1 addition & 1 deletion lib/credo/code/heredocs.ex
Expand Up @@ -246,7 +246,7 @@ defmodule Credo.Code.Heredocs do
|> List.last()
|> List.first()

length_after_byte_index = String.length(acc) - byte_index
length_after_byte_index = byte_size(acc) - byte_index

new_acc =
acc
Expand Down
207 changes: 206 additions & 1 deletion test/credo/code/heredocs_test.exs
Expand Up @@ -454,7 +454,212 @@ defmodule Credo.Code.HeredocsTest do
end
'''

expected = source
expected = ~S'''
defmodule Quora.Issues.Issue do
@moduledoc """
....
"""
use Ecto.Schema
import Ecto.{Changeset, Query}
import HljUtil.Util
import Quora.Utils.AASM
alias Quora.{
Repo,
Site,
Issues,
Version
}
alias Quora.Utils.DateUtil
alias Version.Footprint
alias Site.{User, Tag}
alias Issues.Issue
@type t :: %Issue{}
schema "issues" do
field(:code, :string)
field(:title, :string)
field(:description, :string)
field(:reason, :string)
field(:solution, :string)
field(:remark, :string)
field(:state, :string, default: "created")
field(:assigned_reason, :string)
field(:assigned_at, :naive_datetime)
field(:due_date, :naive_datetime)
field(:closed_time, :naive_datetime)
field(:operator_id, :integer, virtual: true)
field(:base_reason, :string)
field(:influenced, :string)
field(:punishment, :string)
field(:improvement, :string)
field(:level, :string)
timestamps()
belongs_to(:author, User)
belongs_to(:assignee, User)
belongs_to(:bug_creator, User)
has_many(:footprints, Footprint, foreign_key: :item_id)
many_to_many(:tags, Tag, join_through: "issues_tags", on_replace: :delete)
end
# created 新建
# assigned 已指派
# finished 该问题已解决
# coe_report 已发 COE 报告
# closed 关闭问题
aasm :state do
defstate(~w(created assigned finished coe_report closed)a)
# 设置为已指派
defevent(:handle_assigned, %{from: ~w(created)a, to: :assigned}, fn changeset ->
changeset |> Version.update()
end)
# 设置问题已解决
defevent(:handle_finished, %{from: ~w(assigned)a, to: :finished}, fn changeset ->
changeset |> Version.update()
end)
# 设置状态为 COE 报告已发
defevent(:handle_coe_report, %{from: ~w(finished)a, to: :coe_report}, fn changeset ->
changeset |> Version.update()
end)
# 设置 issue 关闭, 不限制状态,所有状态下都可以关闭。
defevent(
:handle_closed,
%{from: ~w(created assigned finished coe_report)a, to: :closed},
fn changeset -> changeset |> Version.update() end
)
end
def state_names do
%{
created: "新问题",
assigned: "已指派",
finished: "已解决",
coe_report: "已复盘",
closed: "已关闭"
}
end
def state_name(issue) do
state_names()
|> Map.get(String.to_atom(issue.state), "新问题")
end
@doc """
..........................
.."""
@spec preload_all(t()) :: t()
def preload_all(issue) do
Repo.preload(issue, [:author, :assignee, :tags, :bug_creator])
end
@doc ~S"""
.............
.."""
@spec build_query(Ecto.Query.t(), Map.t()) :: Ecto.Query.t()
def build_query(base \\ __MODULE__, params) do
params
|> Enum.filter(fn {_, v} -> byte_size(to_string(v)) != 0 end)
|> Enum.reduce(base, fn {name, value}, acc ->
query_by(acc, String.to_atom(name), value)
end)
end
defp query_by(query, :query, term) do
query
|> where([i, ...], like(i.code, ^"% %"))
|> or_where([i, ...], like(i.description, ^"% %"))
end
defp query_by(query, :author, author_id) do
where(query, [i, ...], i.author_id == ^author_id)
end
defp query_by(query, :state, state) do
where(query, [i, ...], i.state == ^state)
end
defp query_by(query, :tag, tag_id) do
from(i in query,
join: tag in assoc(i, :tags),
where: tag.id == ^tag_id
)
end
defp query_by(query, :created, time) do
{from, to} = DateUtil.parse_range(time, naive: true)
query
|> either(from, fn base -> where(base, [i, ...], i.inserted_at > ^from) end)
|> either(to, fn base -> where(base, [i, ...], i.inserted_at < ^to) end)
end
defp query_by(query, _, _), do: query
@doc """
...........
.."""
def changeset(issue, attrs \\ %{}) do
permitted_attrs = ~w(
code
title
description
state
reason
solution
base_reason
influenced
punishment
improvement
operator_id
assigned_reason
assigned_at
bug_creator_id
remark
due_date
closed_time
author_id
assignee_id
level
)a
required_attrs = ~w(
code
author_id
)a
issue
|> cast(attrs, permitted_attrs)
|> validate_required(required_attrs)
|> assoc_tags(attrs["tags"])
|> assoc_constraint(:author)
|> assoc_constraint(:assignee)
end
defp assoc_tags(changeset, nil), do: changeset
defp assoc_tags(changeset, ids) when is_list(ids) do
tags =
ids
|> Enum.map(&parse_int/1)
|> Enum.filter(& &1)
|> Tag.get_by_ids()
put_assoc(changeset, :tags, tags)
end
defp either(ctx, check, inner) do
if check, do: inner.(ctx), else: ctx
end
end
'''

result = source |> Heredocs.replace_with_spaces(".")
assert expected == result
Expand Down

0 comments on commit 9a53f4b

Please sign in to comment.