@@ -7,21 +7,24 @@ defmodule Feeb.DB.Type.EnumTest do
77
88 describe "enum type" do
99 test "stores and loads correctly" , % { shard_id: shard_id } do
10- params = AllTypes . creation_params ( % { enum: :one , enum_nullable: "baz" } )
10+ params = AllTypes . creation_params ( % { enum: :one , enum_nullable: "baz" , enum_fn: :function } )
1111
1212 # Enums are correctly casted
1313 all_types = AllTypes . new ( params )
1414 assert all_types . enum == :one
1515 assert all_types . enum_nullable == "baz"
16+ assert all_types . enum_fn == :function
1617
1718 # Enums are correctly dumped and loaded
1819 DB . begin ( @ context , shard_id , :write )
1920 assert { :ok , db_all_types } = DB . insert ( all_types )
2021 assert db_all_types . enum == :one
2122 assert db_all_types . enum_nullable == "baz"
23+ assert db_all_types . enum_fn == :function
2224
2325 # Values are stored as text in the database
24- assert [ [ "one" , "baz" ] ] == DB . raw! ( "select enum, enum_nullable from all_types" )
26+ assert [ [ "one" , "baz" , "function" ] ] ==
27+ DB . raw! ( "select enum, enum_nullable, enum_fn from all_types" )
2528 end
2629
2730 test "crashes if input is not a possible enum value" do
@@ -228,5 +231,22 @@ defmodule Feeb.DB.Type.EnumTest do
228231
229232 assert error =~ "Multiple types in enum"
230233 end
234+
235+ test "supports a function as value generator" do
236+ atom_values_fn = fn -> [ :a , :b , :c ] end
237+ str_values_fn = fn -> [ "x" , "y" , "z" ] end
238+
239+ opts = DB.Type.Enum . overwrite_opts ( % { values: atom_values_fn , format: :safe_atom } , nil , nil )
240+ assert opts . values == [ :a , :b , :c ]
241+ assert opts . format == :safe_atom
242+
243+ opts = DB.Type.Enum . overwrite_opts ( % { values: atom_values_fn } , nil , nil )
244+ assert opts . values == [ :a , :b , :c ]
245+ assert opts . format == :atom
246+
247+ opts = DB.Type.Enum . overwrite_opts ( % { values: str_values_fn } , nil , nil )
248+ assert opts . values == [ "x" , "y" , "z" ]
249+ assert opts . format == :string
250+ end
231251 end
232252end
0 commit comments