Skip to content

Commit

Permalink
Convert some DateTime and Duration tests to be table driven (#313)
Browse files Browse the repository at this point in the history
Signed-off-by: PiotrLewandowski323 <[email protected]>
  • Loading branch information
PiotrLewandowski323 authored Mar 3, 2023
1 parent 00bb185 commit e025293
Show file tree
Hide file tree
Showing 2 changed files with 272 additions and 207 deletions.
246 changes: 136 additions & 110 deletions datetime_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -196,117 +196,143 @@ func TestDateTime_IsLesser(t *testing.T) {
}

func TestDateTime_InRange(t *testing.T) {
reporter := newMockReporter(t)

value := NewDateTime(reporter, time.Unix(0, 1234))

value.InRange(time.Unix(0, 1234), time.Unix(0, 1234))
value.chain.assertNotFailed(t)
value.chain.clearFailed()

value.NotInRange(time.Unix(0, 1234), time.Unix(0, 1234))
value.chain.assertFailed(t)
value.chain.clearFailed()

value.InRange(time.Unix(0, 1234-1), time.Unix(0, 1234))
value.chain.assertNotFailed(t)
value.chain.clearFailed()

value.NotInRange(time.Unix(0, 1234-1), time.Unix(0, 1234))
value.chain.assertFailed(t)
value.chain.clearFailed()

value.InRange(time.Unix(0, 1234), time.Unix(0, 1234+1))
value.chain.assertNotFailed(t)
value.chain.clearFailed()

value.NotInRange(time.Unix(0, 1234), time.Unix(0, 1234+1))
value.chain.assertFailed(t)
value.chain.clearFailed()

value.InRange(time.Unix(0, 1234+1), time.Unix(0, 1234+2))
value.chain.assertFailed(t)
value.chain.clearFailed()

value.NotInRange(time.Unix(0, 1234+1), time.Unix(0, 1234+2))
value.chain.assertNotFailed(t)
value.chain.clearFailed()

value.InRange(time.Unix(0, 1234-2), time.Unix(0, 1234-1))
value.chain.assertFailed(t)
value.chain.clearFailed()

value.NotInRange(time.Unix(0, 1234-2), time.Unix(0, 1234-1))
value.chain.assertNotFailed(t)
value.chain.clearFailed()

value.InRange(time.Unix(0, 1234+1), time.Unix(0, 1234-1))
value.chain.assertFailed(t)
value.chain.clearFailed()

value.NotInRange(time.Unix(0, 1234+1), time.Unix(0, 1234-1))
value.chain.assertNotFailed(t)
value.chain.clearFailed()
cases := []struct {
name string
value time.Time
min time.Time
max time.Time
expectInRange bool
expectNotInRange bool
}{
{
name: "value equal to both min and max",
value: time.Unix(0, 1234),
min: time.Unix(0, 1234),
max: time.Unix(0, 1234),
expectInRange: true,
expectNotInRange: false,
},
{
name: "value after min and equal to max",
value: time.Unix(0, 1234),
min: time.Unix(0, 1234-1),
max: time.Unix(0, 1234),
expectInRange: true,
expectNotInRange: false,
},
{
name: "value equal to min and before max",
value: time.Unix(0, 1234),
min: time.Unix(0, 1234),
max: time.Unix(0, 1234+1),
expectInRange: true,
expectNotInRange: false,
},
{
name: "value before range",
value: time.Unix(0, 1234),
min: time.Unix(0, 1234+1),
max: time.Unix(0, 1234+2),
expectInRange: false,
expectNotInRange: true,
},
{
name: "value after range",
value: time.Unix(0, 1234),
min: time.Unix(0, 1234-2),
max: time.Unix(0, 1234-1),
expectInRange: false,
expectNotInRange: true,
},
{
name: "invalid range",
value: time.Unix(0, 1234),
min: time.Unix(0, 1234+1),
max: time.Unix(0, 1234-1),
expectInRange: false,
expectNotInRange: true,
},
}

for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
reporter := newMockReporter(t)

if tc.expectInRange {
NewDateTime(reporter, tc.value).
InRange(tc.min, tc.max).
chain.assertNotFailed(t)
} else {
NewDateTime(reporter, tc.value).
InRange(tc.min, tc.max).
chain.assertFailed(t)
}
if tc.expectNotInRange {
NewDateTime(reporter, tc.value).
NotInRange(tc.min, tc.max).
chain.assertNotFailed(t)
} else {
NewDateTime(reporter, tc.value).
NotInRange(tc.min, tc.max).
chain.assertFailed(t)
}
})
}
}

func TestDateTime_InList(t *testing.T) {
reporter := newMockReporter(t)

value := NewDateTime(reporter, time.Unix(0, 1234))

value.InList()
value.chain.assertFailed(t)
value.chain.clearFailed()

value.NotInList()
value.chain.assertFailed(t)
value.chain.clearFailed()

value.InList(time.Unix(0, 1234), time.Unix(0, 1234))
value.chain.assertNotFailed(t)
value.chain.clearFailed()

value.NotInList(time.Unix(0, 1234), time.Unix(0, 1234))
value.chain.assertFailed(t)
value.chain.clearFailed()

value.InList(time.Unix(0, 1234-1), time.Unix(0, 1234))
value.chain.assertNotFailed(t)
value.chain.clearFailed()

value.NotInList(time.Unix(0, 1234-1), time.Unix(0, 1234))
value.chain.assertFailed(t)
value.chain.clearFailed()

value.InList(time.Unix(0, 1234), time.Unix(0, 1234+1))
value.chain.assertNotFailed(t)
value.chain.clearFailed()

value.NotInList(time.Unix(0, 1234), time.Unix(0, 1234+1))
value.chain.assertFailed(t)
value.chain.clearFailed()

value.InList(time.Unix(0, 1234+1), time.Unix(0, 1234+2))
value.chain.assertFailed(t)
value.chain.clearFailed()

value.NotInList(time.Unix(0, 1234+1), time.Unix(0, 1234+2))
value.chain.assertNotFailed(t)
value.chain.clearFailed()

value.InList(time.Unix(0, 1234-2), time.Unix(0, 1234-1))
value.chain.assertFailed(t)
value.chain.clearFailed()

value.NotInList(time.Unix(0, 1234-2), time.Unix(0, 1234-1))
value.chain.assertNotFailed(t)
value.chain.clearFailed()

value.InList(time.Unix(0, 1234+1), time.Unix(0, 1234-1))
value.chain.assertFailed(t)
value.chain.clearFailed()

value.NotInList(time.Unix(0, 1234+1), time.Unix(0, 1234-1))
value.chain.assertNotFailed(t)
value.chain.clearFailed()
cases := []struct {
name string
value time.Time
list []time.Time
expectInList bool
expectNotInList bool
}{
{
name: "empty list",
value: time.Unix(0, 1234),
list: []time.Time{},
expectInList: false,
expectNotInList: false,
},
{
name: "value present in list",
value: time.Unix(0, 1234),
list: []time.Time{time.Unix(0, 1234), time.Unix(0, 1234+1)},
expectInList: true,
expectNotInList: false,
},
{
name: "value not present in list",
value: time.Unix(0, 1234),
list: []time.Time{time.Unix(0, 1234-1), time.Unix(0, 1234+1)},
expectInList: false,
expectNotInList: true,
},
}

for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
reporter := newMockReporter(t)

if tc.expectInList {
NewDateTime(reporter, tc.value).
InList(tc.list...).
chain.assertNotFailed(t)
} else {
NewDateTime(reporter, tc.value).
InList(tc.list...).
chain.assertFailed(t)
}
if tc.expectNotInList {
NewDateTime(reporter, tc.value).
NotInList(tc.list...).
chain.assertNotFailed(t)
} else {
NewDateTime(reporter, tc.value).
NotInList(tc.list...).
chain.assertFailed(t)
}
})
}
}
Loading

0 comments on commit e025293

Please sign in to comment.