github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/engine/uisession/subscriber_test.go (about)

     1  package uisession
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  	"github.com/stretchr/testify/require"
    10  	apierrors "k8s.io/apimachinery/pkg/api/errors"
    11  	"k8s.io/apimachinery/pkg/types"
    12  	ctrlclient "sigs.k8s.io/controller-runtime/pkg/client"
    13  
    14  	"github.com/tilt-dev/tilt/internal/controllers/fake"
    15  	"github.com/tilt-dev/tilt/internal/store"
    16  	"github.com/tilt-dev/tilt/pkg/apis"
    17  	"github.com/tilt-dev/tilt/pkg/apis/core/v1alpha1"
    18  )
    19  
    20  func TestCreate(t *testing.T) {
    21  	f := newFixture(t)
    22  
    23  	_ = f.sub.OnChange(f.ctx, f.store, store.LegacyChangeSummary())
    24  
    25  	r := f.session("Tiltfile")
    26  	require.NotNil(t, r)
    27  	assert.Equal(t, "Tiltfile", r.ObjectMeta.Name)
    28  	assert.Equal(t, "1", r.ObjectMeta.ResourceVersion)
    29  
    30  	_ = f.sub.OnChange(f.ctx, f.store, store.LegacyChangeSummary())
    31  	r = f.session("Tiltfile")
    32  	assert.Equal(t, "1", r.ObjectMeta.ResourceVersion)
    33  }
    34  
    35  func TestUpdate(t *testing.T) {
    36  	f := newFixture(t)
    37  	_ = f.sub.OnChange(f.ctx, f.store, store.LegacyChangeSummary())
    38  
    39  	r := f.session("Tiltfile")
    40  	require.NotNil(t, r)
    41  	assert.Equal(t, "Tiltfile", r.ObjectMeta.Name)
    42  	assert.Equal(t, "1", r.ObjectMeta.ResourceVersion)
    43  
    44  	now := time.Now()
    45  	f.store.WithState(func(es *store.EngineState) {
    46  		es.TiltStartTime = now
    47  	})
    48  
    49  	_ = f.sub.OnChange(f.ctx, f.store, store.LegacyChangeSummary())
    50  
    51  	r = f.session("Tiltfile")
    52  	require.NotNil(t, r)
    53  	assert.Equal(t, "2", r.ObjectMeta.ResourceVersion)
    54  	assert.Equal(t, apis.NewTime(now).String(), r.Status.TiltStartTime.String())
    55  }
    56  
    57  type fixture struct {
    58  	ctx   context.Context
    59  	t     *testing.T
    60  	store *store.TestingStore
    61  	sub   *Subscriber
    62  	tc    ctrlclient.Client
    63  }
    64  
    65  func newFixture(t *testing.T) *fixture {
    66  	tc := fake.NewFakeTiltClient()
    67  	return &fixture{
    68  		t:     t,
    69  		ctx:   context.Background(),
    70  		sub:   NewSubscriber(tc),
    71  		tc:    tc,
    72  		store: store.NewTestingStore(),
    73  	}
    74  }
    75  
    76  func (f *fixture) session(name string) *v1alpha1.UISession {
    77  	r := &v1alpha1.UISession{}
    78  	err := f.tc.Get(f.ctx, types.NamespacedName{Name: name}, r)
    79  	if apierrors.IsNotFound(err) {
    80  		return nil
    81  	}
    82  
    83  	require.NoError(f.t, err)
    84  	return r
    85  }