/*
Copyright 2024 chideat.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package mocks

import (
	context "context"

	mock "github.com/stretchr/testify/mock"
	v1 "k8s.io/api/policy/v1"
)

// PodDisruptionBudget is an autogenerated mock type for the PodDisruptionBudget type
type PodDisruptionBudget struct {
	mock.Mock
}

// CreateIfNotExistsPodDisruptionBudget provides a mock function with given fields: ctx, namespace, podDisruptionBudget
func (_m *PodDisruptionBudget) CreateIfNotExistsPodDisruptionBudget(ctx context.Context, namespace string, podDisruptionBudget *v1.PodDisruptionBudget) error {
	ret := _m.Called(ctx, namespace, podDisruptionBudget)

	if len(ret) == 0 {
		panic("no return value specified for CreateIfNotExistsPodDisruptionBudget")
	}

	var r0 error
	if rf, ok := ret.Get(0).(func(context.Context, string, *v1.PodDisruptionBudget) error); ok {
		r0 = rf(ctx, namespace, podDisruptionBudget)
	} else {
		r0 = ret.Error(0)
	}

	return r0
}

// CreateOrUpdatePodDisruptionBudget provides a mock function with given fields: ctx, namespace, podDisruptionBudget
func (_m *PodDisruptionBudget) CreateOrUpdatePodDisruptionBudget(ctx context.Context, namespace string, podDisruptionBudget *v1.PodDisruptionBudget) error {
	ret := _m.Called(ctx, namespace, podDisruptionBudget)

	if len(ret) == 0 {
		panic("no return value specified for CreateOrUpdatePodDisruptionBudget")
	}

	var r0 error
	if rf, ok := ret.Get(0).(func(context.Context, string, *v1.PodDisruptionBudget) error); ok {
		r0 = rf(ctx, namespace, podDisruptionBudget)
	} else {
		r0 = ret.Error(0)
	}

	return r0
}

// CreatePodDisruptionBudget provides a mock function with given fields: ctx, namespace, podDisruptionBudget
func (_m *PodDisruptionBudget) CreatePodDisruptionBudget(ctx context.Context, namespace string, podDisruptionBudget *v1.PodDisruptionBudget) error {
	ret := _m.Called(ctx, namespace, podDisruptionBudget)

	if len(ret) == 0 {
		panic("no return value specified for CreatePodDisruptionBudget")
	}

	var r0 error
	if rf, ok := ret.Get(0).(func(context.Context, string, *v1.PodDisruptionBudget) error); ok {
		r0 = rf(ctx, namespace, podDisruptionBudget)
	} else {
		r0 = ret.Error(0)
	}

	return r0
}

// DeletePodDisruptionBudget provides a mock function with given fields: ctx, namespace, name
func (_m *PodDisruptionBudget) DeletePodDisruptionBudget(ctx context.Context, namespace string, name string) error {
	ret := _m.Called(ctx, namespace, name)

	if len(ret) == 0 {
		panic("no return value specified for DeletePodDisruptionBudget")
	}

	var r0 error
	if rf, ok := ret.Get(0).(func(context.Context, string, string) error); ok {
		r0 = rf(ctx, namespace, name)
	} else {
		r0 = ret.Error(0)
	}

	return r0
}

// GetPodDisruptionBudget provides a mock function with given fields: ctx, namespace, name
func (_m *PodDisruptionBudget) GetPodDisruptionBudget(ctx context.Context, namespace string, name string) (*v1.PodDisruptionBudget, error) {
	ret := _m.Called(ctx, namespace, name)

	if len(ret) == 0 {
		panic("no return value specified for GetPodDisruptionBudget")
	}

	var r0 *v1.PodDisruptionBudget
	var r1 error
	if rf, ok := ret.Get(0).(func(context.Context, string, string) (*v1.PodDisruptionBudget, error)); ok {
		return rf(ctx, namespace, name)
	}
	if rf, ok := ret.Get(0).(func(context.Context, string, string) *v1.PodDisruptionBudget); ok {
		r0 = rf(ctx, namespace, name)
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).(*v1.PodDisruptionBudget)
		}
	}

	if rf, ok := ret.Get(1).(func(context.Context, string, string) error); ok {
		r1 = rf(ctx, namespace, name)
	} else {
		r1 = ret.Error(1)
	}

	return r0, r1
}

// UpdatePodDisruptionBudget provides a mock function with given fields: ctx, namespace, podDisruptionBudget
func (_m *PodDisruptionBudget) UpdatePodDisruptionBudget(ctx context.Context, namespace string, podDisruptionBudget *v1.PodDisruptionBudget) error {
	ret := _m.Called(ctx, namespace, podDisruptionBudget)

	if len(ret) == 0 {
		panic("no return value specified for UpdatePodDisruptionBudget")
	}

	var r0 error
	if rf, ok := ret.Get(0).(func(context.Context, string, *v1.PodDisruptionBudget) error); ok {
		r0 = rf(ctx, namespace, podDisruptionBudget)
	} else {
		r0 = ret.Error(0)
	}

	return r0
}

// NewPodDisruptionBudget creates a new instance of PodDisruptionBudget. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
// The first argument is typically a *testing.T value.
func NewPodDisruptionBudget(t interface {
	mock.TestingT
	Cleanup(func())
}) *PodDisruptionBudget {
	mock := &PodDisruptionBudget{}
	mock.Mock.Test(t)

	t.Cleanup(func() { mock.AssertExpectations(t) })

	return mock
}
