@ -43,19 +43,24 @@ namespace EasyAbp.EShop.Payments.Refunds
var paymentItem = Activator . CreateInstance ( paymentItemType , true ) as PaymentItem ;
paymentItem . ShouldNotBeNull ( ) ;
paymentItemType . GetProperty ( nameof ( PaymentItem . Id ) ) ? . SetValue ( paymentItem , PaymentsTestData . PaymentItem1 ) ;
paymentItemType . GetProperty ( nameof ( PaymentItem . ActualPaymentAmount ) ) ? . SetValue ( paymentItem , 1 m ) ;
paymentItemType . GetProperty ( nameof ( PaymentItem . ItemType ) ) ? . SetValue ( paymentItem , PaymentsConsts . PaymentItemType ) ;
paymentItemType . GetProperty ( nameof ( PaymentItem . ItemKey ) ) ? . SetValue ( paymentItem , PaymentsTestData . Order1 . ToString ( ) ) ;
paymentItemType . GetProperty ( nameof ( PaymentItem . StoreId ) ) ? . SetValue ( paymentItem , PaymentsTestData . Store1 ) ;
paymentItemType . GetProperty ( nameof ( PaymentItem . Id ) )
? . SetValue ( paymentItem , PaymentsTestData . PaymentItem1 ) ;
paymentItemType . GetProperty ( nameof ( PaymentItem . ActualPaymentAmount ) ) ? . SetValue ( paymentItem , 5 m ) ;
paymentItemType . GetProperty ( nameof ( PaymentItem . ItemType ) )
? . SetValue ( paymentItem , PaymentsConsts . PaymentItemType ) ;
paymentItemType . GetProperty ( nameof ( PaymentItem . ItemKey ) )
? . SetValue ( paymentItem , PaymentsTestData . Order1 . ToString ( ) ) ;
paymentItemType . GetProperty ( nameof ( PaymentItem . StoreId ) )
? . SetValue ( paymentItem , PaymentsTestData . Store1 ) ;
// paymentItem.ExtraProperties.Add(nameof(paymentItem.StoreId), PaymentsTestData.Store1);
var payment = Activator . CreateInstance ( paymentType , true ) as Payment ;
payment . ShouldNotBeNull ( ) ;
paymentType . GetProperty ( nameof ( Payment . Id ) ) ? . SetValue ( payment , PaymentsTestData . Payment1 ) ;
paymentType . GetProperty ( nameof ( Payment . Currency ) ) ? . SetValue ( payment , "USD" ) ;
paymentType . GetProperty ( nameof ( Payment . ActualPaymentAmount ) ) ? . SetValue ( payment , 1 m ) ;
paymentType . GetProperty ( nameof ( Payment . PaymentItems ) ) ? . SetValue ( payment , new List < PaymentItem > { paymentItem } ) ;
paymentType . GetProperty ( nameof ( Payment . ActualPaymentAmount ) ) ? . SetValue ( payment , 5 m ) ;
paymentType . GetProperty ( nameof ( Payment . PaymentItems ) )
? . SetValue ( payment , new List < PaymentItem > { paymentItem } ) ;
return payment ;
} ;
@ -109,7 +114,8 @@ namespace EasyAbp.EShop.Payments.Refunds
{
Id = PaymentsTestData . Order1 ,
Currency = "USD" ,
ActualTotalPrice = 0 ,
ActualTotalPrice = 6 m ,
PaymentAmount = 5 m ,
StoreId = PaymentsTestData . Store1 ,
OrderLines = new List < OrderLineDto >
{
@ -118,6 +124,7 @@ namespace EasyAbp.EShop.Payments.Refunds
Id = PaymentsTestData . OrderLine1 ,
Currency = "USD" ,
ActualTotalPrice = 1 m ,
PaymentAmount = 0.83 m ,
Quantity = 1
}
} ,
@ -127,7 +134,9 @@ namespace EasyAbp.EShop.Payments.Refunds
{
Name = "Name" ,
Key = "Key" ,
Fee = 5 m
DisplayName = "DisplayName" ,
Fee = 5 m ,
PaymentAmount = 4.17 m
}
} ,
PaymentId = PaymentsTestData . Payment1
@ -176,6 +185,7 @@ namespace EasyAbp.EShop.Payments.Refunds
{
Name = "Name" ,
Key = "Key" ,
DisplayName = "DisplayName" ,
TotalAmount = 0.6 m
}
}
@ -210,6 +220,7 @@ namespace EasyAbp.EShop.Payments.Refunds
orderExtraFees . Count . ShouldBe ( 1 ) ;
orderExtraFees [ 0 ] . Name . ShouldBe ( "Name" ) ;
orderExtraFees [ 0 ] . Key . ShouldBe ( "Key" ) ;
orderExtraFees [ 0 ] . DisplayName . ShouldBe ( "DisplayName" ) ;
orderExtraFees [ 0 ] . TotalAmount . ShouldBe ( 0.6 m ) ;
}
@ -237,17 +248,18 @@ namespace EasyAbp.EShop.Payments.Refunds
} ;
// Act & Assert
await Should . ThrowAsync < AbpValidationException > ( async ( ) = >
( await Should . ThrowAsync < AbpValidationException > ( async ( ) = >
{
await _ refundAppService . CreateAsync ( request ) ;
} , "RefundItem.OrderLines and RefundItem.OrderExtraFees should not both be empty!" ) ;
} ) ) . ValidationErrors [ 0 ] . ErrorMessage
. ShouldBe ( "RefundItem.OrderLines and RefundItem.OrderExtraFees should not both be empty!" ) ;
}
[Fact]
public async Task Should_Avoid_Over_Refund ( )
public async Task Should_Avoid_Over_Amount_ Refund ( )
{
// Arrange
var request = new CreateEShopRefundInput
var request1 = new CreateEShopRefundInput
{
DisplayReason = "Reason" ,
CustomerRemark = "Customer Remark" ,
@ -266,16 +278,61 @@ namespace EasyAbp.EShop.Payments.Refunds
{
OrderLineId = PaymentsTestData . OrderLine1 ,
Quantity = 1 ,
TotalAmount = 1 m
TotalAmount = 0.84 m // 0.84m > 0.83m
}
} ,
}
}
}
} ;
// Arrange
var request2 = new CreateEShopRefundInput
{
DisplayReason = "Reason" ,
CustomerRemark = "Customer Remark" ,
PaymentId = PaymentsTestData . Payment1 ,
StaffRemark = "StaffRemark" ,
RefundItems = new List < CreateEShopRefundItemInput >
{
new ( )
{
CustomerRemark = "CustomerRemark" ,
OrderId = PaymentsTestData . Order1 ,
StaffRemark = "StaffRemark" ,
OrderExtraFees = new List < OrderExtraFeeRefundInfoModel >
{
new ( )
{
Name = "Name" ,
Key = "Key" ,
TotalAmount = 0.1 m
DisplayName = "DisplayName" ,
TotalAmount = 4.18 m // 4.18m > 4.17m
}
}
}
}
} ;
var request3 = new CreateEShopRefundInput
{
DisplayReason = "Reason" ,
CustomerRemark = "Customer Remark" ,
PaymentId = PaymentsTestData . Payment1 ,
StaffRemark = "StaffRemark" ,
RefundItems = new List < CreateEShopRefundItemInput >
{
new ( )
{
CustomerRemark = "CustomerRemark" ,
OrderId = PaymentsTestData . Order1 ,
StaffRemark = "StaffRemark" ,
OrderLines = new List < OrderLineRefundInfoModel >
{
new ( )
{
OrderLineId = PaymentsTestData . OrderLine1 ,
Quantity = 1 ,
TotalAmount = 1 0 0 m // 100m >>> 5m (the order payment amount)
}
}
}
@ -283,7 +340,54 @@ namespace EasyAbp.EShop.Payments.Refunds
} ;
// Act & Assert
await Should . ThrowAsync < InvalidRefundAmountException > ( async ( ) = >
await Should . ThrowAsync < InvalidOrderLineRefundAmountException > ( async ( ) = >
{
await _ refundAppService . CreateAsync ( request1 ) ;
} ) ;
await Should . ThrowAsync < InvalidOrderExtraFeeRefundAmountException > ( async ( ) = >
{
await _ refundAppService . CreateAsync ( request2 ) ;
} ) ;
await Should . ThrowAsync < InvalidOrderRefundAmountException > ( async ( ) = >
{
await _ refundAppService . CreateAsync ( request3 ) ;
} ) ;
}
[Fact]
public async Task Should_Avoid_Over_Quantity_Refund ( )
{
// Arrange
var request = new CreateEShopRefundInput
{
DisplayReason = "Reason" ,
CustomerRemark = "Customer Remark" ,
PaymentId = PaymentsTestData . Payment1 ,
StaffRemark = "StaffRemark" ,
RefundItems = new List < CreateEShopRefundItemInput >
{
new ( )
{
CustomerRemark = "CustomerRemark" ,
OrderId = PaymentsTestData . Order1 ,
StaffRemark = "StaffRemark" ,
OrderLines = new List < OrderLineRefundInfoModel >
{
new ( )
{
OrderLineId = PaymentsTestData . OrderLine1 ,
Quantity = 2 , // 2 > 1
TotalAmount = 0.83 m
}
}
}
}
} ;
// Act & Assert
await Should . ThrowAsync < InvalidRefundQuantityException > ( async ( ) = >
{
await _ refundAppService . CreateAsync ( request ) ;
} ) ;
@ -308,7 +412,7 @@ namespace EasyAbp.EShop.Payments.Refunds
StaffRemark = "StaffRemark" ,
OrderLines = new List < OrderLineRefundInfoModel >
{
new OrderLineRefundInfoModel
new ( )
{
OrderLineId = PaymentsTestData . OrderLine1 ,
Quantity = 1 ,
@ -327,7 +431,7 @@ namespace EasyAbp.EShop.Payments.Refunds
}
[Fact]
public async Task Should_Check_OrderLines_Exist_When_Refunding ( )
public Task Should_Check_OrderLines_Exist_When_Refunding ( )
{
// Arrange
var request = new CreateEShopRefundInput
@ -355,6 +459,8 @@ namespace EasyAbp.EShop.Payments.Refunds
}
}
} ;
return Task . CompletedTask ;
}
[Fact]
@ -380,6 +486,7 @@ namespace EasyAbp.EShop.Payments.Refunds
{
Name = "FakeName" ,
Key = "FakeKey" ,
DisplayName = "FakeDisplayName" ,
TotalAmount = 0.6 m
}
}
@ -413,7 +520,7 @@ namespace EasyAbp.EShop.Payments.Refunds
StaffRemark = "StaffRemark" ,
OrderLines = new List < OrderLineRefundInfoModel >
{
new OrderLineRefundInfoModel
new ( )
{
OrderLineId = PaymentsTestData . OrderLine1 ,
Quantity = 1 ,
@ -425,10 +532,10 @@ namespace EasyAbp.EShop.Payments.Refunds
} ;
// Act & Assert
await Should . ThrowAsync < AbpValidationException > ( async ( ) = >
( await Should . ThrowAsync < AbpValidationException > ( async ( ) = >
{
await _ refundAppService . CreateAsync ( request ) ;
} , "RefundAmount should be greater than 0." ) ;
} ) ) . ValidationErrors [ 0 ] . ErrorMessage . ShouldBe ( "RefundAmount should be greater than 0." ) ;
}
[Fact]
@ -450,7 +557,8 @@ namespace EasyAbp.EShop.Payments.Refunds
refundItem . SetProperty ( nameof ( RefundItem . StoreId ) , PaymentsTestData . Store1 ) ;
refundItem . SetProperty ( nameof ( RefundItem . OrderId ) , PaymentsTestData . Order1 ) ;
refundItem . SetProperty ( nameof ( RefundItem . OrderLines ) , _ jsonSerializer . Serialize ( new List < OrderLineRefundInfoModel >
refundItem . SetProperty ( nameof ( RefundItem . OrderLines ) , _ jsonSerializer . Serialize (
new List < OrderLineRefundInfoModel >
{
new ( )
{
@ -459,12 +567,14 @@ namespace EasyAbp.EShop.Payments.Refunds
TotalAmount = 1 m
}
} ) ) ;
refundItem . SetProperty ( nameof ( RefundItem . OrderExtraFees ) , _ jsonSerializer . Serialize ( new List < OrderExtraFeeRefundInfoModel >
refundItem . SetProperty ( nameof ( RefundItem . OrderExtraFees ) , _ jsonSerializer . Serialize (
new List < OrderExtraFeeRefundInfoModel >
{
new ( )
{
Name = "Name" ,
Key = "Key" ,
DisplayName = "DisplayName" ,
TotalAmount = 0.5 m
}
} ) ) ;
@ -517,6 +627,7 @@ namespace EasyAbp.EShop.Payments.Refunds
var orderExtraFee = refundItemDto . OrderExtraFees . First ( ) ;
orderExtraFee . Name . ShouldBe ( "Name" ) ;
orderExtraFee . Key . ShouldBe ( "Key" ) ;
orderExtraFee . DisplayName . ShouldBe ( "DisplayName" ) ;
orderExtraFee . RefundAmount . ShouldBe ( 0.5 m ) ;
}
}