github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/cmd/syft/cli/ui/handle_read_image_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 v1 "github.com/google/go-containerregistry/pkg/v1" 10 "github.com/stretchr/testify/require" 11 "github.com/wagoodman/go-partybus" 12 "github.com/wagoodman/go-progress" 13 14 "github.com/anchore/bubbly/bubbles/taskprogress" 15 stereoscopeEvent "github.com/anchore/stereoscope/pkg/event" 16 "github.com/anchore/stereoscope/pkg/image" 17 ) 18 19 func TestHandler_handleReadImage(t *testing.T) { 20 21 tests := []struct { 22 name string 23 eventFn func(*testing.T) partybus.Event 24 iterations int 25 }{ 26 { 27 name: "read image in progress", 28 eventFn: func(t *testing.T) partybus.Event { 29 prog := &progress.Manual{} 30 prog.SetTotal(100) 31 prog.Set(50) 32 33 src := image.Metadata{ 34 ID: "id", 35 Size: 42, 36 Config: v1.ConfigFile{ 37 Architecture: "arch", 38 Author: "auth", 39 Container: "cont", 40 OS: "os", 41 OSVersion: "os-ver", 42 Variant: "vari", 43 }, 44 MediaType: "media", 45 ManifestDigest: "digest", 46 Architecture: "arch", 47 Variant: "var", 48 OS: "os", 49 } 50 51 return partybus.Event{ 52 Type: stereoscopeEvent.ReadImage, 53 Source: src, 54 Value: prog, 55 } 56 }, 57 }, 58 { 59 name: "read image complete", 60 eventFn: func(t *testing.T) partybus.Event { 61 prog := &progress.Manual{} 62 prog.SetTotal(100) 63 prog.Set(100) 64 prog.SetCompleted() 65 66 src := image.Metadata{ 67 ID: "id", 68 Size: 42, 69 Config: v1.ConfigFile{ 70 Architecture: "arch", 71 Author: "auth", 72 Container: "cont", 73 OS: "os", 74 OSVersion: "os-ver", 75 Variant: "vari", 76 }, 77 MediaType: "media", 78 ManifestDigest: "digest", 79 Architecture: "arch", 80 Variant: "var", 81 OS: "os", 82 } 83 84 return partybus.Event{ 85 Type: stereoscopeEvent.ReadImage, 86 Source: src, 87 Value: prog, 88 } 89 }, 90 }, 91 } 92 for _, tt := range tests { 93 t.Run(tt.name, func(t *testing.T) { 94 event := tt.eventFn(t) 95 handler := New(DefaultHandlerConfig()) 96 handler.WindowSize = tea.WindowSizeMsg{ 97 Width: 100, 98 Height: 80, 99 } 100 101 models := handler.Handle(event) 102 require.Len(t, models, 1) 103 model := models[0] 104 105 tsk, ok := model.(taskprogress.Model) 106 require.True(t, ok) 107 108 got := runModel(t, tsk, tt.iterations, taskprogress.TickMsg{ 109 Time: time.Now(), 110 Sequence: tsk.Sequence(), 111 ID: tsk.ID(), 112 }) 113 t.Log(got) 114 snaps.MatchSnapshot(t, got) 115 }) 116 } 117 }