feature/order_base #1
			
				
			
		
		
		
	|  | @ -7,10 +7,11 @@ import ( | |||
| 	"app-cloudep-order-server/internal/svc" | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"go.mongodb.org/mongo-driver/mongo" | ||||
| 	"go.uber.org/mock/gomock" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	mockmodel "app-cloudep-order-server/internal/mock/model" | ||||
| ) | ||||
|  |  | |||
|  | @ -5,7 +5,6 @@ import ( | |||
| 	"app-cloudep-order-server/internal/domain" | ||||
| 	model "app-cloudep-order-server/internal/model/mongo" | ||||
| 	"context" | ||||
| 	"fmt" | ||||
| 	"time" | ||||
| 
 | ||||
| 	ers "code.30cm.net/digimon/library-go/errs" | ||||
|  | @ -72,18 +71,15 @@ func (l *CreateOrderLogic) CreateOrder(in *order.CreateOrderReq) (*order.OKResp, | |||
| 	req, err := buildCreateOrderReq(in) | ||||
| 	if err != nil { | ||||
| 		// 錯誤代碼 06-011-00
 | ||||
| 		fmt.Println("1", err) | ||||
| 		return nil, ers.InvalidFormat(err.Error()) | ||||
| 	} | ||||
| 
 | ||||
| 	fmt.Println(req) | ||||
| 	// 驗證資料
 | ||||
| 	if err := l.svcCtx.Validate.ValidateAll(req); err != nil { | ||||
| 		// 錯誤代碼 06-011-00
 | ||||
| 		fmt.Println("2", err) | ||||
| 		return nil, ers.InvalidFormat(err.Error()) | ||||
| 	} | ||||
| 	fmt.Println(req) | ||||
| 
 | ||||
| 	now := time.Now().UTC().UnixNano() | ||||
| 	// 插入資料庫
 | ||||
| 	o := &model.Order{ | ||||
|  |  | |||
|  | @ -7,11 +7,12 @@ import ( | |||
| 	"app-cloudep-order-server/internal/svc" | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"testing" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"github.com/shopspring/decimal" | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"go.uber.org/mock/gomock" | ||||
| 	"testing" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| func TestDecimalPtrFromString(t *testing.T) { | ||||
|  |  | |||
|  | @ -7,9 +7,10 @@ import ( | |||
| 	"app-cloudep-order-server/internal/svc" | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"go.uber.org/mock/gomock" | ||||
| 	"testing" | ||||
| ) | ||||
| 
 | ||||
| func TestDeleteOrder(t *testing.T) { | ||||
|  |  | |||
|  | @ -3,7 +3,6 @@ package orderservicelogic | |||
| import ( | ||||
| 	"app-cloudep-order-server/gen_result/pb/order" | ||||
| 	"context" | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	ers "code.30cm.net/digimon/library-go/errs" | ||||
| 	"github.com/shopspring/decimal" | ||||
|  | @ -46,7 +45,6 @@ func (l *GetOrderLogic) GetOrder(in *order.GetOrderReq) (*order.GetOrderResp, er | |||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	fmt.Println(o) | ||||
| 
 | ||||
| 	return &order.GetOrderResp{ | ||||
| 		UpdateTime:  o.UpdateTime, | ||||
|  | @ -102,6 +100,7 @@ func nilString(s *string) *string { | |||
| 	if s == nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	return s | ||||
| } | ||||
| 
 | ||||
|  | @ -112,3 +111,10 @@ func nilInt64(i *int64) *int64 { | |||
| 
 | ||||
| 	return i | ||||
| } | ||||
| 
 | ||||
| // Helper functions
 | ||||
| //
 | ||||
| //nolint:unused
 | ||||
| func ptrString(s string) *string { | ||||
| 	return &s | ||||
| } | ||||
|  |  | |||
|  | @ -8,10 +8,11 @@ import ( | |||
| 	"app-cloudep-order-server/internal/svc" | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/shopspring/decimal" | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"go.uber.org/mock/gomock" | ||||
| 	"testing" | ||||
| ) | ||||
| 
 | ||||
| func TestGetOrder(t *testing.T) { | ||||
|  |  | |||
|  | @ -160,8 +160,3 @@ func ConvertOrdersToGetOrderResp(orders []model.Order) []*order.GetOrderResp { | |||
| 
 | ||||
| 	return res | ||||
| } | ||||
| 
 | ||||
| // Helper functions
 | ||||
| func ptrString(s string) *string { | ||||
| 	return &s | ||||
| } | ||||
|  |  | |||
|  | @ -8,10 +8,11 @@ import ( | |||
| 	"app-cloudep-order-server/internal/svc" | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/shopspring/decimal" | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"go.uber.org/mock/gomock" | ||||
| 	"testing" | ||||
| ) | ||||
| 
 | ||||
| func TestConvertOrdersToGetOrderResp(t *testing.T) { | ||||
|  |  | |||
|  | @ -0,0 +1,102 @@ | |||
| package orderservicelogic | ||||
| 
 | ||||
| import ( | ||||
| 	"app-cloudep-order-server/gen_result/pb/order" | ||||
| 	mocksvc "app-cloudep-order-server/internal/mock/lib" | ||||
| 	mockmodel "app-cloudep-order-server/internal/mock/model" | ||||
| 	"app-cloudep-order-server/internal/svc" | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"go.uber.org/mock/gomock" | ||||
| ) | ||||
| 
 | ||||
| func TestModifyOrderStatus(t *testing.T) { | ||||
| 	ctrl := gomock.NewController(t) | ||||
| 	defer ctrl.Finish() | ||||
| 
 | ||||
| 	// 初始化 mock 依賴
 | ||||
| 	mockOrderModel := mockmodel.NewMockOrderModel(ctrl) | ||||
| 	mockValidate := mocksvc.NewMockValidate(ctrl) | ||||
| 
 | ||||
| 	// 初始化服務上下文
 | ||||
| 	svcCtx := &svc.ServiceContext{ | ||||
| 		OrderModel: mockOrderModel, | ||||
| 		Validate:   mockValidate, | ||||
| 	} | ||||
| 
 | ||||
| 	// 測試數據集
 | ||||
| 	tests := []struct { | ||||
| 		name        string | ||||
| 		input       *order.ModifyOrderStatusReq | ||||
| 		prepare     func() | ||||
| 		expectErr   bool | ||||
| 		expectedRes *order.OKResp | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name: "成功修改訂單狀態", | ||||
| 			input: &order.ModifyOrderStatusReq{ | ||||
| 				BusinessId: "B123", | ||||
| 				Status:     3, | ||||
| 			}, | ||||
| 			prepare: func() { | ||||
| 				// 模擬驗證成功
 | ||||
| 				mockValidate.EXPECT().ValidateAll(gomock.Any()).Return(nil).Times(1) | ||||
| 				// 模擬狀態更新成功
 | ||||
| 				mockOrderModel.EXPECT().UpdateStatus(gomock.Any(), gomock.Any()).Return(nil, nil).Times(1) | ||||
| 			}, | ||||
| 			expectErr:   false, | ||||
| 			expectedRes: &order.OKResp{}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "驗證失敗", | ||||
| 			input: &order.ModifyOrderStatusReq{ | ||||
| 				BusinessId: "B123", | ||||
| 				Status:     12, // 錯誤的狀態值
 | ||||
| 			}, | ||||
| 			prepare: func() { | ||||
| 				// 模擬驗證失敗
 | ||||
| 				mockValidate.EXPECT().ValidateAll(gomock.Any()).Return(errors.New("invalid status")).Times(1) | ||||
| 			}, | ||||
| 			expectErr: true, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "修改訂單狀態失敗", | ||||
| 			input: &order.ModifyOrderStatusReq{ | ||||
| 				BusinessId: "B123", | ||||
| 				Status:     3, | ||||
| 			}, | ||||
| 			prepare: func() { | ||||
| 				// 模擬驗證成功
 | ||||
| 				mockValidate.EXPECT().ValidateAll(gomock.Any()).Return(nil).Times(1) | ||||
| 				// 模擬狀態更新失敗
 | ||||
| 				mockOrderModel.EXPECT().UpdateStatus(gomock.Any(), gomock.Any()).Return(nil, errors.New("update failed")).Times(1) | ||||
| 			}, | ||||
| 			expectErr: true, | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	for _, tt := range tests { | ||||
| 		t.Run(tt.name, func(t *testing.T) { | ||||
| 			// 準備測試環境
 | ||||
| 			tt.prepare() | ||||
| 
 | ||||
| 			// 初始化 ModifyOrderStatusLogic
 | ||||
| 			logic := NewModifyOrderStatusLogic(context.TODO(), svcCtx) | ||||
| 
 | ||||
| 			// 執行 ModifyOrderStatus
 | ||||
| 			resp, err := logic.ModifyOrderStatus(tt.input) | ||||
| 
 | ||||
| 			// 驗證結果
 | ||||
| 			if tt.expectErr { | ||||
| 				assert.Error(t, err) | ||||
| 				assert.Nil(t, resp) | ||||
| 			} else { | ||||
| 				assert.NoError(t, err) | ||||
| 				assert.Equal(t, tt.expectedRes, resp) | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,74 @@ | |||
| package orderservicelogic | ||||
| 
 | ||||
| import ( | ||||
| 	"app-cloudep-order-server/gen_result/pb/order" | ||||
| 	mockmodel "app-cloudep-order-server/internal/mock/model" | ||||
| 	"app-cloudep-order-server/internal/svc" | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"go.uber.org/mock/gomock" | ||||
| ) | ||||
| 
 | ||||
| func TestOrderStatusTimeout(t *testing.T) { | ||||
| 	ctrl := gomock.NewController(t) | ||||
| 	defer ctrl.Finish() | ||||
| 
 | ||||
| 	// 初始化 mock 依賴
 | ||||
| 	mockOrderModel := mockmodel.NewMockOrderModel(ctrl) | ||||
| 
 | ||||
| 	// 初始化服務上下文
 | ||||
| 	svcCtx := &svc.ServiceContext{ | ||||
| 		OrderModel: mockOrderModel, | ||||
| 	} | ||||
| 
 | ||||
| 	// 測試數據集
 | ||||
| 	tests := []struct { | ||||
| 		name        string | ||||
| 		prepare     func() | ||||
| 		expectErr   bool | ||||
| 		expectedRes *order.OKResp | ||||
| 	}{ | ||||
| 		{ | ||||
| 			name: "成功更新訂單狀態", | ||||
| 			prepare: func() { | ||||
| 				// 模擬訂單狀態超時更新成功
 | ||||
| 				mockOrderModel.EXPECT().UpdateTimeoutOrder(gomock.Any(), gomock.Any()).Return(nil, nil).Times(1) | ||||
| 			}, | ||||
| 			expectErr:   false, | ||||
| 			expectedRes: &order.OKResp{}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			name: "更新訂單狀態失敗", | ||||
| 			prepare: func() { | ||||
| 				// 模擬訂單狀態超時更新失敗
 | ||||
| 				mockOrderModel.EXPECT().UpdateTimeoutOrder(gomock.Any(), gomock.Any()).Return(nil, errors.New("update failed")).Times(1) | ||||
| 			}, | ||||
| 			expectErr: true, | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	for _, tt := range tests { | ||||
| 		t.Run(tt.name, func(t *testing.T) { | ||||
| 			// 準備測試環境
 | ||||
| 			tt.prepare() | ||||
| 
 | ||||
| 			// 初始化 OrderStatusTimeoutLogic
 | ||||
| 			logic := NewOrderStatusTimeoutLogic(context.TODO(), svcCtx) | ||||
| 
 | ||||
| 			// 執行 OrderStatusTimeout
 | ||||
| 			resp, err := logic.OrderStatusTimeout(&order.OrderStatusTimeoutReq{}) | ||||
| 
 | ||||
| 			// 驗證結果
 | ||||
| 			if tt.expectErr { | ||||
| 				assert.Error(t, err) | ||||
| 				assert.Nil(t, resp) | ||||
| 			} else { | ||||
| 				assert.NoError(t, err) | ||||
| 				assert.Equal(t, tt.expectedRes, resp) | ||||
| 			} | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
|  | @ -34,7 +34,6 @@ func (s *OrderServiceServer) CancelOrder(ctx context.Context, in *order.CancelOr | |||
| 	return l.CancelOrder(in) | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // ModifyOrderStatus 修改訂單狀態
 | ||||
| func (s *OrderServiceServer) ModifyOrderStatus(ctx context.Context, in *order.ModifyOrderStatusReq) (*order.OKResp, error) { | ||||
| 	l := orderservicelogic.NewModifyOrderStatusLogic(ctx, s.svcCtx) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue