package test

import (
	"fmt"
	"math/rand"
	"testing"
	"time"

	"github.com/stretchr/testify/assert"

	"github.com/pingcap/jira-bot/model"
)

func TestAllIssue(t *testing.T) {
	helperInit()
	issues, err := model.AllIssue(getDB())
	if err != nil {
		t.Error(err)
	}
	t.Log(len(issues))
}

func TestSaveIssue(t *testing.T) {
	helperInit()
	rand.Seed(time.Now().UnixNano())
	name := fmt.Sprintf("test%d", rand.Int()%1000)
	err := model.Save(getDB(),
		&model.Issue{ID: name, Reporter: name,
			Assignee: name, CreateTime: time.Now(), UpdateTime: time.Now()})
	if err != nil {
		t.Error(err)
	}

	inserted := &model.Issue{ID: name}
	issues, err := model.FindIssue(getDB(), inserted)
	if err != nil {
		t.Error(err)
	}

	assert.Equal(t, 1, len(issues), "insert new issue failed length = 1")
	assert.Equal(t, name, issues[0].ID, "insert new issue failed")

	issues[0].UpdateTime = time.Now()
	err = model.Save(getDB(), &issues[0])
	if err != nil {
		t.Log(err)
	}
}

func TestFindIssue(t *testing.T) {
	t.Parallel()
	helperInit()

	err := model.Save(getDB(),
		&model.Issue{ID: "1", Reporter: "cjl",
			Assignee: "cjl1", CreateTime: time.Now(), UpdateTime: time.Now()})
	if err != nil {
		t.Log(err)
	}

	err = model.Save(getDB(),
		&model.Issue{ID: "2", Reporter: "cjl",
			Assignee: "cjl2", CreateTime: time.Now(), UpdateTime: time.Now()})
	if err != nil {
		t.Log(err)
	}

	issues, err := model.FindIssue(getDB(), "1")
	if err != nil {
		t.Error(err)
	}
	assert.Equal(t, 1, len(issues), "FindIssue by specific id failed")

	issues, err = model.FindIssue(getDB(), []string{"1", "2"})
	if err != nil {
		t.Error(err)
	}
	assert.Equal(t, 2, len(issues), "FindIssue by ids failed")

	issues, err = model.FindIssue(getDB(), "reporter = ?", "cjl")
	if err != nil {
		t.Error(err)
	}
	fmt.Println(issues)
}
