Esempio n. 1
0
        public void ArgumentInRangeDateOnlyTest()
        {
            var lowerValue           = new DateOnly(2021, 3, 3);
            var upperValue           = new DateOnly(2025, 3, 3);
            var testValue            = new DateOnly(2022, 3, 20);
            var outOfRangeLowerValue = new DateOnly(1900, 3, 3);
            var outOfRangeUpperValue = new DateOnly(1991, 3, 3);

            try
            {
                var result = testValue.ArgumentInRange(lowerValue, upperValue);
            }
            catch
            {
                Assert.Fail();
            }

            // Test Exception
            _ = Assert.ThrowsException <ArgumentOutOfRangeException>(() => testValue.ArgumentInRange(outOfRangeLowerValue, outOfRangeUpperValue));
        }
Esempio n. 2
0
        public async Task GetAllDates_ShouldReplacePlaceholdereByHostAndPort_InRecordText()
        {
            var context = CreateContext();

            await AddTestData(context);

            var datesService       = GetDatesService(10, context);
            var hostAndPortService = new HostAndPortStub();

            var list = await datesService.GetAllDates(DateOnly.FromDateTime(DateTime.UtcNow));

            var r1 = list[2];

            r1?.Text.Should().NotContain(hostAndPortService.GetHostAndPortPlaceholder());
            r1?.Text.Should().Contain(hostAndPortService.GetHostAndPort());
            var r2 = list[5];

            r2?.Text.Should().NotContain(hostAndPortService.GetHostAndPortPlaceholder());
            r2?.Text.Should().Contain(hostAndPortService.GetHostAndPort());
        }
Esempio n. 3
0
        public static void AddDaysTest()
        {
            DateOnly dateOnly = DateOnly.MinValue.AddDays(1);

            Assert.Equal(1, dateOnly.DayNumber);
            dateOnly = dateOnly.AddDays(1);
            Assert.Equal(2, dateOnly.DayNumber);
            dateOnly = dateOnly.AddDays(100);
            Assert.Equal(102, dateOnly.DayNumber);

            dateOnly = DateOnly.MaxValue.AddDays(-1);
            Assert.Equal(DateOnly.MaxValue.DayNumber - 1, dateOnly.DayNumber);
            dateOnly = dateOnly.AddDays(-1);
            Assert.Equal(DateOnly.MaxValue.DayNumber - 2, dateOnly.DayNumber);
            dateOnly = dateOnly.AddDays(-100);
            Assert.Equal(DateOnly.MaxValue.DayNumber - 102, dateOnly.DayNumber);

            Assert.Throws <ArgumentOutOfRangeException>(() => DateOnly.MinValue.AddDays(-1));
            Assert.Throws <ArgumentOutOfRangeException>(() => DateOnly.MaxValue.AddDays(1));
        }
Esempio n. 4
0
        public static void ConvertFrom_DateOnlyInstanceDescriptor()
        {
            using (new ThreadCultureChange("fr-FR"))
            {
                DateOnly        testDateOnly = DateOnly.FromDateTime(DateTime.UtcNow);
                ConstructorInfo ctor         = typeof(DateOnly).GetConstructor(new Type[]
                {
                    typeof(int), typeof(int), typeof(int)
                });

                InstanceDescriptor descriptor = new InstanceDescriptor(ctor, new object[]
                {
                    testDateOnly.Year, testDateOnly.Month, testDateOnly.Day
                });

                const string format = "dd MMM yyyy";
                object       o      = s_converter.ConvertFrom(descriptor);
                Assert.Equal(testDateOnly.ToString(format), ((DateOnly)o).ToString(format));
            }
        }
Esempio n. 5
0
        public void ConvertFromStringTest()
        {
            var converter = new DateOnlyConverter();

            var propertyMapData = new MemberMapData(null);

            propertyMapData.TypeConverterOptions.CultureInfo = CultureInfo.CurrentCulture;

            var row = new CsvReader(new ParserMock());

            var date = DateOnly.FromDateTime(DateTime.Now);

            // Valid conversions.
            Assert.Equal(date.ToString(), converter.ConvertFromString(date.ToString(), null, propertyMapData).ToString());
            Assert.Equal(date.ToString(), converter.ConvertFromString(date.ToString("o"), null, propertyMapData).ToString());
            Assert.Equal(date.ToString(), converter.ConvertFromString(" " + date + " ", null, propertyMapData).ToString());

            // Invalid conversions.
            Assert.Throws <TypeConverterException>(() => converter.ConvertFromString(null, row, propertyMapData));
        }
Esempio n. 6
0
    public void CanArriveAtQueryStringPageWithDateTimeQuery()
    {
        var dateTime = new DateTime(2000, 1, 2, 3, 4, 5, 6);
        var dateOnly = new DateOnly(2000, 1, 2);
        var timeOnly = new TimeOnly(3, 4, 5, 6);

        SetUrlViaPushState($"/WithQueryParameters/Abc?NullableDateTimeValue=2000-01-02%2003:04:05&NullableDateOnlyValue=2000-01-02&NullableTimeOnlyValue=03:04:05");

        var app = Browser.MountTestComponent <TestRouter>();

        Assert.Equal("Hello Abc .", app.FindElement(By.Id("test-info")).Text);
        Assert.Equal("0", app.FindElement(By.Id("value-QueryInt")).Text);
        Assert.Equal(dateTime.ToString("hh:mm:ss on yyyy-MM-dd", CultureInfo.InvariantCulture), app.FindElement(By.Id("value-NullableDateTimeValue")).Text);
        Assert.Equal(dateOnly.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), app.FindElement(By.Id("value-NullableDateOnlyValue")).Text);
        Assert.Equal(timeOnly.ToString("hh:mm:ss", CultureInfo.InvariantCulture), app.FindElement(By.Id("value-NullableTimeOnlyValue")).Text);
        Assert.Equal(string.Empty, app.FindElement(By.Id("value-StringValue")).Text);
        Assert.Equal("0 values ()", app.FindElement(By.Id("value-LongValues")).Text);

        AssertHighlightedLinks("With query parameters (none)", "With query parameters (passing Date Time values)");
    }
Esempio n. 7
0
        public async Task <List <DateListItem> > GetDatesFromRange(DateOnly today, bool withEmptyDates)
        {
            var daysCount  = (await _appSettingsService.GetAppSettingInt(AppSettingsKey.ImportantDaysDisplayRange)) ?? throw new Exception("Setting 'ImportantDaysDisplayRange' does not exists");
            var allRecords = await GetAllDates(today);

            var startDate  = today.AddDays(-daysCount);
            var datesRange = Enumerable.Range(0, daysCount * 2)
                             .Select(i => startDate.AddDays(i))
                             .Select(d => new DateListItem(Guid.Empty, d, d, "", "", ""))
                             .ToList();

            var datesFromRange = new List <DateListItem>();
            var emptyDates     = new HashSet <DateListItem>();

            foreach (var rec in allRecords)
            {
                var emptyDate = datesRange.SingleOrDefault(d => d.TransferredDate.Month == rec.TransferredDate.Month && d.TransferredDate.Day == rec.TransferredDate.Day);
                if (emptyDate == null)
                {
                    continue;
                }

                datesFromRange.Add(rec with {
                    TransferredDate = emptyDate.TransferredDate
                });
                if (!emptyDates.Contains(emptyDate))
                {
                    emptyDates.Add(emptyDate);
                }
            }

            if (!withEmptyDates)
            {
                return(datesFromRange.OrderBy(d => d.TransferredDate).ToList());
            }

            datesRange = datesRange.Except(emptyDates).ToList();
            datesRange.AddRange(datesFromRange);

            return(datesRange.OrderBy(d => d.TransferredDate).ToList());
        }
Esempio n. 8
0
    public async Task RevokeRoleAsync()
    {
        var birthdayRoleId = (DiscordRoleId)_dynamicConfiguration.DiscordMapping[BirthdayRoleIdKey];
        var birthdayUsers  = await _birthdayProvider.GetBirthdaysAsync(DateOnly.FromDateTime(DateTime.UtcNow));

        foreach (var userId in birthdayUsers)
        {
            if (!_discordAccess.CanManageRolesForUser(userId))
            {
                continue;
            }

            var(success, _) = await _discordAccess.TryRevokeNonMemberRole(userId, birthdayRoleId);

            if (!success)
            {
                await _discordAccess.LogToDiscord($"{_discordAccess.GetLeadershipMention()}: "
                                                  + $"Failed to revoke role {birthdayRoleId.ToMention()} from {userId.ToMention()}.");
            }
        }
    }
Esempio n. 9
0
    public async Task DateOnlyValueTest()
    {
        var expected = DateOnly.Parse("2000-10-20");
        var value    = DateOnly.Parse("2020-10-20");

        using var ctx = new TestContext();
        var cut = ctx.RenderComponent <BSInputCheckbox <DateOnly> >(parameters =>
                                                                    parameters.Add(p => p.Value, value)
                                                                    .Add(p => p.CheckedValue, DateOnly.Parse("2000-10-20"))
                                                                    .Add(p => p.UnCheckedValue, DateOnly.Parse("2020-10-20"))
                                                                    .Add(p => p.ValueChanged, e =>
        {
            value = e;
        })
                                                                    );

        cut.Find("input").Click();
        Assert.Equal(expected, value);
        cut.Find("input").Click();
        Assert.Equal(DateOnly.Parse("2020-10-20"), value);
    }
Esempio n. 10
0
        public static Arbitrary <DateExpression> DateExpressions()
        {
            Gen <DateExpression> dateTimeGenerator = GetArbitraryFor <DateTime>()
                                                     .Generator
                                                     .Select(dateTime => new DateExpression(year: dateTime.Year, month: dateTime.Month, day: dateTime.Day));

#if NET6_0_OR_GREATER
            Gen <DateExpression> dateOnlyGenerator = GetArbitraryFor <DateTime>()
                                                     .Generator
                                                     .Select(dateTime => DateOnly.FromDateTime(dateTime))
                                                     .Select(date => new DateExpression(year: date.Year, month: date.Month, day: date.Day));
#endif

#if !NET6_0_OR_GREATER
            return(dateTimeGenerator
                   .ToArbitrary());
#else
            return(Gen.OneOf(dateTimeGenerator, dateOnlyGenerator)
                   .ToArbitrary());
#endif
        }
Esempio n. 11
0
        public async Task SoftDeleting_GetAllDates_ShouldNotReturnRecordsWithRemovedThemes()
        {
            var context = CreateContext();

            context.SoftDeleting = true;
            var(scopes, records) = await AddTestData(context);

            var themeId  = scopes[0].Themes.ElementAt(1).Id;
            var recordId = records[0].Id;
            var tr       = await context.RecordThemes.SingleOrDefaultAsync(tr => tr.RecordId == recordId && tr.ThemeId == themeId);

            tr.Deleted = true;
            await context.SaveChangesAsync();

            var datesService = GetDatesService(10, context);

            var list = await datesService.GetAllDates(DateOnly.FromDateTime(DateTime.UtcNow));

            list.Should().HaveCount(7);
            list.Should().NotContain(item => item.Id == records[0].Id);
        }
Esempio n. 12
0
        public async Task GetRecordsCount_ByDateAndName_ShouldReturn2()
        {
            string    searchName     = "SearchТекстІї*01";
            const int matchesInRange = 2;
            var       dateFrom       = DateOnly.FromDateTime(DateTime.UtcNow.AddDays(-14));
            var       dateTo         = DateOnly.FromDateTime(DateTime.UtcNow.AddDays(-9));
            var       context        = CreateContext();

            Create_20Records(context, GetNamesList(), GetDatesList(20));
            var searchService = GetRecordsSearchService(context);
            var filters       = new RecordsFilter
            {
                FilterName = searchName,
                FromDate   = dateFrom,
                ToDate     = dateTo
            };

            int count = await searchService.GetRecordsCount(filters);

            count.Should().Be(matchesInRange);
        }
Esempio n. 13
0
        public static void OperatorsTest()
        {
            Assert.True(DateOnly.MinValue != DateOnly.MaxValue);
            Assert.True(DateOnly.MinValue < DateOnly.MaxValue);
            Assert.True(DateOnly.MinValue <= DateOnly.MaxValue);
            Assert.True(DateOnly.MaxValue > DateOnly.MinValue);
            Assert.True(DateOnly.MaxValue >= DateOnly.MinValue);

            DateOnly dateOnly1 = new DateOnly(2021, 10, 10);
            DateOnly dateOnly2 = new DateOnly(2021, 10, 11);
            DateOnly dateOnly3 = new DateOnly(2021, 10, 10);

            Assert.True(dateOnly1 == dateOnly3);
            Assert.True(dateOnly1 >= dateOnly3);
            Assert.True(dateOnly1 <= dateOnly3);
            Assert.True(dateOnly1 != dateOnly2);
            Assert.True(dateOnly1 < dateOnly2);
            Assert.True(dateOnly1 <= dateOnly2);
            Assert.True(dateOnly2 > dateOnly1);
            Assert.True(dateOnly2 >= dateOnly1);
        }
        public IActionResult Put(int key, [FromBody] Delta <DateOnyTimeOnlyModel> dt)
        {
            Assert.Equal(new[] { "Birthday", "CreatedTime" }, dt.GetChangedPropertyNames());

            // Birthday
            object value;
            bool   success = dt.TryGetPropertyValue("Birthday", out value);

            Assert.True(success);
            DateOnly dateOnly = Assert.IsType <DateOnly>(value);

            Assert.Equal(new DateOnly(2199, 1, 2), dateOnly);

            // CreatedTime
            success = dt.TryGetPropertyValue("CreatedTime", out value);
            Assert.True(success);
            TimeOnly timeOnly = Assert.IsType <TimeOnly>(value);

            Assert.Equal(new TimeOnly(14, 13, 15, 179), timeOnly);
            return(Updated(dt));
        }
Esempio n. 15
0
    public void ToObject_DateOnlyColumn(string dataSourceName, DataSourceType mode)
    {
        var dataSource = DataSource(dataSourceName, mode);

        try
        {
            var cust = new CustomerWithDate()
            {
                FullName = Guid.NewGuid().ToString(), State = "XX", BirthDay = DateOnly.FromDateTime(DateTime.Now)
            };

            var key = dataSource.Insert(CustomerTableName, cust).ToInt32().Execute();

            var lookup = dataSource.GetByKey(CustomerTableName, key).ToObject <CustomerWithDate>().Execute();
            Assert.AreEqual(cust.BirthDay, lookup.BirthDay);
        }
        finally
        {
            Release(dataSource);
        }
    }
Esempio n. 16
0
        public async Task GetDatesFromRange_ShouldReturn1Records_Then2Records()
        {
            var context = CreateContext();

            await AddTestData(context);

            var datesService = GetDatesService(5, context);

            var list = await datesService.GetDatesFromRange(new DateOnly(2020, 04, 28), false);

            list.Should().HaveCount(1);
            list[0].Date.Should().Be(DateOnly.Parse("2012-04-23"));

            //============================//

            list = await datesService.GetDatesFromRange(new DateOnly(2020, 06, 19), false);

            list.Should().HaveCount(2);
            var expected = new string[] { "2019-06-23", "2015-06-23" }.Select(t => DateOnly.Parse(t)).ToList();

            list.Select(i => i.Date).Should().OnlyContain(d => expected.Contains(d));
        }
Esempio n. 17
0
        TsDateData <TKey, TAssetId, TValue1, TValue2> m_data;                                                          // this m_data pointer can be swapped in an atomic instruction after update

        static void HowToUseThisClassExamples()
        {
            DateOnly[] dates = new DateOnly[2] {
                new DateOnly(2020, 05, 05), new DateOnly(2020, 05, 06)
            };
            var dict1 = new Dictionary <TickType, float[]>()
            {
                { TickType.SplitDivAdjClose, new float[2] {
                      10.1f, 12.1f
                  } }
            };
            var  dict2   = new Dictionary <TickType, uint[]>();
            uint assetId = 1;
            var  data    = new Dictionary <uint, Tuple <Dictionary <TickType, float[]>, Dictionary <TickType, uint[]> > >()
            {
                { assetId, new Tuple <Dictionary <TickType, float[]>, Dictionary <TickType, uint[]> >(dict1, dict2) }
            };

            var ts1 = new CompactFinTimeSeries <DateOnly, uint, float, uint>();

            ts1.ChangeData(dates, data);
        }
Esempio n. 18
0
        bool GetField <T>(string fieldName, out T value, T defaultValue)
        {
            var obj = GetField(fieldName);

            if (obj != null)
            {
                try {
                    //if (typeof(T) == typeof(Currency)) {
                    //	value = Currency.ToCurrency(obj);
                    //}

                    ////FIXME
                    //if (obj.GetType() == typeof(DateTime))
                    //	obj = ((DateTime)obj).ToLocalTime();

                    if (typeof(T) == typeof(DateOnly))
                    {
                        obj = DateOnly.ToDateOnly(obj);
                    }

                    if (obj is T _value)
                    {
                        value = _value;
                    }
                    else
                    {
                        obj   = Convert.ChangeType(obj, typeof(T));
                        value = (T)obj;
                    }
                    return(true);
                }
                catch (Exception exc) {
                    //Debug.ExceptionCaught(exc);
                    Debug.Print("Exception caught in AirRecord.GetField(): fieldName={0}, obj={1}:  {2}", fieldName, obj, exc);
                }
            }
            value = defaultValue;
            return(false);
        }
Esempio n. 19
0
        private static async Task Run(Options option)
        {
            Program.pseGetOption = option;
            var fromDate = DateOnly.FromDateTime(DateTime.Today);
            var toDate   = DateOnly.FromDateTime(DateTime.Today);

            if (!option.DateRange.Equals("today", StringComparison.OrdinalIgnoreCase))
            {
                var dateRange = option.DateRange.Split(':');
                if (dateRange.Length == 0)
                {
                    throw new Exception($"{option.DateRange} is not a valid date range.");
                }
                fromDate = DateOnly.Parse(dateRange[0].Trim());
                toDate   = DateOnly.Parse(dateRange[1].Trim());
                if (toDate < fromDate)
                {
                    throw new Exception("Invalid date range.");
                }
            }

            var downloadDate = fromDate;

            while (downloadDate <= toDate)
            {
                var pdfBytes = await DownloadReport(downloadDate);

                if (pdfBytes != null)
                {
                    Log.Information($"Converting to CSV...");
                    await ConvertPdfBytesToCsv(pdfBytes, downloadDate);

                    Log.Information("Done.");
                }
                downloadDate = downloadDate.AddDays(1);
            }

            Log.Information("Download complete.");
        }
Esempio n. 20
0
        public static void BasicFormatParseTest()
        {
            DateOnly dateOnly       = DateOnly.FromDateTime(DateTime.Today);
            string   s              = dateOnly.ToString();
            DateOnly parsedDateOnly = DateOnly.Parse(s);

            Assert.True(DateOnly.TryParse(s, out DateOnly parsedDateOnly1));
            Assert.Equal(dateOnly, parsedDateOnly);
            Assert.Equal(dateOnly, parsedDateOnly1);
            parsedDateOnly = DateOnly.Parse(s.AsSpan());
            Assert.True(DateOnly.TryParse(s.AsSpan(), out parsedDateOnly1));
            Assert.Equal(dateOnly, parsedDateOnly);
            Assert.Equal(dateOnly, parsedDateOnly1);

            s = dateOnly.ToString(CultureInfo.InvariantCulture);
            parsedDateOnly = DateOnly.Parse(s, CultureInfo.InvariantCulture);
            Assert.True(DateOnly.TryParse(s.AsSpan(), CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDateOnly1));
            Assert.Equal(dateOnly, parsedDateOnly);
            Assert.Equal(dateOnly, parsedDateOnly1);
            parsedDateOnly = DateOnly.Parse(s.AsSpan(), CultureInfo.InvariantCulture);
            Assert.True(DateOnly.TryParse(s.AsSpan(), CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDateOnly1));
            Assert.Equal(dateOnly, parsedDateOnly);
            Assert.Equal(dateOnly, parsedDateOnly1);

            Assert.False(DateOnly.TryParse(s, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal, out parsedDateOnly1));
            Assert.Throws <ArgumentException>(() => DateOnly.Parse(s, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal));
            Assert.False(DateOnly.TryParse(s, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out parsedDateOnly1));
            Assert.Throws <ArgumentException>(() => DateOnly.Parse(s, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal));
            Assert.False(DateOnly.TryParse(s, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out parsedDateOnly1));
            Assert.Throws <ArgumentException>(() => DateOnly.Parse(s, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal));
            Assert.False(DateOnly.TryParse(s, CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault, out parsedDateOnly1));
            Assert.Throws <ArgumentException>(() => DateOnly.Parse(s, CultureInfo.InvariantCulture, DateTimeStyles.NoCurrentDateDefault));

            s = "     " + s + "     ";
            parsedDateOnly = DateOnly.Parse(s, CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces);
            Assert.Equal(dateOnly, parsedDateOnly);
            parsedDateOnly = DateOnly.Parse(s.AsSpan(), CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces);
            Assert.Equal(dateOnly, parsedDateOnly);
        }
Esempio n. 21
0
        internal static object ConvertPrimitiveValue(object value, IEdmPrimitiveTypeReference primitiveType, TimeZoneInfo timeZoneInfo)
        {
            if (value == null)
            {
                return(null);
            }

            Type type = value.GetType();

            if (primitiveType != null && primitiveType.IsDate() && TypeHelper.IsDateTime(type))
            {
                Date dt = (DateTime)value;
                return(dt);
            }

            if (primitiveType != null && primitiveType.IsTimeOfDay() && TypeHelper.IsTimeSpan(type))
            {
                TimeOfDay tod = (TimeSpan)value;
                return(tod);
            }

#if NET6_0
            // Since ODL doesn't support "DateOnly", we have to use Date defined in ODL.
            if (primitiveType != null && primitiveType.IsDate() && TypeHelper.IsDateOnly(type))
            {
                DateOnly dateOnly = (DateOnly)value;
                return(new Date(dateOnly.Year, dateOnly.Month, dateOnly.Day));
            }

            // Since ODL doesn't support "TimeOnly", we have to use TimeOfDay defined in ODL.
            if (primitiveType != null && primitiveType.IsTimeOfDay() && TypeHelper.IsTimeOnly(type))
            {
                TimeOnly timeOnly = (TimeOnly)value;
                return(new TimeOfDay(timeOnly.Hour, timeOnly.Minute, timeOnly.Second, timeOnly.Millisecond));
            }
#endif

            return(ConvertUnsupportedPrimitives(value, timeZoneInfo));
        }
Esempio n. 22
0
        public static void AddYearsTest()
        {
            DateOnly dateOnly = new DateOnly(2021, 1, 31);

            for (int i = 2021; i < 2040; i++)
            {
                Assert.Equal(i, dateOnly.Year);
                dateOnly = dateOnly.AddYears(1);
            }

            for (int i = dateOnly.Year; i > 2020; i--)
            {
                Assert.Equal(i, dateOnly.Year);
                dateOnly = dateOnly.AddYears(-1);
            }

            DateTime dt = DateTime.Today;

            dateOnly = DateOnly.FromDayNumber((int)(dt.Ticks / TimeSpan.TicksPerDay));

            Assert.Equal(dt.Year, dateOnly.Year);
            Assert.Equal(dt.Month, dateOnly.Month);
            Assert.Equal(dt.Day, dateOnly.Day);

            dt       = dt.AddYears(1);
            dateOnly = dateOnly.AddYears(1);
            Assert.Equal(dt.Year, dateOnly.Year);

            dt       = dt.AddYears(50);
            dateOnly = dateOnly.AddYears(50);
            Assert.Equal(dt.Year, dateOnly.Year);

            dt       = dt.AddYears(-150);
            dateOnly = dateOnly.AddYears(-150);
            Assert.Equal(dt.Year, dateOnly.Year);

            Assert.Throws <ArgumentOutOfRangeException>(() => DateOnly.MinValue.AddYears(-1));
            Assert.Throws <ArgumentOutOfRangeException>(() => DateOnly.MaxValue.AddYears(1));
        }
Esempio n. 23
0
        public static void DateTimeConversionTest()
        {
            DateTime dt       = DateTime.Today;
            DateOnly dateOnly = DateOnly.FromDateTime(dt);

            Assert.Equal(dt.Year, dateOnly.Year);
            Assert.Equal(dt.Month, dateOnly.Month);
            Assert.Equal(dt.Day, dateOnly.Day);

            dt = dateOnly.ToDateTime(new TimeOnly(1, 10, 20));
            Assert.Equal(dateOnly.Year, dt.Year);
            Assert.Equal(dateOnly.Month, dt.Month);
            Assert.Equal(dateOnly.Day, dt.Day);

            Assert.Equal(1, dt.Hour);
            Assert.Equal(10, dt.Minute);
            Assert.Equal(20, dt.Second);
            Assert.Equal(DateTimeKind.Unspecified, dt.Kind);


            dt = dateOnly.ToDateTime(new TimeOnly(23, 59, 59), DateTimeKind.Utc);
            Assert.Equal(dateOnly.Year, dt.Year);
            Assert.Equal(dateOnly.Month, dt.Month);
            Assert.Equal(dateOnly.Day, dt.Day);

            Assert.Equal(23, dt.Hour);
            Assert.Equal(59, dt.Minute);
            Assert.Equal(59, dt.Second);
            Assert.Equal(DateTimeKind.Utc, dt.Kind);

            dt = dateOnly.ToDateTime(new TimeOnly(23, 59, 59), DateTimeKind.Local);
            Assert.Equal(DateTimeKind.Local, dt.Kind);

            dateOnly = DateOnly.FromDateTime(dt);
            Assert.Equal(dt.Year, dateOnly.Year);
            Assert.Equal(dt.Month, dateOnly.Month);
            Assert.Equal(dt.Day, dateOnly.Day);
        }
Esempio n. 24
0
    public async Task ApplyRoleAsync()
    {
        var birthdayRoleId = (DiscordRoleId)_dynamicConfiguration.DiscordMapping[BirthdayRoleIdKey];
        var birthdayUsers  = await _birthdayProvider.GetBirthdaysAsync(DateOnly.FromDateTime(DateTime.UtcNow));

        var userIdsWithAppliedRole = new List <DiscordUserId>(birthdayUsers.Length);

        foreach (var userId in birthdayUsers)
        {
            if (!_discordAccess.CanManageRolesForUser(userId))
            {
                continue;
            }

            var(success, _) = await _discordAccess.TryAddNonMemberRole(userId, birthdayRoleId);

            if (success)
            {
                userIdsWithAppliedRole.Add(userId);
            }
            else
            {
                await _discordAccess.LogToDiscord($"{_discordAccess.GetLeadershipMention()}: "
                                                  + $"Failed to apply role {birthdayRoleId.ToMention()} to {userId.ToMention()}.");
            }
        }

        if (userIdsWithAppliedRole.Count == 0)
        {
            return;
        }

        var birthdayAnnouncementChannelId = (DiscordChannelId)_dynamicConfiguration.DiscordMapping[BirthdayAnnouncementChannelIdKey];
        var messages = userIdsWithAppliedRole.Select(m => "HoU wishes a Happy Birthday to our latest Birthday Yata, "
                                                     + $"{m.ToMention()}. Have an amazing day filled with fun!!!")
                       .ToArray();
        await _discordAccess.CreateBotMessagesInChannelAsync(birthdayAnnouncementChannelId, messages);
    }
Esempio n. 25
0
    public void Should_respect_deviating_weekend_definition()
    {
        var saturday  = new DateOnly(2022, 4, 23);
        var sunday    = saturday.AddDays(1);
        var monday    = sunday.AddDays(1);
        var tuesday   = monday.AddDays(1);
        var wednesday = tuesday.AddDays(1);
        var thursday  = wednesday.AddDays(1);
        var friday    = thursday.AddDays(1);

        //weekend is WED + FRI
        var nwd = new NonWorkingDays {
            Weekend = new List <DayOfWeek> {
                DayOfWeek.Wednesday, DayOfWeek.Friday
            }
        };
        var customWeekendIsWedAndFri = !saturday.isWeekend(nwd) &&
                                       !sunday.isWeekend(nwd) &&
                                       !monday.isWeekend(nwd) &&
                                       !tuesday.isWeekend(nwd) &&
                                       wednesday.isWeekend(nwd) &&
                                       !thursday.isWeekend(nwd) &&
                                       friday.isWeekend(nwd);

        //there is no weekend
        var nwd2 = new NonWorkingDays {
            Weekend = new List <DayOfWeek>()
        };
        var thereIsNoWeekend = !saturday.isWeekend(nwd2) &&
                               !sunday.isWeekend(nwd2) &&
                               !monday.isWeekend(nwd2) &&
                               !tuesday.isWeekend(nwd2) &&
                               !wednesday.isWeekend(nwd2) &&
                               !thursday.isWeekend(nwd2) &&
                               !friday.isWeekend(nwd2);

        Assert.True(customWeekendIsWedAndFri && thereIsNoWeekend);
    }
Esempio n. 26
0
        private static object ConvertObjectToDateTime(object source, Type targetType)
        {
            object dateTime = null;

            if (targetType == typeof(DateTime) || targetType == typeof(DateTime?))
            {
                if (DateTime.TryParse(source?.ToString(), out DateTime result))
                {
                    dateTime = result;
                }
                else if (targetType == typeof(DateTime?))
                {
                    dateTime = null;
                }
            }
            else if (targetType == typeof(DateTimeOffset) || targetType == typeof(DateTimeOffset?))
            {
                if (DateTimeOffset.TryParse(source?.ToString(), out DateTimeOffset result))
                {
                    dateTime = result;
                }
                else if (targetType == typeof(DateTimeOffset?))
                {
                    dateTime = null;
                }
            }
#if NET6_0_OR_GREATER
            else if (targetType == typeof(DateOnly) || targetType == typeof(DateOnly))
            {
                if (DateOnly.TryParse(source?.ToString(), out DateOnly result))
                {
                    dateTime = result;
                }
            }
#endif

            return(dateTime);
        }
Esempio n. 27
0
        public void DateOnly_Iss338_Test_Should_Succeed()
        {
            var serializer = new DefaultJsonSerializer("json", new JsonSerializerSettings()
            {
                NullValueHandling = NullValueHandling.Ignore,
                Converters        = new List <JsonConverter>()
                {
                    new DateOnlyJsonConverter()
                }
            });

            var dateTime = DateTime.Parse("2021-12-21 12:12:12");
            var date     = DateOnly.FromDateTime(dateTime);

            DateOnlyModel m = new DateOnlyModel {
                Name = "Joe User", Date = date
            };

            var @byte = serializer.Serialize(m);
            var @obj  = serializer.Deserialize <DateOnlyModel>(@byte);

            Assert.Equal(date, obj.Date);
        }
Esempio n. 28
0
        public async Task GetRecordsList_ByDateAndName_ShouldReturn2Records()
        {
            string searchName = "SearchТекстІї*01";
            var    dateFrom   = DateOnly.FromDateTime(DateTime.UtcNow.AddDays(-14));
            var    dateTo     = DateOnly.FromDateTime(DateTime.UtcNow.AddDays(-9));
            var    context    = CreateContext();

            Create_20Records(context, GetNamesList(), GetDatesList(20));
            var svc     = GetRecordsSearchService(context);
            var filters = new RecordsFilter
            {
                FilterName = searchName,
                FromDate   = dateFrom,
                ToDate     = dateTo
            };

            var resList = await svc.GetRecordsList(filters);

            resList.Should().OnlyContain(rec =>
                                         rec.Name.IndexOf(searchName, StringComparison.InvariantCultureIgnoreCase) != -1 &&
                                         rec.Date >= dateFrom &&
                                         rec.Date <= dateTo);
        }
        public override void FormatValue(StringBuilder queryStringBuilder, object?value)
        {
            if (value == null || value is DBNull)
            {
                throw new ClickHouseException(ClickHouseErrorCodes.TypeNotSupported, $"The ClickHouse type \"{ComplexTypeName}\" does not allow null values");
            }

            DateOnly dateOnlyValue = value switch
            {
                DateOnly theValue => theValue,
                DateTime theValue => DateOnly.FromDateTime(theValue),
                _ => throw new ClickHouseException(ClickHouseErrorCodes.TypeNotSupported, $"The type \"{value.GetType()}\" can't be converted to the ClickHouse type \"{ComplexTypeName}\"."),
            };

            var days = dateOnlyValue == default ? 0 : dateOnlyValue.DayNumber - UnixEpoch.DayNumber;

            if (days < 0 || days > ushort.MaxValue)
            {
                throw new OverflowException("The value must be in range [1970-01-01, 2149-06-06].");
            }

            queryStringBuilder.Append(days.ToString(CultureInfo.InvariantCulture));
        }
Esempio n. 30
0
        /// <summary>
        /// Converts the given value object to a <see cref='System.DateOnly'/> object.
        /// </summary>
        /// <inheritdoc />
        public override object?ConvertFrom(ITypeDescriptorContext?context, CultureInfo?culture, object value)
        {
            if (value is string text)
            {
                text = text.Trim();
                if (text.Length == 0)
                {
                    return(DateOnly.MinValue);
                }

                try
                {
                    // See if we have a culture info to parse with. If so, then use it.
                    DateTimeFormatInfo?formatInfo = null;

                    if (culture != null)
                    {
                        formatInfo = (DateTimeFormatInfo?)culture.GetFormat(typeof(DateTimeFormatInfo));
                    }

                    if (formatInfo != null)
                    {
                        return(DateOnly.Parse(text, formatInfo));
                    }
                    else
                    {
                        return(DateOnly.Parse(text, culture));
                    }
                }
                catch (FormatException e)
                {
                    throw new FormatException(SR.Format(SR.ConvertInvalidPrimitive, (string)value, nameof(DateOnly)), e);
                }
            }

            return(base.ConvertFrom(context, culture, value));
        }