@@ -66,9 +66,9 @@ defmodule Ecto.Query.Builder.PreloadTest do
66
66
test "supports dynamics for join association bindings using named bindings" do
67
67
comments = :comments
68
68
69
- query =
70
- from p in "posts" ,
71
- join: c in assoc ( p , :comments ) ,
69
+ query =
70
+ from p in "posts" ,
71
+ join: c in assoc ( p , :comments ) ,
72
72
as: ^ comments
73
73
preloads = [
74
74
comments: dynamic ( [ { ^ comments , c } ] , c )
@@ -120,6 +120,18 @@ defmodule Ecto.Query.Builder.PreloadTest do
120
120
preloads = [ comments: outer_dynamic ]
121
121
assert % { preloads: [ ] , assocs: [ comments: { 1 , [ ] } ] } = preload ( query , ^ preloads )
122
122
end
123
+
124
+ test "supports preload functions" do
125
+ query = from p in "posts" , join: c in assoc ( p , :comments ) , as: :comments
126
+ function_1 = fn _ -> [ ] end
127
+ function_2 = fn _ , _ -> [ ] end
128
+
129
+ preloads = [ comments: function_1 ]
130
+ assert % { preloads: ^ preloads , assocs: [ ] } = preload ( query , ^ preloads )
131
+
132
+ preloads = [ comments: function_2 ]
133
+ assert % { preloads: ^ preloads , assocs: [ ] } = preload ( query , ^ preloads )
134
+ end
123
135
end
124
136
125
137
describe "invalid preload" do
@@ -175,5 +187,13 @@ defmodule Ecto.Query.Builder.PreloadTest do
175
187
preload ( query , ^ [ comments: dynamic ( [ _ , c ] , c . field ) ] )
176
188
end
177
189
end
190
+
191
+ test "raises when preload function has more than two arguments" do
192
+ message = ~r" invalid preload for key `:comments`:"
193
+ assert_raise ArgumentError , message , fn ->
194
+ query = from p in "posts" , join: c in assoc ( p , :comments )
195
+ preload ( query , ^ [ comments: fn _ , _ , _ -> [ ] end ] )
196
+ end
197
+ end
178
198
end
179
199
end
0 commit comments