spazio-solazzo/test/spazio_solazzo/booking_system/asset_test.exs
2026-01-10 19:03:02 +01:00

51 lines
1.7 KiB
Elixir

defmodule SpazioSolazzo.BookingSystem.AssetTest do
use ExUnit.Case, async: true
use SpazioSolazzo.DataCase
alias SpazioSolazzo.BookingSystem
alias SpazioSolazzo.BookingSystem.Asset
setup do
{:ok, space} = BookingSystem.create_space("AssetSpace", "assetspace", "desc")
%{space: space}
end
test "prevents duplicate asset names within the system", %{space: space} do
assert {:ok, _} = BookingSystem.create_asset("T1", space.id)
assert {:error, error} = BookingSystem.create_asset("T1", space.id)
message = Ash.Error.error_descriptions(error)
assert String.contains?(message, "already been taken")
end
test "allows same asset name for different spaces", %{space: space} do
assert {:ok, _} = BookingSystem.create_asset("T1", space.id)
# create another space
{:ok, other_space} = BookingSystem.create_space("OtherSpace", "otherspace", "desc")
# same name in different space should succeed
assert {:ok, _} = BookingSystem.create_asset("T1", other_space.id)
end
test "can get single asset by space id", %{space: space} do
assert {:ok, expected_asset} = BookingSystem.create_asset("T1", space.id)
assert {:ok, asset} = BookingSystem.get_asset_by_space_id(space.id)
assert asset.id == expected_asset.id
end
test "can get multiple assets by space id", %{space: space} do
assert {:ok, _} = BookingSystem.create_asset("T1", space.id)
assert {:ok, _} = BookingSystem.create_asset("T2", space.id)
assert {:ok, _} = BookingSystem.create_asset("T3", space.id)
assert {:ok,
[
%Asset{name: "T1"},
%Asset{name: "T2"},
%Asset{name: "T3"}
]} =
BookingSystem.get_space_assets(space.id)
end
end