mirror of
https://github.com/ash-project/ash_postgres.git
synced 2024-09-20 05:23:18 +12:00
chore: test enum types
This commit is contained in:
parent
cd9701a6ea
commit
a6577d5175
6 changed files with 189 additions and 0 deletions
136
priv/resource_snapshots/test_repo/posts/20220209165617.json
Normal file
136
priv/resource_snapshots/test_repo/posts/20220209165617.json
Normal file
|
@ -0,0 +1,136 @@
|
||||||
|
{
|
||||||
|
"attributes": [
|
||||||
|
{
|
||||||
|
"allow_nil?": false,
|
||||||
|
"default": "fragment(\"uuid_generate_v4()\")",
|
||||||
|
"generated?": false,
|
||||||
|
"name": "id",
|
||||||
|
"primary_key?": true,
|
||||||
|
"references": null,
|
||||||
|
"size": null,
|
||||||
|
"type": "uuid"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_nil?": true,
|
||||||
|
"default": "nil",
|
||||||
|
"generated?": false,
|
||||||
|
"name": "title",
|
||||||
|
"primary_key?": false,
|
||||||
|
"references": null,
|
||||||
|
"size": null,
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_nil?": true,
|
||||||
|
"default": "nil",
|
||||||
|
"generated?": false,
|
||||||
|
"name": "score",
|
||||||
|
"primary_key?": false,
|
||||||
|
"references": null,
|
||||||
|
"size": null,
|
||||||
|
"type": "bigint"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_nil?": true,
|
||||||
|
"default": "nil",
|
||||||
|
"generated?": false,
|
||||||
|
"name": "public",
|
||||||
|
"primary_key?": false,
|
||||||
|
"references": null,
|
||||||
|
"size": null,
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_nil?": true,
|
||||||
|
"default": "nil",
|
||||||
|
"generated?": false,
|
||||||
|
"name": "category",
|
||||||
|
"primary_key?": false,
|
||||||
|
"references": null,
|
||||||
|
"size": null,
|
||||||
|
"type": "citext"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_nil?": true,
|
||||||
|
"default": "\"sponsored\"",
|
||||||
|
"generated?": false,
|
||||||
|
"name": "type",
|
||||||
|
"primary_key?": false,
|
||||||
|
"references": null,
|
||||||
|
"size": null,
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_nil?": true,
|
||||||
|
"default": "nil",
|
||||||
|
"generated?": false,
|
||||||
|
"name": "price",
|
||||||
|
"primary_key?": false,
|
||||||
|
"references": null,
|
||||||
|
"size": null,
|
||||||
|
"type": "bigint"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_nil?": true,
|
||||||
|
"default": "0",
|
||||||
|
"generated?": false,
|
||||||
|
"name": "decimal",
|
||||||
|
"primary_key?": false,
|
||||||
|
"references": null,
|
||||||
|
"size": null,
|
||||||
|
"type": "decimal"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_nil?": true,
|
||||||
|
"default": "nil",
|
||||||
|
"generated?": false,
|
||||||
|
"name": "status",
|
||||||
|
"primary_key?": false,
|
||||||
|
"references": null,
|
||||||
|
"size": null,
|
||||||
|
"type": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_nil?": true,
|
||||||
|
"default": "nil",
|
||||||
|
"generated?": false,
|
||||||
|
"name": "status_enum",
|
||||||
|
"primary_key?": false,
|
||||||
|
"references": null,
|
||||||
|
"size": null,
|
||||||
|
"type": "status"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"allow_nil?": false,
|
||||||
|
"default": "fragment(\"now()\")",
|
||||||
|
"generated?": false,
|
||||||
|
"name": "created_at",
|
||||||
|
"primary_key?": false,
|
||||||
|
"references": null,
|
||||||
|
"size": null,
|
||||||
|
"type": "utc_datetime_usec"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"base_filter": "type = 'sponsored'",
|
||||||
|
"check_constraints": [
|
||||||
|
{
|
||||||
|
"attribute": [
|
||||||
|
"price"
|
||||||
|
],
|
||||||
|
"base_filter": "type = 'sponsored'",
|
||||||
|
"check": "price > 0",
|
||||||
|
"name": "price_must_be_positive"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"custom_indexes": [],
|
||||||
|
"has_create_action": true,
|
||||||
|
"hash": "6640FEEABB05DCF7AAFF6D81D0F6A068332DD4729177F530A19A732510450E33",
|
||||||
|
"identities": [],
|
||||||
|
"multitenancy": {
|
||||||
|
"attribute": null,
|
||||||
|
"global": null,
|
||||||
|
"strategy": null
|
||||||
|
},
|
||||||
|
"repo": "Elixir.AshPostgres.TestRepo",
|
||||||
|
"table": "posts"
|
||||||
|
}
|
12
priv/test_repo/migrations/20220209165137_add_status_enum.exs
Normal file
12
priv/test_repo/migrations/20220209165137_add_status_enum.exs
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
defmodule AshPostgres.TestRepo.Migrations.AddStatusEnum do
|
||||||
|
use Ecto.Migration
|
||||||
|
|
||||||
|
def change do
|
||||||
|
execute("""
|
||||||
|
CREATE TYPE status AS ENUM ('open', 'closed');
|
||||||
|
""", """
|
||||||
|
DROP TYPE status;
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,21 @@
|
||||||
|
defmodule AshPostgres.TestRepo.Migrations.MigrateResources3 do
|
||||||
|
@moduledoc """
|
||||||
|
Updates resources based on their most recent snapshots.
|
||||||
|
|
||||||
|
This file was autogenerated with `mix ash_postgres.generate_migrations`
|
||||||
|
"""
|
||||||
|
|
||||||
|
use Ecto.Migration
|
||||||
|
|
||||||
|
def up do
|
||||||
|
alter table(:posts) do
|
||||||
|
add :status_enum, :status
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def down do
|
||||||
|
alter table(:posts) do
|
||||||
|
remove :status_enum
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -408,6 +408,19 @@ defmodule AshPostgres.FilterTest do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "filtering on enum types" do
|
||||||
|
test "it allows simple filtering" do
|
||||||
|
Post
|
||||||
|
|> Ash.Changeset.new(status_enum: "open")
|
||||||
|
|> Api.create!()
|
||||||
|
|
||||||
|
assert %{status_enum: :open} =
|
||||||
|
Post
|
||||||
|
|> Ash.Query.filter(status_enum == ^"open")
|
||||||
|
|> Api.read_one!()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "atom filters" do
|
describe "atom filters" do
|
||||||
test "it works on matches" do
|
test "it works on matches" do
|
||||||
Post
|
Post
|
||||||
|
|
|
@ -52,6 +52,7 @@ defmodule AshPostgres.Test.Post do
|
||||||
attribute(:price, :integer)
|
attribute(:price, :integer)
|
||||||
attribute(:decimal, :decimal, default: Decimal.new(0))
|
attribute(:decimal, :decimal, default: Decimal.new(0))
|
||||||
attribute(:status, AshPostgres.Test.Types.Status)
|
attribute(:status, AshPostgres.Test.Types.Status)
|
||||||
|
attribute(:status_enum, AshPostgres.Test.Types.StatusEnum)
|
||||||
create_timestamp(:created_at)
|
create_timestamp(:created_at)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
6
test/support/types/status_enum.ex
Normal file
6
test/support/types/status_enum.ex
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
defmodule AshPostgres.Test.Types.StatusEnum do
|
||||||
|
@moduledoc false
|
||||||
|
use Ash.Type.Enum, values: [:open, :closed]
|
||||||
|
|
||||||
|
def storage_type, do: :status
|
||||||
|
end
|
Loading…
Reference in a new issue