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 }