Add domain states and event runtime (T-002)
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
package application
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestRuntimePublish(t *testing.T) {
|
||||
runtime := NewRuntime(1)
|
||||
event := Event{
|
||||
Type: EventDownloadStarted,
|
||||
RequestID: "request-1",
|
||||
AppID: "json-parser",
|
||||
}
|
||||
|
||||
if err := runtime.Publish(context.Background(), event); err != nil {
|
||||
t.Fatalf("Publish() error = %v", err)
|
||||
}
|
||||
|
||||
got := <-runtime.Events()
|
||||
if got != event {
|
||||
t.Fatalf("Events() got %#v, want %#v", got, event)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRuntimeRejectsInvalidEvent(t *testing.T) {
|
||||
runtime := NewRuntime(1)
|
||||
|
||||
err := runtime.Publish(context.Background(), Event{Type: EventType("Unknown")})
|
||||
if !errors.Is(err, ErrInvalidEvent) {
|
||||
t.Fatalf("Publish() error = %v, want %v", err, ErrInvalidEvent)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRuntimePublishHonorsContextCancellation(t *testing.T) {
|
||||
runtime := NewRuntime(1)
|
||||
if err := runtime.Publish(context.Background(), Event{Type: EventDownloadStarted}); err != nil {
|
||||
t.Fatalf("first Publish() error = %v", err)
|
||||
}
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
cancel()
|
||||
|
||||
err := runtime.Publish(ctx, Event{Type: EventDownloadProgress})
|
||||
if !errors.Is(err, context.Canceled) {
|
||||
t.Fatalf("blocked Publish() error = %v, want %v", err, context.Canceled)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRuntimeClose(t *testing.T) {
|
||||
runtime := NewRuntime(1)
|
||||
runtime.Close()
|
||||
runtime.Close()
|
||||
|
||||
select {
|
||||
case <-runtime.Done():
|
||||
default:
|
||||
t.Fatal("Done() should be closed")
|
||||
}
|
||||
|
||||
err := runtime.Publish(context.Background(), Event{Type: EventDownloadStarted})
|
||||
if !errors.Is(err, ErrRuntimeClosed) {
|
||||
t.Fatalf("Publish() error = %v, want %v", err, ErrRuntimeClosed)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user