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..e70bf6e 100644 --- a/test/provider/instance_test.exs +++ b/test/provider/instance_test.exs @@ -147,8 +147,50 @@ 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 +201,7 @@ defmodule Diffo.Provider.InstanceTest do category: "connectivity" }) - {:error, _specification} = + {:error, _} = Diffo.Provider.create_instance(%{ specified_by: specification.id, type: :serviceSpecification