package dao import ( "context" xsql "database/sql" "fmt" "reflect" "testing" "time" "go-common/app/interface/main/feedback/model" "go-common/library/database/sql" "github.com/bouk/monkey" "github.com/smartystreets/goconvey/convey" ) func TestDaoJudgeSsnRecord(t *testing.T) { convey.Convey("JudgeSsnRecord", t, func(ctx convey.C) { var ( c = context.Background() sid = int64(1) ) ctx.Convey("When everything is correct", func(ctx convey.C) { cnt, err := d.JudgeSsnRecord(c, sid) ctx.Convey("Then err should be nil.cnt should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(cnt, convey.ShouldNotBeNil) }) }) ctx.Convey("When d.selSSnID.Exec gets error", func(ctx convey.C) { guard := monkey.PatchInstanceMethod(reflect.TypeOf(d.selSSnID), "Exec", func(_ *sql.Stmt, _ context.Context, _ ...interface{}) (xsql.Result, error) { return nil, fmt.Errorf("d.selSSnID.Exec Error") }) defer guard.Unpatch() _, err := d.JudgeSsnRecord(c, sid) ctx.Convey("Then err should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldNotBeNil) }) }) }) } func TestDaoSession(t *testing.T) { convey.Convey("Session", t, func(ctx convey.C) { var ( c = context.Background() buvid = "" system = "" version = "" mid = int64(1) ) ctx.Convey("When everything is correct", func(ctx convey.C) { ssn, err := d.Session(c, buvid, system, version, mid) ctx.Convey("Then err should be nil.ssn should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.SkipSo(ssn, convey.ShouldNotBeNil) }) }) }) } func TestDaoSessionCount(t *testing.T) { var ( c = context.Background() mid = int64(0) ) convey.Convey("SessionCount", t, func(ctx convey.C) { cnt, err := d.SessionCount(c, mid) ctx.Convey("Then err should be nil.cnt should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(cnt, convey.ShouldNotBeNil) }) }) } func TestDaoUpSsnMtime(t *testing.T) { convey.Convey("UpSsnMtime", t, func(ctx convey.C) { var ( c = context.Background() now = time.Now() id = int64(1) ) convey.Convey("When everything is correct", func(ctx convey.C) { err := d.UpSsnMtime(c, now, id) ctx.Convey("Then err should be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) }) }) convey.Convey("When d.upSsnMtime.Exec gets error", func(ctx convey.C) { guard := monkey.PatchInstanceMethod(reflect.TypeOf(d.upSsnMtime), "Exec", func(_ *sql.Stmt, _ context.Context, _ ...interface{}) (xsql.Result, error) { return nil, fmt.Errorf("d.upSsnMtime.Exec Error") }) defer guard.Unpatch() err := d.UpSsnMtime(c, now, id) ctx.Convey("Then err should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldNotBeNil) }) }) }) } func TestDaoTxUpSsnMtime(t *testing.T) { convey.Convey("TxUpSsnMtime", t, func(ctx convey.C) { var ( tx, _ = d.BeginTran(context.Background()) now = time.Now() id = int64(0) ) ctx.Convey("When everything is correct", func(ctx convey.C) { err := d.TxUpSsnMtime(tx, now, id) ctx.Convey("Then err should be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) }) }) ctx.Convey("When tx.Exec gets error", func(ctx convey.C) { guard := monkey.PatchInstanceMethod(reflect.TypeOf(tx), "Exec", func(_ *sql.Tx, _ string, _ ...interface{}) (xsql.Result, error) { return nil, fmt.Errorf("tx.Exec Error") }) defer guard.Unpatch() err := d.TxUpSsnMtime(tx, now, id) ctx.Convey("Then err should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldNotBeNil) }) }) ctx.Reset(func() { tx.Rollback() }) }) } func TestDaoSessionIDByTagID(t *testing.T) { convey.Convey("SessionIDByTagID", t, func(ctx convey.C) { var ( c = context.Background() tagID = []int64{1, 2} ) ctx.Convey("When everything is correct", func(ctx convey.C) { sid, err := d.SessionIDByTagID(c, tagID) ctx.Convey("Then err should be nil.sid should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.SkipSo(sid, convey.ShouldNotBeNil) }) }) ctx.Convey("When d.dbMs.Query gets error", func(ctx convey.C) { guard := monkey.PatchInstanceMethod(reflect.TypeOf(d.dbMs), "Query", func(_ *sql.DB, _ context.Context, _ string, _ ...interface{}) (*sql.Rows, error) { return nil, fmt.Errorf("d.dbMs.Query Error") }) defer guard.Unpatch() _, err := d.SessionIDByTagID(c, tagID) ctx.Convey("Then err should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldNotBeNil) }) }) }) } func TestDaoSessionBySsnID(t *testing.T) { convey.Convey("SessionBySsnID", t, func(ctx convey.C) { var ( c = context.Background() sid = []int64{1, 2} state = "3" start = time.Now() end = time.Now() ) ctx.Convey("When everything is correct", func(ctx convey.C) { ssns, err := d.SessionBySsnID(c, sid, state, start, end) ctx.Convey("Then err should be nil.ssns should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.SkipSo(ssns, convey.ShouldNotBeNil) }) }) ctx.Convey("When d.dbMs.Query gets error", func(ctx convey.C) { guard := monkey.PatchInstanceMethod(reflect.TypeOf(d.dbMs), "Query", func(_ *sql.DB, _ context.Context, _ string, _ ...interface{}) (*sql.Rows, error) { return nil, fmt.Errorf("d.dbMs.Query Error") }) defer guard.Unpatch() _, err := d.SessionBySsnID(c, sid, state, start, end) ctx.Convey("Then err should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldNotBeNil) }) }) }) } func TestDaoSSnBySsnIDAllSate(t *testing.T) { convey.Convey("SSnBySsnIDAllSate", t, func(ctx convey.C) { var ( c = context.Background() sid = []int64{1, 2} start = time.Now() end = time.Now() ) ctx.Convey("When everything is correct", func(ctx convey.C) { ssns, err := d.SSnBySsnIDAllSate(c, sid, start, end) ctx.Convey("Then err should be nil.ssns should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.SkipSo(ssns, convey.ShouldNotBeNil) }) }) ctx.Convey("When d.dbMs.Query gets error", func(ctx convey.C) { guard := monkey.PatchInstanceMethod(reflect.TypeOf(d.dbMs), "Query", func(_ *sql.DB, _ context.Context, _ string, _ ...interface{}) (*sql.Rows, error) { return nil, fmt.Errorf("d.dbMs.Query Error") }) defer guard.Unpatch() _, err := d.SSnBySsnIDAllSate(c, sid, start, end) ctx.Convey("Then err should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldNotBeNil) }) }) }) } func TestDaoSessionByMid(t *testing.T) { convey.Convey("SessionByMid", t, func(ctx convey.C) { var ( c = context.Background() mid = int64(1) platform = "ios" ) ctx.Convey("When everything is correct", func(ctx convey.C) { ssns, err := d.SessionByMid(c, mid, platform) ctx.Convey("Then err should be nil.ssns should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(ssns, convey.ShouldNotBeNil) }) }) ctx.Convey("When d.dbMs.Query gets error", func(ctx convey.C) { guard := monkey.PatchInstanceMethod(reflect.TypeOf(d.dbMs), "Query", func(_ *sql.DB, _ context.Context, _ string, _ ...interface{}) (*sql.Rows, error) { return nil, fmt.Errorf("d.dbMs.Query Error") }) defer guard.Unpatch() _, err := d.SessionByMid(c, mid, platform) ctx.Convey("Then err should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldNotBeNil) }) }) }) } func TestDaoTxUpdateSessionState(t *testing.T) { convey.Convey("TxUpdateSessionState", t, func(ctx convey.C) { var ( tx, _ = d.BeginTran(context.Background()) state = int(0) sid = int64(0) ) ctx.Convey("When everything is correct", func(ctx convey.C) { err := d.TxUpdateSessionState(tx, state, sid) ctx.Convey("Then err should be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) }) }) ctx.Convey("When tx.Exec gets error", func(ctx convey.C) { guard := monkey.PatchInstanceMethod(reflect.TypeOf(tx), "Exec", func(_ *sql.Tx, _ string, _ ...interface{}) (xsql.Result, error) { return nil, fmt.Errorf("tx.Exec Error") }) defer guard.Unpatch() err := d.TxUpdateSessionState(tx, state, sid) ctx.Convey("Then err should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldNotBeNil) }) }) ctx.Reset(func() { tx.Rollback() }) }) } func TestDaoUpdateSessionState(t *testing.T) { convey.Convey("UpdateSessionState", t, func(ctx convey.C) { var ( c = context.Background() state = int(0) sid = int64(0) ) ctx.Convey("UpdateSessionState", func(ctx convey.C) { err := d.UpdateSessionState(c, state, sid) ctx.Convey("Then err should be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) }) }) ctx.Convey("When d.upSsnSta.Exec gets error", func(ctx convey.C) { guard := monkey.PatchInstanceMethod(reflect.TypeOf(d.upSsnSta), "Exec", func(_ *sql.Stmt, _ context.Context, _ ...interface{}) (xsql.Result, error) { return nil, fmt.Errorf("d.upSsnSta.Exec Error") }) defer guard.Unpatch() err := d.UpdateSessionState(c, state, sid) ctx.Convey("Then err should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldNotBeNil) }) }) }) } func TestDaoTags(t *testing.T) { convey.Convey("Tags", t, func(ctx convey.C) { var ( c = context.Background() mold = int(1) platform = "ios" ) ctx.Convey("When everything is correct", func(ctx convey.C) { tMap, err := d.Tags(c, mold, platform) ctx.Convey("Then err should be nil.tMap should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(tMap, convey.ShouldNotBeNil) }) }) ctx.Convey("When d.dbMs.Query gets error", func(ctx convey.C) { guard := monkey.PatchInstanceMethod(reflect.TypeOf(d.dbMs), "Query", func(_ *sql.DB, _ context.Context, _ string, _ ...interface{}) (*sql.Rows, error) { return nil, fmt.Errorf("d.dbMs.Query Error") }) defer guard.Unpatch() _, err := d.Tags(c, mold, platform) ctx.Convey("Then err should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldNotBeNil) }) }) }) } func TestDaoAddSession(t *testing.T) { convey.Convey("AddSession", t, func(ctx convey.C) { var ( c = context.Background() s = &model.Session{} ) ctx.Convey("When everthing is correct", func(ctx convey.C) { id, err := d.AddSession(c, s) ctx.Convey("Then err should be nil.id should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(id, convey.ShouldNotBeNil) }) }) ctx.Convey("When d.inSsn.Exec gets error", func(ctx convey.C) { guard := monkey.PatchInstanceMethod(reflect.TypeOf(d.inSsn), "Exec", func(_ *sql.Stmt, _ context.Context, _ ...interface{}) (xsql.Result, error) { return nil, fmt.Errorf("d.inSsn.Exec Error") }) defer guard.Unpatch() _, err := d.AddSession(c, s) ctx.Convey("Then err should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldNotBeNil) }) }) }) } func TestDaoTxAddSession(t *testing.T) { convey.Convey("TxAddSession", t, func(ctx convey.C) { var ( tx, _ = d.BeginTran(context.Background()) s = &model.Session{} ) ctx.Convey("When everthing is correct", func(ctx convey.C) { id, err := d.TxAddSession(tx, s) ctx.Convey("Then err should be nil.id should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(id, convey.ShouldNotBeNil) }) }) ctx.Convey("When tx.Exec gets error", func(ctx convey.C) { guard := monkey.PatchInstanceMethod(reflect.TypeOf(tx), "Exec", func(_ *sql.Tx, _ string, _ ...interface{}) (xsql.Result, error) { return nil, fmt.Errorf("tx.Exec Error") }) defer guard.Unpatch() _, err := d.TxAddSession(tx, s) ctx.Convey("Then err should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldNotBeNil) }) }) ctx.Reset(func() { tx.Rollback() }) }) } func TestDaoAddSessionTag(t *testing.T) { convey.Convey("AddSessionTag", t, func(ctx convey.C) { var ( c = context.Background() sessionID = int64(0) tagID = int64(0) now = time.Now() ) ctx.Convey("When everything is correct", func(ctx convey.C) { id, err := d.AddSessionTag(c, sessionID, tagID, now) ctx.Convey("Then err should be nil.id should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(id, convey.ShouldNotBeNil) }) }) ctx.Convey("When d.inSsnTag.Exec gets error", func(ctx convey.C) { guard := monkey.PatchInstanceMethod(reflect.TypeOf(d.inSsnTag), "Exec", func(_ *sql.Stmt, _ context.Context, _ ...interface{}) (xsql.Result, error) { return nil, fmt.Errorf("d.inSsnTag.Exec Error") }) defer guard.Unpatch() _, err := d.AddSessionTag(c, sessionID, tagID, now) ctx.Convey("Then err should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldNotBeNil) }) }) }) } func TestDaoTxAddSessionTag(t *testing.T) { convey.Convey("TxAddSessionTag", t, func(ctx convey.C) { var ( tx, _ = d.BeginTran(context.Background()) sessionID = int64(0) tagID = int64(0) now = time.Now() ) ctx.Convey("When everthing is correct", func(ctx convey.C) { id, err := d.TxAddSessionTag(tx, sessionID, tagID, now) ctx.Convey("Then err should be nil.id should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(id, convey.ShouldNotBeNil) }) }) ctx.Convey("When tx.Exec gets error", func(ctx convey.C) { guard := monkey.PatchInstanceMethod(reflect.TypeOf(tx), "Exec", func(_ *sql.Tx, _ string, _ ...interface{}) (xsql.Result, error) { return nil, fmt.Errorf("tx.Exec Error") }) defer guard.Unpatch() _, err := d.TxAddSessionTag(tx, sessionID, tagID, now) ctx.Convey("Then err should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldNotBeNil) }) }) ctx.Reset(func() { tx.Rollback() }) }) } func TestDaoUpdateSession(t *testing.T) { convey.Convey("UpdateSession", t, func(ctx convey.C) { var ( c = context.Background() s = &model.Session{} ) ctx.Convey("When everything is correct", func(ctx convey.C) { affected, err := d.UpdateSession(c, s) ctx.Convey("Then err should be nil.affected should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(affected, convey.ShouldNotBeNil) }) }) ctx.Convey("When d.upSsn.Exec gets error", func(ctx convey.C) { guard := monkey.PatchInstanceMethod(reflect.TypeOf(d.upSsn), "Exec", func(_ *sql.Stmt, _ context.Context, _ ...interface{}) (xsql.Result, error) { return nil, fmt.Errorf("d.upSsn.Exec Error") }) defer guard.Unpatch() _, err := d.UpdateSession(c, s) ctx.Convey("Then err should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldNotBeNil) }) }) }) } func TestDaoTagIDBySid(t *testing.T) { convey.Convey("TagIDBySid", t, func(ctx convey.C) { var ( c = context.Background() sids = []int64{1, 2} ) ctx.Convey("When everything is correct", func(ctx convey.C) { tsMap, err := d.TagIDBySid(c, sids) ctx.Convey("Then err should be nil.tsMap should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldBeNil) ctx.So(tsMap, convey.ShouldNotBeNil) }) }) ctx.Convey("When d.dbMs.Query gets error", func(ctx convey.C) { guard := monkey.PatchInstanceMethod(reflect.TypeOf(d.dbMs), "Query", func(_ *sql.DB, _ context.Context, _ string, _ ...interface{}) (*sql.Rows, error) { return nil, fmt.Errorf("d.dbMs.Query Error") }) defer guard.Unpatch() _, err := d.TagIDBySid(c, sids) ctx.Convey("Then err should not be nil.", func(ctx convey.C) { ctx.So(err, convey.ShouldNotBeNil) }) }) }) } func TestDaoplatConvert(t *testing.T) { convey.Convey("platConvert", t, func(ctx convey.C) { var ( platform = "a,b" ) ctx.Convey("When the original string is 'a,b'", func(ctx convey.C) { s := platConvert(platform) ctx.Convey("Then s should equal \"a\",\"b\".", func(ctx convey.C) { ctx.So(s, convey.ShouldEqual, "\"a\",\"b\"") }) }) }) }