Refactor code formatting and improve readability: standardize line breaks and indentation across various endpoint files, enhancing code clarity and maintainability. Update package version formatting in Directory.Packages.props for consistency.
This commit is contained in:
+7
-2
@@ -20,9 +20,14 @@ public class ChangeUserRoleCommandHandlerTests
|
||||
.Returns(Result.Success());
|
||||
|
||||
var handler = new ChangeUserRoleCommandHandler(_roleService);
|
||||
var result = await handler.Handle(new ChangeUserRoleCommand(userId, roleId), CancellationToken.None);
|
||||
var result = await handler.Handle(
|
||||
new ChangeUserRoleCommand(userId, roleId),
|
||||
CancellationToken.None
|
||||
);
|
||||
|
||||
Assert.True(result.IsSuccess);
|
||||
await _roleService.Received(1).ChangeUserRoleAsync(userId, roleId, Arg.Any<CancellationToken>());
|
||||
await _roleService
|
||||
.Received(1)
|
||||
.ChangeUserRoleAsync(userId, roleId, Arg.Any<CancellationToken>());
|
||||
}
|
||||
}
|
||||
|
||||
+7
-3
@@ -20,11 +20,14 @@ public class BlockUserCommandHandlerTests
|
||||
var userId = Guid.NewGuid();
|
||||
_currentUser.UserId.Returns(userId);
|
||||
|
||||
var result = await CreateHandler().Handle(new BlockUserCommand(userId), CancellationToken.None);
|
||||
var result = await CreateHandler()
|
||||
.Handle(new BlockUserCommand(userId), CancellationToken.None);
|
||||
|
||||
Assert.False(result.IsSuccess);
|
||||
Assert.Equal(UserErrors.CannotBlockSelf, result.Error);
|
||||
await _identityService.DidNotReceive().BlockUserAsync(Arg.Any<Guid>(), Arg.Any<CancellationToken>());
|
||||
await _identityService
|
||||
.DidNotReceive()
|
||||
.BlockUserAsync(Arg.Any<Guid>(), Arg.Any<CancellationToken>());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -37,7 +40,8 @@ public class BlockUserCommandHandlerTests
|
||||
.BlockUserAsync(targetId, Arg.Any<CancellationToken>())
|
||||
.Returns(Result.Success());
|
||||
|
||||
var result = await CreateHandler().Handle(new BlockUserCommand(targetId), CancellationToken.None);
|
||||
var result = await CreateHandler()
|
||||
.Handle(new BlockUserCommand(targetId), CancellationToken.None);
|
||||
|
||||
Assert.True(result.IsSuccess);
|
||||
await _identityService.Received(1).BlockUserAsync(targetId, Arg.Any<CancellationToken>());
|
||||
|
||||
+7
-2
@@ -34,7 +34,9 @@ public class CreateUserCommandHandlerTests
|
||||
|
||||
Assert.True(result.IsSuccess);
|
||||
Assert.Equal(userId, result.Value);
|
||||
await _roleService.Received(1).ChangeUserRoleAsync(userId, roleId, Arg.Any<CancellationToken>());
|
||||
await _roleService
|
||||
.Received(1)
|
||||
.ChangeUserRoleAsync(userId, roleId, Arg.Any<CancellationToken>());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -43,7 +45,10 @@ public class CreateUserCommandHandlerTests
|
||||
_roleService.ListRolesAsync(Arg.Any<CancellationToken>()).Returns(new List<RoleDto>());
|
||||
|
||||
var result = await CreateHandler()
|
||||
.Handle(new CreateUserCommand("bob", "Password1", Guid.NewGuid()), CancellationToken.None);
|
||||
.Handle(
|
||||
new CreateUserCommand("bob", "Password1", Guid.NewGuid()),
|
||||
CancellationToken.None
|
||||
);
|
||||
|
||||
Assert.False(result.IsSuccess);
|
||||
Assert.Equal(RoleErrors.NotFound, result.Error);
|
||||
|
||||
@@ -26,7 +26,9 @@ public class LoginCommandHandlerTests
|
||||
.Returns(Result.Success(new AuthenticatedUser(userId, "alice", "user")));
|
||||
_identityService
|
||||
.GetProfileAsync(userId, Arg.Any<CancellationToken>())
|
||||
.Returns(new CurrentUserProfile(userId, "alice", Guid.NewGuid(), "user", IsBlocked: false));
|
||||
.Returns(
|
||||
new CurrentUserProfile(userId, "alice", Guid.NewGuid(), "user", IsBlocked: false)
|
||||
);
|
||||
_jwtTokenService
|
||||
.GenerateAccessToken(Arg.Any<AuthenticatedUser>())
|
||||
.Returns(("access-token", DateTimeOffset.UtcNow.AddMinutes(15)));
|
||||
@@ -65,7 +67,9 @@ public class LoginCommandHandlerTests
|
||||
.Returns(Result.Success(new AuthenticatedUser(userId, "alice", "user")));
|
||||
_identityService
|
||||
.GetProfileAsync(userId, Arg.Any<CancellationToken>())
|
||||
.Returns(new CurrentUserProfile(userId, "alice", Guid.NewGuid(), "user", IsBlocked: true));
|
||||
.Returns(
|
||||
new CurrentUserProfile(userId, "alice", Guid.NewGuid(), "user", IsBlocked: true)
|
||||
);
|
||||
|
||||
var result = await CreateHandler()
|
||||
.Handle(new LoginCommand("alice", "password123"), CancellationToken.None);
|
||||
|
||||
@@ -32,7 +32,9 @@ public class RegisterCommandHandlerTests
|
||||
.Returns(Result.Success(userId));
|
||||
_identityService
|
||||
.GetProfileAsync(userId, Arg.Any<CancellationToken>())
|
||||
.Returns(new CurrentUserProfile(userId, "bob", Guid.NewGuid(), "user", IsBlocked: false));
|
||||
.Returns(
|
||||
new CurrentUserProfile(userId, "bob", Guid.NewGuid(), "user", IsBlocked: false)
|
||||
);
|
||||
_jwtTokenService
|
||||
.GenerateAccessToken(Arg.Any<AuthenticatedUser>())
|
||||
.Returns(("access-token", DateTimeOffset.UtcNow.AddMinutes(15)));
|
||||
|
||||
@@ -79,7 +79,10 @@ public class LiveWindowCalculatorTests
|
||||
public void LeadingGap_WithoutFiller_TrimmedFromWindowStart()
|
||||
{
|
||||
var b = Guid.NewGuid();
|
||||
var entries = new List<LiveEntry> { new(Epoch.AddSeconds(16), Epoch.AddSeconds(40), b, 12) };
|
||||
var entries = new List<LiveEntry>
|
||||
{
|
||||
new(Epoch.AddSeconds(16), Epoch.AddSeconds(40), b, 12),
|
||||
};
|
||||
|
||||
// Окно [6..10]: g6,g7 без записи и без филлера → отброшены, старт с g8.
|
||||
var playlist = LiveWindowCalculator.Build(Input(20, entries));
|
||||
|
||||
@@ -36,7 +36,15 @@ public class SchedulePlannerTests
|
||||
minInterval,
|
||||
selection,
|
||||
variants.Length == 0
|
||||
? [new PlannerBumperVariant(DefaultVariant, DefaultTemplate, TimeSpan.FromSeconds(8), trigger)]
|
||||
?
|
||||
[
|
||||
new PlannerBumperVariant(
|
||||
DefaultVariant,
|
||||
DefaultTemplate,
|
||||
TimeSpan.FromSeconds(8),
|
||||
trigger
|
||||
),
|
||||
]
|
||||
: variants
|
||||
);
|
||||
|
||||
@@ -176,15 +184,34 @@ public class SchedulePlannerTests
|
||||
[Fact]
|
||||
public void WeightedPick_RespectsRoll()
|
||||
{
|
||||
var a = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 3, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var b = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var durations = Durations(
|
||||
(a.EpisodeAssetIds[0], 20),
|
||||
(b.EpisodeAssetIds[0], 20)
|
||||
var a = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
3,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var b = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var durations = Durations((a.EpisodeAssetIds[0], 20), (b.EpisodeAssetIds[0], 20));
|
||||
|
||||
var pickA = SchedulePlanner.Plan(BaseInput([a, b], durations, Start.AddSeconds(1)), new FixedRandom(0));
|
||||
var pickB = SchedulePlanner.Plan(BaseInput([a, b], durations, Start.AddSeconds(1)), new FixedRandom(3));
|
||||
var pickA = SchedulePlanner.Plan(
|
||||
BaseInput([a, b], durations, Start.AddSeconds(1)),
|
||||
new FixedRandom(0)
|
||||
);
|
||||
var pickB = SchedulePlanner.Plan(
|
||||
BaseInput([a, b], durations, Start.AddSeconds(1)),
|
||||
new FixedRandom(3)
|
||||
);
|
||||
|
||||
Assert.Equal(a.ShowId, pickA.Entries[0].ShowId);
|
||||
Assert.Equal(b.ShowId, pickB.Entries[0].ShowId);
|
||||
@@ -193,8 +220,24 @@ public class SchedulePlannerTests
|
||||
[Fact]
|
||||
public void ExclusiveOverride_ForcesSingleShow()
|
||||
{
|
||||
var a = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 10, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var b = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var a = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
10,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var b = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var durations = Durations((a.EpisodeAssetIds[0], 20), (b.EpisodeAssetIds[0], 20));
|
||||
|
||||
var input = new PlannerInput(
|
||||
@@ -226,8 +269,24 @@ public class SchedulePlannerTests
|
||||
[Fact]
|
||||
public void Bumpers_InsertedOnTransitionBetweenDifferentShows_BackToBack()
|
||||
{
|
||||
var a = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var b = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var a = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var b = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var durations = Durations((a.EpisodeAssetIds[0], 20), (b.EpisodeAssetIds[0], 20));
|
||||
|
||||
var input = BaseInput([a, b], durations, Start.AddMinutes(50)) with
|
||||
@@ -298,8 +357,24 @@ public class SchedulePlannerTests
|
||||
[Fact]
|
||||
public void Bumpers_MinInterval_SuppressesTooFrequentBumpers()
|
||||
{
|
||||
var a = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var b = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var a = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var b = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var durations = Durations((a.EpisodeAssetIds[0], 20), (b.EpisodeAssetIds[0], 20));
|
||||
|
||||
// Два перехода в горизонте (~на 20-й и ~40-й минуте), но интервал 30 мин пропускает второй.
|
||||
@@ -316,8 +391,24 @@ public class SchedulePlannerTests
|
||||
[Fact]
|
||||
public void Bumpers_Rotation_CyclesTemplatesAndAdvancesCursor()
|
||||
{
|
||||
var a = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var b = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var a = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var b = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var durations = Durations((a.EpisodeAssetIds[0], 20), (b.EpisodeAssetIds[0], 20));
|
||||
Guid t0 = Guid.NewGuid(),
|
||||
t1 = Guid.NewGuid();
|
||||
@@ -329,8 +420,18 @@ public class SchedulePlannerTests
|
||||
BumperTrigger.Both,
|
||||
TimeSpan.Zero,
|
||||
BumperSelection.Rotation,
|
||||
new PlannerBumperVariant(Guid.NewGuid(), t0, TimeSpan.FromSeconds(8), BumperTrigger.Both),
|
||||
new PlannerBumperVariant(Guid.NewGuid(), t1, TimeSpan.FromSeconds(4), BumperTrigger.Both)
|
||||
new PlannerBumperVariant(
|
||||
Guid.NewGuid(),
|
||||
t0,
|
||||
TimeSpan.FromSeconds(8),
|
||||
BumperTrigger.Both
|
||||
),
|
||||
new PlannerBumperVariant(
|
||||
Guid.NewGuid(),
|
||||
t1,
|
||||
TimeSpan.FromSeconds(4),
|
||||
BumperTrigger.Both
|
||||
)
|
||||
),
|
||||
};
|
||||
|
||||
@@ -350,8 +451,24 @@ public class SchedulePlannerTests
|
||||
[Fact]
|
||||
public void Bumpers_AlwaysFirst_AlwaysUsesFirstTemplate()
|
||||
{
|
||||
var a = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var b = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var a = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var b = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var durations = Durations((a.EpisodeAssetIds[0], 20), (b.EpisodeAssetIds[0], 20));
|
||||
Guid t0 = Guid.NewGuid(),
|
||||
t1 = Guid.NewGuid();
|
||||
@@ -363,8 +480,18 @@ public class SchedulePlannerTests
|
||||
BumperTrigger.Both,
|
||||
TimeSpan.Zero,
|
||||
BumperSelection.AlwaysFirst,
|
||||
new PlannerBumperVariant(Guid.NewGuid(), t0, TimeSpan.FromSeconds(8), BumperTrigger.Both),
|
||||
new PlannerBumperVariant(Guid.NewGuid(), t1, TimeSpan.FromSeconds(4), BumperTrigger.Both)
|
||||
new PlannerBumperVariant(
|
||||
Guid.NewGuid(),
|
||||
t0,
|
||||
TimeSpan.FromSeconds(8),
|
||||
BumperTrigger.Both
|
||||
),
|
||||
new PlannerBumperVariant(
|
||||
Guid.NewGuid(),
|
||||
t1,
|
||||
TimeSpan.FromSeconds(4),
|
||||
BumperTrigger.Both
|
||||
)
|
||||
),
|
||||
};
|
||||
|
||||
@@ -379,8 +506,24 @@ public class SchedulePlannerTests
|
||||
[Fact]
|
||||
public void Bumpers_NoTemplates_NoBumpers()
|
||||
{
|
||||
var a = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var b = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var a = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var b = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var durations = Durations((a.EpisodeAssetIds[0], 20), (b.EpisodeAssetIds[0], 20));
|
||||
|
||||
var input = BaseInput([a, b], durations, Start.AddMinutes(50)) with
|
||||
@@ -401,8 +544,24 @@ public class SchedulePlannerTests
|
||||
[Fact]
|
||||
public void Bumpers_Disabled_ProduceNoBumperEntries()
|
||||
{
|
||||
var a = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var b = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var a = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var b = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var durations = Durations((a.EpisodeAssetIds[0], 20), (b.EpisodeAssetIds[0], 20));
|
||||
|
||||
var input = BaseInput([a, b], durations, Start.AddMinutes(50)) with
|
||||
@@ -420,13 +579,32 @@ public class SchedulePlannerTests
|
||||
{
|
||||
// Два шоу, ротация выбора подблока (без random в пути заставки) → чередование гарантировано,
|
||||
// каждый переход — смена шоу. ShowChangeChance=0 глушит их, EpisodeChangeChance=1 не при чём.
|
||||
var a = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var b = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var a = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var b = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var durations = Durations((a.EpisodeAssetIds[0], 20), (b.EpisodeAssetIds[0], 20));
|
||||
|
||||
var input = BaseInput([a, b], durations, Start.AddMinutes(120)) with
|
||||
{
|
||||
Bumpers = Bumper(true, BumperTrigger.Both, TimeSpan.Zero) with { ShowChangeChance = 0.0 },
|
||||
Bumpers = Bumper(true, BumperTrigger.Both, TimeSpan.Zero) with
|
||||
{
|
||||
ShowChangeChance = 0.0,
|
||||
},
|
||||
};
|
||||
|
||||
var result = SchedulePlanner.Plan(input, new FixedRandom(0, 1));
|
||||
@@ -438,12 +616,23 @@ public class SchedulePlannerTests
|
||||
public void Bumpers_EpisodeChangeChanceZero_SuppressesBumpersBetweenEpisodes()
|
||||
{
|
||||
// Одно шоу → каждый переход между блоками одного шоу. EpisodeChangeChance=0 глушит все заставки.
|
||||
var a = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var a = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var durations = Durations((a.EpisodeAssetIds[0], 20));
|
||||
|
||||
var input = BaseInput([a], durations, Start.AddMinutes(120)) with
|
||||
{
|
||||
Bumpers = Bumper(true, BumperTrigger.Both, TimeSpan.Zero) with { EpisodeChangeChance = 0.0 },
|
||||
Bumpers = Bumper(true, BumperTrigger.Both, TimeSpan.Zero) with
|
||||
{
|
||||
EpisodeChangeChance = 0.0,
|
||||
},
|
||||
};
|
||||
|
||||
var result = SchedulePlanner.Plan(input, new FixedRandom(0));
|
||||
@@ -455,7 +644,15 @@ public class SchedulePlannerTests
|
||||
public void Bumpers_WeightedRandom_NeverPicksZeroWeightVariant()
|
||||
{
|
||||
// Взвешенный выбор: подблок с весом 0 не выбирается никогда, весь трафик уходит на t1 (вес 5).
|
||||
var a = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var a = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var durations = Durations((a.EpisodeAssetIds[0], 20));
|
||||
Guid t0 = Guid.NewGuid(),
|
||||
t1 = Guid.NewGuid();
|
||||
@@ -467,8 +664,20 @@ public class SchedulePlannerTests
|
||||
BumperTrigger.Both,
|
||||
TimeSpan.Zero,
|
||||
BumperSelection.WeightedRandom,
|
||||
new PlannerBumperVariant(Guid.NewGuid(), t0, TimeSpan.FromSeconds(8), BumperTrigger.Both, 0),
|
||||
new PlannerBumperVariant(Guid.NewGuid(), t1, TimeSpan.FromSeconds(8), BumperTrigger.Both, 5)
|
||||
new PlannerBumperVariant(
|
||||
Guid.NewGuid(),
|
||||
t0,
|
||||
TimeSpan.FromSeconds(8),
|
||||
BumperTrigger.Both,
|
||||
0
|
||||
),
|
||||
new PlannerBumperVariant(
|
||||
Guid.NewGuid(),
|
||||
t1,
|
||||
TimeSpan.FromSeconds(8),
|
||||
BumperTrigger.Both,
|
||||
5
|
||||
)
|
||||
),
|
||||
};
|
||||
|
||||
@@ -483,8 +692,24 @@ public class SchedulePlannerTests
|
||||
public void WeeklyOverride_AppliesOnMatchingDayAndTime()
|
||||
{
|
||||
// Start = 2026-01-01 (четверг, DayOfWeek=4), полночь. Еженедельный override на четверг 00:00–01:00.
|
||||
var a = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var b = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var a = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var b = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var durations = Durations((a.EpisodeAssetIds[0], 20), (b.EpisodeAssetIds[0], 20));
|
||||
|
||||
var input = BaseInput([a, b], durations, Start.AddSeconds(1)) with
|
||||
@@ -511,8 +736,24 @@ public class SchedulePlannerTests
|
||||
public void WeeklyOverride_IgnoredOnOtherDay()
|
||||
{
|
||||
// Override на другой день недели → базовая ротация (FixedRandom(0) берёт первое шоу — a).
|
||||
var a = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var b = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var a = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var b = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var durations = Durations((a.EpisodeAssetIds[0], 20), (b.EpisodeAssetIds[0], 20));
|
||||
var otherDay = ((int)Start.UtcDateTime.DayOfWeek + 1) % 7;
|
||||
|
||||
@@ -540,10 +781,26 @@ public class SchedulePlannerTests
|
||||
public void PreferredHours_BoostsWeight_InsideWindow()
|
||||
{
|
||||
// Час старта — 0 (UTC). Окно b покрывает его, множитель 100 → b доминирует, хотя базовые веса равны.
|
||||
var a = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var a = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var b = new PlannerShow(
|
||||
Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0,
|
||||
PreferredHours: [new PlannerHourWindow(0, 24)], PreferredWeightMultiplier: 100);
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0,
|
||||
PreferredHours: [new PlannerHourWindow(0, 24)],
|
||||
PreferredWeightMultiplier: 100
|
||||
);
|
||||
var durations = Durations((a.EpisodeAssetIds[0], 20), (b.EpisodeAssetIds[0], 20));
|
||||
|
||||
var input = BaseInput([a, b], durations, Start.AddMinutes(60));
|
||||
@@ -559,10 +816,26 @@ public class SchedulePlannerTests
|
||||
public void PreferredHours_OutsideWindow_KeepsBaseWeight()
|
||||
{
|
||||
// Час старта — 0, окно b — [10,12): не покрывает → буста нет, при FixedRandom(50) берётся первое шоу (a).
|
||||
var a = new PlannerShow(Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0);
|
||||
var a = new PlannerShow(
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0
|
||||
);
|
||||
var b = new PlannerShow(
|
||||
Guid.NewGuid(), Guid.NewGuid(), 1, BlockMode.Count, 1, [Guid.NewGuid()], 0,
|
||||
PreferredHours: [new PlannerHourWindow(10, 12)], PreferredWeightMultiplier: 100);
|
||||
Guid.NewGuid(),
|
||||
Guid.NewGuid(),
|
||||
1,
|
||||
BlockMode.Count,
|
||||
1,
|
||||
[Guid.NewGuid()],
|
||||
0,
|
||||
PreferredHours: [new PlannerHourWindow(10, 12)],
|
||||
PreferredWeightMultiplier: 100
|
||||
);
|
||||
var durations = Durations((a.EpisodeAssetIds[0], 20), (b.EpisodeAssetIds[0], 20));
|
||||
|
||||
var input = BaseInput([a, b], durations, Start.AddMinutes(60));
|
||||
|
||||
Reference in New Issue
Block a user