package grpc

import (
	"testing"

	"github.com/smartystreets/goconvey/convey"
	"go.buf.build/protocolbuffers/go/linuxgit/tidbcloud/base"
)

type RespWithoutBaseResp struct{}

type RespWithBaseResp struct {
	BaseResp *base.BaseResp
}

func TestGetBaseRespFromResp(t *testing.T) {
	convey.Convey("test resp", t, func() {
		convey.Convey("empty", func() {
			baseResp := getBaseRespFromResp(nil)
			convey.So(baseResp, convey.ShouldBeNil)

			baseResp = getBaseRespFromResp(&RespWithoutBaseResp{})
			convey.So(baseResp, convey.ShouldBeNil)

			baseResp = getBaseRespFromResp(RespWithoutBaseResp{})
			convey.So(baseResp, convey.ShouldBeNil)

			var resp *RespWithBaseResp
			baseResp = getBaseRespFromResp(resp)
			convey.So(baseResp, convey.ShouldBeNil)
		})

		convey.Convey("has resp", func() {
			baseResp := getBaseRespFromResp(&RespWithBaseResp{})
			convey.So(baseResp != nil, convey.ShouldBeTrue)
			convey.So(baseResp.ErrCode, convey.ShouldEqual, 0)

			baseResp = getBaseRespFromResp(&RespWithBaseResp{
				BaseResp: &base.BaseResp{
					ErrCode: 1,
				},
			})
			convey.So(baseResp != nil, convey.ShouldBeTrue)
			convey.So(baseResp.ErrCode, convey.ShouldEqual, 1)
		})
	})
}
