// Code generated by mockery v0.0.0-dev. DO NOT EDIT.

package mocks

import (
	testing "testing"

	mock "github.com/stretchr/testify/mock"
)

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

// Emails provides a mock function with given fields:
func (_m *Allow) Emails() []string {
	ret := _m.Called()

	var r0 []string
	if rf, ok := ret.Get(0).(func() []string); ok {
		r0 = rf()
	} else {
		if ret.Get(0) != nil {
			r0 = ret.Get(0).([]string)
		}
	}

	return r0
}

// Member provides a mock function with given fields: email
func (_m *Allow) Member(email string) bool {
	ret := _m.Called(email)

	var r0 bool
	if rf, ok := ret.Get(0).(func(string) bool); ok {
		r0 = rf(email)
	} else {
		r0 = ret.Get(0).(bool)
	}

	return r0
}

// NewAllow creates a new instance of Allow. It also registers a cleanup function to assert the mocks expectations.
func NewAllow(t testing.TB) *Allow {
	mock := &Allow{}

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

	return mock
}
