68 lines
2.1 KiB
Go
Executable File
68 lines
2.1 KiB
Go
Executable File
package user
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/DATA-DOG/go-sqlmock"
|
|
"github.com/stretchr/testify/assert"
|
|
"gorm.io/driver/mysql"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func setupMockDBForShipping(t *testing.T) (*gorm.DB, sqlmock.Sqlmock) {
|
|
db, mock, err := sqlmock.New()
|
|
if err != nil {
|
|
t.Fatalf("an error '%s' was not expected when opening a stub database connection", err)
|
|
}
|
|
gormDB, err := gorm.Open(mysql.New(mysql.Config{
|
|
Conn: db,
|
|
SkipInitializeWithVersion: true,
|
|
}), &gorm.Config{})
|
|
if err != nil {
|
|
t.Fatalf("an error '%s' was not expected when opening gorm database", err)
|
|
}
|
|
return gormDB, mock
|
|
}
|
|
|
|
func TestRequestShippings_EmptyInventoryIDs(t *testing.T) {
|
|
db, _ := setupMockDBForShipping(t)
|
|
svc := newTestService(db)
|
|
|
|
// Empty inventory IDs should return failed with "invalid_params"
|
|
_, _, _, _, failed, err := svc.RequestShippings(context.Background(), 1, []int64{}, nil)
|
|
assert.NoError(t, err)
|
|
assert.Len(t, failed, 1)
|
|
assert.Equal(t, "invalid_params", failed[0].Reason)
|
|
}
|
|
|
|
func TestRequestShippings_AllZeroInventoryIDs(t *testing.T) {
|
|
db, _ := setupMockDBForShipping(t)
|
|
svc := newTestService(db)
|
|
|
|
// All zero or negative IDs should be filtered, resulting in empty uniq list
|
|
_, _, _, _, failed, err := svc.RequestShippings(context.Background(), 1, []int64{0, -1, 0}, nil)
|
|
assert.NoError(t, err)
|
|
assert.Len(t, failed, 1)
|
|
assert.Equal(t, "invalid_params", failed[0].Reason)
|
|
}
|
|
|
|
func TestRequestShippings_NoDefaultAddress(t *testing.T) {
|
|
db, mock := setupMockDBForShipping(t)
|
|
svc := newTestService(db)
|
|
|
|
// Mock default address query - return no rows
|
|
mock.ExpectQuery("SELECT .* FROM `user_addresses`").
|
|
WillReturnRows(sqlmock.NewRows(nil))
|
|
|
|
// Mock all addresses query - return empty
|
|
mock.ExpectQuery("SELECT .* FROM `user_addresses`").
|
|
WillReturnRows(sqlmock.NewRows(nil))
|
|
|
|
// With valid IDs but no address, should return no_default_address error
|
|
_, _, _, _, failed, err := svc.RequestShippings(context.Background(), 1, []int64{1, 2}, nil)
|
|
assert.NoError(t, err)
|
|
assert.Len(t, failed, 1)
|
|
assert.Equal(t, "no_default_address", failed[0].Reason)
|
|
}
|