// Code generated by mockery v1.0.0. DO NOT EDIT.

package mocks

import (
	context "context"

	mock "github.com/stretchr/testify/mock"
	vcsinfo "go.skia.org/infra/go/vcsinfo"
)

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

// UpdateChangeListsAsLanded provides a mock function with given fields: ctx, commits
func (_m *ChangeListLandedUpdater) UpdateChangeListsAsLanded(ctx context.Context, commits []*vcsinfo.LongCommit) error {
	ret := _m.Called(ctx, commits)

	var r0 error
	if rf, ok := ret.Get(0).(func(context.Context, []*vcsinfo.LongCommit) error); ok {
		r0 = rf(ctx, commits)
	} else {
		r0 = ret.Error(0)
	}

	return r0
}
