test(hydrator): cover remaining dry source revision branches

Signed-off-by: boostrack <boostrack@users.noreply.github.com>
This commit is contained in:
boostrack 2026-03-26 10:26:15 +01:00
parent db71f72b29
commit e4aa4b49a8
2 changed files with 66 additions and 0 deletions

View file

@ -2474,6 +2474,22 @@ func TestHydrationSyncGateDecision(t *testing.T) {
}(),
expected: hydrationSyncGateActionNone,
},
{
name: "explicit sync revisions bypass gating",
app: func() *v1alpha1.Application {
app := newApp()
app.Status.SourceHydrator.CurrentOperation = &v1alpha1.HydrateOperation{
Phase: v1alpha1.HydrateOperationPhaseHydrating,
}
return app
}(),
state: func() *v1alpha1.OperationState {
st := newState()
st.Operation.Sync.Revisions = []string{"12345"}
return st
}(),
expected: hydrationSyncGateActionNone,
},
{
name: "hydrateTo bypasses gating",
app: func() *v1alpha1.Application {
@ -3062,6 +3078,20 @@ func TestGateSyncOnHydration_RequestRefreshError(t *testing.T) {
assert.True(t, blocked)
}
func TestGateSyncOnHydration_NoAction(t *testing.T) {
app := newFakeApp()
ctrl := newFakeController(t.Context(), &fakeData{apps: []runtime.Object{app}}, nil)
state := &v1alpha1.OperationState{
Operation: v1alpha1.Operation{
Sync: &v1alpha1.SyncOperation{},
},
StartedAt: metav1.NewTime(time.Now()),
}
blocked := ctrl.gateSyncOnHydration(app, state, logrus.WithField("test", "no-action"))
assert.False(t, blocked)
}
func TestProcessRequestedAppAutomatedOperation_Successful(t *testing.T) {
app := newFakeApp()
app.Spec.Project = "default"

View file

@ -515,6 +515,27 @@ func TestProcessAppHydrateQueueItem_ReconciledTimeout_DrySourceRevisionLookupFai
d.AssertNotCalled(t, "AddHydrationQueueItem", mock.Anything)
}
func TestProcessAppHydrateQueueItem_ReconciledTimeout_DrySourceManifestResolutionFails(t *testing.T) {
t.Parallel()
d := mocks.NewDependencies(t)
app := setTestAppPhase(newTestApp("test-app"), v1alpha1.HydrateOperationPhaseHydrated)
reconciledAt := metav1.NewTime(time.Now().Add(-2 * time.Minute))
app.Status.ReconciledAt = &reconciledAt
d.EXPECT().GetProcessableAppProj(app).Return(newTestProject(), nil).Once()
d.EXPECT().GetRepoObjs(mock.Anything, app, app.Spec.SourceHydrator.GetDrySource(), "main", mock.Anything).Return(nil, nil, errors.New("manifest resolution failed")).Once()
h := &Hydrator{
dependencies: d,
statusRefreshTimeout: time.Minute,
}
h.ProcessAppHydrateQueueItem(app)
d.AssertNotCalled(t, "PersistAppHydratorStatus", mock.Anything, mock.Anything)
d.AssertNotCalled(t, "AddHydrationQueueItem", mock.Anything)
}
func TestProcessAppHydrateQueueItem_NoSourceHydrator(t *testing.T) {
t.Parallel()
d := mocks.NewDependencies(t)
@ -642,6 +663,21 @@ func TestHydrator_getLatestDrySourceRevision_ProjectError(t *testing.T) {
assert.ErrorContains(t, err, "failed to get app project")
}
func TestHydrator_getLatestDrySourceRevision_ManifestError(t *testing.T) {
t.Parallel()
d := mocks.NewDependencies(t)
app := newTestApp("test-app")
h := &Hydrator{dependencies: d}
d.EXPECT().GetProcessableAppProj(app).Return(newTestProject(), nil).Once()
d.EXPECT().GetRepoObjs(mock.Anything, app, app.Spec.SourceHydrator.GetDrySource(), "main", mock.Anything).Return(nil, nil, errors.New("manifest resolution failed")).Once()
revision, err := h.getLatestDrySourceRevision(app)
require.Error(t, err)
assert.Empty(t, revision)
assert.ErrorContains(t, err, "failed to resolve latest dry source revision")
}
func TestProcessHydrationQueueItem_ValidationFails(t *testing.T) {
t.Parallel()
d := mocks.NewDependencies(t)