package org

//import (
//	"context"
//	"log"
//	"os"
//	"testing"
//	"time"
//
//	"github.com/golang/mock/gomock"
//	"github.com/smartystreets/goconvey/convey"
//	"github.com/tidbcloud/tiinf/errs"
//	"gorm.io/gorm"
//
//	"github.com/tidbcloud/account/internel/dao/entity"
//	"github.com/tidbcloud/account/internel/dao"
//	"github.com/tidbcloud/account/pkg/docker_db"
//	"github.com/tidbcloud/account/thirdparty/dataflow"
//	"github.com/tidbcloud/account/thirdparty/infra"
//)
//
//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 TestOrgSvc_GetOrgByID(t *testing.T) {
//	ctrl := gomock.NewController(t)
//	defer ctrl.Finish()
//	mockedHub := dao.NewDaoMockHub(ctrl).NewHub()
//	svc := NewOrgSvc(db, mockedHub)
//	ctx := context.TODO()
//
//	convey.Convey("GetOrgByID", t, func() {
//		var orgID uint64 = 1
//		mockedHub.Mock.Org.EXPECT().GetOrgByOrgID(ctx, gomock.Any(), orgID)
//		_, err := svc.GetOrgByID(ctx, orgID)
//		convey.So(err, convey.ShouldBeNil)
//	})
//}
//
//func TestOrgSvc_ListOrgs(t *testing.T) {
//	ctrl := gomock.NewController(t)
//	defer ctrl.Finish()
//	mockedHub := dao.NewDaoMockHub(ctrl).NewHub()
//	svc := NewOrgSvc(db, mockedHub)
//	ctx := context.TODO()
//
//	convey.Convey("ListOrgs", t, func() {
//		mockedHub.Mock.Org.EXPECT().ListOrgs(ctx, gomock.Any(), nil, nil)
//		_, err := svc.ListOrgs(ctx, nil, nil)
//		convey.So(err, convey.ShouldBeNil)
//	})
//}
//
//func TestOrgSvc_ListTrials(t *testing.T) {
//	ctrl := gomock.NewController(t)
//	defer ctrl.Finish()
//	mockedHub := dao.NewDaoMockHub(ctrl).NewHub()
//	svc := NewOrgSvc(db, mockedHub)
//	ctx := context.TODO()
//
//	convey.Convey("ListTrials", t, func() {
//		var orgID uint64 = 1
//		mockedHub.Mock.Org.EXPECT().ListTrials(ctx, gomock.Any(), orgID, "poc")
//		_, err := svc.ListTrials(ctx, orgID, "poc")
//		convey.So(err, convey.ShouldBeNil)
//	})
//}
//
//func TestOrgSvc_CreateTrial(t *testing.T) {
//	ctrl := gomock.NewController(t)
//	defer ctrl.Finish()
//	mockedHub := dao.NewDaoMockHub(ctrl).NewHub()
//	svc := NewOrgSvc(db, mockedHub)
//	ctx := context.TODO()
//
//	convey.Convey("CreateTrial", t, func() {
//		var (
//			creatorUserID uint64 = 1
//			orgID         uint64 = 1
//			now                  = time.Now()
//		)
//		mockedHub.Mock.Org.EXPECT().CreateTrial(ctx, gomock.Any(), creatorUserID, orgID, now, &now, nil, "poc")
//		_, err := svc.CreateTrial(ctx, creatorUserID, orgID, now, &now, nil, "poc")
//		convey.So(err, convey.ShouldBeNil)
//	})
//}
//
//func TestOrgSvc_DeleteOrgByID(t *testing.T) {
//	ctrl := gomock.NewController(t)
//	defer ctrl.Finish()
//
//	mockedHub := dao.NewDaoMockHub(ctrl).NewHub()
//	svc := NewOrgSvc(db, mockedHub)
//	ctx := context.TODO()
//	mockedInfra := infra.NewMockInfraHandler(ctrl)
//	infra.SetHandler(mockedInfra)
//	mockedDP := dataflow.NewMockDataflowHandler(ctrl)
//	dataflow.SetHandler(mockedDP)
//	var orgID uint64 = 1
//
//	convey.Convey("DeleteOrgByID", t, func() {
//		convey.Convey("delete all projects", func() {
//			convey.Convey("list active projects failed", func() {
//				mockedHub.Mock.Project.EXPECT().ListActiveProjectsByOrgID(ctx, gomock.Any(), orgID).Return(nil, gorm.ErrRecordNotFound)
//
//				err := svc.DeleteOrgByID(ctx, orgID)
//				convey.So(err, convey.ShouldNotBeNil)
//				convey.So(errs.IsError(err, errs.ErrInternalDB), convey.ShouldBeTrue)
//			})
//
//			project1 := entity.Project{
//				TenantID:       1,
//				Name:           "test",
//				Status:         "active",
//				DeletedTime:    nil,
//				IsCrossAccount: false,
//			}
//			var projects = []entity.Project{project1}
//
//			convey.Convey("mark project as deleted failed", func() {
//				mockedHub.Mock.Project.EXPECT().ListActiveProjectsByOrgID(ctx, gomock.Any(), orgID).Return(projects, nil)
//				mockedHub.Mock.Project.EXPECT().MarkProjectAsDeletedByID(ctx, gomock.Any(), project1.ID.Uint64()).Return(gorm.ErrRecordNotFound)
//
//				err := svc.DeleteOrgByID(ctx, orgID)
//				convey.So(err, convey.ShouldNotBeNil)
//				convey.So(errs.IsError(err, errs.ErrInternalDB), convey.ShouldBeTrue)
//			})
//
//			convey.Convey("mark org as deleted failed", func() {
//				mockedHub.Mock.Project.EXPECT().ListActiveProjectsByOrgID(ctx, gomock.Any(), orgID).Return(projects, nil)
//				mockedHub.Mock.Project.EXPECT().MarkProjectAsDeletedByID(ctx, gomock.Any(), project1.ID.Uint64()).Return(nil)
//				mockedHub.Mock.Org.EXPECT().MarkOrgAsDeleted(ctx, gomock.Any(), orgID).Return(gorm.ErrRecordNotFound)
//
//				err := svc.DeleteOrgByID(ctx, orgID)
//				convey.So(err, convey.ShouldNotBeNil)
//				convey.So(errs.IsError(err, errs.ErrInternalDB), convey.ShouldBeTrue)
//			})
//
//			convey.Convey("call infra failed", func() {
//				mockedHub.Mock.Project.EXPECT().ListActiveProjectsByOrgID(ctx, gomock.Any(), orgID).Return(projects, nil)
//				mockedHub.Mock.Project.EXPECT().MarkProjectAsDeletedByID(ctx, gomock.Any(), project1.ID.Uint64()).Return(nil)
//				mockedHub.Mock.Org.EXPECT().MarkOrgAsDeleted(ctx, gomock.Any(), orgID).Return(nil)
//				mockedHub.Mock.Org.EXPECT().DeleteOrgImpersonates(ctx, gomock.Any(), orgID).Return(nil)
//
//				convey.Convey("clean devtier clusters failed", func() {
//					mockedInfra.EXPECT().CleanFreeClusters(ctx, orgID, true).Return(gorm.ErrRecordNotFound)
//
//					err := svc.DeleteOrgByID(ctx, orgID)
//					convey.So(err, convey.ShouldNotBeNil)
//					convey.So(errs.IsError(err, errs.ErrInternalGRPC), convey.ShouldBeTrue)
//				})
//
//				convey.Convey("clean clusters failed", func() {
//					mockedInfra.EXPECT().CleanFreeClusters(ctx, orgID, true).Return(nil)
//					mockedInfra.EXPECT().CleanClusters(ctx, orgID, true).Return(gorm.ErrRecordNotFound)
//
//					err := svc.DeleteOrgByID(ctx, orgID)
//					convey.So(err, convey.ShouldNotBeNil)
//					convey.So(errs.IsError(err, errs.ErrInternalGRPC), convey.ShouldBeTrue)
//				})
//
//				convey.Convey("delete org success", func() {
//					mockedInfra.EXPECT().CleanFreeClusters(ctx, orgID, true).Return(nil)
//					mockedInfra.EXPECT().CleanClusters(ctx, orgID, true).Return(nil)
//					mockedDP.EXPECT().DeleteAllBackups(ctx, orgID).Return(nil)
//
//					err := svc.DeleteOrgByID(ctx, orgID)
//					convey.So(err, convey.ShouldBeNil)
//				})
//			})
//		})
//	})
//}
