feat: add command domain invariants
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
package domain
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"math"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestRevisionComparisonAndAdvance_HP_CMD_01(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
current CommandRevision
|
||||
incoming CommandRevision
|
||||
want RevisionRelation
|
||||
wantErr error
|
||||
}{
|
||||
{"zero current", 0, 1, RevisionInvalid, ErrInvalidRevision},
|
||||
{"zero incoming", 1, 0, RevisionInvalid, ErrInvalidRevision},
|
||||
{"stale", 4, 3, RevisionStale, ErrStaleRevision},
|
||||
{"current", 4, 4, RevisionCurrent, nil},
|
||||
{"future", 4, 5, RevisionFuture, ErrFutureRevision},
|
||||
}
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
if got := CompareRevision(test.current, test.incoming); got != test.want {
|
||||
t.Fatalf("CompareRevision() = %v, want %v", got, test.want)
|
||||
}
|
||||
err := ValidateCurrentRevision(test.current, test.incoming)
|
||||
if !errors.Is(err, test.wantErr) {
|
||||
t.Fatalf("ValidateCurrentRevision() error = %v, want %v", err, test.wantErr)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
if next, err := NextRevision(InitialCommandRevision); err != nil || next != 2 {
|
||||
t.Fatalf("NextRevision(1) = (%d, %v), want (2, nil)", next, err)
|
||||
}
|
||||
if _, err := NextRevision(0); !errors.Is(err, ErrInvalidRevision) {
|
||||
t.Fatalf("NextRevision(0) error = %v", err)
|
||||
}
|
||||
if _, err := NextRevision(math.MaxUint64); !errors.Is(err, ErrRevisionOverflow) {
|
||||
t.Fatalf("NextRevision(max) error = %v", err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user