package test

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

	"github.com/stretchr/testify/assert"

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

func TestDailyRun(t *testing.T) {
	helperInit()
	service.DailyRun()
}

func TestQueryUserLarkDataByEmail(t *testing.T) {
	helperInit()
	user := model.User{Email: "lili@pingcap.com"}
	err := service.QueryUserLarkDataByEmail(&user)
	if err != nil {
		t.Error(err)
	}
	t.Log(user)
}

func TestGetUserInfo(t *testing.T) {
	helperInit()

	err := model.Save(getDB(), model.User{Email: "chenjianlin@pingcap.com", JiraUserDisplayName: "Chen Jianlin"})
	if err != nil {
		t.Fatal(err)
	}

	user, err := service.GetUserInfo(model.User{Email: "chenjianlin@pingcap.com"})
	if err != nil {
		t.Fatal(err)
	}

	user1, err := service.GetUserInfo(model.User{JiraUserDisplayName: "Chen Jianlin"})
	if err != nil {
		t.Fatal(err)
	}
	assert.Equal(t, user, user1, "GetUserInfo failed")
}

func TestSaveUser(t *testing.T) {
	helperInit()
	rand.Seed(time.Now().UnixNano())
	name := fmt.Sprintf("employee-%d", rand.Int()%1000)
	email := fmt.Sprintf("%v@pingcap.com", name)
	user := model.User{
		Email:               email,
		JiraUserDisplayName: name,
	}
	err := model.Save(getDB(), &user)
	if err != nil {
		t.Error(err)
	}

	acquired, err := model.FindUser(getDB(), "email=?", email)
	if err != nil {
		t.Error(err)
	}

	assert.Equal(t, user, *acquired, "User test fail: user not equal")
}
