Enhance TelegramNotifier to include channel names in notifications
Updated the TelegramNotifier to fetch channel names in a single database query, improving efficiency. Modified notification messages to include channel names for better clarity, ensuring users know where to switch for live content. Added tests to verify the inclusion of channel names in notifications and updated documentation to reflect these changes.
This commit is contained in:
@@ -136,9 +136,11 @@ public class TelegramNotifierTests
|
||||
.SendMessageAsync(
|
||||
Arg.Any<TelegramSettings>(),
|
||||
100,
|
||||
// Канал назван в самом сообщении: их у зрителя несколько, и «сейчас в эфире»
|
||||
// без названия не отвечает на вопрос, куда переключаться.
|
||||
// Предикат NSubstitute принимает аргумент как допускающий null — само сообщение
|
||||
// объявлено обязательным, потому и разыменовываем без проверки.
|
||||
Arg.Is<string>(s => s!.Contains("Футурама")),
|
||||
Arg.Is<string>(s => s!.Contains("Футурама") && s.Contains("Мультреалити")),
|
||||
null,
|
||||
Arg.Any<CancellationToken>()
|
||||
);
|
||||
@@ -147,6 +149,50 @@ public class TelegramNotifierTests
|
||||
Assert.Equal(Now, settings.NotifiedUntil);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Notifies_UpNext_TellsWhenAndWhere()
|
||||
{
|
||||
var fixture = new TestDb();
|
||||
var channel = Channel.Create("Мультреалити", "mult", Now);
|
||||
var soon = Show.Create("Гриффины", ShowKind.Series);
|
||||
|
||||
var subscriber = TelegramSubscriber.Create(100, Guid.NewGuid(), "viewer", Now);
|
||||
subscriber.Toggle(channel.Id, TelegramNotificationKind.UpNext);
|
||||
|
||||
await using (var seed = fixture.New())
|
||||
{
|
||||
seed.Channels.Add(channel);
|
||||
seed.Shows.Add(soon);
|
||||
seed.TelegramSubscribers.Add(subscriber);
|
||||
seed.ScheduleEntries.Add(Program(channel.Id, soon.Id, Now.AddMinutes(4), 25));
|
||||
await seed.SaveChangesAsync(CancellationToken.None);
|
||||
}
|
||||
|
||||
var api = Substitute.For<ITelegramApi>();
|
||||
var settings = Settings();
|
||||
// Окно предупреждения — свои пять минут: разобранное кончается на Now, а смотрим до Now+5.
|
||||
settings.MarkNotifiedUntil(Now.AddMinutes(-5));
|
||||
|
||||
await using var db = fixture.New();
|
||||
var sent = await new TelegramNotifier(db, api).RunAsync(
|
||||
settings,
|
||||
Now,
|
||||
CancellationToken.None
|
||||
);
|
||||
|
||||
Assert.Equal(1, sent);
|
||||
await api.Received(1)
|
||||
.SendMessageAsync(
|
||||
Arg.Any<TelegramSettings>(),
|
||||
100,
|
||||
Arg.Is<string>(s =>
|
||||
s!.Contains("Гриффины") && s.Contains("4 мин") && s.Contains("Мультреалити")
|
||||
),
|
||||
null,
|
||||
Arg.Any<CancellationToken>()
|
||||
);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Notifies_ReplacingItsPreviousAlert()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user