|
|
|
@ -19,6 +19,7 @@ namespace Squidex.Infrastructure.UsageTracking |
|
|
|
{ |
|
|
|
private readonly IUsageRepository usageStore = A.Fake<IUsageRepository>(); |
|
|
|
private readonly ISemanticLog log = A.Fake<ISemanticLog>(); |
|
|
|
private readonly Guid appId = Guid.NewGuid(); |
|
|
|
private readonly BackgroundUsageTracker sut; |
|
|
|
|
|
|
|
public BackgroundUsageTrackerTests() |
|
|
|
@ -31,7 +32,7 @@ namespace Squidex.Infrastructure.UsageTracking |
|
|
|
{ |
|
|
|
sut.Dispose(); |
|
|
|
|
|
|
|
return Assert.ThrowsAsync<ObjectDisposedException>(() => sut.TrackAsync("MyKey1", "category1", 1, 1000)); |
|
|
|
return Assert.ThrowsAsync<ObjectDisposedException>(() => sut.TrackAsync(appId, "category1", 1, 1000)); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
@ -39,7 +40,7 @@ namespace Squidex.Infrastructure.UsageTracking |
|
|
|
{ |
|
|
|
sut.Dispose(); |
|
|
|
|
|
|
|
return Assert.ThrowsAsync<ObjectDisposedException>(() => sut.QueryAsync("MyKey1", DateTime.Today, DateTime.Today.AddDays(1))); |
|
|
|
return Assert.ThrowsAsync<ObjectDisposedException>(() => sut.QueryAsync(appId, DateTime.Today, DateTime.Today.AddDays(1))); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
@ -47,7 +48,7 @@ namespace Squidex.Infrastructure.UsageTracking |
|
|
|
{ |
|
|
|
sut.Dispose(); |
|
|
|
|
|
|
|
return Assert.ThrowsAsync<ObjectDisposedException>(() => sut.GetMonthlyCallsAsync("MyKey1", DateTime.Today)); |
|
|
|
return Assert.ThrowsAsync<ObjectDisposedException>(() => sut.GetMonthlyCallsAsync(appId, DateTime.Today)); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
@ -63,10 +64,10 @@ namespace Squidex.Infrastructure.UsageTracking |
|
|
|
new StoredUsage("category1", date.AddDays(7), Counters(17, 22)) |
|
|
|
}; |
|
|
|
|
|
|
|
A.CallTo(() => usageStore.QueryAsync("MyKey1", new DateTime(2016, 1, 1), new DateTime(2016, 1, 31))) |
|
|
|
A.CallTo(() => usageStore.QueryAsync($"{appId}_API", new DateTime(2016, 1, 1), new DateTime(2016, 1, 31))) |
|
|
|
.Returns(originalData); |
|
|
|
|
|
|
|
var result = await sut.GetMonthlyCallsAsync("MyKey1", date); |
|
|
|
var result = await sut.GetMonthlyCallsAsync(appId, date); |
|
|
|
|
|
|
|
Assert.Equal(55, result); |
|
|
|
} |
|
|
|
@ -86,10 +87,10 @@ namespace Squidex.Infrastructure.UsageTracking |
|
|
|
new StoredUsage(null, f.AddDays(2), Counters(11, 14)) |
|
|
|
}; |
|
|
|
|
|
|
|
A.CallTo(() => usageStore.QueryAsync("MyKey1", f, t)) |
|
|
|
A.CallTo(() => usageStore.QueryAsync($"{appId}_API", f, t)) |
|
|
|
.Returns(originalData); |
|
|
|
|
|
|
|
var result = await sut.QueryAsync("MyKey1", f, t); |
|
|
|
var result = await sut.QueryAsync(appId, f, t); |
|
|
|
|
|
|
|
var expected = new Dictionary<string, List<DateUsage>> |
|
|
|
{ |
|
|
|
@ -120,10 +121,10 @@ namespace Squidex.Infrastructure.UsageTracking |
|
|
|
var f = DateTime.Today; |
|
|
|
var t = DateTime.Today.AddDays(4); |
|
|
|
|
|
|
|
A.CallTo(() => usageStore.QueryAsync("MyKey1", f, t)) |
|
|
|
A.CallTo(() => usageStore.QueryAsync($"{appId}_API", f, t)) |
|
|
|
.Returns(new List<StoredUsage>()); |
|
|
|
|
|
|
|
var result = await sut.QueryAsync("MyKey1", f, t); |
|
|
|
var result = await sut.QueryAsync(appId, f, t); |
|
|
|
|
|
|
|
var expected = new Dictionary<string, List<DateUsage>> |
|
|
|
{ |
|
|
|
@ -143,8 +144,8 @@ namespace Squidex.Infrastructure.UsageTracking |
|
|
|
[Fact] |
|
|
|
public async Task Should_not_track_if_weight_less_than_zero() |
|
|
|
{ |
|
|
|
await sut.TrackAsync("MyKey1", "MyCategory", -1, 1000); |
|
|
|
await sut.TrackAsync("MyKey1", "MyCategory", 0, 1000); |
|
|
|
await sut.TrackAsync(appId, "MyCategory", -1, 1000); |
|
|
|
await sut.TrackAsync(appId, "MyCategory", 0, 1000); |
|
|
|
|
|
|
|
sut.Next(); |
|
|
|
sut.Dispose(); |
|
|
|
@ -156,18 +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 today = DateTime.Today; |
|
|
|
|
|
|
|
await sut.TrackAsync("MyKey1", "MyCategory1", 1, 1000); |
|
|
|
await sut.TrackAsync(appId1, "MyCategory1", 1, 1000); |
|
|
|
|
|
|
|
await sut.TrackAsync("MyKey2", "MyCategory1", 1.0, 2000); |
|
|
|
await sut.TrackAsync("MyKey2", "MyCategory1", 0.5, 3000); |
|
|
|
await sut.TrackAsync(appId2, "MyCategory1", 1.0, 2000); |
|
|
|
await sut.TrackAsync(appId2, "MyCategory1", 0.5, 3000); |
|
|
|
|
|
|
|
await sut.TrackAsync("MyKey3", "MyCategory1", 0.3, 4000); |
|
|
|
await sut.TrackAsync("MyKey3", "MyCategory1", 0.1, 5000); |
|
|
|
await sut.TrackAsync(appId3, "MyCategory1", 0.3, 4000); |
|
|
|
await sut.TrackAsync(appId3, "MyCategory1", 0.1, 5000); |
|
|
|
|
|
|
|
await sut.TrackAsync("MyKey3", null, 0.5, 2000); |
|
|
|
await sut.TrackAsync("MyKey3", null, 0.5, 6000); |
|
|
|
await sut.TrackAsync(appId3, null, 0.5, 2000); |
|
|
|
await sut.TrackAsync(appId3, null, 0.5, 6000); |
|
|
|
|
|
|
|
UsageUpdate[] updates = null; |
|
|
|
|
|
|
|
@ -179,10 +184,10 @@ namespace Squidex.Infrastructure.UsageTracking |
|
|
|
|
|
|
|
updates.Should().BeEquivalentTo(new[] |
|
|
|
{ |
|
|
|
new UsageUpdate(today, "MyKey1", "MyCategory1", Counters(1.0, 1000)), |
|
|
|
new UsageUpdate(today, "MyKey2", "MyCategory1", Counters(1.5, 5000)), |
|
|
|
new UsageUpdate(today, "MyKey3", "MyCategory1", Counters(0.4, 9000)), |
|
|
|
new UsageUpdate(today, "MyKey3", "*", Counters(1, 8000)) |
|
|
|
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)) |
|
|
|
}, o => o.ComparingByMembers<UsageUpdate>()); |
|
|
|
|
|
|
|
A.CallTo(() => usageStore.TrackUsagesAsync(A<UsageUpdate[]>.Ignored)) |
|
|
|
|