package party import ( "strings" "testing" "git.golem15.com/golem15/summercms/backpack" "git.golem15.com/golem15/summercms/compass" ) type tracePlugin struct { id string req []string log *[]string } func (p *tracePlugin) ID() string { return p.id } func (p *tracePlugin) Requires() []string { return p.req } func (p *tracePlugin) Register(*backpack.App) error { *p.log = append(*p.log, p.id+":register") return nil } func (p *tracePlugin) Boot(*backpack.App) error { *p.log = append(*p.log, p.id+":boot") return nil } func TestActivateRunsAllRegisterBeforeAnyBoot(t *testing.T) { var log []string hello := &tracePlugin{id: "golem15.hello", log: &log} greeter := &tracePlugin{id: "golem15.greeter", req: []string{"golem15.hello"}, log: &log} app := backpack.New(&compass.Config{}) got, err := activate([]Plugin{greeter, hello}, app, []string{"golem15.greeter", "golem15.hello"}) if err != nil { t.Fatalf("activate: %v", err) } if len(got) != 2 { t.Fatalf("got %d plugins, want 2", len(got)) } if got[0].ID() != "golem15.hello" || got[1].ID() != "golem15.greeter" { t.Fatalf("order = %s, %s", got[0].ID(), got[1].ID()) } want := []string{ "golem15.hello:register", "golem15.greeter:register", "golem15.hello:boot", "golem15.greeter:boot", } if strings.Join(log, ",") != strings.Join(want, ",") { t.Fatalf("lifecycle = %v, want %v", log, want) } }