github.com/noqcks/syft@v0.0.0-20230920222752-a9e2c4e288e5/cmd/syft/cli/ui/handle_file_digests_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  )
    16  
    17  func TestHandler_handleFileDigestsCatalogerStarted(t *testing.T) {
    18  
    19  	tests := []struct {
    20  		name       string
    21  		eventFn    func(*testing.T) partybus.Event
    22  		iterations int
    23  	}{
    24  		{
    25  			name: "cataloging in progress",
    26  			eventFn: func(t *testing.T) partybus.Event {
    27  				prog := &progress.Manual{}
    28  				prog.SetTotal(100)
    29  				prog.Set(50)
    30  
    31  				mon := struct {
    32  					progress.Progressable
    33  					progress.Stager
    34  				}{
    35  					Progressable: prog,
    36  					Stager: &progress.Stage{
    37  						Current: "current",
    38  					},
    39  				}
    40  
    41  				return partybus.Event{
    42  					Type:  syftEvent.FileDigestsCatalogerStarted,
    43  					Value: mon,
    44  				}
    45  			},
    46  		},
    47  		{
    48  			name: "cataloging complete",
    49  			eventFn: func(t *testing.T) partybus.Event {
    50  				prog := &progress.Manual{}
    51  				prog.SetTotal(100)
    52  				prog.Set(100)
    53  				prog.SetCompleted()
    54  
    55  				mon := struct {
    56  					progress.Progressable
    57  					progress.Stager
    58  				}{
    59  					Progressable: prog,
    60  					Stager: &progress.Stage{
    61  						Current: "current",
    62  					},
    63  				}
    64  
    65  				return partybus.Event{
    66  					Type:  syftEvent.FileDigestsCatalogerStarted,
    67  					Value: mon,
    68  				}
    69  			},
    70  		},
    71  	}
    72  	for _, tt := range tests {
    73  		t.Run(tt.name, func(t *testing.T) {
    74  			event := tt.eventFn(t)
    75  			handler := New(DefaultHandlerConfig())
    76  			handler.WindowSize = tea.WindowSizeMsg{
    77  				Width:  100,
    78  				Height: 80,
    79  			}
    80  
    81  			models := handler.Handle(event)
    82  			require.Len(t, models, 1)
    83  			model := models[0]
    84  
    85  			tsk, ok := model.(taskprogress.Model)
    86  			require.True(t, ok)
    87  
    88  			got := runModel(t, tsk, tt.iterations, taskprogress.TickMsg{
    89  				Time:     time.Now(),
    90  				Sequence: tsk.Sequence(),
    91  				ID:       tsk.ID(),
    92  			})
    93  			t.Log(got)
    94  			snaps.MatchSnapshot(t, got)
    95  		})
    96  	}
    97  }