Try your search with a different keyword or use * as a wildcard.
using FluentAssertions;
using Nop.Core.Domain.Customers;
using Nop.Services.Common;
using Nop.Services.Configuration;
using Nop.Services.Customers;
using Nop.Services.Helpers;
using NUnit.Framework;
namespace Nop.Tests.Nop.Services.Tests.Helpers;
[TestFixture]
public class DateTimeHelperTests : ServiceTest
{
private ICustomerService _customerService;
private IGenericAttributeService _genericAttributeService;
private DateTimeSettings _dateTimeSettings;
private IDateTimeHelper _dateTimeHelper;
private ISettingService _settingService;
private Customer _customer;
///
/// (GMT+02:00) Minsk
///
private string _gmtPlus2MinskTimeZoneId;
///
/// (GMT+03:00) Moscow, St. Petersburg, Volgograd
///
private string _gmtPlus3MoscowTimeZoneId;
///
/// (GMT+07:00) Krasnoyarsk
///
private string _gmtPlus7KrasnoyarskTimeZoneId;
private string _defaultTimeZone;
private bool _defaultAllowCustomersToSetTimeZone;
private string _defaultDefaultStoreTimeZoneId;
[OneTimeSetUp]
public async Task SetUp()
{
_customerService = GetService();
_genericAttributeService = GetService();
_dateTimeSettings = GetService();
_dateTimeHelper = GetService();
_settingService = GetService();
_customer = await GetService().GetCustomerByEmailAsync(NopTestsDefaults.AdminEmail);
_defaultTimeZone = _customer.TimeZoneId;
_defaultAllowCustomersToSetTimeZone = _dateTimeSettings.AllowCustomersToSetTimeZone;
_defaultDefaultStoreTimeZoneId = _dateTimeSettings.DefaultStoreTimeZoneId;
_gmtPlus2MinskTimeZoneId = "E. Europe Standard Time"; //(GMT+02:00) Minsk
_gmtPlus3MoscowTimeZoneId = "Russian Standard Time"; //(GMT+03:00) Moscow, St. Petersburg, Volgograd
_gmtPlus7KrasnoyarskTimeZoneId = "North Asia Standard Time"; //(GMT+07:00) Krasnoyarsk;
if (Environment.OSVersion.Platform != PlatformID.Unix)
return;
_gmtPlus2MinskTimeZoneId = "Europe/Minsk"; //(GMT+02:00) Minsk;
_gmtPlus3MoscowTimeZoneId = "Europe/Moscow"; //(GMT+03:00) Moscow, St. Petersburg, Volgograd
_gmtPlus7KrasnoyarskTimeZoneId = "Asia/Krasnoyarsk"; //(GMT+07:00) Krasnoyarsk;
}
[OneTimeTearDown]
public async Task TearDown()
{
_customer.TimeZoneId = _defaultTimeZone;
_dateTimeSettings.AllowCustomersToSetTimeZone = _defaultAllowCustomersToSetTimeZone;
_dateTimeSettings.DefaultStoreTimeZoneId = _defaultDefaultStoreTimeZoneId;
await _settingService.SaveSettingAsync(_dateTimeSettings);
}
[Test]
public void CanGetAllSystemTimeZones()
{
var systemTimeZones = _dateTimeHelper.GetSystemTimeZones();
systemTimeZones.Should().NotBeNull();
systemTimeZones.Any().Should().BeTrue();
}
[Test]
public async Task CanGetCustomerTimeZoneWithCustomTimeZonesEnabled()
{
_dateTimeSettings.AllowCustomersToSetTimeZone = true;
_dateTimeSettings.DefaultStoreTimeZoneId = _gmtPlus2MinskTimeZoneId; //(GMT+02:00) Minsk;
await _settingService.SaveSettingAsync(_dateTimeSettings);
_customer.TimeZoneId = _gmtPlus3MoscowTimeZoneId;
await _customerService.UpdateCustomerAsync(_customer);
var timeZone = await GetService().GetCustomerTimeZoneAsync(_customer);
timeZone.Should().NotBeNull();
timeZone.Id.Should().Be(_gmtPlus3MoscowTimeZoneId);
}
[Test]
public async Task CanGetCustomerTimezoneWithCustomTimeZonesDisabled()
{
_dateTimeSettings.AllowCustomersToSetTimeZone = false;
_dateTimeSettings.DefaultStoreTimeZoneId = _gmtPlus2MinskTimeZoneId; //(GMT+02:00) Minsk;
await _settingService.SaveSettingAsync(_dateTimeSettings);
_customer.TimeZoneId = _gmtPlus3MoscowTimeZoneId;
await _customerService.UpdateCustomerAsync(_customer);
var timeZone = await GetService().GetCustomerTimeZoneAsync(_customer);
timeZone.Should().NotBeNull();
timeZone.Id.Should().Be(_gmtPlus2MinskTimeZoneId); //(GMT+02:00) Minsk
}
[Test]
public void CanConvertDatetimeToUserTime()
{
var sourceDateTime = TimeZoneInfo.FindSystemTimeZoneById(_gmtPlus2MinskTimeZoneId); //(GMT+02:00) Minsk;
sourceDateTime.Should().NotBeNull();
var destinationDateTime = TimeZoneInfo.FindSystemTimeZoneById(_gmtPlus7KrasnoyarskTimeZoneId); //(GMT+07:00) Krasnoyarsk;
destinationDateTime.Should().NotBeNull();
//summer time
_dateTimeHelper.ConvertToUserTime(new DateTime(2010, 06, 01, 0, 0, 0), sourceDateTime, destinationDateTime)
.Should().Be(new DateTime(2010, 06, 01, 5, 0, 0));
//winter time
_dateTimeHelper.ConvertToUserTime(new DateTime(2010, 01, 01, 0, 0, 0), sourceDateTime, destinationDateTime)
.Should().Be(new DateTime(2010, 01, 01, 5, 0, 0));
}
[Test]
public void CanConvertDatetimeToUtcDateTime()
{
var sourceDateTime = TimeZoneInfo.FindSystemTimeZoneById(_gmtPlus2MinskTimeZoneId); //(GMT+02:00) Minsk;
sourceDateTime.Should().NotBeNull();
//summer time
var dateTime1 = new DateTime(2010, 06, 01, 0, 0, 0);
var convertedDateTime1 = _dateTimeHelper.ConvertToUtcTime(dateTime1, sourceDateTime);
convertedDateTime1.Should().Be(new DateTime(2010, 05, 31, 21, 0, 0));
//winter time
var dateTime2 = new DateTime(2010, 01, 01, 0, 0, 0);
var convertedDateTime2 = _dateTimeHelper.ConvertToUtcTime(dateTime2, sourceDateTime);
convertedDateTime2.Should().Be(new DateTime(2009, 12, 31, 22, 0, 0));
}
}