Skip to content

Commit 6d03a9a

Browse files
author
Ciro S. Costa
committed
SF
1 parent 852a80e commit 6d03a9a

File tree

2 files changed

+92
-84
lines changed

2 files changed

+92
-84
lines changed

cast/cast.go

+35-14
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,37 @@ func ValidateEvent(event *Event) (isValid bool, err error) {
156156
return
157157
}
158158

159+
// ValidateEventStream makes sure that a given set of events (event stream)
160+
// is valid.
161+
//
162+
// A valid stream must:
163+
// - be ordered by time; and
164+
// - have valid events.
165+
func ValidateEventStream(eventStream []*Event) (isValid bool, err error) {
166+
var (
167+
lastTime float64
168+
ev *Event
169+
)
170+
171+
for _, ev = range eventStream {
172+
if ev.Time < lastTime {
173+
err = errors.Errorf("events must be ordered by time")
174+
return
175+
}
176+
177+
_, err = ValidateEvent(ev)
178+
if err != nil {
179+
err = errors.Wrapf(err, "invalid event")
180+
return
181+
}
182+
183+
lastTime = ev.Time
184+
}
185+
186+
isValid = true
187+
return
188+
}
189+
159190
// Validate makes sure that the supplied cast is valid.
160191
func Validate(cast *Cast) (isValid bool, err error) {
161192
if cast == nil {
@@ -169,20 +200,10 @@ func Validate(cast *Cast) (isValid bool, err error) {
169200
return
170201
}
171202

172-
var lastTime float64
173-
for _, ev := range cast.EventStream {
174-
if ev.Time < lastTime {
175-
err = errors.Errorf("events must be ordered by time")
176-
return
177-
}
178-
179-
_, err = ValidateEvent(ev)
180-
if err != nil {
181-
err = errors.Wrapf(err, "invalid event")
182-
return
183-
}
184-
185-
lastTime = ev.Time
203+
_, err = ValidateEventStream(cast.EventStream)
204+
if err != nil {
205+
err = errors.Wrapf(err, "invalid event stream")
206+
return
186207
}
187208

188209
isValid = true

cast/cast_test.go

+57-70
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,18 @@ var (
3737
)
3838

3939
var _ = Describe("Cast", func() {
40+
Describe("Validate", func() {
41+
Context("with a nil cast", func() {
42+
It("fails", func() {
43+
isValid, err := cast.Validate(nil)
44+
45+
Expect(err).NotTo(Succeed())
46+
Expect(isValid).NotTo(BeTrue())
47+
})
48+
})
49+
50+
})
51+
4052
Describe("ValidateEvent", func() {
4153
Context("with nil event", func() {
4254
It("fails", func() {
@@ -140,94 +152,69 @@ var _ = Describe("Cast", func() {
140152
})
141153
})
142154

143-
Describe("Validate", func() {
144-
Context("with a nil cast", func() {
145-
It("fails", func() {
146-
isValid, err := cast.Validate(nil)
147-
148-
Expect(err).NotTo(Succeed())
149-
Expect(isValid).NotTo(BeTrue())
150-
})
151-
})
152-
153-
Context("with invalid header", func() {
155+
Describe("ValidateEventStream", func() {
156+
Context("with empty stream", func() {
154157
var data = cast.Cast{
155-
Header: cast.Header{
156-
Version: 123,
157-
},
158+
Header: validHeader,
159+
EventStream: []*cast.Event{},
158160
}
159161

160-
It("fails", func() {
162+
It("is valid", func() {
161163
isValid, err := cast.Validate(&data)
162164

163-
Expect(err).NotTo(Succeed())
164-
Expect(isValid).NotTo(BeTrue())
165+
Expect(err).To(Succeed())
166+
Expect(isValid).To(BeTrue())
165167
})
166168
})
167169

168-
Context("regarding events", func() {
169-
Context("having an empty list of them", func() {
170-
var data = cast.Cast{
171-
Header: validHeader,
172-
EventStream: []*cast.Event{},
173-
}
174-
175-
It("is valid", func() {
176-
isValid, err := cast.Validate(&data)
177-
178-
Expect(err).To(Succeed())
179-
Expect(isValid).To(BeTrue())
180-
})
181-
})
182-
183-
It("fails if not sorted by time", func() {
184-
var data = cast.Cast{
185-
Header: validHeader,
186-
EventStream: []*cast.Event{
187-
&validEvent2,
188-
&validEvent1,
189-
&validEvent3,
190-
},
191-
}
170+
It("fails if not sorted by time", func() {
171+
var data = cast.Cast{
172+
Header: validHeader,
173+
EventStream: []*cast.Event{
174+
&validEvent2,
175+
&validEvent1,
176+
&validEvent3,
177+
},
178+
}
192179

193-
isValid, err := cast.Validate(&data)
180+
isValid, err := cast.Validate(&data)
194181

195-
Expect(err).NotTo(Succeed())
196-
Expect(isValid).NotTo(BeTrue())
182+
Expect(err).NotTo(Succeed())
183+
Expect(isValid).NotTo(BeTrue())
197184

198-
})
185+
})
199186

200-
It("succeeds if sorted and valid", func() {
201-
var data = cast.Cast{
202-
Header: validHeader,
203-
EventStream: []*cast.Event{
204-
&validEvent1,
205-
&validEvent2,
206-
&validEvent3,
207-
},
208-
}
187+
It("succeeds if sorted and valid", func() {
188+
var data = cast.Cast{
189+
Header: validHeader,
190+
EventStream: []*cast.Event{
191+
&validEvent1,
192+
&validEvent2,
193+
&validEvent3,
194+
},
195+
}
209196

210-
isValid, err := cast.Validate(&data)
197+
isValid, err := cast.Validate(&data)
211198

212-
Expect(err).To(Succeed())
213-
Expect(isValid).To(BeTrue())
214-
})
199+
Expect(err).To(Succeed())
200+
Expect(isValid).To(BeTrue())
201+
})
215202

216-
It("fails if there's an invalid event", func() {
217-
var data = cast.Cast{
218-
Header: validHeader,
219-
EventStream: []*cast.Event{
220-
&validEvent1,
221-
&invalidEvent4,
222-
},
223-
}
203+
It("fails if there's an invalid event", func() {
204+
var data = cast.Cast{
205+
Header: validHeader,
206+
EventStream: []*cast.Event{
207+
&validEvent1,
208+
&invalidEvent4,
209+
},
210+
}
224211

225-
isValid, err := cast.Validate(&data)
212+
isValid, err := cast.Validate(&data)
226213

227-
Expect(err).NotTo(Succeed())
228-
Expect(isValid).NotTo(BeTrue())
229-
})
214+
Expect(err).NotTo(Succeed())
215+
Expect(isValid).NotTo(BeTrue())
230216
})
217+
231218
})
232219

233220
Describe("Encode", func() {

0 commit comments

Comments
 (0)