github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/cmd/syft/cli/ui/handle_package_cataloger_test.go (about) 1 package ui 2 3 import ( 4 "testing" 5 "time" 6 7 tea "github.com/charmbracelet/bubbletea" 8 "github.com/gkampitakis/go-snaps/snaps" 9 "github.com/stretchr/testify/require" 10 "github.com/wagoodman/go-partybus" 11 "github.com/wagoodman/go-progress" 12 13 "github.com/anchore/bubbly/bubbles/taskprogress" 14 syftEvent "github.com/anchore/syft/syft/event" 15 "github.com/anchore/syft/syft/pkg/cataloger" 16 ) 17 18 func TestHandler_handlePackageCatalogerStarted(t *testing.T) { 19 20 tests := []struct { 21 name string 22 eventFn func(*testing.T) partybus.Event 23 iterations int 24 }{ 25 { 26 name: "cataloging in progress", 27 eventFn: func(t *testing.T) partybus.Event { 28 prog := &progress.Manual{} 29 prog.SetTotal(100) 30 prog.Set(50) 31 32 mon := cataloger.Monitor{ 33 FilesProcessed: progress.NewManual(-1), 34 PackagesDiscovered: prog, 35 } 36 37 return partybus.Event{ 38 Type: syftEvent.PackageCatalogerStarted, 39 Value: mon, 40 } 41 }, 42 }, 43 { 44 name: "cataloging only files complete", 45 eventFn: func(t *testing.T) partybus.Event { 46 prog := &progress.Manual{} 47 prog.SetTotal(100) 48 prog.Set(50) 49 50 files := progress.NewManual(-1) 51 files.SetCompleted() 52 53 mon := cataloger.Monitor{ 54 FilesProcessed: files, 55 PackagesDiscovered: prog, 56 } 57 58 return partybus.Event{ 59 Type: syftEvent.PackageCatalogerStarted, 60 Value: mon, 61 } 62 }, 63 }, 64 { 65 name: "cataloging only packages complete", 66 eventFn: func(t *testing.T) partybus.Event { 67 prog := &progress.Manual{} 68 prog.SetTotal(100) 69 prog.Set(100) 70 prog.SetCompleted() 71 72 files := progress.NewManual(-1) 73 74 mon := cataloger.Monitor{ 75 FilesProcessed: files, 76 PackagesDiscovered: prog, 77 } 78 79 return partybus.Event{ 80 Type: syftEvent.PackageCatalogerStarted, 81 Value: mon, 82 } 83 }, 84 }, 85 { 86 name: "cataloging complete", 87 eventFn: func(t *testing.T) partybus.Event { 88 prog := &progress.Manual{} 89 prog.SetTotal(100) 90 prog.Set(100) 91 prog.SetCompleted() 92 93 files := progress.NewManual(-1) 94 files.SetCompleted() 95 96 mon := cataloger.Monitor{ 97 FilesProcessed: files, 98 PackagesDiscovered: prog, 99 } 100 101 return partybus.Event{ 102 Type: syftEvent.PackageCatalogerStarted, 103 Value: mon, 104 } 105 }, 106 }, 107 } 108 for _, tt := range tests { 109 t.Run(tt.name, func(t *testing.T) { 110 event := tt.eventFn(t) 111 handler := New(DefaultHandlerConfig()) 112 handler.WindowSize = tea.WindowSizeMsg{ 113 Width: 100, 114 Height: 80, 115 } 116 117 models := handler.Handle(event) 118 require.Len(t, models, 1) 119 model := models[0] 120 121 tsk, ok := model.(taskprogress.Model) 122 require.True(t, ok) 123 124 got := runModel(t, tsk, tt.iterations, taskprogress.TickMsg{ 125 Time: time.Now(), 126 Sequence: tsk.Sequence(), 127 ID: tsk.ID(), 128 }) 129 t.Log(got) 130 snaps.MatchSnapshot(t, got) 131 }) 132 } 133 }