示例#1
0
        public async Task LinqToCargoDateTimeTest2(double backtrackDays)
        {
            var site = await GetWikiSiteAsync(Endpoints.LolEsportsWiki);

            var cqContext = new LolCargoQueryContext(site);
            var q         = cqContext.Skins
                            .OrderBy(s => s.ReleaseDate)
                            .Where(s => CargoFunctions.DateDiff(s.ReleaseDate, DateTime.Now - TimeSpan.FromDays(backtrackDays)) >= 0)
                            .Take(10);
            // Call .AsAsyncEnumerable to ensure we use async Linq call.
            var records = await q.AsAsyncEnumerable().ToListAsync();

            ShallowTrace(records, 3);
            // Left some buffer as server time may deviate from the client time.
            var expectedMinReleaseDate = DateTime.UtcNow - TimeSpan.FromDays(backtrackDays + 1);

            Output.WriteLine("expectedMinReleaseDate = {0:O}", expectedMinReleaseDate);
            Assert.All(records, r => Assert.True(r.ReleaseDate == null || r.ReleaseDate > expectedMinReleaseDate));
        }
示例#2
0
        public async Task LinqToCargoDateTimeTest3()
        {
            var site = await GetWikiSiteAsync(Endpoints.LolEsportsWiki);

            var cqContext = new LolCargoQueryContext(site);
            // Cargo build on lolwiki does not support `&&` very well for now.
            var q = from s in cqContext.Skins
                    where CargoFunctions.Holds(s.Artists, "David Villegas") || CargoFunctions.HoldsLike(s.Artists, "% Studio")
                    where s.ReleaseDate >= new DateTime(2020, 1, 1) && s.ReleaseDate <= new DateTime(2021, 1, 1)
                    orderby s.ReleaseDate descending
                    // HACK projection Artists = s.Artists works here as by default we use (,) as delimiter.
                    // TODO pass through CargoCollectionAttribute to ProjectionExpression.
                    select new { s.Page, s.Name, s.Artists, s.ReleaseDate };
            var records = await q.Take(50).AsAsyncEnumerable().ToListAsync();

            ShallowTrace(records, 3);
            Assert.All(records, r =>
                       Assert.All(r.Artists,
                                  a => Assert.True(a == "David Villegas" || a.EndsWith(" Studio"))
                                  )
                       );
        }