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  }