// Copyright 2024-2026 the Pinniped contributors. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package testutil

import (
	"testing"

	"github.com/stretchr/testify/require"
	coretesting "k8s.io/client-go/testing"
)

// ScrubListOptionsForActions ignores certain aspects of Watch Actions which changed in K8s 1.31.
// Because of https://github.com/kubernetes/kubernetes/pull/125560 our test code is busted.
func ScrubListOptionsForActions(t *testing.T, actions []coretesting.Action) []coretesting.Action {
	t.Helper()

	scrubbedActions := make([]coretesting.Action, 0, len(actions))

	for _, action := range actions {
		switch action.GetVerb() {
		case "watch":
			watchAction, ok := action.(coretesting.WatchActionImpl)
			require.True(t, ok)
			watchAction.ListOptions.AllowWatchBookmarks = false
			watchAction.ListOptions.TimeoutSeconds = nil

			// These get filled in starting in k8s 1.36 packages, but we don't care to assert about them.
			watchAction.ListOptions.ResourceVersion = ""
			watchAction.WatchRestrictions.ResourceVersion = ""

			scrubbedActions = append(scrubbedActions, watchAction)

		case "list":
			listAction, ok := action.(coretesting.ListActionImpl)
			require.True(t, ok)
			listAction.ListOptions.ResourceVersion = ""
			listAction.ListOptions.TimeoutSeconds = nil
			listAction.ListOptions.Limit = 0
			scrubbedActions = append(scrubbedActions, listAction)

		default:
			scrubbedActions = append(scrubbedActions, action)
		}
	}

	return scrubbedActions
}
