| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | package handlingimport (	"testing"	"time"	"github.com/longjoy/micro-go-course/section19/cargo/mock"	shipping "github.com/longjoy/micro-go-course/section19/cargo/model")type stubEventHandler struct {	events []interface{}}func (h *stubEventHandler) CargoWasHandled(e shipping.HandlingEvent) {	h.events = append(h.events, e)}func TestRegisterHandlingEvent(t *testing.T) {	var cargos mock.CargoRepository	cargos.StoreFn = func(c *shipping.Cargo) error {		return nil	}	cargos.FindFn = func(id shipping.TrackingID) (*shipping.Cargo, error) {		if id == "no_such_id" {			return nil, shipping.ErrUnknownCargo		}		return new(shipping.Cargo), nil	}	var voyages mock.VoyageRepository	voyages.FindFn = func(n shipping.VoyageNumber) (*shipping.Voyage, error) {		return new(shipping.Voyage), nil	}	var locations mock.LocationRepository	locations.FindFn = func(l shipping.UNLocode) (*shipping.Location, error) {		return nil, nil	}	var events mock.HandlingEventRepository	events.StoreFn = func(e shipping.HandlingEvent) {}	eh := &stubEventHandler{events: make([]interface{}, 0)}	ef := shipping.HandlingEventFactory{		CargoRepository:    &cargos,		VoyageRepository:   &voyages,		LocationRepository: &locations,	}	s := NewService(&events, ef, eh)	var (		completed = time.Date(2015, time.November, 10, 23, 0, 0, 0, time.UTC)		id        = shipping.TrackingID("ABC123")		voyage    = shipping.VoyageNumber("V100")	)	var err error	err = cargos.Store(shipping.NewCargo(id, shipping.RouteSpecification{}))	if err != nil {		t.Fatal(err)	}	err = s.RegisterHandlingEvent(completed, id, voyage, shipping.SESTO, shipping.Load)	if err != nil {		t.Fatal(err)	}	err = s.RegisterHandlingEvent(completed, "no_such_id", voyage, shipping.SESTO, shipping.Load)	if err != shipping.ErrUnknownCargo {		t.Errorf("err = %s; want = %s", err, shipping.ErrUnknownCargo)	}	if len(eh.events) != 1 {		t.Errorf("len(eh.events) = %d; want = %d", len(eh.events), 1)	}}
 |