Skip to content

Instantly share code, notes, and snippets.

@pkoch
Created September 2, 2017 17:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pkoch/bf8093cce24e346d24bb178250f1f6a9 to your computer and use it in GitHub Desktop.
Save pkoch/bf8093cce24e346d24bb178250f1f6a9 to your computer and use it in GitHub Desktop.
The database for Api.Repo has been dropped
The database for Api.Repo has been created
......................................
1) test changeset redeem (Api.PaperVoteTest)
test/models/paper_vote_test.exs:28
** (RuntimeError) changing assocs with change/2 or put_change/3 is not supported, please use put_assoc/4 instead
code: assert PaperVote.changeset(%PaperVote{}, Map.merge(base_attrs, %{
stacktrace:
(ecto) lib/ecto/changeset.ex:1011: Ecto.Changeset.put_change/7
(stdlib) lists.erl:1263: :lists.foldl/3
(ecto) lib/ecto/changeset.ex:325: Ecto.Changeset.change/2
(ecto) lib/ecto/changeset/relation.ex:152: Ecto.Changeset.Relation.do_change/4
(ecto) lib/ecto/changeset/relation.ex:237: Ecto.Changeset.Relation.single_change/5
(ecto) lib/ecto/changeset.ex:1083: Ecto.Changeset.put_relation/5
(api) web/models/paper_vote.ex:55: Api.PaperVote.changeset/2
test/models/paper_vote_test.exs:29: (test)
2) test changeset create (Api.PaperVoteTest)
test/models/paper_vote_test.exs:24
** (RuntimeError) changing assocs with change/2 or put_change/3 is not supported, please use put_assoc/4 instead
code: assert PaperVote.changeset(%PaperVote{}, base_attrs).valid?
stacktrace:
(ecto) lib/ecto/changeset.ex:1011: Ecto.Changeset.put_change/7
(stdlib) lists.erl:1263: :lists.foldl/3
(ecto) lib/ecto/changeset.ex:325: Ecto.Changeset.change/2
(ecto) lib/ecto/changeset/relation.ex:152: Ecto.Changeset.Relation.do_change/4
(ecto) lib/ecto/changeset/relation.ex:237: Ecto.Changeset.Relation.single_change/5
(ecto) lib/ecto/changeset.ex:1083: Ecto.Changeset.put_relation/5
(api) web/models/paper_vote.ex:55: Api.PaperVote.changeset/2
test/models/paper_vote_test.exs:25: (test)
3) test roundtrip (Api.PaperVoteTest)
test/models/paper_vote_test.exs:44
** (RuntimeError) changing assocs with change/2 or put_change/3 is not supported, please use put_assoc/4 instead
code: |> PaperVote.changeset(%{
stacktrace:
(ecto) lib/ecto/changeset.ex:1011: Ecto.Changeset.put_change/7
(stdlib) lists.erl:1263: :lists.foldl/3
(ecto) lib/ecto/changeset.ex:325: Ecto.Changeset.change/2
(ecto) lib/ecto/changeset/relation.ex:152: Ecto.Changeset.Relation.do_change/4
(ecto) lib/ecto/changeset/relation.ex:237: Ecto.Changeset.Relation.single_change/5
(ecto) lib/ecto/changeset.ex:1083: Ecto.Changeset.put_relation/5
(api) web/models/paper_vote.ex:55: Api.PaperVote.changeset/2
test/models/paper_vote_test.exs:47: (test)
4) test changeset annul (Api.PaperVoteTest)
test/models/paper_vote_test.exs:37
** (RuntimeError) changing assocs with change/2 or put_change/3 is not supported, please use put_assoc/4 instead
code: assert PaperVote.changeset(%PaperVote{}, Map.merge(base_attrs, %{
stacktrace:
(ecto) lib/ecto/changeset.ex:1011: Ecto.Changeset.put_change/7
(stdlib) lists.erl:1263: :lists.foldl/3
(ecto) lib/ecto/changeset.ex:325: Ecto.Changeset.change/2
(ecto) lib/ecto/changeset/relation.ex:152: Ecto.Changeset.Relation.do_change/4
(ecto) lib/ecto/changeset/relation.ex:237: Ecto.Changeset.Relation.single_change/5
(ecto) lib/ecto/changeset.ex:1083: Ecto.Changeset.put_relation/5
(api) web/models/paper_vote.ex:55: Api.PaperVote.changeset/2
test/models/paper_vote_test.exs:38: (test)
.............................................................................................
Finished in 1.4 seconds
135 tests, 4 failures
Randomized with seed 651180
Checking 54 source files ...
Please report incorrect results: https://github.com/rrrene/credo/issues
Analysis took 0.5 seconds (0.03s to load, 0.5s running checks)
207 mods/funs, found no issues.
defmodule Api.PaperVote do
@moduledoc """
TODO: Write.
"""
use Api.Web, :model
alias Api.{Crypto, Team, Category, User}
@required_attrs [
:hmac_secret,
]
@required_assocs [
:category,
:created_by,
]
@valid_attrs @required_attrs ++ [
:redeemed_at,
:annulled_at,
]
@valid_assocs @required_assocs ++ [
:redeeming_admin,
:redeeming_member,
:team,
:annulled_by,
]
schema "paper_votes" do
field :hmac_secret, :string
belongs_to :category, Category
belongs_to :created_by, User
field :redeemed_at, :utc_datetime
belongs_to :redeeming_admin, User
belongs_to :redeeming_member, User
belongs_to :team, Team
field :annulled_at, :utc_datetime
belongs_to :annulled_by, User
timestamps()
end
def hmac(paper_vote) do
Crypto.hmac(paper_vote.hmac_secret, paper_vote.id)
end
def changeset(struct, params \\ %{}) do
struct
|> cast(params, @valid_attrs)
|> put_assoc(:category, params.category)
|> put_assoc(:created_by, params.created_by)
|> put_assoc(:redeeming_admin, params.redeeming_admin)
|> put_assoc(:redeeming_member, params.redeeming_member)
|> put_assoc(:annulled_by, params.annulled_by)
|> validate_required(@required_attrs)
end
end
defmodule Api.PaperVoteTest do
use Api.ModelCase
alias Api.PaperVote
setup %{} do
user = create_user() |> Map.from_struct()
admin = create_admin() |> Map.from_struct()
category = create_category() |> Map.from_struct()
team = create_team(user) |> Map.from_struct()
{:ok, %{
user: user,
admin: admin,
category: category,
team: team,
base_attrs: %{
hmac_secret: "you'll never guess me",
category: category,
created_by: admin,
}
}}
end
test "changeset create", %{base_attrs: base_attrs} do
assert PaperVote.changeset(%PaperVote{}, base_attrs).valid?
end
test "changeset redeem", %{base_attrs: base_attrs, user: user, team: team, admin: admin} do
assert PaperVote.changeset(%PaperVote{}, Map.merge(base_attrs, %{
redeemed_at: DateTime.utc_now(),
redeeming_admin: admin,
redeeming_member: user,
team: team,
})).valid?
end
test "changeset annul", %{base_attrs: base_attrs, admin: admin} do
assert PaperVote.changeset(%PaperVote{}, Map.merge(base_attrs, %{
annulled_at: DateTime.utc_now(),
annulled_by: admin,
})).valid?
end
test "roundtrip", %{admin: admin, category: category, user: user, team: team} do
pv =
%PaperVote{}
|> PaperVote.changeset(%{
hmac_secret: "you'll never guess me",
category: category,
created_by: admin,
redeemed_at: DateTime.utc_now(),
redeeming_admin: admin,
redeeming_member: user,
team: team,
annulled_at: DateTime.utc_now(),
annulled_by: admin,
})
|> Repo.insert!
assert Map.from_struct(pv) == %{}
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment