github.com/wawandco/oxpecker@v1.5.7-0.20210910201653-5958d4afdd89/lifecycle/dev/command_test.go (about) 1 package dev_test 2 3 import ( 4 "context" 5 "testing" 6 "time" 7 8 "github.com/wawandco/oxpecker/lifecycle/dev" 9 "github.com/wawandco/oxpecker/plugins" 10 ) 11 12 type ( 13 plugin struct { 14 ran bool 15 } 16 17 developer struct { 18 plugin 19 20 ranAt time.Time 21 } 22 23 beforeDeveloper struct { 24 plugin 25 26 ranAt time.Time 27 } 28 ) 29 30 func (pl plugin) Name() string { 31 return "aaa" 32 } 33 34 func (d *developer) Develop(context.Context, string) error { 35 d.ran = true 36 d.ranAt = time.Now() 37 return nil 38 } 39 40 func (d *beforeDeveloper) BeforeDevelop(context.Context, string) error { 41 d.ranAt = time.Now() 42 d.ran = true 43 time.Sleep(10 * time.Millisecond) 44 45 return nil 46 } 47 48 func TestCommand(t *testing.T) { 49 50 plb := plugin{} 51 52 pls := []plugins.Plugin{ 53 &plb, 54 &developer{}, 55 &beforeDeveloper{}, 56 } 57 58 c := dev.Command{} 59 c.Receive(pls) 60 61 err := c.Run(context.Background(), "", []string{}) 62 if err != nil { 63 t.Errorf("error should be nil, got %v", err) 64 } 65 66 if plb.ran == true { 67 t.Errorf("plugin should not have ran in true") 68 } 69 70 if pls[1].(*developer).ran == false { 71 t.Errorf("developer plugin should run") 72 } 73 74 if pls[2].(*beforeDeveloper).ran == false { 75 t.Errorf("beforeDeveloper plugin should run") 76 } 77 78 if pls[2].(*beforeDeveloper).ranAt.After(pls[1].(*developer).ranAt) { 79 t.Errorf("beforeDeveloper plugin should run before developer plugin") 80 } 81 }