package project

import (
	"context"
	"log"
	"os"
	"testing"

	"github.com/golang/mock/gomock"
	"github.com/smartystreets/goconvey/convey"
	"github.com/tidbcloud/account/internel/dao"
	"github.com/tidbcloud/account/pkg/docker_db"
	"gorm.io/gorm"
)

var db *gorm.DB

func init() {
	var err error
	db, err = docker_db.TryInitCentralDB(true)
	if err != nil {
		log.Printf("Failed to init docker db: %s", err)
		os.Exit(-1)
		return
	}
}

func TestProjectSvc_GetProjectByID(t *testing.T) {
	ctrl := gomock.NewController(t)
	defer ctrl.Finish()
	mockedDaoHub := dao.NewDaoMockHub(ctrl).NewHub()
	ctx := context.TODO()
	svc := NewProjectSvc(db, mockedDaoHub)

	convey.Convey("GetProjectByID", t, func() {
		var projectID uint64 = 1
		mockedDaoHub.Mock.Project.EXPECT().GetProjectByID(ctx, gomock.Any(), projectID)
		_, err := svc.GetProjectByID(ctx, projectID)
		convey.So(err, convey.ShouldBeNil)
	})
}

func TestProjectSvc_ListProjects(t *testing.T) {
	ctrl := gomock.NewController(t)
	defer ctrl.Finish()
	mockedDaoHub := dao.NewDaoMockHub(ctrl).NewHub()
	ctx := context.TODO()
	svc := NewProjectSvc(db, mockedDaoHub)

	convey.Convey("ListProjects", t, func() {
		mockedDaoHub.Mock.Project.EXPECT().ListProjects(ctx, gomock.Any(), nil, nil, nil)
		_, err := svc.ListProjects(ctx, nil, nil, nil)
		convey.So(err, convey.ShouldBeNil)
	})
}
