Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
global using Xunit;
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Intercom.Dotnet.Client" Version="2.1.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" />
<PackageReference Include="Moq" Version="4.16.1" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\src\Modules\SimplCommerce.Module.WishList\SimplCommerce.Module.WishList.csproj" />
<ProjectReference Include="..\src\SimplCommerce.Infrastructure\SimplCommerce.Infrastructure.csproj" />
</ItemGroup>

</Project>
5 changes: 5 additions & 0 deletions src/SimplCommerce.Infrastructure/Helpers/CurrencyHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ public static class CurrencyHelper
{
private static readonly List<string> _zeroDecimalCurrencies = new List<string> { "BIF", "DJF", "JPY", "KRW", "PYG", "VND", "XAF", "XPF", "CLP", "GNF", "KMF", "MGA", "RWF", "VUV", "XOF" };

/// <summary>
/// Determines whether the currency associated with the specified culture uses decimal places.
/// </summary>
/// <param name="cultureInfo">The culture to check for its associated currency format.</param>
/// <returns> true if the currency is a known zero-decimal currency else false</returns>
public static bool IsZeroDecimalCurrencies(CultureInfo cultureInfo)
{
var regionInfo = new RegionInfo(cultureInfo.LCID);
Expand Down
42 changes: 42 additions & 0 deletions test/SimplCommerce.Infrastructure.Tests/CurrencyHelperTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;
using Xunit;
using SimplCommerce.Infrastructure.Helpers;

namespace SimplCommerce.Infrastructure.Tests
{
public class CurrencyHelperTests
{
[Theory]
[InlineData("ja-JP", true)] // Japanese Yen (JPY)
[InlineData("ko-KR", true)] // Korean Won (KRW)
[InlineData("en-US", false)] // US Dollar (USD)
[InlineData("fr-FR", false)] // Euro (EUR)
public void IsZeroDecimalCurrencies_ReturnsExpectedResult(string cultureName, bool expectedResult)
{
// Arrange
var cultureInfo = new CultureInfo(cultureName);

// Act
var result = CurrencyHelper.IsZeroDecimalCurrencies(cultureInfo);

// Assert
Assert.Equal(expectedResult, result);
}

[Fact]
public void IsZeroDecimalCurrencies_InvalidCulture_ThrowsException()
{
// Arrange
var invalidCulture = CultureInfo.InvariantCulture;

// Act & Assert
Assert.Throws<ArgumentException>(() =>
CurrencyHelper.IsZeroDecimalCurrencies(invalidCulture));
}
}
}
76 changes: 76 additions & 0 deletions test/SimplCommerce.Infrastructure.Tests/ReflectionHelperTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SimplCommerce.Infrastructure.Helpers;
using Xunit;

namespace SimplCommerce.Infrastructure.Tests
{
public class ReflectionHelperTests
{
[Fact]
public void IsAssignableToGenericType_TypeIsAssignable_ReturnsTrue()
{
// Arrange
var targetType = typeof(List<int>);
var genericType = typeof(IEnumerable<>);

// Act
var result = ReflectionHelper.IsAssignableToGenericType(targetType, genericType);

// Assert
Assert.True(result);
}

[Fact]
public void IsAssignableToGenericType_TypeIsNotAssignable_ReturnsFalse()
{
// Arrange
var targetType = typeof(string);
var genericType = typeof(IEnumerable<>);

// Act
var result = ReflectionHelper.IsAssignableToGenericType(targetType, genericType);

// Assert
Assert.True(result);
}

[Fact]
public void IsAssignableToGenericType_TypeInheritsGenericInterface_ReturnsTrue()
{
// Arrange
var targetType = typeof(MyClass);
var genericType = typeof(IGenericInterface<>);

// Act
var result = ReflectionHelper.IsAssignableToGenericType(targetType, genericType);

// Assert
Assert.True(result);
}

[Fact]
public void IsAssignableToGenericType_TypeDoesNotInheritGenericInterface_ReturnsFalse()
{
// Arrange
var targetType = typeof(MyClass);
var genericType = typeof(INonGenericInterface);

// Act
var result = ReflectionHelper.IsAssignableToGenericType(targetType, genericType);

// Assert
Assert.False(result);
}

// Example classes/interfaces for testing
public class MyClass : IGenericInterface<int> { }

public interface IGenericInterface<T> { }

public interface INonGenericInterface { }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Moq;
using SimplCommerce.Infrastructure.Data;
using SimplCommerce.Module.Cms.Areas.Cms.Controllers;
using SimplCommerce.Module.Cms.Areas.Cms.ViewModels;
using SimplCommerce.Module.Cms.Models;
using Xunit;

namespace SimplCommerce.Module.Cms.Tests.Controllers
{
public class MenuApiControllerTests
{
[Fact]
public async Task Post_CreatesMenu()
{
// Arrange
var menuRepositoryMock = new Mock<IRepository<Menu>>();
var menuItemRepositoryMock = new Mock<IRepository<MenuItem>>();

var controller = new MenuApiController(menuRepositoryMock.Object, menuItemRepositoryMock.Object);

var menuForm = new MenuForm
{
Name = "NewMenu",
IsPublished = true
};

// Act
var result = await controller.Post(menuForm);

// Assert
var okResult = Assert.IsType<JsonResult>(result);
var createdMenu = Assert.IsType<Menu>(okResult.Value);
Assert.Equal("NewMenu", createdMenu.Name);
Assert.True(createdMenu.IsPublished);
}
}
}
Loading