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  }