2023-09-06 10:21:42 +12:00
|
|
|
|
defmodule Ash.Test.Resource.NoPkTest do
|
|
|
|
|
@moduledoc false
|
|
|
|
|
use ExUnit.Case, async: true
|
|
|
|
|
alias Ash.Changeset
|
|
|
|
|
|
|
|
|
|
defmodule Temperature do
|
|
|
|
|
@moduledoc false
|
|
|
|
|
use Ash.Resource, data_layer: Ash.DataLayer.Ets
|
|
|
|
|
|
|
|
|
|
resource do
|
|
|
|
|
require_primary_key? false
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
ets do
|
|
|
|
|
private? true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
actions do
|
|
|
|
|
defaults [:create, :read]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
attributes do
|
|
|
|
|
attribute :time, :utc_datetime_usec
|
|
|
|
|
attribute :temperature, :float
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
relationships do
|
2023-12-11 07:12:54 +13:00
|
|
|
|
belongs_to :location, Ash.Test.Resource.NoPkTest.Location do
|
2023-09-06 10:21:42 +12:00
|
|
|
|
attribute_writable? true
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
defmodule Location do
|
|
|
|
|
@moduledoc false
|
|
|
|
|
use Ash.Resource, data_layer: Ash.DataLayer.Ets
|
|
|
|
|
|
|
|
|
|
ets do
|
|
|
|
|
private? true
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
actions do
|
|
|
|
|
defaults [:create, :read, :update, :destroy]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
attributes do
|
|
|
|
|
uuid_primary_key :id
|
|
|
|
|
attribute :location, :string
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
defmodule Api do
|
|
|
|
|
@moduledoc false
|
|
|
|
|
use Ash.Api
|
|
|
|
|
|
|
|
|
|
resources do
|
|
|
|
|
resource Temperature
|
|
|
|
|
resource Location
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
test "records can be written and read" do
|
|
|
|
|
assert {:ok, expected} =
|
|
|
|
|
Temperature
|
|
|
|
|
|> Changeset.for_action(:create, %{
|
|
|
|
|
temperature: :rand.uniform()
|
|
|
|
|
})
|
|
|
|
|
|> Api.create()
|
|
|
|
|
|
|
|
|
|
assert {:ok, [actual]} = Api.read(Temperature)
|
|
|
|
|
assert expected.time == actual.time
|
|
|
|
|
assert expected.temperature == actual.temperature
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
test "records can belong to other resources" do
|
|
|
|
|
assert {:ok, location} =
|
|
|
|
|
Location
|
|
|
|
|
|> Changeset.for_action(:create, %{
|
|
|
|
|
location:
|
|
|
|
|
"Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu"
|
|
|
|
|
})
|
|
|
|
|
|> Api.create()
|
|
|
|
|
|
|
|
|
|
assert {:ok, actual} =
|
|
|
|
|
Temperature
|
|
|
|
|
|> Changeset.for_action(:create, %{
|
|
|
|
|
temperature: :rand.uniform(),
|
|
|
|
|
location_id: location.id
|
|
|
|
|
})
|
|
|
|
|
|> Api.create()
|
|
|
|
|
|
|
|
|
|
assert actual.location_id == location.id
|
|
|
|
|
end
|
|
|
|
|
end
|