package dao import ( "context" "encoding/json" "testing" "go-common/app/tool/saga/model" "go-common/library/cache/redis" "github.com/smartystreets/goconvey/convey" ) func TestDaoMergeTaskKey(t *testing.T) { convey.Convey("mergeTaskKey", t, func(ctx convey.C) { var ( taskType = int(111) ) ctx.Convey("When everything goes positive", func(ctx convey.C) { p1 := mergeTaskKey(taskType) ctx.Convey("Then p1 should not be nil.", func(ctx convey.C) { ctx.So(p1, convey.ShouldEqual, "saga_task_111") }) }) }) } func TestDaoMrIIDKey(t *testing.T) { convey.Convey("mrIIDKey", t, func(ctx convey.C) { var ( mrIID = int(222) ) ctx.Convey("When everything goes positive", func(ctx convey.C) { p1 := mrIIDKey(mrIID) ctx.Convey("Then p1 should not be nil.", func(ctx convey.C) { ctx.So(p1, convey.ShouldEqual, "saga_mrIID_222") }) }) }) } func TestDaoPingRedis(t *testing.T) { convey.Convey("pingRedis", t, func(ctx convey.C) { var ( c = context.Background() ) ctx.Convey("When everything goes positive", func(ctx convey.C) { err := d.pingRedis(c) ctx.Convey("Then err should be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) }) }) }) } func TestDaoAddMRIID(t *testing.T) { convey.Convey("AddMRIID", t, func(ctx convey.C) { var ( c = context.Background() mrIID = int(333) expire = int(1800) conn = d.redis.Get(c) ) ctx.Convey("When everything goes positive", func(ctx convey.C) { err := d.AddMRIID(c, mrIID, expire) mrID, err := redis.Int(conn.Do("GET", "saga_mrIID_333")) ctx.Convey("Then err should be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) // 检查redis存储结果 ctx.So(mrID, convey.ShouldEqual, mrIID) }) }) }) } func TestDaoExistMRIID(t *testing.T) { convey.Convey("ExistMRIID", t, func(ctx convey.C) { var ( c = context.Background() mrIID = int(444) conn = d.redis.Get(c) ) ctx.Convey("When everything goes positive", func(ctx convey.C) { conn.Do("DEL", "saga_mrIID_444") ok, err := d.ExistMRIID(c, mrIID) ctx.Convey("Then err should be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(ok, convey.ShouldBeFalse) }) }) ctx.Convey("When MRIID exist", func(ctx convey.C) { conn.Do("SET", "saga_mrIID_444", 1) ok, err := d.ExistMRIID(c, mrIID) ctx.Convey("Then ok should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(ok, convey.ShouldBeTrue) }) }) }) } func TestDaoDeleteMRIID(t *testing.T) { convey.Convey("DeleteMRIID", t, func(ctx convey.C) { var ( c = context.Background() mrIID = int(555) conn = d.redis.Get(c) ) ctx.Convey("When data not exist", func(ctx convey.C) { err := d.DeleteMRIID(c, mrIID) value, _ := redis.Int(conn.Do("GET", "saga_mrIID_555")) ctx.Convey("Then err should be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(value, convey.ShouldEqual, 0) }) }) ctx.Convey("When data exist", func(ctx convey.C) { redis.String(conn.Do("SET", "saga_mrIID_555", "Test")) err := d.DeleteMRIID(c, mrIID) value, _ := redis.Int(conn.Do("GET", "saga_mrIID_555")) ctx.Convey("Then err should be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(value, convey.ShouldEqual, 0) }) }) }) } func TestDaoPushMergeTask(t *testing.T) { convey.Convey("PushMergeTask", t, func(ctx convey.C) { var ( c = context.Background() taskType = int(666) taskInfo = &model.TaskInfo{NoteID: 111, Event: nil, Repo: nil} conn = d.redis.Get(c) ) bs, _ := json.Marshal(taskInfo) ctx.Convey("When everything goes positive", func(ctx convey.C) { err := d.PushMergeTask(c, taskType, taskInfo) value, _ := redis.Bytes(conn.Do("LPOP", "saga_task_666")) ctx.Convey("Then err should be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) // push 运行函数 pop 检验结果 ctx.So(string(value), convey.ShouldEqual, string(bs)) }) }) }) } func TestDaoDeleteMergeTask(t *testing.T) { convey.Convey("DeleteMergeTask", t, func(ctx convey.C) { var ( c = context.Background() taskType = int(777) taskInfo = &model.TaskInfo{NoteID: 777, Event: nil, Repo: nil} conn = d.redis.Get(c) ) ctx.Convey("When data is not exist", func(ctx convey.C) { err := d.DeleteMergeTask(c, taskType, taskInfo) value, _ := redis.Int(conn.Do("LPOP", "saga_task_777")) ctx.Convey("Then err should be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(value, convey.ShouldEqual, 0) }) }) ctx.Convey("When data is exist", func(ctx convey.C) { taskInfoJSON, _ := json.Marshal(taskInfo) redis.String(conn.Do("LPUSH", "saga_task_777", taskInfoJSON)) err := d.DeleteMergeTask(c, taskType, taskInfo) value, _ := redis.Int(conn.Do("LPOP", "saga_task_777")) ctx.Convey("Then err should be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(value, convey.ShouldEqual, 0) }) }) }) } func TestDaoMergeTasks(t *testing.T) { convey.Convey("MergeTasks", t, func(ctx convey.C) { var ( c = context.Background() taskType = int(888) conn = d.redis.Get(c) taskInfo = &model.TaskInfo{NoteID: 888, Event: nil, Repo: nil} ) ctx.Convey("When everything goes positive", func(ctx convey.C) { taskInfoJSON, _ := json.Marshal(taskInfo) conn.Do("LPUSH", "saga_task_888", taskInfoJSON) count, taskInfos, err := d.MergeTasks(c, taskType) taskInfoFirst, _ := json.Marshal(taskInfos[0]) ctx.Convey("Then err should be nil.count,taskInfos should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(string(taskInfoFirst), convey.ShouldEqual, string(taskInfoJSON)) ctx.So(count, convey.ShouldNotEqual, 0) }) }) }) } func TestDaoMergeInfoKey(t *testing.T) { convey.Convey("mergeInfoKey", t, func(ctx convey.C) { var ( projID = int(999) branch = "test" ) ctx.Convey("When everything goes positive", func(ctx convey.C) { p1 := mergeInfoKey(projID, branch) ctx.Convey("Then p1 should not be nil.", func(ctx convey.C) { ctx.So(p1, convey.ShouldEqual, "saga_mergeInfo_999_test") }) }) }) } func TestDaoPathOwnerKey(t *testing.T) { convey.Convey("pathOwnerKey", t, func(ctx convey.C) { var ( projID = int(1111) branch = "test" path = "." ) ctx.Convey("When everything goes positive", func(ctx convey.C) { p1 := pathOwnerKey(projID, branch, path) ctx.Convey("Then p1 should not be nil.", func(ctx convey.C) { ctx.So(p1, convey.ShouldEqual, "saga_PathOwner_1111_test_.") }) }) }) } func TestDaoPathReviewerKey(t *testing.T) { convey.Convey("pathReviewerKey", t, func(ctx convey.C) { var ( projID = int(2222) branch = "test" path = "." ) ctx.Convey("When everything goes positive", func(ctx convey.C) { p1 := pathReviewerKey(projID, branch, path) ctx.Convey("Then p1 should not be nil.", func(ctx convey.C) { ctx.So(p1, convey.ShouldEqual, "saga_PathReviewer_2222_test_.") }) }) }) } func TestDaoAuthInfoKey(t *testing.T) { convey.Convey("authInfoKey", t, func(ctx convey.C) { var ( projID = int(3333) mrIID = int(3333) ) ctx.Convey("When everything goes positive", func(ctx convey.C) { p1 := authInfoKey(projID, mrIID) ctx.Convey("Then p1 should not be nil.", func(ctx convey.C) { ctx.So(p1, convey.ShouldEqual, "saga_auth_3333_3333") }) }) }) } func TestDaoSetMergeInfo(t *testing.T) { convey.Convey("SetMergeInfo", t, func(ctx convey.C) { var ( c = context.Background() projID = int(4444) branch = "test" mergeInfo = &model.MergeInfo{} conn = d.redis.Get(c) ) redis.String(conn.Do("")) ctx.Convey("When everything goes positive", func(ctx convey.C) { err := d.SetMergeInfo(c, projID, branch, mergeInfo) ctx.Convey("Then err should be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) }) }) }) } func TestDaoMergeInfo(t *testing.T) { convey.Convey("MergeInfo", t, func(ctx convey.C) { var ( c = context.Background() projID = int(5555) branch = "test" conn = d.redis.Get(c) info = []byte(`{"NoteID":111,"Event":null,"Repo":null}`) ) ctx.Convey("When everything goes positive", func(ctx convey.C) { conn.Do("SET", "saga_mergeInfo_5555_test", info) ok, mergeInfo, err := d.MergeInfo(c, projID, branch) ctx.Convey("Then err should be nil.ok,mergeInfo should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(mergeInfo, convey.ShouldNotBeNil) ctx.So(ok, convey.ShouldBeTrue) }) }) }) } func TestDaoDeleteMergeInfo(t *testing.T) { convey.Convey("DeleteMergeInfo", t, func(ctx convey.C) { var ( c = context.Background() projID = int(6666) branch = "test" conn = d.redis.Get(c) info = []byte(`{"NoteID":111,"Event":null,"Repo":null}`) ) ctx.Convey("When everything goes positive", func(ctx convey.C) { conn.Do("SET", "saga_mergeInfo_6666_test", info) err := d.DeleteMergeInfo(c, projID, branch) value, _ := redis.Int(conn.Do("GET", "saga_mergeInfo_6666_test")) ctx.Convey("Then err should be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(value, convey.ShouldEqual, 0) }) }) }) } func TestDaoPathAuthKey(t *testing.T) { convey.Convey("pathAuthKey", t, func(ctx convey.C) { var ( projID = int(7777) branch = "test" path = "." ) ctx.Convey("When everything goes positive", func(ctx convey.C) { p1 := pathAuthKey(projID, branch, path) ctx.Convey("Then p1 should not be nil.", func(ctx convey.C) { ctx.So(p1, convey.ShouldEqual, "saga_path_auth_7777_test_.") }) }) }) } func TestDaoPathAuthR(t *testing.T) { convey.Convey("PathAuthR", t, func(ctx convey.C) { var ( c = context.Background() projID = int(8888) branch = "test" path = "." conn = d.redis.Get(c) ) redis.Int(conn.Do("SET", "saga_path_auth_8888_test_.", `{"Owners": ["c"]}`)) ctx.Convey("When everything goes positive", func(ctx convey.C) { authUsers, err := d.PathAuthR(c, projID, branch, path) authUsersJSON, _ := json.Marshal(authUsers) ctx.Convey("Then err should be nil.authUsers should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(string(authUsersJSON), convey.ShouldEqual, `{"Owners":["c"],"Reviewers":null}`) ctx.So(authUsers, convey.ShouldNotBeNil) }) }) }) } func TestDaoSetPathAuthR(t *testing.T) { convey.Convey("SetPathAuthR", t, func(ctx convey.C) { var ( c = context.Background() projID = int(9999) branch = "test" path = "." authUsers = &model.AuthUsers{Owners: []string{"testOwner"}, Reviewers: []string{"testReviewers"}} conn = d.redis.Get(c) ) ctx.Convey("When everything goes positive", func(ctx convey.C) { err := d.SetPathAuthR(c, projID, branch, path, authUsers) value, _ := redis.String(conn.Do("GET", "saga_path_auth_9999_test_.")) ctx.Convey("Then err should be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(value, convey.ShouldEqual, `{"Owners":["testOwner"],"Reviewers":["testReviewers"]}`) }) }) }) } func TestDaoDeletePathAuthR(t *testing.T) { convey.Convey("DeletePathAuthR", t, func(ctx convey.C) { var ( c = context.Background() projID = int(88) branch = "test" path = "." authUsers = &model.AuthUsers{Owners: []string{"testOwner"}, Reviewers: []string{"testReviewers"}} conn = d.redis.Get(c) ) ctx.Convey("When data not exist", func(ctx convey.C) { err := d.DeletePathAuthR(c, projID, branch, path) value, _ := redis.String(conn.Do("GET", "saga_path_auth_88_test_.")) ctx.Convey("Then err should be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(value, convey.ShouldEqual, "") }) }) ctx.Convey("When data exist", func(ctx convey.C) { err := d.SetPathAuthR(c, projID, branch, path, authUsers) value, _ := redis.String(conn.Do("GET", "saga_path_auth_88_test_.")) ctx.Convey("Then err should be nil 1.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(value, convey.ShouldEqual, `{"Owners":["testOwner"],"Reviewers":["testReviewers"]}`) }) err = d.DeletePathAuthR(c, projID, branch, path) value, _ = redis.String(conn.Do("GET", "saga_path_auth_88_test_.")) ctx.Convey("Then err should be nil 2.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(value, convey.ShouldEqual, "") }) }) }) } func TestDaoSetReportStatus(t *testing.T) { convey.Convey("SetReportStatus", t, func(ctx convey.C) { var ( c = context.Background() projID = int(11111) mrIID = int(11111) result bool conn = d.redis.Get(c) ) ctx.Convey("When everything goes positive", func(ctx convey.C) { err := d.SetReportStatus(c, projID, mrIID, result) value, _ := redis.String(conn.Do("GET", "saga_auth_11111_11111")) ctx.Convey("Then err should be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(value, convey.ShouldEqual, "false") }) }) }) } func TestDaoReportStatus(t *testing.T) { convey.Convey("ReportStatus", t, func(ctx convey.C) { var ( c = context.Background() projID = int(22222) mrIID = int(22222) conn = d.redis.Get(c) ) ctx.Convey("When everything goes positive", func(ctx convey.C) { conn.Do("SET", "saga_auth_22222_22222", "true") result, err := d.ReportStatus(c, projID, mrIID) ctx.Convey("Then err should be nil.result should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(result, convey.ShouldEqual, true) }) }) }) } func TestDaoDeleteReportStatus(t *testing.T) { convey.Convey("DeleteReportStatus", t, func(ctx convey.C) { var ( c = context.Background() projID = int(33333) mrIID = int(33333) conn = d.redis.Get(c) ) ctx.Convey("When everything goes positive", func(ctx convey.C) { conn.Do("SET", "saga_auth_33333_33333", "true") err := d.DeleteReportStatus(c, projID, mrIID) value, _ := redis.Int(conn.Do("GET", "saga_auth_33333_33333")) ctx.Convey("Then err should be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(value, convey.ShouldEqual, 0) }) }) }) }