From 7159ae633b40fa9ae09c32d6433af68f1ddae5da Mon Sep 17 00:00:00 2001 From: Matt Beanland Date: Mon, 20 Oct 2025 15:41:38 +1030 Subject: [PATCH 1/2] instance names uniqueness --- .../provider/components/base_instance.ex | 7 ++++ test/provider/instance_test.exs | 41 ++++++++++++++++++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/lib/diffo/provider/components/base_instance.ex b/lib/diffo/provider/components/base_instance.ex index af3473d..11a911f 100644 --- a/lib/diffo/provider/components/base_instance.ex +++ b/lib/diffo/provider/components/base_instance.ex @@ -457,6 +457,13 @@ defmodule Diffo.Provider.BaseInstance do define :read end + identities do + identity :unique_name_per_type, [:name] do + message "instance name must be unique" + pre_check? true + end + end + preparations do prepare build( load: [ diff --git a/test/provider/instance_test.exs b/test/provider/instance_test.exs index ec4777b..5fc52df 100644 --- a/test/provider/instance_test.exs +++ b/test/provider/instance_test.exs @@ -147,8 +147,45 @@ defmodule Diffo.Provider.InstanceTest do # assert loaded_instance.specified_instance.type == :resource # end + test "create named service instances - success - no names" do + specification = + Diffo.Provider.create_specification!(%{ + name: "fibreAccess", + description: "Fibre Access Service", + category: "connectivity" + }) + + {:ok, _result} = Diffo.Provider.create_instance(%{specified_by: specification.id}) + {:ok, _result} = Diffo.Provider.create_instance(%{specified_by: specification.id}) + end + + test "create named service instances - success - different names" do + specification = + Diffo.Provider.create_specification!(%{ + name: "fibreAccess", + description: "Fibre Access Service", + category: "connectivity" + }) + + {:ok, _result} = Diffo.Provider.create_instance(%{name: "fibreAccess 1", specified_by: specification.id}) + {:ok, _result} = Diffo.Provider.create_instance(%{name: "fibreAccess 2", specified_by: specification.id}) + end + + test "create named service instances - failure - duplicate names" do + specification = + Diffo.Provider.create_specification!(%{ + name: "fibreAccess", + description: "Fibre Access Service", + category: "connectivity" + }) + + {:ok, _result} = Diffo.Provider.create_instance(%{name: "fibreAccess 1", specified_by: specification.id}) + + {:error, _message} = Diffo.Provider.create_instance(%{name: "fibreAccess 1", specified_by: specification.id}) + end + test "create a service instance - failure - specification_id invalid" do - {:error, _specification} = Diffo.Provider.create_instance(%{specified_by: UUID.uuid4()}) + {:error, _message} = Diffo.Provider.create_instance(%{specified_by: UUID.uuid4()}) end test "create a service instance - failure - type not correct" do @@ -159,7 +196,7 @@ defmodule Diffo.Provider.InstanceTest do category: "connectivity" }) - {:error, _specification} = + {:error, _} = Diffo.Provider.create_instance(%{ specified_by: specification.id, type: :serviceSpecification From 32257ee6276d3912de73a885837982a45f5cec0a Mon Sep 17 00:00:00 2001 From: Matt Beanland Date: Mon, 20 Oct 2025 15:49:34 +1030 Subject: [PATCH 2/2] fix test --- test/provider/instance_test.exs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/test/provider/instance_test.exs b/test/provider/instance_test.exs index 5fc52df..e70bf6e 100644 --- a/test/provider/instance_test.exs +++ b/test/provider/instance_test.exs @@ -167,8 +167,11 @@ defmodule Diffo.Provider.InstanceTest do category: "connectivity" }) - {:ok, _result} = Diffo.Provider.create_instance(%{name: "fibreAccess 1", specified_by: specification.id}) - {:ok, _result} = Diffo.Provider.create_instance(%{name: "fibreAccess 2", specified_by: specification.id}) + {:ok, _result} = + Diffo.Provider.create_instance(%{name: "fibreAccess 1", specified_by: specification.id}) + + {:ok, _result} = + Diffo.Provider.create_instance(%{name: "fibreAccess 2", specified_by: specification.id}) end test "create named service instances - failure - duplicate names" do @@ -179,9 +182,11 @@ defmodule Diffo.Provider.InstanceTest do category: "connectivity" }) - {:ok, _result} = Diffo.Provider.create_instance(%{name: "fibreAccess 1", specified_by: specification.id}) + {:ok, _result} = + Diffo.Provider.create_instance(%{name: "fibreAccess 1", specified_by: specification.id}) - {:error, _message} = Diffo.Provider.create_instance(%{name: "fibreAccess 1", specified_by: specification.id}) + {:error, _message} = + Diffo.Provider.create_instance(%{name: "fibreAccess 1", specified_by: specification.id}) end test "create a service instance - failure - specification_id invalid" do