Skip to content

Commit c2e7e2d

Browse files
committed
Fix type system warnings
1 parent abd8759 commit c2e7e2d

15 files changed

Lines changed: 468 additions & 261 deletions

test/ecto/changeset_test.exs

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -537,14 +537,6 @@ defmodule Ecto.ChangesetTest do
537537
assert_raise Ecto.CastError, ~r"mixed keys", fn ->
538538
cast(%Post{}, %{"title" => "foo", title: "foo"}, ~w())
539539
end
540-
541-
assert_raise FunctionClauseError, fn ->
542-
cast(%Post{}, %{}, %{})
543-
end
544-
545-
assert_raise FunctionClauseError, fn ->
546-
cast(%Post{}, %{"title" => "foo"}, nil)
547-
end
548540
end
549541

550542
test "cast/4: protects against atom injection" do
@@ -1280,12 +1272,6 @@ defmodule Ecto.ChangesetTest do
12801272
|> validate_required("title")
12811273
end
12821274

1283-
# When field is nil
1284-
assert_raise FunctionClauseError, fn ->
1285-
changeset(%{"title" => "hello"})
1286-
|> validate_required(nil)
1287-
end
1288-
12891275
# When field is list and is an empty value
12901276
changeset =
12911277
%Post{topics: ["foo"]}

test/ecto/multi_test.exs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -438,12 +438,6 @@ defmodule Ecto.MultiTest do
438438
assert multi.operations == [{:changeset, {:changeset, changeset, []}}]
439439
end
440440

441-
test "add run with invalid arity" do
442-
assert_raise FunctionClauseError, fn ->
443-
Multi.new() |> Multi.run(:run, fn -> nil end)
444-
end
445-
end
446-
447441
test "repeating an operation" do
448442
fun = fn _, _ -> {:ok, :ok} end
449443

test/ecto/query/builder/distinct_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ defmodule Ecto.Query.Builder.DistinctTest do
9595

9696
assert_raise ArgumentError, message, fn ->
9797
temp = "temp"
98-
distinct("posts", [p], [^temp])
98+
distinct("posts", [p], [^Process.get(:unused, temp)])
9999
end
100100
end
101101

test/ecto/query/builder/group_by_test.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,14 @@ defmodule Ecto.Query.Builder.GroupByTest do
7878

7979
assert_raise ArgumentError, message, fn ->
8080
temp = "temp"
81-
group_by("posts", [p], [^temp])
81+
group_by("posts", [p], [^Process.get(:unused, temp)])
8282
end
8383

8484
message = "expected a list of fields and dynamics in `group_by`, got: `\"temp\"`"
8585

8686
assert_raise ArgumentError, message, fn ->
8787
temp = "temp"
88-
group_by("posts", [p], ^temp)
88+
group_by("posts", [p], ^Process.get(:unused, temp))
8989
end
9090
end
9191

test/ecto/query/builder/join_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ defmodule Ecto.Query.Builder.JoinTest do
136136
test "raises on invalid qualifier" do
137137
assert_raise ArgumentError, ~r/invalid join qualifier `:whatever`/, fn ->
138138
qual = :whatever
139-
join("posts", qual, [p], c in "comments", on: true)
139+
join("posts", Process.get(:unused, qual), [p], c in "comments", on: true)
140140
end
141141
end
142142

test/ecto/query/builder/limit_offset_test.exs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Code.require_file "../../../support/eval_helpers.exs", __DIR__
1+
Code.require_file("../../../support/eval_helpers.exs", __DIR__)
22

33
defmodule Ecto.Query.Builder.LimitOffsetTest do
44
use ExUnit.Case, async: true
@@ -48,18 +48,22 @@ defmodule Ecto.Query.Builder.LimitOffsetTest do
4848

4949
test "with_ties must be a runtime or compile time boolean" do
5050
msg = "`with_ties` expression must evaluate to a boolean at runtime, got: `1`"
51+
5152
assert_raise RuntimeError, msg, fn ->
52-
with_ties("posts", ^1)
53+
with_ties("posts", ^Process.get(:unused, 1))
5354
end
5455

55-
msg = "`with_ties` expression must be a compile time boolean or an interpolated value using ^, got: `1`"
56+
msg =
57+
"`with_ties` expression must be a compile time boolean or an interpolated value using ^, got: `1`"
58+
5659
assert_raise Ecto.Query.CompileError, msg, fn ->
57-
quote_and_eval with_ties("posts", 1)
60+
quote_and_eval(with_ties("posts", 1))
5861
end
5962
end
6063

6164
test "with_ties requires a limit" do
6265
msg = "`with_ties` can only be applied to queries containing a `limit`"
66+
6367
assert_raise Ecto.Query.CompileError, msg, fn ->
6468
with_ties("posts", true)
6569
end

test/ecto/query/builder/order_by_test.exs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ defmodule Ecto.Query.Builder.OrderByTest do
258258
test "raises on invalid direction" do
259259
assert_raise ArgumentError, ~r"expected one of :asc,", fn ->
260260
temp = :temp
261-
order_by("posts", [p], [{^var!(temp), p.y}])
261+
order_by("posts", [p], [{^Process.get(:unused, temp), p.y}])
262262
end
263263
end
264264

@@ -267,12 +267,12 @@ defmodule Ecto.Query.Builder.OrderByTest do
267267

268268
assert_raise ArgumentError, message, fn ->
269269
temp = "temp"
270-
order_by("posts", [p], asc: ^temp)
270+
order_by("posts", [p], asc: ^Process.get(:unused, temp))
271271
end
272272

273273
assert_raise ArgumentError, ~r"To use dynamic expressions", fn ->
274274
dynamic_expr = dynamic([p], p.foo == ^1)
275-
order_by("posts", [p], asc: ^dynamic_expr)
275+
order_by("posts", [p], asc: ^Process.get(:unused, dynamic_expr))
276276
end
277277
end
278278

test/ecto/query/builder/preload_test.exs

Lines changed: 61 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Code.require_file "../../../support/eval_helpers.exs", __DIR__
1+
Code.require_file("../../../support/eval_helpers.exs", __DIR__)
22

33
defmodule Ecto.Query.Builder.PreloadTest do
44
use ExUnit.Case, async: true
@@ -19,70 +19,92 @@ defmodule Ecto.Query.Builder.PreloadTest do
1919
comments = :comments
2020
assert preload("posts", ^comments).preloads == [:comments]
2121
assert preload("posts", ^[comments]).preloads == [:comments]
22-
assert preload("posts", [users: ^comments]).preloads == [users: :comments]
22+
assert preload("posts", users: ^comments).preloads == [users: :comments]
2323
assert preload("posts", ^[users: comments]).preloads == [users: :comments]
24-
assert preload("posts", [users: ^[comments]]).preloads == [users: [:comments]]
24+
assert preload("posts", users: ^[comments]).preloads == [users: [:comments]]
2525
assert preload("posts", ^[users: [comments]]).preloads == [users: [:comments]]
2626
assert preload("posts", [{^:users, ^comments}]).preloads == [users: :comments]
2727
assert preload("posts", [[[users: ^comments]]]).preloads == [users: :comments]
2828
assert preload("posts", ^[[[users: comments]]]).preloads == [users: :comments]
2929
assert preload("posts", [[users: [[^comments]]]]).preloads == [users: [:comments]]
3030
assert preload("posts", ^[[users: [[comments]]]]).preloads == [users: [:comments]]
31-
assert preload("posts", [[:likes, users: [[^comments]]]]).preloads == [{:users, [:comments]}, :likes]
32-
assert preload("posts", ^[[:likes, users: [[comments]]]]).preloads == [{:users, [:comments]}, :likes]
31+
32+
assert preload("posts", [[:likes, users: [[^comments]]]]).preloads == [
33+
{:users, [:comments]},
34+
:likes
35+
]
36+
37+
assert preload("posts", ^[[:likes, users: [[comments]]]]).preloads == [
38+
{:users, [:comments]},
39+
:likes
40+
]
3341

3442
query = from u in "users", limit: 10
35-
assert preload("posts", [users: ^query]).preloads == [users: query]
43+
assert preload("posts", users: ^query).preloads == [users: query]
3644
assert preload("posts", [{^:users, ^query}]).preloads == [users: query]
3745
assert preload("posts", ^[users: query]).preloads == [users: query]
38-
assert preload("posts", [users: ^{query, :comments}]).preloads == [users: {query, :comments}]
39-
assert preload("posts", ^[users: {query, :comments}]).preloads == [users: {query, [:comments]}]
46+
assert preload("posts", users: ^{query, :comments}).preloads == [users: {query, :comments}]
47+
48+
assert preload("posts", ^[users: {query, :comments}]).preloads == [
49+
users: {query, [:comments]}
50+
]
4051

4152
fun = fn _ -> [] end
42-
assert preload("posts", [users: ^fun]).preloads == [users: fun]
53+
assert preload("posts", users: ^fun).preloads == [users: fun]
4354
assert preload("posts", [{^:users, ^fun}]).preloads == [users: fun]
4455
assert preload("posts", ^[users: fun]).preloads == [users: fun]
45-
assert preload("posts", [users: ^{fun, :comments}]).preloads == [users: {fun, :comments}]
56+
assert preload("posts", users: ^{fun, :comments}).preloads == [users: {fun, :comments}]
4657
assert preload("posts", ^[users: {fun, :comments}]).preloads == [users: {fun, [:comments]}]
4758
end
4859

4960
test "supports interpolation with associations" do
5061
comments = :comments
5162

5263
query = from p in "posts", join: c in assoc(p, :comments), as: ^comments
64+
5365
assert %{preloads: [], assocs: [{:comments, {1, []}}]} =
5466
preload(query, [{^comments, c}], [{^comments, c}])
67+
5568
assert %{preloads: [:foo], assocs: [{:comments, {1, []}}]} =
5669
preload(query, [{^comments, c}], [:foo, {^comments, c}])
5770

5871
query =
5972
from p in "posts",
60-
join: f in assoc(p, :foo), as: :foo,
61-
join: c in assoc(f, :comments), as: ^comments
73+
join: f in assoc(p, :foo),
74+
as: :foo,
75+
join: c in assoc(f, :comments),
76+
as: ^comments
77+
6278
assert %{preloads: [], assocs: [{:foo, {1, [{:comments, {2, []}}]}}]} =
63-
preload(query, [{:foo, f}, {^comments, c}], [foo: {f, [{^comments, c}]}])
79+
preload(query, [{:foo, f}, {^comments, c}], foo: {f, [{^comments, c}]})
6480
end
6581

6682
test "supports dynamics for join association bindings using named bindings" do
6783
comments = :comments
6884

6985
query =
7086
from p in "posts",
71-
join: c in assoc(p, :comments),
72-
as: ^comments
87+
join: c in assoc(p, :comments),
88+
as: ^comments
89+
7390
preloads = [
7491
comments: dynamic([{^comments, c}], c)
7592
]
93+
7694
assert %{preloads: [], assocs: [comments: {1, []}]} = preload(query, ^preloads)
7795

7896
query =
7997
from p in "posts",
80-
join: c in assoc(p, :comments), as: ^comments,
81-
join: l in assoc(p, :likes), as: :likes
98+
join: c in assoc(p, :comments),
99+
as: ^comments,
100+
join: l in assoc(p, :likes),
101+
as: :likes
102+
82103
preloads = [
83104
likes: dynamic([likes: l], l),
84105
comments: dynamic([{^comments, c}], c)
85106
]
107+
86108
assert %{preloads: [], assocs: [likes: {2, []}, comments: {1, []}]} =
87109
preload(query, ^preloads)
88110
end
@@ -94,20 +116,24 @@ defmodule Ecto.Query.Builder.PreloadTest do
94116

95117
query =
96118
from p in "posts",
97-
join: assoc(p, :comments),
98-
join: assoc(p, :likes)
119+
join: assoc(p, :comments),
120+
join: assoc(p, :likes)
121+
99122
preloads = [
100123
likes: dynamic([_p, _c, l], l),
101124
comments: dynamic([_p, c], c)
102125
]
126+
103127
assert %{preloads: [], assocs: [likes: {2, []}, comments: {1, []}]} =
104128
preload(query, ^preloads)
105129

106130
query =
107131
from p in "posts",
108-
join: c in assoc(p, :comments),
109-
join: assoc(c, :likes)
132+
join: c in assoc(p, :comments),
133+
join: assoc(c, :likes)
134+
110135
preloads = [comments: {dynamic([_p, c], c), likes: dynamic([_p, _c, l], l)}]
136+
111137
assert %{preloads: [], assocs: [comments: {1, [likes: {2, []}]}]} =
112138
preload(query, ^preloads)
113139
end
@@ -141,39 +167,46 @@ defmodule Ecto.Query.Builder.PreloadTest do
141167
assert_raise Ecto.Query.CompileError, message, fn ->
142168
quote_and_eval(%Ecto.Query{} |> preload(1))
143169
end
170+
144171
assert_raise Ecto.Query.CompileError, message, fn ->
145172
quote_and_eval(%Ecto.Query{} |> preload([1]))
146173
end
147174

148175
assert_raise ArgumentError, message, fn ->
149-
preload(%Ecto.Query{}, ^1)
176+
preload(%Ecto.Query{}, ^1)
150177
end
178+
151179
assert_raise ArgumentError, message, fn ->
152-
preload(%Ecto.Query{}, ^[1])
180+
preload(%Ecto.Query{}, ^[1])
153181
end
154182
end
155183

156184
test "raises on invalid keys" do
157185
message = ~r"malformed key in preload `1`"
186+
158187
assert_raise Ecto.Query.CompileError, message, fn ->
159188
quote_and_eval(%Ecto.Query{} |> preload([{1, :foo}]))
160189
end
161190

162191
message = ~r"expected key in preload to be an atom, got: `1`"
192+
163193
assert_raise ArgumentError, message, fn ->
164194
temp = 1
165-
preload(%Ecto.Query{}, [{^temp, :foo}])
195+
preload(%Ecto.Query{}, [{^Process.get(:unused, temp), :foo}])
166196
end
197+
167198
assert_raise ArgumentError, message, fn ->
168199
preload(%Ecto.Query{}, ^[{1, :foo}])
169200
end
170201
end
171202

172203
test "raises when preload join association is nested in non-join" do
173204
message = ~r"cannot preload join association `:comments`"
205+
174206
assert_raise Ecto.Query.CompileError, message, fn ->
175-
quote_and_eval(%Ecto.Query{} |> preload([_, c], [users: [comments: c]]))
207+
quote_and_eval(%Ecto.Query{} |> preload([_, c], users: [comments: c]))
176208
end
209+
177210
assert_raise ArgumentError, message, fn ->
178211
query = from p in "posts", join: c in assoc(p, :comments)
179212
preload(query, ^[users: [comments: dynamic([_, c], c)]])
@@ -182,6 +215,7 @@ defmodule Ecto.Query.Builder.PreloadTest do
182215

183216
test "raises when dynamic evaluates to something other than single binding" do
184217
message = ~r"invalid dynamic in preload: `dynamic\(\[_, c\], c.field\)`"
218+
185219
assert_raise ArgumentError, message, fn ->
186220
query = from p in "posts", join: c in assoc(p, :comments)
187221
preload(query, ^[comments: dynamic([_, c], c.field)])
@@ -190,9 +224,10 @@ defmodule Ecto.Query.Builder.PreloadTest do
190224

191225
test "raises when preload function has more than two arguments" do
192226
message = ~r"invalid preload for key `:comments`:"
227+
193228
assert_raise ArgumentError, message, fn ->
194229
query = from p in "posts", join: c in assoc(p, :comments)
195-
preload(query, ^[comments: fn _, _, _ -> [] end])
230+
preload(query, ^[comments: fn _, _, _ -> [] end])
196231
end
197232
end
198233
end

test/ecto/query/builder/select_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,7 @@ defmodule Ecto.Query.Builder.SelectTest do
480480
message = "expected atom in selected_as/2, got: `\"ident\"`"
481481

482482
assert_raise Ecto.Query.CompileError, message, fn ->
483-
from p in "posts", select: selected_as(p.id, ^"ident")
483+
from p in "posts", select: selected_as(p.id, ^Process.get(:unused, "ident"))
484484
end
485485
end
486486

0 commit comments

Comments
 (0)