Skip to content

Commit a594e45

Browse files
authored
dedupe for setSingleOr.. func (#43)
1 parent 05d6f7f commit a594e45

File tree

2 files changed

+61
-9
lines changed

2 files changed

+61
-9
lines changed

puan/ruleset_creator.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -311,11 +311,12 @@ func (c *RulesetCreator) setSingleOrOR(ids ...string) (string, error) {
311311
)
312312
}
313313

314-
if len(ids) == 1 {
315-
return ids[0], nil
314+
deduped := utils.Dedupe(ids)
315+
if len(deduped) == 1 {
316+
return deduped[0], nil
316317
}
317318

318-
return c.SetOr(ids...)
319+
return c.SetOr(deduped...)
319320
}
320321

321322
func (c *RulesetCreator) setSingleOrXOR(ids ...string) (string, error) {
@@ -326,11 +327,12 @@ func (c *RulesetCreator) setSingleOrXOR(ids ...string) (string, error) {
326327
)
327328
}
328329

329-
if len(ids) == 1 {
330-
return ids[0], nil
330+
deduped := utils.Dedupe(ids)
331+
if len(deduped) == 1 {
332+
return deduped[0], nil
331333
}
332334

333-
return c.SetXor(ids...)
335+
return c.SetXor(deduped...)
334336
}
335337

336338
func (c *RulesetCreator) setSingleOrAnd(ids ...string) (string, error) {
@@ -341,11 +343,12 @@ func (c *RulesetCreator) setSingleOrAnd(ids ...string) (string, error) {
341343
)
342344
}
343345

344-
if len(ids) == 1 {
345-
return ids[0], nil
346+
deduped := utils.Dedupe(ids)
347+
if len(deduped) == 1 {
348+
return deduped[0], nil
346349
}
347350

348-
return c.SetAnd(ids...)
351+
return c.SetAnd(deduped...)
349352
}
350353

351354
func (c *RulesetCreator) createAssumeConstraints() error {

puan/ruleset_creator_test.go

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"github.com/stretchr/testify/assert"
1111

1212
"github.com/ourstudio-se/puan-sdk-go/internal/fake"
13+
"github.com/ourstudio-se/puan-sdk-go/puanerror"
1314
)
1415

1516
func Test_RulesetCreator_newTimeBoundVariable_givenTimeEnabled_andValidPeriod(t *testing.T) {
@@ -174,3 +175,51 @@ func Test_RulesetCreator_AssumeInPeriod_givenDifferentPeriod_shouldAddTimeBoundV
174175
assert.NotContains(t, creator.assumedVariables, "itemX")
175176
assert.Contains(t, creator.timeBoundAssumedVariables.ids(), "itemX")
176177
}
178+
179+
func Test_RulesetCreator_setSingleOrOR_givenNoIDs_shouldReturnError(t *testing.T) {
180+
creator := NewRulesetCreator()
181+
_, err := creator.setSingleOrOR([]string{}...)
182+
183+
assert.ErrorIs(t, err, puanerror.InvalidArgument)
184+
}
185+
186+
func Test_RulesetCreator_setSingleOrOR_givenDuplicatedIDs_shouldReturnID(t *testing.T) {
187+
code := fake.New[string]()
188+
creator := NewRulesetCreator()
189+
got, err := creator.setSingleOrOR(code, code)
190+
191+
assert.NoError(t, err)
192+
assert.Equal(t, code, got)
193+
}
194+
195+
func Test_RulesetCreator_setSingleOrXOR_givenNoIDs_shouldReturnError(t *testing.T) {
196+
creator := NewRulesetCreator()
197+
_, err := creator.setSingleOrXOR([]string{}...)
198+
199+
assert.ErrorIs(t, err, puanerror.InvalidArgument)
200+
}
201+
202+
func Test_RulesetCreator_setSingleOrXOR_givenDuplicatedIDs_shouldReturnID(t *testing.T) {
203+
code := fake.New[string]()
204+
creator := NewRulesetCreator()
205+
got, err := creator.setSingleOrXOR(code, code)
206+
207+
assert.NoError(t, err)
208+
assert.Equal(t, code, got)
209+
}
210+
211+
func Test_RulesetCreator_setSingleOrAND_givenNoIDs_shouldReturnError(t *testing.T) {
212+
creator := NewRulesetCreator()
213+
_, err := creator.setSingleOrAnd([]string{}...)
214+
215+
assert.ErrorIs(t, err, puanerror.InvalidArgument)
216+
}
217+
218+
func Test_RulesetCreator_setSingleOrAND_givenDuplicatedIDs_shouldReturnID(t *testing.T) {
219+
code := fake.New[string]()
220+
creator := NewRulesetCreator()
221+
got, err := creator.setSingleOrAnd(code, code)
222+
223+
assert.NoError(t, err)
224+
assert.Equal(t, code, got)
225+
}

0 commit comments

Comments
 (0)