Skip to content

Commit 7159ae6

Browse files
committed
instance names uniqueness
1 parent d181e6d commit 7159ae6

2 files changed

Lines changed: 46 additions & 2 deletions

File tree

lib/diffo/provider/components/base_instance.ex

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,6 +457,13 @@ defmodule Diffo.Provider.BaseInstance do
457457
define :read
458458
end
459459

460+
identities do
461+
identity :unique_name_per_type, [:name] do
462+
message "instance name must be unique"
463+
pre_check? true
464+
end
465+
end
466+
460467
preparations do
461468
prepare build(
462469
load: [

test/provider/instance_test.exs

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,45 @@ defmodule Diffo.Provider.InstanceTest do
147147
# assert loaded_instance.specified_instance.type == :resource
148148
# end
149149

150+
test "create named service instances - success - no names" do
151+
specification =
152+
Diffo.Provider.create_specification!(%{
153+
name: "fibreAccess",
154+
description: "Fibre Access Service",
155+
category: "connectivity"
156+
})
157+
158+
{:ok, _result} = Diffo.Provider.create_instance(%{specified_by: specification.id})
159+
{:ok, _result} = Diffo.Provider.create_instance(%{specified_by: specification.id})
160+
end
161+
162+
test "create named service instances - success - different names" do
163+
specification =
164+
Diffo.Provider.create_specification!(%{
165+
name: "fibreAccess",
166+
description: "Fibre Access Service",
167+
category: "connectivity"
168+
})
169+
170+
{:ok, _result} = Diffo.Provider.create_instance(%{name: "fibreAccess 1", specified_by: specification.id})
171+
{:ok, _result} = Diffo.Provider.create_instance(%{name: "fibreAccess 2", specified_by: specification.id})
172+
end
173+
174+
test "create named service instances - failure - duplicate names" do
175+
specification =
176+
Diffo.Provider.create_specification!(%{
177+
name: "fibreAccess",
178+
description: "Fibre Access Service",
179+
category: "connectivity"
180+
})
181+
182+
{:ok, _result} = Diffo.Provider.create_instance(%{name: "fibreAccess 1", specified_by: specification.id})
183+
184+
{:error, _message} = Diffo.Provider.create_instance(%{name: "fibreAccess 1", specified_by: specification.id})
185+
end
186+
150187
test "create a service instance - failure - specification_id invalid" do
151-
{:error, _specification} = Diffo.Provider.create_instance(%{specified_by: UUID.uuid4()})
188+
{:error, _message} = Diffo.Provider.create_instance(%{specified_by: UUID.uuid4()})
152189
end
153190

154191
test "create a service instance - failure - type not correct" do
@@ -159,7 +196,7 @@ defmodule Diffo.Provider.InstanceTest do
159196
category: "connectivity"
160197
})
161198

162-
{:error, _specification} =
199+
{:error, _} =
163200
Diffo.Provider.create_instance(%{
164201
specified_by: specification.id,
165202
type: :serviceSpecification

0 commit comments

Comments
 (0)