Skip to content

Commit 6816fa1

Browse files
added unit tests for pricing module controllers (#1078)
Co-authored-by: Hisham Bin Ateya <hishamco_2007@yahoo.com>
1 parent dae5acd commit 6816fa1

2 files changed

Lines changed: 199 additions & 0 deletions

File tree

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Linq.Expressions;
5+
using System.Reflection;
6+
using System.Text;
7+
using System.Threading;
8+
using System.Threading.Tasks;
9+
using Microsoft.AspNetCore.Mvc;
10+
using Microsoft.EntityFrameworkCore;
11+
using Microsoft.EntityFrameworkCore.Query;
12+
using Moq;
13+
using SimplCommerce.Infrastructure.Data;
14+
using SimplCommerce.Infrastructure.Web.SmartTable;
15+
using SimplCommerce.Module.Catalog.Models;
16+
using SimplCommerce.Module.Pricing.Areas.Pricing.Controllers;
17+
using SimplCommerce.Module.Pricing.Areas.Pricing.ViewModels;
18+
using SimplCommerce.Module.Pricing.Models;
19+
using Xunit;
20+
21+
namespace SimplCommerce.Module.Pricing.Tests.Controllers
22+
{
23+
public class CartRuleApiControllerTests
24+
{
25+
[Fact]
26+
public void List_ReturnsJsonResult()
27+
{
28+
// Arrange
29+
var cartRuleRepositoryMock = new Mock<IRepository<CartRule>>();
30+
var controller = new CartRuleApiController(cartRuleRepositoryMock.Object);
31+
var smartTableParam = new SmartTableParam()
32+
{
33+
Pagination = new Pagination() { Start = 1, TotalItemCount = 1, Number = 1, NumberOfPages = 1 },
34+
Search = new Search() { },
35+
Sort = new Sort() { }
36+
};
37+
38+
// Act
39+
var result = controller.List(smartTableParam);
40+
41+
// Assert
42+
Assert.IsType<JsonResult>(result);
43+
}
44+
45+
[Fact]
46+
public async Task Post_CreatesNewCartRule_WhenModelStateIsValid()
47+
{
48+
// Arrange
49+
var cartRuleRepositoryMock = new Mock<IRepository<CartRule>>();
50+
var controller = new CartRuleApiController(cartRuleRepositoryMock.Object);
51+
var model = new CartRuleForm
52+
{
53+
Id = 1,
54+
Name = "Test Cart Rule",
55+
IsActive = true,
56+
StartOn = DateTime.Now,
57+
EndOn = DateTime.Now.AddDays(7),
58+
IsCouponRequired = true,
59+
RuleToApply = "Coupon",
60+
DiscountAmount = 10,
61+
DiscountStep = 2,
62+
MaxDiscountAmount = 50,
63+
UsageLimitPerCoupon = 100,
64+
UsageLimitPerCustomer = 1
65+
};
66+
67+
// Act
68+
var result = await controller.Post(model);
69+
70+
// Assert
71+
var createdAtActionResult = Assert.IsType<CreatedAtActionResult>(result);
72+
Assert.Equal(nameof(CartRuleApiController.Get), createdAtActionResult.ActionName);
73+
Assert.NotNull(createdAtActionResult.RouteValues["id"]);
74+
cartRuleRepositoryMock.Verify(repo => repo.Add(It.IsAny<CartRule>()), Times.Once);
75+
cartRuleRepositoryMock.Verify(repo => repo.SaveChangesAsync(), Times.Once);
76+
}
77+
}
78+
}
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text.Json.Nodes;
5+
using Microsoft.AspNetCore.Mvc;
6+
using Moq;
7+
using Newtonsoft.Json;
8+
using Newtonsoft.Json.Linq;
9+
using SimplCommerce.Infrastructure.Data;
10+
using SimplCommerce.Infrastructure.Web.SmartTable;
11+
using SimplCommerce.Module.Core.Models;
12+
using SimplCommerce.Module.Pricing.Areas.Pricing.Controllers;
13+
using SimplCommerce.Module.Pricing.Models;
14+
using Xunit;
15+
16+
namespace SimplCommerce.Module.Pricing.Tests.Controllers
17+
{
18+
public class CartRuleUsageApiControllerTests
19+
{
20+
[Fact]
21+
public void List_ReturnsJsonResult()
22+
{
23+
// Arrange
24+
var cartRuleUsageRepositoryMock = new Mock<IRepository<CartRuleUsage>>();
25+
var controller = new CartRuleUsageApiController(cartRuleUsageRepositoryMock.Object);
26+
var smartTableParam = new SmartTableParam() { Pagination = new Pagination() { }, Search = new Search() { }, Sort = new Sort() };
27+
28+
// Act
29+
var result = controller.List(smartTableParam);
30+
31+
// Assert
32+
Assert.IsType<JsonResult>(result);
33+
}
34+
35+
[Fact]
36+
public void List_ShouldReturnCorrectData()
37+
{
38+
// Arrange
39+
var cartRuleUsageRepositoryMock = new Mock<IRepository<CartRuleUsage>>();
40+
var controller = new CartRuleUsageApiController(cartRuleUsageRepositoryMock.Object);
41+
42+
var smartTableParam = new SmartTableParam()
43+
{
44+
Pagination = new Pagination() { },
45+
Search = new Search
46+
{
47+
48+
PredicateObject = new JObject()
49+
},
50+
Sort = new Sort() { }
51+
};
52+
smartTableParam.Search.PredicateObject.Add("RuleName", "TestRule");
53+
smartTableParam.Search.PredicateObject.Add("CouponCode", "TestCoupon");
54+
smartTableParam.Search.PredicateObject.Add("FullName", "TestUser");
55+
smartTableParam.Search.PredicateObject.Add("CreatedOn", new JObject
56+
{
57+
{ "after" , DateTimeOffset.Now.AddDays(-7)},
58+
{ "before" , DateTimeOffset.Now}
59+
});
60+
61+
// Mocking the IQueryable<CartRuleUsage>
62+
var cartRuleUsageData = new List<CartRuleUsage>
63+
{
64+
new CartRuleUsage
65+
{
66+
CartRuleId = 101,
67+
CartRule = new CartRule { Name = "TestRule" },
68+
UserId = 201,
69+
User = new User { FullName = "TestUser" },
70+
Coupon = new Coupon { Code = "TestCoupon" },
71+
OrderId = 301,
72+
CreatedOn = DateTimeOffset.Now.AddDays(-5)
73+
},
74+
// Add more data as needed for testing different scenarios
75+
}.AsQueryable();
76+
77+
cartRuleUsageRepositoryMock.Setup(r => r.Query()).Returns(cartRuleUsageData);
78+
79+
// Act
80+
var result = controller.List(smartTableParam);
81+
82+
// Assert
83+
var jsonResult = Assert.IsType<JsonResult>(result);
84+
//var cartRuleUsages = Assert.IsType<SmartTableResult<searchobject>>(jsonResult.Value);
85+
86+
// Add more assertions based on your expectations for the result
87+
Assert.NotNull(jsonResult.Value);
88+
var serializeobj = JsonConvert.SerializeObject(jsonResult.Value);
89+
var deserializeobj = JsonConvert.DeserializeObject<searchObject>(serializeobj);
90+
Assert.Equal("TestRule", deserializeobj.Items[0].CartRuleName);
91+
Assert.Equal("TestUser", deserializeobj.Items[0].FullName);
92+
Assert.Equal("TestCoupon", deserializeobj.Items[0].CouponCode);
93+
Assert.Equal(101, deserializeobj.Items[0].CartRuleId);
94+
Assert.Equal(201, deserializeobj.Items[0].UserId);
95+
Assert.Equal(301, deserializeobj.Items[0].OrderId);
96+
97+
}
98+
99+
public class Itemsobject
100+
{
101+
public long Id { get; set; }
102+
public long CartRuleId { get; set; }
103+
public string CartRuleName { get; set; }
104+
public long UserId { get; set; }
105+
public string FullName { get; set; }
106+
public string CouponCode { get; set; }
107+
public long OrderId { get; set; }
108+
public DateTimeOffset CreatedOn { get; set; }
109+
}
110+
111+
public class searchObject
112+
{
113+
public List<Itemsobject> Items { get; set; }
114+
115+
public int NumberOfPages { get; set; }
116+
117+
public int TotalRecord { get; set; }
118+
}
119+
}
120+
}
121+

0 commit comments

Comments
 (0)