Skip to content

Commit f6c4ca2

Browse files
value generator uses params gen all
For consistency with the rest of the project, a generator can always be used without mandatory references. `params gen all` is used to link it to something created previously. The fix corrects this setting. Signed-off-by: Gabriele Ghio <gabriele.ghio@secomind.com>
1 parent 3e97a2e commit f6c4ca2

File tree

2 files changed

+18
-15
lines changed

2 files changed

+18
-15
lines changed

lib/astarte/core/generators/mapping/value.ex

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,23 +21,28 @@ defmodule Astarte.Core.Generators.Mapping.Value do
2121
This module provides generators for Interface values.
2222
"""
2323
use ExUnitProperties
24+
use Astarte.Generators.Utilities.ParamsGen
2425

2526
alias Astarte.Core.Interface
2627
alias Astarte.Core.Mapping
2728

29+
alias Astarte.Core.Generators.Interface, as: InterfaceGenerator
2830
alias Astarte.Core.Generators.Mapping.ValueType, as: ValueTypeGenerator
2931

3032
@doc """
31-
Generates a valid value based on interface
33+
Generates a valid value based on interface passed or auto-created
3234
"""
33-
@spec value(Interface.t()) :: StreamData.t(map())
34-
def value(%Interface{} = interface) when not is_struct(interface, StreamData) do
35-
interface |> constant() |> value()
35+
@spec value() :: StreamData.t(map())
36+
@spec value(params :: keyword()) :: StreamData.t(map())
37+
def value(params \\ []) do
38+
gen_interface_base =
39+
params gen all interface <- InterfaceGenerator.interface(), params: params do
40+
interface
41+
end
42+
43+
gen_interface_base |> bind(&build_package/1)
3644
end
3745

38-
@spec value(StreamData.t(Interface.t())) :: StreamData.t(map())
39-
def value(gen), do: gen |> bind(&build_package/1)
40-
4146
defp build_package(%Interface{aggregation: :individual} = interface) do
4247
%Interface{mappings: mappings} = interface
4348

test/astarte/core/generators/mapping/value_test.exs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -99,25 +99,23 @@ defmodule Astarte.Core.Generators.Mapping.ValueTest do
9999
@describetag :success
100100
@describetag :ut
101101

102-
property "generates value based on interface (gen)" do
103-
gen = InterfaceGenerator.interface() |> ValueGenerator.value()
104-
105-
check all value <- gen do
102+
property "generates value" do
103+
check all value <- ValueGenerator.value() do
106104
assert %{path: _path, value: _value} = value
107105
end
108106
end
109107

110-
property "generates value based on interface (struct)" do
108+
property "generates value based on interface" do
111109
check all interface <- InterfaceGenerator.interface(),
112-
value <- ValueGenerator.value(interface) do
110+
value <- ValueGenerator.value(interface: interface) do
113111
assert %{path: _path, value: _value} = value
114112
end
115113
end
116114

117115
property "generates value must have mapping path matches endpoint" do
118116
check all %Interface{mappings: mappings, aggregation: aggregation} = interface <-
119117
InterfaceGenerator.interface(),
120-
%{path: path, value: _value} <- ValueGenerator.value(interface) do
118+
%{path: path, value: _value} <- ValueGenerator.value(interface: interface) do
121119
assert Enum.any?(mappings, fn %Mapping{endpoint: endpoint} ->
122120
ValueGenerator.path_matches_endpoint?(aggregation, endpoint, path)
123121
end)
@@ -127,7 +125,7 @@ defmodule Astarte.Core.Generators.Mapping.ValueTest do
127125
property "generates value must be valid type" do
128126
check all %Interface{mappings: mappings, aggregation: aggregation} = interface <-
129127
InterfaceGenerator.interface(),
130-
%{path: path, value: value} <- ValueGenerator.value(interface) do
128+
%{path: path, value: value} <- ValueGenerator.value(interface: interface) do
131129
value = value_to_check(aggregation, value)
132130

133131
%Mapping{value_type: value_type} =

0 commit comments

Comments
 (0)