// Code generated by http://github.com/gojuno/minimock (v3.3.14). DO NOT EDIT.

package mocks

//go:generate minimock -i git.dmitriygnatenko.ru/dima/dmitriygnatenko-v2/internal/service/handler.ArticleRepository -o article_repository_minimock.go -n ArticleRepositoryMock -p mocks

import (
	"context"
	"sync"
	mm_atomic "sync/atomic"
	mm_time "time"

	"git.dmitriygnatenko.ru/dima/dmitriygnatenko-v2/internal/model"
	"github.com/gojuno/minimock/v3"
)

// ArticleRepositoryMock implements handler.ArticleRepository
type ArticleRepositoryMock struct {
	t          minimock.Tester
	finishOnce sync.Once

	funcGetAllPreview          func(ctx context.Context, lang model.LanguageID) (aa1 []model.ArticlePreview, err error)
	inspectFuncGetAllPreview   func(ctx context.Context, lang model.LanguageID)
	afterGetAllPreviewCounter  uint64
	beforeGetAllPreviewCounter uint64
	GetAllPreviewMock          mArticleRepositoryMockGetAllPreview

	funcGetByURL          func(ctx context.Context, url string, lang model.LanguageID) (ap1 *model.Article, err error)
	inspectFuncGetByURL   func(ctx context.Context, url string, lang model.LanguageID)
	afterGetByURLCounter  uint64
	beforeGetByURLCounter uint64
	GetByURLMock          mArticleRepositoryMockGetByURL

	funcGetPreviewByTagID          func(ctx context.Context, tagID uint64, lang model.LanguageID) (aa1 []model.ArticlePreview, err error)
	inspectFuncGetPreviewByTagID   func(ctx context.Context, tagID uint64, lang model.LanguageID)
	afterGetPreviewByTagIDCounter  uint64
	beforeGetPreviewByTagIDCounter uint64
	GetPreviewByTagIDMock          mArticleRepositoryMockGetPreviewByTagID
}

// NewArticleRepositoryMock returns a mock for handler.ArticleRepository
func NewArticleRepositoryMock(t minimock.Tester) *ArticleRepositoryMock {
	m := &ArticleRepositoryMock{t: t}

	if controller, ok := t.(minimock.MockController); ok {
		controller.RegisterMocker(m)
	}

	m.GetAllPreviewMock = mArticleRepositoryMockGetAllPreview{mock: m}
	m.GetAllPreviewMock.callArgs = []*ArticleRepositoryMockGetAllPreviewParams{}

	m.GetByURLMock = mArticleRepositoryMockGetByURL{mock: m}
	m.GetByURLMock.callArgs = []*ArticleRepositoryMockGetByURLParams{}

	m.GetPreviewByTagIDMock = mArticleRepositoryMockGetPreviewByTagID{mock: m}
	m.GetPreviewByTagIDMock.callArgs = []*ArticleRepositoryMockGetPreviewByTagIDParams{}

	t.Cleanup(m.MinimockFinish)

	return m
}

type mArticleRepositoryMockGetAllPreview struct {
	optional           bool
	mock               *ArticleRepositoryMock
	defaultExpectation *ArticleRepositoryMockGetAllPreviewExpectation
	expectations       []*ArticleRepositoryMockGetAllPreviewExpectation

	callArgs []*ArticleRepositoryMockGetAllPreviewParams
	mutex    sync.RWMutex

	expectedInvocations uint64
}

// ArticleRepositoryMockGetAllPreviewExpectation specifies expectation struct of the ArticleRepository.GetAllPreview
type ArticleRepositoryMockGetAllPreviewExpectation struct {
	mock      *ArticleRepositoryMock
	params    *ArticleRepositoryMockGetAllPreviewParams
	paramPtrs *ArticleRepositoryMockGetAllPreviewParamPtrs
	results   *ArticleRepositoryMockGetAllPreviewResults
	Counter   uint64
}

// ArticleRepositoryMockGetAllPreviewParams contains parameters of the ArticleRepository.GetAllPreview
type ArticleRepositoryMockGetAllPreviewParams struct {
	ctx  context.Context
	lang model.LanguageID
}

// ArticleRepositoryMockGetAllPreviewParamPtrs contains pointers to parameters of the ArticleRepository.GetAllPreview
type ArticleRepositoryMockGetAllPreviewParamPtrs struct {
	ctx  *context.Context
	lang *model.LanguageID
}

// ArticleRepositoryMockGetAllPreviewResults contains results of the ArticleRepository.GetAllPreview
type ArticleRepositoryMockGetAllPreviewResults struct {
	aa1 []model.ArticlePreview
	err error
}

// Marks this method to be optional. The default behavior of any method with Return() is '1 or more', meaning
// the test will fail minimock's automatic final call check if the mocked method was not called at least once.
// Optional() makes method check to work in '0 or more' mode.
// It is NOT RECOMMENDED to use this option unless you really need it, as default behaviour helps to
// catch the problems when the expected method call is totally skipped during test run.
func (mmGetAllPreview *mArticleRepositoryMockGetAllPreview) Optional() *mArticleRepositoryMockGetAllPreview {
	mmGetAllPreview.optional = true
	return mmGetAllPreview
}

// Expect sets up expected params for ArticleRepository.GetAllPreview
func (mmGetAllPreview *mArticleRepositoryMockGetAllPreview) Expect(ctx context.Context, lang model.LanguageID) *mArticleRepositoryMockGetAllPreview {
	if mmGetAllPreview.mock.funcGetAllPreview != nil {
		mmGetAllPreview.mock.t.Fatalf("ArticleRepositoryMock.GetAllPreview mock is already set by Set")
	}

	if mmGetAllPreview.defaultExpectation == nil {
		mmGetAllPreview.defaultExpectation = &ArticleRepositoryMockGetAllPreviewExpectation{}
	}

	if mmGetAllPreview.defaultExpectation.paramPtrs != nil {
		mmGetAllPreview.mock.t.Fatalf("ArticleRepositoryMock.GetAllPreview mock is already set by ExpectParams functions")
	}

	mmGetAllPreview.defaultExpectation.params = &ArticleRepositoryMockGetAllPreviewParams{ctx, lang}
	for _, e := range mmGetAllPreview.expectations {
		if minimock.Equal(e.params, mmGetAllPreview.defaultExpectation.params) {
			mmGetAllPreview.mock.t.Fatalf("Expectation set by When has same params: %#v", *mmGetAllPreview.defaultExpectation.params)
		}
	}

	return mmGetAllPreview
}

// ExpectCtxParam1 sets up expected param ctx for ArticleRepository.GetAllPreview
func (mmGetAllPreview *mArticleRepositoryMockGetAllPreview) ExpectCtxParam1(ctx context.Context) *mArticleRepositoryMockGetAllPreview {
	if mmGetAllPreview.mock.funcGetAllPreview != nil {
		mmGetAllPreview.mock.t.Fatalf("ArticleRepositoryMock.GetAllPreview mock is already set by Set")
	}

	if mmGetAllPreview.defaultExpectation == nil {
		mmGetAllPreview.defaultExpectation = &ArticleRepositoryMockGetAllPreviewExpectation{}
	}

	if mmGetAllPreview.defaultExpectation.params != nil {
		mmGetAllPreview.mock.t.Fatalf("ArticleRepositoryMock.GetAllPreview mock is already set by Expect")
	}

	if mmGetAllPreview.defaultExpectation.paramPtrs == nil {
		mmGetAllPreview.defaultExpectation.paramPtrs = &ArticleRepositoryMockGetAllPreviewParamPtrs{}
	}
	mmGetAllPreview.defaultExpectation.paramPtrs.ctx = &ctx

	return mmGetAllPreview
}

// ExpectLangParam2 sets up expected param lang for ArticleRepository.GetAllPreview
func (mmGetAllPreview *mArticleRepositoryMockGetAllPreview) ExpectLangParam2(lang model.LanguageID) *mArticleRepositoryMockGetAllPreview {
	if mmGetAllPreview.mock.funcGetAllPreview != nil {
		mmGetAllPreview.mock.t.Fatalf("ArticleRepositoryMock.GetAllPreview mock is already set by Set")
	}

	if mmGetAllPreview.defaultExpectation == nil {
		mmGetAllPreview.defaultExpectation = &ArticleRepositoryMockGetAllPreviewExpectation{}
	}

	if mmGetAllPreview.defaultExpectation.params != nil {
		mmGetAllPreview.mock.t.Fatalf("ArticleRepositoryMock.GetAllPreview mock is already set by Expect")
	}

	if mmGetAllPreview.defaultExpectation.paramPtrs == nil {
		mmGetAllPreview.defaultExpectation.paramPtrs = &ArticleRepositoryMockGetAllPreviewParamPtrs{}
	}
	mmGetAllPreview.defaultExpectation.paramPtrs.lang = &lang

	return mmGetAllPreview
}

// Inspect accepts an inspector function that has same arguments as the ArticleRepository.GetAllPreview
func (mmGetAllPreview *mArticleRepositoryMockGetAllPreview) Inspect(f func(ctx context.Context, lang model.LanguageID)) *mArticleRepositoryMockGetAllPreview {
	if mmGetAllPreview.mock.inspectFuncGetAllPreview != nil {
		mmGetAllPreview.mock.t.Fatalf("Inspect function is already set for ArticleRepositoryMock.GetAllPreview")
	}

	mmGetAllPreview.mock.inspectFuncGetAllPreview = f

	return mmGetAllPreview
}

// Return sets up results that will be returned by ArticleRepository.GetAllPreview
func (mmGetAllPreview *mArticleRepositoryMockGetAllPreview) Return(aa1 []model.ArticlePreview, err error) *ArticleRepositoryMock {
	if mmGetAllPreview.mock.funcGetAllPreview != nil {
		mmGetAllPreview.mock.t.Fatalf("ArticleRepositoryMock.GetAllPreview mock is already set by Set")
	}

	if mmGetAllPreview.defaultExpectation == nil {
		mmGetAllPreview.defaultExpectation = &ArticleRepositoryMockGetAllPreviewExpectation{mock: mmGetAllPreview.mock}
	}
	mmGetAllPreview.defaultExpectation.results = &ArticleRepositoryMockGetAllPreviewResults{aa1, err}
	return mmGetAllPreview.mock
}

// Set uses given function f to mock the ArticleRepository.GetAllPreview method
func (mmGetAllPreview *mArticleRepositoryMockGetAllPreview) Set(f func(ctx context.Context, lang model.LanguageID) (aa1 []model.ArticlePreview, err error)) *ArticleRepositoryMock {
	if mmGetAllPreview.defaultExpectation != nil {
		mmGetAllPreview.mock.t.Fatalf("Default expectation is already set for the ArticleRepository.GetAllPreview method")
	}

	if len(mmGetAllPreview.expectations) > 0 {
		mmGetAllPreview.mock.t.Fatalf("Some expectations are already set for the ArticleRepository.GetAllPreview method")
	}

	mmGetAllPreview.mock.funcGetAllPreview = f
	return mmGetAllPreview.mock
}

// When sets expectation for the ArticleRepository.GetAllPreview which will trigger the result defined by the following
// Then helper
func (mmGetAllPreview *mArticleRepositoryMockGetAllPreview) When(ctx context.Context, lang model.LanguageID) *ArticleRepositoryMockGetAllPreviewExpectation {
	if mmGetAllPreview.mock.funcGetAllPreview != nil {
		mmGetAllPreview.mock.t.Fatalf("ArticleRepositoryMock.GetAllPreview mock is already set by Set")
	}

	expectation := &ArticleRepositoryMockGetAllPreviewExpectation{
		mock:   mmGetAllPreview.mock,
		params: &ArticleRepositoryMockGetAllPreviewParams{ctx, lang},
	}
	mmGetAllPreview.expectations = append(mmGetAllPreview.expectations, expectation)
	return expectation
}

// Then sets up ArticleRepository.GetAllPreview return parameters for the expectation previously defined by the When method
func (e *ArticleRepositoryMockGetAllPreviewExpectation) Then(aa1 []model.ArticlePreview, err error) *ArticleRepositoryMock {
	e.results = &ArticleRepositoryMockGetAllPreviewResults{aa1, err}
	return e.mock
}

// Times sets number of times ArticleRepository.GetAllPreview should be invoked
func (mmGetAllPreview *mArticleRepositoryMockGetAllPreview) Times(n uint64) *mArticleRepositoryMockGetAllPreview {
	if n == 0 {
		mmGetAllPreview.mock.t.Fatalf("Times of ArticleRepositoryMock.GetAllPreview mock can not be zero")
	}
	mm_atomic.StoreUint64(&mmGetAllPreview.expectedInvocations, n)
	return mmGetAllPreview
}

func (mmGetAllPreview *mArticleRepositoryMockGetAllPreview) invocationsDone() bool {
	if len(mmGetAllPreview.expectations) == 0 && mmGetAllPreview.defaultExpectation == nil && mmGetAllPreview.mock.funcGetAllPreview == nil {
		return true
	}

	totalInvocations := mm_atomic.LoadUint64(&mmGetAllPreview.mock.afterGetAllPreviewCounter)
	expectedInvocations := mm_atomic.LoadUint64(&mmGetAllPreview.expectedInvocations)

	return totalInvocations > 0 && (expectedInvocations == 0 || expectedInvocations == totalInvocations)
}

// GetAllPreview implements handler.ArticleRepository
func (mmGetAllPreview *ArticleRepositoryMock) GetAllPreview(ctx context.Context, lang model.LanguageID) (aa1 []model.ArticlePreview, err error) {
	mm_atomic.AddUint64(&mmGetAllPreview.beforeGetAllPreviewCounter, 1)
	defer mm_atomic.AddUint64(&mmGetAllPreview.afterGetAllPreviewCounter, 1)

	if mmGetAllPreview.inspectFuncGetAllPreview != nil {
		mmGetAllPreview.inspectFuncGetAllPreview(ctx, lang)
	}

	mm_params := ArticleRepositoryMockGetAllPreviewParams{ctx, lang}

	// Record call args
	mmGetAllPreview.GetAllPreviewMock.mutex.Lock()
	mmGetAllPreview.GetAllPreviewMock.callArgs = append(mmGetAllPreview.GetAllPreviewMock.callArgs, &mm_params)
	mmGetAllPreview.GetAllPreviewMock.mutex.Unlock()

	for _, e := range mmGetAllPreview.GetAllPreviewMock.expectations {
		if minimock.Equal(*e.params, mm_params) {
			mm_atomic.AddUint64(&e.Counter, 1)
			return e.results.aa1, e.results.err
		}
	}

	if mmGetAllPreview.GetAllPreviewMock.defaultExpectation != nil {
		mm_atomic.AddUint64(&mmGetAllPreview.GetAllPreviewMock.defaultExpectation.Counter, 1)
		mm_want := mmGetAllPreview.GetAllPreviewMock.defaultExpectation.params
		mm_want_ptrs := mmGetAllPreview.GetAllPreviewMock.defaultExpectation.paramPtrs

		mm_got := ArticleRepositoryMockGetAllPreviewParams{ctx, lang}

		if mm_want_ptrs != nil {

			if mm_want_ptrs.ctx != nil && !minimock.Equal(*mm_want_ptrs.ctx, mm_got.ctx) {
				mmGetAllPreview.t.Errorf("ArticleRepositoryMock.GetAllPreview got unexpected parameter ctx, want: %#v, got: %#v%s\n", *mm_want_ptrs.ctx, mm_got.ctx, minimock.Diff(*mm_want_ptrs.ctx, mm_got.ctx))
			}

			if mm_want_ptrs.lang != nil && !minimock.Equal(*mm_want_ptrs.lang, mm_got.lang) {
				mmGetAllPreview.t.Errorf("ArticleRepositoryMock.GetAllPreview got unexpected parameter lang, want: %#v, got: %#v%s\n", *mm_want_ptrs.lang, mm_got.lang, minimock.Diff(*mm_want_ptrs.lang, mm_got.lang))
			}

		} else if mm_want != nil && !minimock.Equal(*mm_want, mm_got) {
			mmGetAllPreview.t.Errorf("ArticleRepositoryMock.GetAllPreview got unexpected parameters, want: %#v, got: %#v%s\n", *mm_want, mm_got, minimock.Diff(*mm_want, mm_got))
		}

		mm_results := mmGetAllPreview.GetAllPreviewMock.defaultExpectation.results
		if mm_results == nil {
			mmGetAllPreview.t.Fatal("No results are set for the ArticleRepositoryMock.GetAllPreview")
		}
		return (*mm_results).aa1, (*mm_results).err
	}
	if mmGetAllPreview.funcGetAllPreview != nil {
		return mmGetAllPreview.funcGetAllPreview(ctx, lang)
	}
	mmGetAllPreview.t.Fatalf("Unexpected call to ArticleRepositoryMock.GetAllPreview. %v %v", ctx, lang)
	return
}

// GetAllPreviewAfterCounter returns a count of finished ArticleRepositoryMock.GetAllPreview invocations
func (mmGetAllPreview *ArticleRepositoryMock) GetAllPreviewAfterCounter() uint64 {
	return mm_atomic.LoadUint64(&mmGetAllPreview.afterGetAllPreviewCounter)
}

// GetAllPreviewBeforeCounter returns a count of ArticleRepositoryMock.GetAllPreview invocations
func (mmGetAllPreview *ArticleRepositoryMock) GetAllPreviewBeforeCounter() uint64 {
	return mm_atomic.LoadUint64(&mmGetAllPreview.beforeGetAllPreviewCounter)
}

// Calls returns a list of arguments used in each call to ArticleRepositoryMock.GetAllPreview.
// The list is in the same order as the calls were made (i.e. recent calls have a higher index)
func (mmGetAllPreview *mArticleRepositoryMockGetAllPreview) Calls() []*ArticleRepositoryMockGetAllPreviewParams {
	mmGetAllPreview.mutex.RLock()

	argCopy := make([]*ArticleRepositoryMockGetAllPreviewParams, len(mmGetAllPreview.callArgs))
	copy(argCopy, mmGetAllPreview.callArgs)

	mmGetAllPreview.mutex.RUnlock()

	return argCopy
}

// MinimockGetAllPreviewDone returns true if the count of the GetAllPreview invocations corresponds
// the number of defined expectations
func (m *ArticleRepositoryMock) MinimockGetAllPreviewDone() bool {
	if m.GetAllPreviewMock.optional {
		// Optional methods provide '0 or more' call count restriction.
		return true
	}

	for _, e := range m.GetAllPreviewMock.expectations {
		if mm_atomic.LoadUint64(&e.Counter) < 1 {
			return false
		}
	}

	return m.GetAllPreviewMock.invocationsDone()
}

// MinimockGetAllPreviewInspect logs each unmet expectation
func (m *ArticleRepositoryMock) MinimockGetAllPreviewInspect() {
	for _, e := range m.GetAllPreviewMock.expectations {
		if mm_atomic.LoadUint64(&e.Counter) < 1 {
			m.t.Errorf("Expected call to ArticleRepositoryMock.GetAllPreview with params: %#v", *e.params)
		}
	}

	afterGetAllPreviewCounter := mm_atomic.LoadUint64(&m.afterGetAllPreviewCounter)
	// if default expectation was set then invocations count should be greater than zero
	if m.GetAllPreviewMock.defaultExpectation != nil && afterGetAllPreviewCounter < 1 {
		if m.GetAllPreviewMock.defaultExpectation.params == nil {
			m.t.Error("Expected call to ArticleRepositoryMock.GetAllPreview")
		} else {
			m.t.Errorf("Expected call to ArticleRepositoryMock.GetAllPreview with params: %#v", *m.GetAllPreviewMock.defaultExpectation.params)
		}
	}
	// if func was set then invocations count should be greater than zero
	if m.funcGetAllPreview != nil && afterGetAllPreviewCounter < 1 {
		m.t.Error("Expected call to ArticleRepositoryMock.GetAllPreview")
	}

	if !m.GetAllPreviewMock.invocationsDone() && afterGetAllPreviewCounter > 0 {
		m.t.Errorf("Expected %d calls to ArticleRepositoryMock.GetAllPreview but found %d calls",
			mm_atomic.LoadUint64(&m.GetAllPreviewMock.expectedInvocations), afterGetAllPreviewCounter)
	}
}

type mArticleRepositoryMockGetByURL struct {
	optional           bool
	mock               *ArticleRepositoryMock
	defaultExpectation *ArticleRepositoryMockGetByURLExpectation
	expectations       []*ArticleRepositoryMockGetByURLExpectation

	callArgs []*ArticleRepositoryMockGetByURLParams
	mutex    sync.RWMutex

	expectedInvocations uint64
}

// ArticleRepositoryMockGetByURLExpectation specifies expectation struct of the ArticleRepository.GetByURL
type ArticleRepositoryMockGetByURLExpectation struct {
	mock      *ArticleRepositoryMock
	params    *ArticleRepositoryMockGetByURLParams
	paramPtrs *ArticleRepositoryMockGetByURLParamPtrs
	results   *ArticleRepositoryMockGetByURLResults
	Counter   uint64
}

// ArticleRepositoryMockGetByURLParams contains parameters of the ArticleRepository.GetByURL
type ArticleRepositoryMockGetByURLParams struct {
	ctx  context.Context
	url  string
	lang model.LanguageID
}

// ArticleRepositoryMockGetByURLParamPtrs contains pointers to parameters of the ArticleRepository.GetByURL
type ArticleRepositoryMockGetByURLParamPtrs struct {
	ctx  *context.Context
	url  *string
	lang *model.LanguageID
}

// ArticleRepositoryMockGetByURLResults contains results of the ArticleRepository.GetByURL
type ArticleRepositoryMockGetByURLResults struct {
	ap1 *model.Article
	err error
}

// Marks this method to be optional. The default behavior of any method with Return() is '1 or more', meaning
// the test will fail minimock's automatic final call check if the mocked method was not called at least once.
// Optional() makes method check to work in '0 or more' mode.
// It is NOT RECOMMENDED to use this option unless you really need it, as default behaviour helps to
// catch the problems when the expected method call is totally skipped during test run.
func (mmGetByURL *mArticleRepositoryMockGetByURL) Optional() *mArticleRepositoryMockGetByURL {
	mmGetByURL.optional = true
	return mmGetByURL
}

// Expect sets up expected params for ArticleRepository.GetByURL
func (mmGetByURL *mArticleRepositoryMockGetByURL) Expect(ctx context.Context, url string, lang model.LanguageID) *mArticleRepositoryMockGetByURL {
	if mmGetByURL.mock.funcGetByURL != nil {
		mmGetByURL.mock.t.Fatalf("ArticleRepositoryMock.GetByURL mock is already set by Set")
	}

	if mmGetByURL.defaultExpectation == nil {
		mmGetByURL.defaultExpectation = &ArticleRepositoryMockGetByURLExpectation{}
	}

	if mmGetByURL.defaultExpectation.paramPtrs != nil {
		mmGetByURL.mock.t.Fatalf("ArticleRepositoryMock.GetByURL mock is already set by ExpectParams functions")
	}

	mmGetByURL.defaultExpectation.params = &ArticleRepositoryMockGetByURLParams{ctx, url, lang}
	for _, e := range mmGetByURL.expectations {
		if minimock.Equal(e.params, mmGetByURL.defaultExpectation.params) {
			mmGetByURL.mock.t.Fatalf("Expectation set by When has same params: %#v", *mmGetByURL.defaultExpectation.params)
		}
	}

	return mmGetByURL
}

// ExpectCtxParam1 sets up expected param ctx for ArticleRepository.GetByURL
func (mmGetByURL *mArticleRepositoryMockGetByURL) ExpectCtxParam1(ctx context.Context) *mArticleRepositoryMockGetByURL {
	if mmGetByURL.mock.funcGetByURL != nil {
		mmGetByURL.mock.t.Fatalf("ArticleRepositoryMock.GetByURL mock is already set by Set")
	}

	if mmGetByURL.defaultExpectation == nil {
		mmGetByURL.defaultExpectation = &ArticleRepositoryMockGetByURLExpectation{}
	}

	if mmGetByURL.defaultExpectation.params != nil {
		mmGetByURL.mock.t.Fatalf("ArticleRepositoryMock.GetByURL mock is already set by Expect")
	}

	if mmGetByURL.defaultExpectation.paramPtrs == nil {
		mmGetByURL.defaultExpectation.paramPtrs = &ArticleRepositoryMockGetByURLParamPtrs{}
	}
	mmGetByURL.defaultExpectation.paramPtrs.ctx = &ctx

	return mmGetByURL
}

// ExpectUrlParam2 sets up expected param url for ArticleRepository.GetByURL
func (mmGetByURL *mArticleRepositoryMockGetByURL) ExpectUrlParam2(url string) *mArticleRepositoryMockGetByURL {
	if mmGetByURL.mock.funcGetByURL != nil {
		mmGetByURL.mock.t.Fatalf("ArticleRepositoryMock.GetByURL mock is already set by Set")
	}

	if mmGetByURL.defaultExpectation == nil {
		mmGetByURL.defaultExpectation = &ArticleRepositoryMockGetByURLExpectation{}
	}

	if mmGetByURL.defaultExpectation.params != nil {
		mmGetByURL.mock.t.Fatalf("ArticleRepositoryMock.GetByURL mock is already set by Expect")
	}

	if mmGetByURL.defaultExpectation.paramPtrs == nil {
		mmGetByURL.defaultExpectation.paramPtrs = &ArticleRepositoryMockGetByURLParamPtrs{}
	}
	mmGetByURL.defaultExpectation.paramPtrs.url = &url

	return mmGetByURL
}

// ExpectLangParam3 sets up expected param lang for ArticleRepository.GetByURL
func (mmGetByURL *mArticleRepositoryMockGetByURL) ExpectLangParam3(lang model.LanguageID) *mArticleRepositoryMockGetByURL {
	if mmGetByURL.mock.funcGetByURL != nil {
		mmGetByURL.mock.t.Fatalf("ArticleRepositoryMock.GetByURL mock is already set by Set")
	}

	if mmGetByURL.defaultExpectation == nil {
		mmGetByURL.defaultExpectation = &ArticleRepositoryMockGetByURLExpectation{}
	}

	if mmGetByURL.defaultExpectation.params != nil {
		mmGetByURL.mock.t.Fatalf("ArticleRepositoryMock.GetByURL mock is already set by Expect")
	}

	if mmGetByURL.defaultExpectation.paramPtrs == nil {
		mmGetByURL.defaultExpectation.paramPtrs = &ArticleRepositoryMockGetByURLParamPtrs{}
	}
	mmGetByURL.defaultExpectation.paramPtrs.lang = &lang

	return mmGetByURL
}

// Inspect accepts an inspector function that has same arguments as the ArticleRepository.GetByURL
func (mmGetByURL *mArticleRepositoryMockGetByURL) Inspect(f func(ctx context.Context, url string, lang model.LanguageID)) *mArticleRepositoryMockGetByURL {
	if mmGetByURL.mock.inspectFuncGetByURL != nil {
		mmGetByURL.mock.t.Fatalf("Inspect function is already set for ArticleRepositoryMock.GetByURL")
	}

	mmGetByURL.mock.inspectFuncGetByURL = f

	return mmGetByURL
}

// Return sets up results that will be returned by ArticleRepository.GetByURL
func (mmGetByURL *mArticleRepositoryMockGetByURL) Return(ap1 *model.Article, err error) *ArticleRepositoryMock {
	if mmGetByURL.mock.funcGetByURL != nil {
		mmGetByURL.mock.t.Fatalf("ArticleRepositoryMock.GetByURL mock is already set by Set")
	}

	if mmGetByURL.defaultExpectation == nil {
		mmGetByURL.defaultExpectation = &ArticleRepositoryMockGetByURLExpectation{mock: mmGetByURL.mock}
	}
	mmGetByURL.defaultExpectation.results = &ArticleRepositoryMockGetByURLResults{ap1, err}
	return mmGetByURL.mock
}

// Set uses given function f to mock the ArticleRepository.GetByURL method
func (mmGetByURL *mArticleRepositoryMockGetByURL) Set(f func(ctx context.Context, url string, lang model.LanguageID) (ap1 *model.Article, err error)) *ArticleRepositoryMock {
	if mmGetByURL.defaultExpectation != nil {
		mmGetByURL.mock.t.Fatalf("Default expectation is already set for the ArticleRepository.GetByURL method")
	}

	if len(mmGetByURL.expectations) > 0 {
		mmGetByURL.mock.t.Fatalf("Some expectations are already set for the ArticleRepository.GetByURL method")
	}

	mmGetByURL.mock.funcGetByURL = f
	return mmGetByURL.mock
}

// When sets expectation for the ArticleRepository.GetByURL which will trigger the result defined by the following
// Then helper
func (mmGetByURL *mArticleRepositoryMockGetByURL) When(ctx context.Context, url string, lang model.LanguageID) *ArticleRepositoryMockGetByURLExpectation {
	if mmGetByURL.mock.funcGetByURL != nil {
		mmGetByURL.mock.t.Fatalf("ArticleRepositoryMock.GetByURL mock is already set by Set")
	}

	expectation := &ArticleRepositoryMockGetByURLExpectation{
		mock:   mmGetByURL.mock,
		params: &ArticleRepositoryMockGetByURLParams{ctx, url, lang},
	}
	mmGetByURL.expectations = append(mmGetByURL.expectations, expectation)
	return expectation
}

// Then sets up ArticleRepository.GetByURL return parameters for the expectation previously defined by the When method
func (e *ArticleRepositoryMockGetByURLExpectation) Then(ap1 *model.Article, err error) *ArticleRepositoryMock {
	e.results = &ArticleRepositoryMockGetByURLResults{ap1, err}
	return e.mock
}

// Times sets number of times ArticleRepository.GetByURL should be invoked
func (mmGetByURL *mArticleRepositoryMockGetByURL) Times(n uint64) *mArticleRepositoryMockGetByURL {
	if n == 0 {
		mmGetByURL.mock.t.Fatalf("Times of ArticleRepositoryMock.GetByURL mock can not be zero")
	}
	mm_atomic.StoreUint64(&mmGetByURL.expectedInvocations, n)
	return mmGetByURL
}

func (mmGetByURL *mArticleRepositoryMockGetByURL) invocationsDone() bool {
	if len(mmGetByURL.expectations) == 0 && mmGetByURL.defaultExpectation == nil && mmGetByURL.mock.funcGetByURL == nil {
		return true
	}

	totalInvocations := mm_atomic.LoadUint64(&mmGetByURL.mock.afterGetByURLCounter)
	expectedInvocations := mm_atomic.LoadUint64(&mmGetByURL.expectedInvocations)

	return totalInvocations > 0 && (expectedInvocations == 0 || expectedInvocations == totalInvocations)
}

// GetByURL implements handler.ArticleRepository
func (mmGetByURL *ArticleRepositoryMock) GetByURL(ctx context.Context, url string, lang model.LanguageID) (ap1 *model.Article, err error) {
	mm_atomic.AddUint64(&mmGetByURL.beforeGetByURLCounter, 1)
	defer mm_atomic.AddUint64(&mmGetByURL.afterGetByURLCounter, 1)

	if mmGetByURL.inspectFuncGetByURL != nil {
		mmGetByURL.inspectFuncGetByURL(ctx, url, lang)
	}

	mm_params := ArticleRepositoryMockGetByURLParams{ctx, url, lang}

	// Record call args
	mmGetByURL.GetByURLMock.mutex.Lock()
	mmGetByURL.GetByURLMock.callArgs = append(mmGetByURL.GetByURLMock.callArgs, &mm_params)
	mmGetByURL.GetByURLMock.mutex.Unlock()

	for _, e := range mmGetByURL.GetByURLMock.expectations {
		if minimock.Equal(*e.params, mm_params) {
			mm_atomic.AddUint64(&e.Counter, 1)
			return e.results.ap1, e.results.err
		}
	}

	if mmGetByURL.GetByURLMock.defaultExpectation != nil {
		mm_atomic.AddUint64(&mmGetByURL.GetByURLMock.defaultExpectation.Counter, 1)
		mm_want := mmGetByURL.GetByURLMock.defaultExpectation.params
		mm_want_ptrs := mmGetByURL.GetByURLMock.defaultExpectation.paramPtrs

		mm_got := ArticleRepositoryMockGetByURLParams{ctx, url, lang}

		if mm_want_ptrs != nil {

			if mm_want_ptrs.ctx != nil && !minimock.Equal(*mm_want_ptrs.ctx, mm_got.ctx) {
				mmGetByURL.t.Errorf("ArticleRepositoryMock.GetByURL got unexpected parameter ctx, want: %#v, got: %#v%s\n", *mm_want_ptrs.ctx, mm_got.ctx, minimock.Diff(*mm_want_ptrs.ctx, mm_got.ctx))
			}

			if mm_want_ptrs.url != nil && !minimock.Equal(*mm_want_ptrs.url, mm_got.url) {
				mmGetByURL.t.Errorf("ArticleRepositoryMock.GetByURL got unexpected parameter url, want: %#v, got: %#v%s\n", *mm_want_ptrs.url, mm_got.url, minimock.Diff(*mm_want_ptrs.url, mm_got.url))
			}

			if mm_want_ptrs.lang != nil && !minimock.Equal(*mm_want_ptrs.lang, mm_got.lang) {
				mmGetByURL.t.Errorf("ArticleRepositoryMock.GetByURL got unexpected parameter lang, want: %#v, got: %#v%s\n", *mm_want_ptrs.lang, mm_got.lang, minimock.Diff(*mm_want_ptrs.lang, mm_got.lang))
			}

		} else if mm_want != nil && !minimock.Equal(*mm_want, mm_got) {
			mmGetByURL.t.Errorf("ArticleRepositoryMock.GetByURL got unexpected parameters, want: %#v, got: %#v%s\n", *mm_want, mm_got, minimock.Diff(*mm_want, mm_got))
		}

		mm_results := mmGetByURL.GetByURLMock.defaultExpectation.results
		if mm_results == nil {
			mmGetByURL.t.Fatal("No results are set for the ArticleRepositoryMock.GetByURL")
		}
		return (*mm_results).ap1, (*mm_results).err
	}
	if mmGetByURL.funcGetByURL != nil {
		return mmGetByURL.funcGetByURL(ctx, url, lang)
	}
	mmGetByURL.t.Fatalf("Unexpected call to ArticleRepositoryMock.GetByURL. %v %v %v", ctx, url, lang)
	return
}

// GetByURLAfterCounter returns a count of finished ArticleRepositoryMock.GetByURL invocations
func (mmGetByURL *ArticleRepositoryMock) GetByURLAfterCounter() uint64 {
	return mm_atomic.LoadUint64(&mmGetByURL.afterGetByURLCounter)
}

// GetByURLBeforeCounter returns a count of ArticleRepositoryMock.GetByURL invocations
func (mmGetByURL *ArticleRepositoryMock) GetByURLBeforeCounter() uint64 {
	return mm_atomic.LoadUint64(&mmGetByURL.beforeGetByURLCounter)
}

// Calls returns a list of arguments used in each call to ArticleRepositoryMock.GetByURL.
// The list is in the same order as the calls were made (i.e. recent calls have a higher index)
func (mmGetByURL *mArticleRepositoryMockGetByURL) Calls() []*ArticleRepositoryMockGetByURLParams {
	mmGetByURL.mutex.RLock()

	argCopy := make([]*ArticleRepositoryMockGetByURLParams, len(mmGetByURL.callArgs))
	copy(argCopy, mmGetByURL.callArgs)

	mmGetByURL.mutex.RUnlock()

	return argCopy
}

// MinimockGetByURLDone returns true if the count of the GetByURL invocations corresponds
// the number of defined expectations
func (m *ArticleRepositoryMock) MinimockGetByURLDone() bool {
	if m.GetByURLMock.optional {
		// Optional methods provide '0 or more' call count restriction.
		return true
	}

	for _, e := range m.GetByURLMock.expectations {
		if mm_atomic.LoadUint64(&e.Counter) < 1 {
			return false
		}
	}

	return m.GetByURLMock.invocationsDone()
}

// MinimockGetByURLInspect logs each unmet expectation
func (m *ArticleRepositoryMock) MinimockGetByURLInspect() {
	for _, e := range m.GetByURLMock.expectations {
		if mm_atomic.LoadUint64(&e.Counter) < 1 {
			m.t.Errorf("Expected call to ArticleRepositoryMock.GetByURL with params: %#v", *e.params)
		}
	}

	afterGetByURLCounter := mm_atomic.LoadUint64(&m.afterGetByURLCounter)
	// if default expectation was set then invocations count should be greater than zero
	if m.GetByURLMock.defaultExpectation != nil && afterGetByURLCounter < 1 {
		if m.GetByURLMock.defaultExpectation.params == nil {
			m.t.Error("Expected call to ArticleRepositoryMock.GetByURL")
		} else {
			m.t.Errorf("Expected call to ArticleRepositoryMock.GetByURL with params: %#v", *m.GetByURLMock.defaultExpectation.params)
		}
	}
	// if func was set then invocations count should be greater than zero
	if m.funcGetByURL != nil && afterGetByURLCounter < 1 {
		m.t.Error("Expected call to ArticleRepositoryMock.GetByURL")
	}

	if !m.GetByURLMock.invocationsDone() && afterGetByURLCounter > 0 {
		m.t.Errorf("Expected %d calls to ArticleRepositoryMock.GetByURL but found %d calls",
			mm_atomic.LoadUint64(&m.GetByURLMock.expectedInvocations), afterGetByURLCounter)
	}
}

type mArticleRepositoryMockGetPreviewByTagID struct {
	optional           bool
	mock               *ArticleRepositoryMock
	defaultExpectation *ArticleRepositoryMockGetPreviewByTagIDExpectation
	expectations       []*ArticleRepositoryMockGetPreviewByTagIDExpectation

	callArgs []*ArticleRepositoryMockGetPreviewByTagIDParams
	mutex    sync.RWMutex

	expectedInvocations uint64
}

// ArticleRepositoryMockGetPreviewByTagIDExpectation specifies expectation struct of the ArticleRepository.GetPreviewByTagID
type ArticleRepositoryMockGetPreviewByTagIDExpectation struct {
	mock      *ArticleRepositoryMock
	params    *ArticleRepositoryMockGetPreviewByTagIDParams
	paramPtrs *ArticleRepositoryMockGetPreviewByTagIDParamPtrs
	results   *ArticleRepositoryMockGetPreviewByTagIDResults
	Counter   uint64
}

// ArticleRepositoryMockGetPreviewByTagIDParams contains parameters of the ArticleRepository.GetPreviewByTagID
type ArticleRepositoryMockGetPreviewByTagIDParams struct {
	ctx   context.Context
	tagID uint64
	lang  model.LanguageID
}

// ArticleRepositoryMockGetPreviewByTagIDParamPtrs contains pointers to parameters of the ArticleRepository.GetPreviewByTagID
type ArticleRepositoryMockGetPreviewByTagIDParamPtrs struct {
	ctx   *context.Context
	tagID *uint64
	lang  *model.LanguageID
}

// ArticleRepositoryMockGetPreviewByTagIDResults contains results of the ArticleRepository.GetPreviewByTagID
type ArticleRepositoryMockGetPreviewByTagIDResults struct {
	aa1 []model.ArticlePreview
	err error
}

// Marks this method to be optional. The default behavior of any method with Return() is '1 or more', meaning
// the test will fail minimock's automatic final call check if the mocked method was not called at least once.
// Optional() makes method check to work in '0 or more' mode.
// It is NOT RECOMMENDED to use this option unless you really need it, as default behaviour helps to
// catch the problems when the expected method call is totally skipped during test run.
func (mmGetPreviewByTagID *mArticleRepositoryMockGetPreviewByTagID) Optional() *mArticleRepositoryMockGetPreviewByTagID {
	mmGetPreviewByTagID.optional = true
	return mmGetPreviewByTagID
}

// Expect sets up expected params for ArticleRepository.GetPreviewByTagID
func (mmGetPreviewByTagID *mArticleRepositoryMockGetPreviewByTagID) Expect(ctx context.Context, tagID uint64, lang model.LanguageID) *mArticleRepositoryMockGetPreviewByTagID {
	if mmGetPreviewByTagID.mock.funcGetPreviewByTagID != nil {
		mmGetPreviewByTagID.mock.t.Fatalf("ArticleRepositoryMock.GetPreviewByTagID mock is already set by Set")
	}

	if mmGetPreviewByTagID.defaultExpectation == nil {
		mmGetPreviewByTagID.defaultExpectation = &ArticleRepositoryMockGetPreviewByTagIDExpectation{}
	}

	if mmGetPreviewByTagID.defaultExpectation.paramPtrs != nil {
		mmGetPreviewByTagID.mock.t.Fatalf("ArticleRepositoryMock.GetPreviewByTagID mock is already set by ExpectParams functions")
	}

	mmGetPreviewByTagID.defaultExpectation.params = &ArticleRepositoryMockGetPreviewByTagIDParams{ctx, tagID, lang}
	for _, e := range mmGetPreviewByTagID.expectations {
		if minimock.Equal(e.params, mmGetPreviewByTagID.defaultExpectation.params) {
			mmGetPreviewByTagID.mock.t.Fatalf("Expectation set by When has same params: %#v", *mmGetPreviewByTagID.defaultExpectation.params)
		}
	}

	return mmGetPreviewByTagID
}

// ExpectCtxParam1 sets up expected param ctx for ArticleRepository.GetPreviewByTagID
func (mmGetPreviewByTagID *mArticleRepositoryMockGetPreviewByTagID) ExpectCtxParam1(ctx context.Context) *mArticleRepositoryMockGetPreviewByTagID {
	if mmGetPreviewByTagID.mock.funcGetPreviewByTagID != nil {
		mmGetPreviewByTagID.mock.t.Fatalf("ArticleRepositoryMock.GetPreviewByTagID mock is already set by Set")
	}

	if mmGetPreviewByTagID.defaultExpectation == nil {
		mmGetPreviewByTagID.defaultExpectation = &ArticleRepositoryMockGetPreviewByTagIDExpectation{}
	}

	if mmGetPreviewByTagID.defaultExpectation.params != nil {
		mmGetPreviewByTagID.mock.t.Fatalf("ArticleRepositoryMock.GetPreviewByTagID mock is already set by Expect")
	}

	if mmGetPreviewByTagID.defaultExpectation.paramPtrs == nil {
		mmGetPreviewByTagID.defaultExpectation.paramPtrs = &ArticleRepositoryMockGetPreviewByTagIDParamPtrs{}
	}
	mmGetPreviewByTagID.defaultExpectation.paramPtrs.ctx = &ctx

	return mmGetPreviewByTagID
}

// ExpectTagIDParam2 sets up expected param tagID for ArticleRepository.GetPreviewByTagID
func (mmGetPreviewByTagID *mArticleRepositoryMockGetPreviewByTagID) ExpectTagIDParam2(tagID uint64) *mArticleRepositoryMockGetPreviewByTagID {
	if mmGetPreviewByTagID.mock.funcGetPreviewByTagID != nil {
		mmGetPreviewByTagID.mock.t.Fatalf("ArticleRepositoryMock.GetPreviewByTagID mock is already set by Set")
	}

	if mmGetPreviewByTagID.defaultExpectation == nil {
		mmGetPreviewByTagID.defaultExpectation = &ArticleRepositoryMockGetPreviewByTagIDExpectation{}
	}

	if mmGetPreviewByTagID.defaultExpectation.params != nil {
		mmGetPreviewByTagID.mock.t.Fatalf("ArticleRepositoryMock.GetPreviewByTagID mock is already set by Expect")
	}

	if mmGetPreviewByTagID.defaultExpectation.paramPtrs == nil {
		mmGetPreviewByTagID.defaultExpectation.paramPtrs = &ArticleRepositoryMockGetPreviewByTagIDParamPtrs{}
	}
	mmGetPreviewByTagID.defaultExpectation.paramPtrs.tagID = &tagID

	return mmGetPreviewByTagID
}

// ExpectLangParam3 sets up expected param lang for ArticleRepository.GetPreviewByTagID
func (mmGetPreviewByTagID *mArticleRepositoryMockGetPreviewByTagID) ExpectLangParam3(lang model.LanguageID) *mArticleRepositoryMockGetPreviewByTagID {
	if mmGetPreviewByTagID.mock.funcGetPreviewByTagID != nil {
		mmGetPreviewByTagID.mock.t.Fatalf("ArticleRepositoryMock.GetPreviewByTagID mock is already set by Set")
	}

	if mmGetPreviewByTagID.defaultExpectation == nil {
		mmGetPreviewByTagID.defaultExpectation = &ArticleRepositoryMockGetPreviewByTagIDExpectation{}
	}

	if mmGetPreviewByTagID.defaultExpectation.params != nil {
		mmGetPreviewByTagID.mock.t.Fatalf("ArticleRepositoryMock.GetPreviewByTagID mock is already set by Expect")
	}

	if mmGetPreviewByTagID.defaultExpectation.paramPtrs == nil {
		mmGetPreviewByTagID.defaultExpectation.paramPtrs = &ArticleRepositoryMockGetPreviewByTagIDParamPtrs{}
	}
	mmGetPreviewByTagID.defaultExpectation.paramPtrs.lang = &lang

	return mmGetPreviewByTagID
}

// Inspect accepts an inspector function that has same arguments as the ArticleRepository.GetPreviewByTagID
func (mmGetPreviewByTagID *mArticleRepositoryMockGetPreviewByTagID) Inspect(f func(ctx context.Context, tagID uint64, lang model.LanguageID)) *mArticleRepositoryMockGetPreviewByTagID {
	if mmGetPreviewByTagID.mock.inspectFuncGetPreviewByTagID != nil {
		mmGetPreviewByTagID.mock.t.Fatalf("Inspect function is already set for ArticleRepositoryMock.GetPreviewByTagID")
	}

	mmGetPreviewByTagID.mock.inspectFuncGetPreviewByTagID = f

	return mmGetPreviewByTagID
}

// Return sets up results that will be returned by ArticleRepository.GetPreviewByTagID
func (mmGetPreviewByTagID *mArticleRepositoryMockGetPreviewByTagID) Return(aa1 []model.ArticlePreview, err error) *ArticleRepositoryMock {
	if mmGetPreviewByTagID.mock.funcGetPreviewByTagID != nil {
		mmGetPreviewByTagID.mock.t.Fatalf("ArticleRepositoryMock.GetPreviewByTagID mock is already set by Set")
	}

	if mmGetPreviewByTagID.defaultExpectation == nil {
		mmGetPreviewByTagID.defaultExpectation = &ArticleRepositoryMockGetPreviewByTagIDExpectation{mock: mmGetPreviewByTagID.mock}
	}
	mmGetPreviewByTagID.defaultExpectation.results = &ArticleRepositoryMockGetPreviewByTagIDResults{aa1, err}
	return mmGetPreviewByTagID.mock
}

// Set uses given function f to mock the ArticleRepository.GetPreviewByTagID method
func (mmGetPreviewByTagID *mArticleRepositoryMockGetPreviewByTagID) Set(f func(ctx context.Context, tagID uint64, lang model.LanguageID) (aa1 []model.ArticlePreview, err error)) *ArticleRepositoryMock {
	if mmGetPreviewByTagID.defaultExpectation != nil {
		mmGetPreviewByTagID.mock.t.Fatalf("Default expectation is already set for the ArticleRepository.GetPreviewByTagID method")
	}

	if len(mmGetPreviewByTagID.expectations) > 0 {
		mmGetPreviewByTagID.mock.t.Fatalf("Some expectations are already set for the ArticleRepository.GetPreviewByTagID method")
	}

	mmGetPreviewByTagID.mock.funcGetPreviewByTagID = f
	return mmGetPreviewByTagID.mock
}

// When sets expectation for the ArticleRepository.GetPreviewByTagID which will trigger the result defined by the following
// Then helper
func (mmGetPreviewByTagID *mArticleRepositoryMockGetPreviewByTagID) When(ctx context.Context, tagID uint64, lang model.LanguageID) *ArticleRepositoryMockGetPreviewByTagIDExpectation {
	if mmGetPreviewByTagID.mock.funcGetPreviewByTagID != nil {
		mmGetPreviewByTagID.mock.t.Fatalf("ArticleRepositoryMock.GetPreviewByTagID mock is already set by Set")
	}

	expectation := &ArticleRepositoryMockGetPreviewByTagIDExpectation{
		mock:   mmGetPreviewByTagID.mock,
		params: &ArticleRepositoryMockGetPreviewByTagIDParams{ctx, tagID, lang},
	}
	mmGetPreviewByTagID.expectations = append(mmGetPreviewByTagID.expectations, expectation)
	return expectation
}

// Then sets up ArticleRepository.GetPreviewByTagID return parameters for the expectation previously defined by the When method
func (e *ArticleRepositoryMockGetPreviewByTagIDExpectation) Then(aa1 []model.ArticlePreview, err error) *ArticleRepositoryMock {
	e.results = &ArticleRepositoryMockGetPreviewByTagIDResults{aa1, err}
	return e.mock
}

// Times sets number of times ArticleRepository.GetPreviewByTagID should be invoked
func (mmGetPreviewByTagID *mArticleRepositoryMockGetPreviewByTagID) Times(n uint64) *mArticleRepositoryMockGetPreviewByTagID {
	if n == 0 {
		mmGetPreviewByTagID.mock.t.Fatalf("Times of ArticleRepositoryMock.GetPreviewByTagID mock can not be zero")
	}
	mm_atomic.StoreUint64(&mmGetPreviewByTagID.expectedInvocations, n)
	return mmGetPreviewByTagID
}

func (mmGetPreviewByTagID *mArticleRepositoryMockGetPreviewByTagID) invocationsDone() bool {
	if len(mmGetPreviewByTagID.expectations) == 0 && mmGetPreviewByTagID.defaultExpectation == nil && mmGetPreviewByTagID.mock.funcGetPreviewByTagID == nil {
		return true
	}

	totalInvocations := mm_atomic.LoadUint64(&mmGetPreviewByTagID.mock.afterGetPreviewByTagIDCounter)
	expectedInvocations := mm_atomic.LoadUint64(&mmGetPreviewByTagID.expectedInvocations)

	return totalInvocations > 0 && (expectedInvocations == 0 || expectedInvocations == totalInvocations)
}

// GetPreviewByTagID implements handler.ArticleRepository
func (mmGetPreviewByTagID *ArticleRepositoryMock) GetPreviewByTagID(ctx context.Context, tagID uint64, lang model.LanguageID) (aa1 []model.ArticlePreview, err error) {
	mm_atomic.AddUint64(&mmGetPreviewByTagID.beforeGetPreviewByTagIDCounter, 1)
	defer mm_atomic.AddUint64(&mmGetPreviewByTagID.afterGetPreviewByTagIDCounter, 1)

	if mmGetPreviewByTagID.inspectFuncGetPreviewByTagID != nil {
		mmGetPreviewByTagID.inspectFuncGetPreviewByTagID(ctx, tagID, lang)
	}

	mm_params := ArticleRepositoryMockGetPreviewByTagIDParams{ctx, tagID, lang}

	// Record call args
	mmGetPreviewByTagID.GetPreviewByTagIDMock.mutex.Lock()
	mmGetPreviewByTagID.GetPreviewByTagIDMock.callArgs = append(mmGetPreviewByTagID.GetPreviewByTagIDMock.callArgs, &mm_params)
	mmGetPreviewByTagID.GetPreviewByTagIDMock.mutex.Unlock()

	for _, e := range mmGetPreviewByTagID.GetPreviewByTagIDMock.expectations {
		if minimock.Equal(*e.params, mm_params) {
			mm_atomic.AddUint64(&e.Counter, 1)
			return e.results.aa1, e.results.err
		}
	}

	if mmGetPreviewByTagID.GetPreviewByTagIDMock.defaultExpectation != nil {
		mm_atomic.AddUint64(&mmGetPreviewByTagID.GetPreviewByTagIDMock.defaultExpectation.Counter, 1)
		mm_want := mmGetPreviewByTagID.GetPreviewByTagIDMock.defaultExpectation.params
		mm_want_ptrs := mmGetPreviewByTagID.GetPreviewByTagIDMock.defaultExpectation.paramPtrs

		mm_got := ArticleRepositoryMockGetPreviewByTagIDParams{ctx, tagID, lang}

		if mm_want_ptrs != nil {

			if mm_want_ptrs.ctx != nil && !minimock.Equal(*mm_want_ptrs.ctx, mm_got.ctx) {
				mmGetPreviewByTagID.t.Errorf("ArticleRepositoryMock.GetPreviewByTagID got unexpected parameter ctx, want: %#v, got: %#v%s\n", *mm_want_ptrs.ctx, mm_got.ctx, minimock.Diff(*mm_want_ptrs.ctx, mm_got.ctx))
			}

			if mm_want_ptrs.tagID != nil && !minimock.Equal(*mm_want_ptrs.tagID, mm_got.tagID) {
				mmGetPreviewByTagID.t.Errorf("ArticleRepositoryMock.GetPreviewByTagID got unexpected parameter tagID, want: %#v, got: %#v%s\n", *mm_want_ptrs.tagID, mm_got.tagID, minimock.Diff(*mm_want_ptrs.tagID, mm_got.tagID))
			}

			if mm_want_ptrs.lang != nil && !minimock.Equal(*mm_want_ptrs.lang, mm_got.lang) {
				mmGetPreviewByTagID.t.Errorf("ArticleRepositoryMock.GetPreviewByTagID got unexpected parameter lang, want: %#v, got: %#v%s\n", *mm_want_ptrs.lang, mm_got.lang, minimock.Diff(*mm_want_ptrs.lang, mm_got.lang))
			}

		} else if mm_want != nil && !minimock.Equal(*mm_want, mm_got) {
			mmGetPreviewByTagID.t.Errorf("ArticleRepositoryMock.GetPreviewByTagID got unexpected parameters, want: %#v, got: %#v%s\n", *mm_want, mm_got, minimock.Diff(*mm_want, mm_got))
		}

		mm_results := mmGetPreviewByTagID.GetPreviewByTagIDMock.defaultExpectation.results
		if mm_results == nil {
			mmGetPreviewByTagID.t.Fatal("No results are set for the ArticleRepositoryMock.GetPreviewByTagID")
		}
		return (*mm_results).aa1, (*mm_results).err
	}
	if mmGetPreviewByTagID.funcGetPreviewByTagID != nil {
		return mmGetPreviewByTagID.funcGetPreviewByTagID(ctx, tagID, lang)
	}
	mmGetPreviewByTagID.t.Fatalf("Unexpected call to ArticleRepositoryMock.GetPreviewByTagID. %v %v %v", ctx, tagID, lang)
	return
}

// GetPreviewByTagIDAfterCounter returns a count of finished ArticleRepositoryMock.GetPreviewByTagID invocations
func (mmGetPreviewByTagID *ArticleRepositoryMock) GetPreviewByTagIDAfterCounter() uint64 {
	return mm_atomic.LoadUint64(&mmGetPreviewByTagID.afterGetPreviewByTagIDCounter)
}

// GetPreviewByTagIDBeforeCounter returns a count of ArticleRepositoryMock.GetPreviewByTagID invocations
func (mmGetPreviewByTagID *ArticleRepositoryMock) GetPreviewByTagIDBeforeCounter() uint64 {
	return mm_atomic.LoadUint64(&mmGetPreviewByTagID.beforeGetPreviewByTagIDCounter)
}

// Calls returns a list of arguments used in each call to ArticleRepositoryMock.GetPreviewByTagID.
// The list is in the same order as the calls were made (i.e. recent calls have a higher index)
func (mmGetPreviewByTagID *mArticleRepositoryMockGetPreviewByTagID) Calls() []*ArticleRepositoryMockGetPreviewByTagIDParams {
	mmGetPreviewByTagID.mutex.RLock()

	argCopy := make([]*ArticleRepositoryMockGetPreviewByTagIDParams, len(mmGetPreviewByTagID.callArgs))
	copy(argCopy, mmGetPreviewByTagID.callArgs)

	mmGetPreviewByTagID.mutex.RUnlock()

	return argCopy
}

// MinimockGetPreviewByTagIDDone returns true if the count of the GetPreviewByTagID invocations corresponds
// the number of defined expectations
func (m *ArticleRepositoryMock) MinimockGetPreviewByTagIDDone() bool {
	if m.GetPreviewByTagIDMock.optional {
		// Optional methods provide '0 or more' call count restriction.
		return true
	}

	for _, e := range m.GetPreviewByTagIDMock.expectations {
		if mm_atomic.LoadUint64(&e.Counter) < 1 {
			return false
		}
	}

	return m.GetPreviewByTagIDMock.invocationsDone()
}

// MinimockGetPreviewByTagIDInspect logs each unmet expectation
func (m *ArticleRepositoryMock) MinimockGetPreviewByTagIDInspect() {
	for _, e := range m.GetPreviewByTagIDMock.expectations {
		if mm_atomic.LoadUint64(&e.Counter) < 1 {
			m.t.Errorf("Expected call to ArticleRepositoryMock.GetPreviewByTagID with params: %#v", *e.params)
		}
	}

	afterGetPreviewByTagIDCounter := mm_atomic.LoadUint64(&m.afterGetPreviewByTagIDCounter)
	// if default expectation was set then invocations count should be greater than zero
	if m.GetPreviewByTagIDMock.defaultExpectation != nil && afterGetPreviewByTagIDCounter < 1 {
		if m.GetPreviewByTagIDMock.defaultExpectation.params == nil {
			m.t.Error("Expected call to ArticleRepositoryMock.GetPreviewByTagID")
		} else {
			m.t.Errorf("Expected call to ArticleRepositoryMock.GetPreviewByTagID with params: %#v", *m.GetPreviewByTagIDMock.defaultExpectation.params)
		}
	}
	// if func was set then invocations count should be greater than zero
	if m.funcGetPreviewByTagID != nil && afterGetPreviewByTagIDCounter < 1 {
		m.t.Error("Expected call to ArticleRepositoryMock.GetPreviewByTagID")
	}

	if !m.GetPreviewByTagIDMock.invocationsDone() && afterGetPreviewByTagIDCounter > 0 {
		m.t.Errorf("Expected %d calls to ArticleRepositoryMock.GetPreviewByTagID but found %d calls",
			mm_atomic.LoadUint64(&m.GetPreviewByTagIDMock.expectedInvocations), afterGetPreviewByTagIDCounter)
	}
}

// MinimockFinish checks that all mocked methods have been called the expected number of times
func (m *ArticleRepositoryMock) MinimockFinish() {
	m.finishOnce.Do(func() {
		if !m.minimockDone() {
			m.MinimockGetAllPreviewInspect()

			m.MinimockGetByURLInspect()

			m.MinimockGetPreviewByTagIDInspect()
		}
	})
}

// MinimockWait waits for all mocked methods to be called the expected number of times
func (m *ArticleRepositoryMock) MinimockWait(timeout mm_time.Duration) {
	timeoutCh := mm_time.After(timeout)
	for {
		if m.minimockDone() {
			return
		}
		select {
		case <-timeoutCh:
			m.MinimockFinish()
			return
		case <-mm_time.After(10 * mm_time.Millisecond):
		}
	}
}

func (m *ArticleRepositoryMock) minimockDone() bool {
	done := true
	return done &&
		m.MinimockGetAllPreviewDone() &&
		m.MinimockGetByURLDone() &&
		m.MinimockGetPreviewByTagIDDone()
}
