|
3 | 3 | using Xunit; |
4 | 4 | using NetCoreForce.Client; |
5 | 5 | using NetCoreForce.Client.Models; |
| 6 | +using System.Linq; |
| 7 | +using System.Text; |
6 | 8 |
|
7 | 9 | namespace NetCoreForce.Client.Tests |
8 | 10 | { |
9 | 11 | public class TimeZoneInfoMockerTests |
10 | 12 | { |
11 | | - [Fact] |
12 | | - public void TestLocalTimeZoneInfoMocker() |
| 13 | + [Theory] |
| 14 | + [InlineData("America/New_York")] |
| 15 | + [InlineData("America/Phoenix")] |
| 16 | + [InlineData("Europe/London")] |
| 17 | + [InlineData("Asia/Tokyo")] |
| 18 | + [InlineData("Asia/Kathmandu")] // Nepal Time (UTC+5:45) |
| 19 | + [InlineData("Pacific/Auckland")] |
| 20 | + [InlineData("Europe/Moscow")] |
| 21 | + [InlineData("Asia/Shanghai")] |
| 22 | + public void TestLocalTimeZoneInfoMocker(string timeZoneId) |
13 | 23 | { |
| 24 | + TimeZoneInfo localTimeZoneInfo = TimeZoneInfo.Local; |
| 25 | + TimeZoneInfo mockTimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId); |
| 26 | + |
14 | 27 | TimeSpan mockedUtcOffset; |
15 | | - TimeSpan actualLocalUtcOffset = TimeZoneInfo.Local.BaseUtcOffset; |
| 28 | + TimeSpan actualLocalUtcOffset = localTimeZoneInfo.BaseUtcOffset; |
| 29 | + |
| 30 | + if (localTimeZoneInfo.StandardName == mockTimeZoneInfo.StandardName) |
| 31 | + { |
| 32 | + // same TZ as local machine, pass test |
| 33 | + return; |
| 34 | + } |
16 | 35 |
|
17 | | - using (new LocalTimeZoneInfoMocker(TimeZoneInfo.FindSystemTimeZoneById(TimeZoneIds.TimeZoneIdPhoenix))) |
| 36 | + using (new LocalTimeZoneInfoMocker(mockTimeZoneInfo)) |
18 | 37 | { |
19 | | - // shifted to Phoenix TZ |
20 | | - Assert.Equal(TimeZoneIds.TimeZoneIdPhoenix, TimeZoneInfo.Local.Id); |
21 | | - mockedUtcOffset = TimeZoneInfo.Local.BaseUtcOffset; |
22 | | - Assert.NotEqual(TimeZoneInfo.Local.BaseUtcOffset, actualLocalUtcOffset); |
| 38 | + TimeZoneInfo currentTimeZoneInfo = TimeZoneInfo.Local; |
| 39 | + |
| 40 | + mockedUtcOffset = currentTimeZoneInfo.BaseUtcOffset; |
| 41 | + |
| 42 | + Assert.Equal(mockTimeZoneInfo.StandardName, currentTimeZoneInfo.StandardName); |
| 43 | + Assert.NotEqual(currentTimeZoneInfo.BaseUtcOffset, actualLocalUtcOffset); |
23 | 44 | } |
24 | 45 |
|
25 | 46 | // back to local machine's TZ |
26 | | - Assert.NotEqual(TimeZoneInfo.Local.Id, TimeZoneIds.TimeZoneIdPhoenix); |
27 | | - Assert.NotEqual(TimeZoneInfo.Local.BaseUtcOffset, mockedUtcOffset); |
| 47 | + Assert.NotEqual(localTimeZoneInfo.StandardName, mockTimeZoneInfo.StandardName); |
| 48 | + Assert.NotEqual(localTimeZoneInfo.BaseUtcOffset, mockedUtcOffset); |
28 | 49 | } |
29 | 50 |
|
| 51 | + [Fact] |
| 52 | + public void GetAllTimeZoneIds() |
| 53 | + { |
| 54 | + // Given |
| 55 | + var expectedTimeZoneIds = TimeZoneInfo.GetSystemTimeZones().ToList(); |
| 56 | + |
| 57 | + List<string> zones = expectedTimeZoneIds.Select(x => $"{x.BaseUtcOffset} -- {x.DisplayName} -- {x.StandardName}").ToList(); |
| 58 | + |
| 59 | + StringBuilder sb = new StringBuilder(); |
| 60 | + foreach (var zone in zones) |
| 61 | + { |
| 62 | + sb.AppendLine(zone); |
| 63 | + } |
| 64 | + |
| 65 | + // When |
| 66 | + var result = sb.ToString(); |
| 67 | + |
| 68 | + // Then |
| 69 | + } |
30 | 70 | } |
31 | 71 | } |
0 commit comments