From a3f17dc7b08568f55ce38a7050f0cb89842adbbd Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Fri, 23 Nov 2018 10:00:59 +0100 Subject: [PATCH] Tags icon and fixes in usage tracking. --- .../Assets/AssetUsageTracker.cs | 2 +- .../UsageTracking/BackgroundUsageTracker.cs | 22 ++++---- .../UsageTracking/CachingUsageTracker.cs | 20 ++++--- .../UsageTracking/IUsageTracker.cs | 6 +- .../Statistics/UsagesController.cs | 4 +- src/Squidex/Pipeline/ApiCostsFilter.cs | 4 +- .../pages/schema/types/tags-ui.component.html | 2 +- src/Squidex/app/theme/icomoon/demo.html | 18 +++++- .../app/theme/icomoon/fonts/icomoon.eot | Bin 26200 -> 26364 bytes .../app/theme/icomoon/fonts/icomoon.svg | 1 + .../app/theme/icomoon/fonts/icomoon.ttf | Bin 26036 -> 26200 bytes .../app/theme/icomoon/fonts/icomoon.woff | Bin 26112 -> 26276 bytes src/Squidex/app/theme/icomoon/selection.json | 2 +- src/Squidex/app/theme/icomoon/style.css | 13 +++-- .../BackgroundUsageTrackerTests.cs | 52 +++++++++--------- .../UsageTracking/CachingUsageTrackerTests.cs | 18 +++--- .../Pipeline/ApiCostsFilterTests.cs | 12 ++-- 17 files changed, 102 insertions(+), 74 deletions(-) diff --git a/src/Squidex.Domain.Apps.Entities/Assets/AssetUsageTracker.cs b/src/Squidex.Domain.Apps.Entities/Assets/AssetUsageTracker.cs index 9f0da274a..eb6eb6168 100644 --- a/src/Squidex.Domain.Apps.Entities/Assets/AssetUsageTracker.cs +++ b/src/Squidex.Domain.Apps.Entities/Assets/AssetUsageTracker.cs @@ -45,7 +45,7 @@ namespace Squidex.Domain.Apps.Entities.Assets { var enriched = new List(); - var usagesFlat = await usageStore.QueryAsync(appId.ToString(), fromDate, toDate); + var usagesFlat = await usageStore.QueryAsync(GetKey(appId), fromDate, toDate); for (var date = fromDate; date <= toDate; date = date.AddDays(1)) { diff --git a/src/Squidex.Infrastructure/UsageTracking/BackgroundUsageTracker.cs b/src/Squidex.Infrastructure/UsageTracking/BackgroundUsageTracker.cs index 4de7138ad..2cb0240f7 100644 --- a/src/Squidex.Infrastructure/UsageTracking/BackgroundUsageTracker.cs +++ b/src/Squidex.Infrastructure/UsageTracking/BackgroundUsageTracker.cs @@ -96,9 +96,9 @@ namespace Squidex.Infrastructure.UsageTracking } } - public Task TrackAsync(Guid appId, string category, double weight, double elapsedMs) + public Task TrackAsync(string key, string category, double weight, double elapsedMs) { - var key = GetKey(appId); + key = GetKey(key); ThrowIfDisposed(); @@ -112,11 +112,11 @@ namespace Squidex.Infrastructure.UsageTracking return TaskHelper.Done; } - public async Task>> QueryAsync(Guid appId, DateTime fromDate, DateTime toDate) + public async Task>> QueryAsync(string key, DateTime fromDate, DateTime toDate) { - ThrowIfDisposed(); + key = GetKey(key); - var key = GetKey(appId); + ThrowIfDisposed(); var usagesFlat = await usageRepository.QueryAsync(key, fromDate, toDate); var usagesByCategory = usagesFlat.GroupBy(x => GetCategory(x.Category)).ToDictionary(x => x.Key, x => x.ToList()); @@ -167,11 +167,11 @@ namespace Squidex.Infrastructure.UsageTracking return result; } - public async Task GetMonthlyCallsAsync(Guid appId, DateTime date) + public async Task GetMonthlyCallsAsync(string key, DateTime date) { - ThrowIfDisposed(); + key = GetKey(key); - var key = GetKey(appId); + ThrowIfDisposed(); var dateFrom = new DateTime(date.Year, date.Month, 1); var dateTo = dateFrom.AddMonths(1).AddDays(-1); @@ -186,9 +186,11 @@ namespace Squidex.Infrastructure.UsageTracking return !string.IsNullOrWhiteSpace(category) ? category.Trim() : "*"; } - private static string GetKey(Guid appId) + private static string GetKey(string key) { - return $"{appId}_API"; + Guard.NotNull(key, nameof(key)); + + return $"{key}_API"; } } } diff --git a/src/Squidex.Infrastructure/UsageTracking/CachingUsageTracker.cs b/src/Squidex.Infrastructure/UsageTracking/CachingUsageTracker.cs index 4485a6bb2..7998c422a 100644 --- a/src/Squidex.Infrastructure/UsageTracking/CachingUsageTracker.cs +++ b/src/Squidex.Infrastructure/UsageTracking/CachingUsageTracker.cs @@ -25,25 +25,31 @@ namespace Squidex.Infrastructure.UsageTracking this.inner = inner; } - public Task>> QueryAsync(Guid appId, DateTime fromDate, DateTime toDate) + public Task>> QueryAsync(string key, DateTime fromDate, DateTime toDate) { - return inner.QueryAsync(appId, fromDate, toDate); + Guard.NotNull(key, nameof(key)); + + return inner.QueryAsync(key, fromDate, toDate); } - public Task TrackAsync(Guid appId, string category, double weight, double elapsedMs) + public Task TrackAsync(string key, string category, double weight, double elapsedMs) { - return inner.TrackAsync(appId, category, weight, elapsedMs); + Guard.NotNull(key, nameof(key)); + + return inner.TrackAsync(key, category, weight, elapsedMs); } - public Task GetMonthlyCallsAsync(Guid appId, DateTime date) + public Task GetMonthlyCallsAsync(string key, DateTime date) { - var cacheKey = string.Concat(appId, date); + Guard.NotNull(key, nameof(key)); + + var cacheKey = string.Concat(key, date); return Cache.GetOrCreateAsync(cacheKey, entry => { entry.AbsoluteExpirationRelativeToNow = CacheDuration; - return inner.GetMonthlyCallsAsync(appId, date); + return inner.GetMonthlyCallsAsync(key, date); }); } } diff --git a/src/Squidex.Infrastructure/UsageTracking/IUsageTracker.cs b/src/Squidex.Infrastructure/UsageTracking/IUsageTracker.cs index 3fe05d8bf..f0945d1e1 100644 --- a/src/Squidex.Infrastructure/UsageTracking/IUsageTracker.cs +++ b/src/Squidex.Infrastructure/UsageTracking/IUsageTracker.cs @@ -13,10 +13,10 @@ namespace Squidex.Infrastructure.UsageTracking { public interface IUsageTracker { - Task TrackAsync(Guid appId, string category, double weight, double elapsedMs); + Task TrackAsync(string key, string category, double weight, double elapsedMs); - Task GetMonthlyCallsAsync(Guid appId, DateTime date); + Task GetMonthlyCallsAsync(string key, DateTime date); - Task>> QueryAsync(Guid appId, DateTime fromDate, DateTime toDate); + Task>> QueryAsync(string key, DateTime fromDate, DateTime toDate); } } diff --git a/src/Squidex/Areas/Api/Controllers/Statistics/UsagesController.cs b/src/Squidex/Areas/Api/Controllers/Statistics/UsagesController.cs index fdbcc6a4d..67d0295df 100644 --- a/src/Squidex/Areas/Api/Controllers/Statistics/UsagesController.cs +++ b/src/Squidex/Areas/Api/Controllers/Statistics/UsagesController.cs @@ -58,7 +58,7 @@ namespace Squidex.Areas.Api.Controllers.Statistics [ApiCosts(0)] public async Task GetMonthlyCalls(string app) { - var count = await usageTracker.GetMonthlyCallsAsync(AppId, DateTime.Today); + var count = await usageTracker.GetMonthlyCallsAsync(AppId.ToString(), DateTime.Today); var plan = appPlanProvider.GetPlanForApp(App); @@ -90,7 +90,7 @@ namespace Squidex.Areas.Api.Controllers.Statistics return BadRequest(); } - var entities = await usageTracker.QueryAsync(AppId, fromDate.Date, toDate.Date); + var entities = await usageTracker.QueryAsync(AppId.ToString(), fromDate.Date, toDate.Date); var response = entities.ToDictionary(x => x.Key, x => x.Value.Select(CallsUsageDto.FromUsage).ToList()); diff --git a/src/Squidex/Pipeline/ApiCostsFilter.cs b/src/Squidex/Pipeline/ApiCostsFilter.cs index 0cba6287f..9a41b9c9e 100644 --- a/src/Squidex/Pipeline/ApiCostsFilter.cs +++ b/src/Squidex/Pipeline/ApiCostsFilter.cs @@ -53,7 +53,7 @@ namespace Squidex.Pipeline { var plan = appPlanProvider.GetPlanForApp(appFeature.App); - var usage = await usageTracker.GetMonthlyCallsAsync(appFeature.App.Id, DateTime.Today); + var usage = await usageTracker.GetMonthlyCallsAsync(appFeature.App.Id.ToString(), DateTime.Today); if (plan.MaxApiCalls >= 0 && usage > plan.MaxApiCalls * 1.1) { @@ -72,7 +72,7 @@ namespace Squidex.Pipeline { var elapsedMs = watch.Stop(); - await usageTracker.TrackAsync(appFeature.App.Id, context.HttpContext.User.OpenIdClientId(), FilterDefinition.Weight, elapsedMs); + await usageTracker.TrackAsync(appFeature.App.Id.ToString(), context.HttpContext.User.OpenIdClientId(), FilterDefinition.Weight, elapsedMs); } } else diff --git a/src/Squidex/app/features/schemas/pages/schema/types/tags-ui.component.html b/src/Squidex/app/features/schemas/pages/schema/types/tags-ui.component.html index 17717042d..750a2187a 100644 --- a/src/Squidex/app/features/schemas/pages/schema/types/tags-ui.component.html +++ b/src/Squidex/app/features/schemas/pages/schema/types/tags-ui.component.html @@ -28,7 +28,7 @@ diff --git a/src/Squidex/app/theme/icomoon/demo.html b/src/Squidex/app/theme/icomoon/demo.html index 7bccee9a6..07508b600 100644 --- a/src/Squidex/app/theme/icomoon/demo.html +++ b/src/Squidex/app/theme/icomoon/demo.html @@ -9,7 +9,7 @@
-

Font Name: icomoon (Glyphs: 102)

+

Font Name: icomoon (Glyphs: 103)

Grid Size: 24

@@ -1372,6 +1372,22 @@

Grid Size: 14

+
+
+ + + + icon-control-Tags +
+
+ + +
+
+ liga: + +
+
diff --git a/src/Squidex/app/theme/icomoon/fonts/icomoon.eot b/src/Squidex/app/theme/icomoon/fonts/icomoon.eot index 65d6a6ba58180fc3638a0464a9354bdd786741aa..72467e8885537c0ecc2039befc1652854caf5d91 100644 GIT binary patch delta 446 zcmca{hVjo?Mz%j`3=9!z6WPpIR!)9-ck;p%k%=M6f(IEG81?{hLUL|m!EL+Sj1y1D z)c@uzTF1b^H~}cEkdd00A~I9yCIds_2B12#44?of6Kf8T{{qNY$;d6K=-(@z$-t1r z1Jtu7CqFrnd9l<528QGvK=~WFi4_G5O^i_t3@JeK7!>jnb5mz}asCGKf#xx`733F} zFfapU7}6|2@(j$(jOQk&Fm^L0PyWED%sNjXo`2zH38ui9dS-@+42mpV%$5wi42lfq zK;5RsrY362N^GKn;^uVWY@allnw#6jdw~Y(+LP-Zy|{5D@1xLH7+ zVz?ojuLGke-$*oP%-$@JG?$UNgkj?3HOY6yv-Ab@&lm_WFai~2Ge$6offO?^O?FHZ K-n=D4DI(LY0~r_+1%T?zGJpb{Osv^Jz6X%6l95|d(d{XA1IW(->RFMK zpPb12=Cuw3L$U}^{#tHgMFB%2V-%482FO>)OUzB3>Bae*fgyzlsJ^Wrzqo{f87RY$ zIt3)pz|72ec5(`1H)GP|4~)vJa|Pn~7i^Yb3XIvz86V6nQ<;-c8qaU@m4TZDq>15% pOmzl~o?MY+&X~1%L(*Kv$$=?%cn|2;=pO(|G6HedW~ + diff --git a/src/Squidex/app/theme/icomoon/fonts/icomoon.ttf b/src/Squidex/app/theme/icomoon/fonts/icomoon.ttf index b79c68b236ec999fc8cec640e779aab48a14ede7..ec3e7d32406bfad08cd4a0bc6f506a58a2d88664 100644 GIT binary patch delta 466 zcmdmTn(@XN#(D-u1_lOhh6V;^1_S?KeItG$-h)7qJwTk0oSRs1+wL|{1)~g*pOcvfP)UzfhKiM&nd9l<528QGvKm|8)6DtZBni!)P7*c=+GAQIF=BCc{ z;`|Nd0}W(sE66V{0Xh^2(kwvo49v{uCLZW!OrGq+sLVP~AfA8W<`Txhn0jW0i42M? zT+EgXybOvA=0Lrs#-=7}%1Ugag5u_a%*sk?wu~lb){Le=Az4NdF>6LfJw|OtQDY-9 zc}8|V2-D1-k@0hZiK?neWaMurU0YjSCnvk`a62c)HzJk_*6NCu!jt+$Y!p>26l_H{ zG36RMshXIm{(ZDiej(%Pf3>!{|8#A&!|ndrg)@GZl+l)v+_ni!-Q9dRHk4WB?#sz5 zR delta 302 zcmca{hH=Yj#(D-u1_lOhh6V;^1_S?KeItG$-UC39JwTk0oSRs1+xFH!1_nkMAU`KP zvA6(83jp~YK$;^xr!sA0nc7q!e*yzTd_zWRVv5Lg>p%vEM4%c5vkagBClhNnknaKH zt7PPsRCIfa-2n1)fO=NsYM81vAT3 z<|LHH^V@u7;AR17VYnevodKgKUr97)%-YP8G?#Jm+T=Up2lQ+74*(@Wp^?QH!5{`w Q$iOt&F->^$=9Hz30NVmi5C8xG diff --git a/src/Squidex/app/theme/icomoon/fonts/icomoon.woff b/src/Squidex/app/theme/icomoon/fonts/icomoon.woff index bee1b19e727c4ca0e2b3c791879b37dbf6e4b4bd..1380b3b1859fefda391edf25c16359142d81652e 100644 GIT binary patch delta 490 zcmZoT!?@%uqe!{Gn;Qco0}!MwVc-VS5feqU>klU9CKfO-FlGRSazOaD-EGG7#A1-x z6(FAjiUrbhD${^scNiEF6hQblXVJQh)Wj49hQvQWHD(|zGE?bh22hZJA;|>DR{>#8 zCf1yc+>#2QSOif28W8T^E1sE?pA1yzm%;*6bOVH$7fW5pO{@S~oC36jK>>`L7^CtM zb5nt0KuZ|gKzODX=kJ32;u4@wTHxxKfh=a`bCY=(yBU)w&tOz$ohJ~_zi{&b#=w|* zW`>CjiY#2rmJGZMiVWsJLrjfLP1KZ?*hB@z%>|j2mDFq*P0XwrO@TtPj3Q#zjEs7W z+Ki&cMq=`e?0gWWnLQ)p=K>Q|Rg=ib-%h%=wz^JEcH!Z6PK<9vEETNP6)lA)^@-Rh zs#qx4ifm%aHFQ!nF;V^dXrcT<#?}97ZFT?Y+G>Z}{j&>a{46P>EhD*Y6PUWYnLjR+ zS?2D`$t&aeZN4&agF*xt9!2P`6?jH$;6tSky}y$6x#vRzXF82J;iS1q_(3}i7gpPkIZ*v*(Uc?P30>s*02 z{so&4Fb2kK-WV6mEK`}2P#Vu~^Ob>{1*n#R;f72#$j@MUvO43b!oA2nI1A&A`9}3b)PwQ(); private readonly ISemanticLog log = A.Fake(); - private readonly Guid appId = Guid.NewGuid(); + private readonly string key = Guid.NewGuid().ToString(); private readonly BackgroundUsageTracker sut; public BackgroundUsageTrackerTests() @@ -32,7 +32,7 @@ namespace Squidex.Infrastructure.UsageTracking { sut.Dispose(); - return Assert.ThrowsAsync(() => sut.TrackAsync(appId, "category1", 1, 1000)); + return Assert.ThrowsAsync(() => sut.TrackAsync(key, "category1", 1, 1000)); } [Fact] @@ -40,7 +40,7 @@ namespace Squidex.Infrastructure.UsageTracking { sut.Dispose(); - return Assert.ThrowsAsync(() => sut.QueryAsync(appId, DateTime.Today, DateTime.Today.AddDays(1))); + return Assert.ThrowsAsync(() => sut.QueryAsync(key, DateTime.Today, DateTime.Today.AddDays(1))); } [Fact] @@ -48,7 +48,7 @@ namespace Squidex.Infrastructure.UsageTracking { sut.Dispose(); - return Assert.ThrowsAsync(() => sut.GetMonthlyCallsAsync(appId, DateTime.Today)); + return Assert.ThrowsAsync(() => sut.GetMonthlyCallsAsync(key, DateTime.Today)); } [Fact] @@ -64,10 +64,10 @@ namespace Squidex.Infrastructure.UsageTracking new StoredUsage("category1", date.AddDays(7), Counters(17, 22)) }; - A.CallTo(() => usageStore.QueryAsync($"{appId}_API", new DateTime(2016, 1, 1), new DateTime(2016, 1, 31))) + A.CallTo(() => usageStore.QueryAsync($"{key}_API", new DateTime(2016, 1, 1), new DateTime(2016, 1, 31))) .Returns(originalData); - var result = await sut.GetMonthlyCallsAsync(appId, date); + var result = await sut.GetMonthlyCallsAsync(key, date); Assert.Equal(55, result); } @@ -87,10 +87,10 @@ namespace Squidex.Infrastructure.UsageTracking new StoredUsage(null, f.AddDays(2), Counters(11, 14)) }; - A.CallTo(() => usageStore.QueryAsync($"{appId}_API", f, t)) + A.CallTo(() => usageStore.QueryAsync($"{key}_API", f, t)) .Returns(originalData); - var result = await sut.QueryAsync(appId, f, t); + var result = await sut.QueryAsync(key, f, t); var expected = new Dictionary> { @@ -121,10 +121,10 @@ namespace Squidex.Infrastructure.UsageTracking var f = DateTime.Today; var t = DateTime.Today.AddDays(4); - A.CallTo(() => usageStore.QueryAsync($"{appId}_API", f, t)) + A.CallTo(() => usageStore.QueryAsync($"{key}_API", f, t)) .Returns(new List()); - var result = await sut.QueryAsync(appId, f, t); + var result = await sut.QueryAsync(key, f, t); var expected = new Dictionary> { @@ -144,8 +144,8 @@ namespace Squidex.Infrastructure.UsageTracking [Fact] public async Task Should_not_track_if_weight_less_than_zero() { - await sut.TrackAsync(appId, "MyCategory", -1, 1000); - await sut.TrackAsync(appId, "MyCategory", 0, 1000); + await sut.TrackAsync(key, "MyCategory", -1, 1000); + await sut.TrackAsync(key, "MyCategory", 0, 1000); sut.Next(); sut.Dispose(); @@ -157,22 +157,22 @@ namespace Squidex.Infrastructure.UsageTracking [Fact] public async Task Should_aggregate_and_store_on_dispose() { - var appId1 = Guid.NewGuid(); - var appId2 = Guid.NewGuid(); - var appId3 = Guid.NewGuid(); + var key1 = Guid.NewGuid().ToString(); + var key2 = Guid.NewGuid().ToString(); + var key3 = Guid.NewGuid().ToString(); var today = DateTime.Today; - await sut.TrackAsync(appId1, "MyCategory1", 1, 1000); + await sut.TrackAsync(key1, "MyCategory1", 1, 1000); - await sut.TrackAsync(appId2, "MyCategory1", 1.0, 2000); - await sut.TrackAsync(appId2, "MyCategory1", 0.5, 3000); + await sut.TrackAsync(key2, "MyCategory1", 1.0, 2000); + await sut.TrackAsync(key2, "MyCategory1", 0.5, 3000); - await sut.TrackAsync(appId3, "MyCategory1", 0.3, 4000); - await sut.TrackAsync(appId3, "MyCategory1", 0.1, 5000); + await sut.TrackAsync(key3, "MyCategory1", 0.3, 4000); + await sut.TrackAsync(key3, "MyCategory1", 0.1, 5000); - await sut.TrackAsync(appId3, null, 0.5, 2000); - await sut.TrackAsync(appId3, null, 0.5, 6000); + await sut.TrackAsync(key3, null, 0.5, 2000); + await sut.TrackAsync(key3, null, 0.5, 6000); UsageUpdate[] updates = null; @@ -184,10 +184,10 @@ namespace Squidex.Infrastructure.UsageTracking updates.Should().BeEquivalentTo(new[] { - new UsageUpdate(today, $"{appId1}_API", "MyCategory1", Counters(1.0, 1000)), - new UsageUpdate(today, $"{appId2}_API", "MyCategory1", Counters(1.5, 5000)), - new UsageUpdate(today, $"{appId3}_API", "MyCategory1", Counters(0.4, 9000)), - new UsageUpdate(today, $"{appId3}_API", "*", Counters(1, 8000)) + new UsageUpdate(today, $"{key1}_API", "MyCategory1", Counters(1.0, 1000)), + new UsageUpdate(today, $"{key2}_API", "MyCategory1", Counters(1.5, 5000)), + new UsageUpdate(today, $"{key3}_API", "MyCategory1", Counters(0.4, 9000)), + new UsageUpdate(today, $"{key3}_API", "*", Counters(1, 8000)) }, o => o.ComparingByMembers()); A.CallTo(() => usageStore.TrackUsagesAsync(A.Ignored)) diff --git a/tests/Squidex.Infrastructure.Tests/UsageTracking/CachingUsageTrackerTests.cs b/tests/Squidex.Infrastructure.Tests/UsageTracking/CachingUsageTrackerTests.cs index 51fec6632..4ceb57a93 100644 --- a/tests/Squidex.Infrastructure.Tests/UsageTracking/CachingUsageTrackerTests.cs +++ b/tests/Squidex.Infrastructure.Tests/UsageTracking/CachingUsageTrackerTests.cs @@ -17,7 +17,7 @@ namespace Squidex.Infrastructure.UsageTracking public class CachingUsageTrackerTests { private readonly MemoryCache cache = new MemoryCache(Options.Create(new MemoryCacheOptions())); - private readonly Guid appId = Guid.NewGuid(); + private readonly string key = Guid.NewGuid().ToString(); private readonly IUsageTracker inner = A.Fake(); private readonly IUsageTracker sut; @@ -29,34 +29,34 @@ namespace Squidex.Infrastructure.UsageTracking [Fact] public async Task Should_forward_track_call() { - await sut.TrackAsync(appId, "MyCategory", 123, 456); + await sut.TrackAsync(key, "MyCategory", 123, 456); - A.CallTo(() => inner.TrackAsync(appId, "MyCategory", 123, 456)) + A.CallTo(() => inner.TrackAsync(key, "MyCategory", 123, 456)) .MustHaveHappened(); } [Fact] public async Task Should_forward_query_call() { - await sut.QueryAsync(appId, DateTime.MaxValue, DateTime.MinValue); + await sut.QueryAsync(key, DateTime.MaxValue, DateTime.MinValue); - A.CallTo(() => inner.QueryAsync(appId, DateTime.MaxValue, DateTime.MinValue)) + A.CallTo(() => inner.QueryAsync(key, DateTime.MaxValue, DateTime.MinValue)) .MustHaveHappened(); } [Fact] public async Task Should_cache_monthly_usage() { - A.CallTo(() => inner.GetMonthlyCallsAsync(appId, DateTime.Today)) + A.CallTo(() => inner.GetMonthlyCallsAsync(key, DateTime.Today)) .Returns(100); - var result1 = await sut.GetMonthlyCallsAsync(appId, DateTime.Today); - var result2 = await sut.GetMonthlyCallsAsync(appId, DateTime.Today); + var result1 = await sut.GetMonthlyCallsAsync(key, DateTime.Today); + var result2 = await sut.GetMonthlyCallsAsync(key, DateTime.Today); Assert.Equal(100, result1); Assert.Equal(100, result2); - A.CallTo(() => inner.GetMonthlyCallsAsync(appId, DateTime.Today)) + A.CallTo(() => inner.GetMonthlyCallsAsync(key, DateTime.Today)) .MustHaveHappened(Repeated.Exactly.Once); } } diff --git a/tests/Squidex.Tests/Pipeline/ApiCostsFilterTests.cs b/tests/Squidex.Tests/Pipeline/ApiCostsFilterTests.cs index 2a50055b8..161dc6864 100644 --- a/tests/Squidex.Tests/Pipeline/ApiCostsFilterTests.cs +++ b/tests/Squidex.Tests/Pipeline/ApiCostsFilterTests.cs @@ -57,7 +57,7 @@ namespace Squidex.Pipeline A.CallTo(() => appPlan.MaxApiCalls) .ReturnsLazily(x => apiCallsMax); - A.CallTo(() => usageTracker.GetMonthlyCallsAsync(A.Ignored, DateTime.Today)) + A.CallTo(() => usageTracker.GetMonthlyCallsAsync(A.Ignored, DateTime.Today)) .ReturnsLazily(x => Task.FromResult(apiCallsCurrent)); next = () => @@ -85,7 +85,7 @@ namespace Squidex.Pipeline Assert.Equal(429, (actionContext.Result as StatusCodeResult).StatusCode); Assert.False(isNextCalled); - A.CallTo(() => usageTracker.TrackAsync(A.Ignored, A.Ignored, A.Ignored, A.Ignored)) + A.CallTo(() => usageTracker.TrackAsync(A.Ignored, A.Ignored, A.Ignored, A.Ignored)) .MustNotHaveHappened(); } @@ -103,7 +103,7 @@ namespace Squidex.Pipeline Assert.True(isNextCalled); - A.CallTo(() => usageTracker.TrackAsync(A.Ignored, A.Ignored, 13, A.Ignored)) + A.CallTo(() => usageTracker.TrackAsync(A.Ignored, A.Ignored, 13, A.Ignored)) .MustHaveHappened(); } @@ -121,7 +121,7 @@ namespace Squidex.Pipeline Assert.True(isNextCalled); - A.CallTo(() => usageTracker.TrackAsync(A.Ignored, A.Ignored, 13, A.Ignored)) + A.CallTo(() => usageTracker.TrackAsync(A.Ignored, A.Ignored, 13, A.Ignored)) .MustHaveHappened(); } @@ -139,7 +139,7 @@ namespace Squidex.Pipeline Assert.True(isNextCalled); - A.CallTo(() => usageTracker.TrackAsync(A.Ignored, A.Ignored, A.Ignored, A.Ignored)) + A.CallTo(() => usageTracker.TrackAsync(A.Ignored, A.Ignored, A.Ignored, A.Ignored)) .MustNotHaveHappened(); } @@ -155,7 +155,7 @@ namespace Squidex.Pipeline Assert.True(isNextCalled); - A.CallTo(() => usageTracker.TrackAsync(A.Ignored, A.Ignored, A.Ignored, A.Ignored)) + A.CallTo(() => usageTracker.TrackAsync(A.Ignored, A.Ignored, A.Ignored, A.Ignored)) .MustNotHaveHappened(); }