package queue

import (
	"testing"

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

type item struct {
	id    string
	count int
}

func (i *item) ID() string {
	return i.id
}

func (i *item) Stop() {}

func (i *item) Do() bool {
	i.count = i.count - 1
	return i.count == 0
}

func TestAdd(t *testing.T) {
	q := NewQueue()

	q.Add(&item{"id1", 1})
	assert.Equal(t, len(q.items), 0)

	q.Add(&item{"id2", 2})
	assert.Equal(t, len(q.items), 1)

}

func TestRemove(t *testing.T) {
	q := NewQueue()

	i := &item{"id1", 2}
	q.Add(i)
	assert.Equal(t, len(q.items), 1)
	q.Remove(i)
	assert.Equal(t, len(q.items), 0)

}

func TestProcess(t *testing.T) {
	q := NewQueue()

	q.Add(&item{"id1", 2})
	assert.Equal(t, len(q.items), 1)
	q.Process()
	assert.Equal(t, len(q.items), 0)

	q.Add(&item{"id2", 3})
	assert.Equal(t, len(q.items), 1)
	q.Process()
	assert.Equal(t, len(q.items), 1)
	q.Process()
	assert.Equal(t, len(q.items), 0)

}