@@ -4,6 +4,19 @@ defmodule AshJsonApiTest.FetchingData.Filtering do
44
55 # credo:disable-for-this-file Credo.Check.Readability.MaxLineLength
66
7+ defmodule Narrative do
8+ use Ash.Type.Enum ,
9+ values: [
10+ :novel ,
11+ :legend ,
12+ :myth ,
13+ :fable ,
14+ :tale ,
15+ :action ,
16+ :plot
17+ ]
18+ end
19+
720 defmodule Author do
821 use Ash.Resource ,
922 domain: AshJsonApiTest.FetchingData.Filtering.Domain ,
@@ -72,13 +85,18 @@ defmodule AshJsonApiTest.FetchingData.Filtering do
7285 defaults ( [ :read , :update , :destroy ] )
7386
7487 create :create do
75- accept ( [ :name , :author_id ] )
88+ accept ( [ :name , :author_id , :narratives ] )
7689 end
7790 end
7891
7992 attributes do
8093 uuid_primary_key ( :id )
8194 attribute ( :name , :string , public?: true )
95+
96+ attribute ( :narratives , { :array , Narrative } ,
97+ default: [ ] ,
98+ public?: true
99+ )
82100 end
83101
84102 relationships do
@@ -162,6 +180,33 @@ defmodule AshJsonApiTest.FetchingData.Filtering do
162180 |> assert_invalid_resource_objects ( "post" , [ post . id ] )
163181 end
164182
183+ test "in/not_in filter" do
184+ post =
185+ Post
186+ |> Ash.Changeset . for_create ( :create , % { name: "foo" , narratives: [ :novel , :legend ] } )
187+ |> Ash . create! ( )
188+
189+ post2 =
190+ Post
191+ |> Ash.Changeset . for_create ( :create , % { name: "bar" , narratives: [ :legend ] } )
192+ |> Ash . create! ( )
193+
194+ _conn =
195+ Domain
196+ |> get ( "/posts?filter[narratives][in]=novel,legend" , status: 200 )
197+ |> assert_valid_resource_objects ( "post" , [ post . id , post2 . id ] )
198+
199+ # _conn =
200+ # Domain
201+ # |> get("/posts?filter[narratives][in][][]=novel", status: 200)
202+ # |> assert_valid_resource_objects("post", [post.id, post2.id])
203+
204+ # _conn =
205+ # Domain
206+ # |> get("/posts?filter[narratives][not_in]=novel,legend", status: 200)
207+ # |> assert_valid_resource_objects("post", [])
208+ end
209+
165210 test "is_nil filter" do
166211 post =
167212 Post
0 commit comments