Restore dual mail and calendar app entries

This commit is contained in:
Burak Kaan Köse
2026-04-11 01:28:19 +02:00
parent 4cb08f0a98
commit fdb340549d
19 changed files with 756 additions and 336 deletions
@@ -0,0 +1,33 @@
using FluentAssertions;
using Wino.Core.Activation;
using Wino.Core.Domain.Enums;
using Xunit;
namespace Wino.Core.Tests;
public class AppModeActivationResolverTests
{
[Theory]
[InlineData("--wino-mail", WinoApplicationMode.Calendar, WinoApplicationMode.Mail)]
[InlineData("--wino-calendar", WinoApplicationMode.Mail, WinoApplicationMode.Calendar)]
[InlineData("--mode=mail", WinoApplicationMode.Calendar, WinoApplicationMode.Mail)]
[InlineData("--mode=calendar", WinoApplicationMode.Mail, WinoApplicationMode.Calendar)]
[InlineData("CalendarApp", WinoApplicationMode.Mail, WinoApplicationMode.Calendar)]
[InlineData("App", WinoApplicationMode.Calendar, WinoApplicationMode.Mail)]
public void Resolve_PrefersKnownMailCalendarSignals(string source, WinoApplicationMode defaultMode, WinoApplicationMode expectedMode)
{
var resolvedMode = AppModeActivationResolver.Resolve(source, null, null, defaultMode);
resolvedMode.Should().Be(expectedMode);
}
[Fact]
public void Resolve_ToggleDefaultArgumentFlipsBetweenMailAndCalendar()
{
AppModeActivationResolver.Resolve("--mode=toggle-default", null, null, WinoApplicationMode.Mail)
.Should().Be(WinoApplicationMode.Calendar);
AppModeActivationResolver.Resolve("--mode=toggle-default", null, null, WinoApplicationMode.Calendar)
.Should().Be(WinoApplicationMode.Mail);
}
}
+52 -2
View File
@@ -47,7 +47,7 @@ public class CalendarPageViewModelTests
viewModel.CurrentVisibleRange.EndDate.Should().Be(new DateOnly(2026, 3, 22));
viewModel.LoadedDateWindow.StartDate.Should().Be(new DateTime(2026, 3, 9));
viewModel.LoadedDateWindow.EndDate.Should().Be(new DateTime(2026, 3, 30));
viewModel.VisibleDateRangeText.Should().Be("March 16 - March 22");
viewModel.VisibleDateRangeText.Should().Be("March 16 - 22");
requestedPeriod.Should().NotBeNull();
requestedPeriod!.Start.Should().Be(new DateTime(2026, 3, 9));
@@ -242,6 +242,45 @@ public class CalendarPageViewModelTests
}
}
[Fact]
public async Task ApplyDisplayRequestAsync_ClearsCalendarBadgeOnlyOncePerPageLifetime()
{
var settings = CreateSettings();
var preferencesService = CreatePreferencesService(settings);
var calendarService = new Mock<ICalendarService>();
var notificationBuilder = new Mock<INotificationBuilder>();
calendarService
.Setup(service => service.GetCalendarEventsAsync(It.IsAny<IAccountCalendar>(), It.IsAny<ITimePeriod>()))
.ReturnsAsync([]);
notificationBuilder
.Setup(builder => builder.ClearCalendarTaskbarBadgeAsync())
.Returns(Task.CompletedTask);
var viewModel = CreateViewModel(
calendarService.Object,
preferencesService.Object,
new DateOnly(2026, 3, 20),
notificationBuilder: notificationBuilder.Object);
viewModel.OnNavigatedTo(NavigationMode.New, null!);
try
{
var request = new CalendarDisplayRequest(CalendarDisplayType.Day, new DateOnly(2026, 3, 20));
await viewModel.ApplyDisplayRequestAsync(request);
await viewModel.ApplyDisplayRequestAsync(request, forceReload: true);
notificationBuilder.Verify(builder => builder.ClearCalendarTaskbarBadgeAsync(), Times.Once);
}
finally
{
viewModel.OnNavigatedFrom(NavigationMode.Back, null!);
}
}
[Fact]
public async Task CalendarItemAddedMessage_ReconcilesTrackedLocalPreviewInPlace()
{
@@ -332,6 +371,15 @@ public class CalendarPageViewModelTests
ICalendarService calendarService,
IPreferencesService preferencesService,
DateOnly today)
{
return CreateViewModel(calendarService, preferencesService, today, notificationBuilder: null);
}
private static CalendarPageViewModel CreateViewModel(
ICalendarService calendarService,
IPreferencesService preferencesService,
DateOnly today,
INotificationBuilder? notificationBuilder)
{
var account = CreateAccount();
@@ -339,7 +387,7 @@ public class CalendarPageViewModelTests
var accountCalendarViewModel = new AccountCalendarViewModel(account, calendar);
var accountCalendarStateService = new FakeAccountCalendarStateService([accountCalendarViewModel]);
return CreateViewModel(calendarService, preferencesService, today, accountCalendarStateService);
return CreateViewModel(calendarService, preferencesService, today, accountCalendarStateService, notificationBuilder: notificationBuilder);
}
private static CalendarPageViewModel CreateViewModel(
@@ -356,6 +404,7 @@ public class CalendarPageViewModelTests
IAccountCalendarStateService accountCalendarStateService,
INavigationService? navigationService = null,
INativeAppService? nativeAppService = null,
INotificationBuilder? notificationBuilder = null,
IWinoRequestDelegator? requestDelegator = null,
IMailDialogService? dialogService = null)
{
@@ -371,6 +420,7 @@ public class CalendarPageViewModelTests
Mock.Of<IKeyPressService>(),
nativeAppService ?? Mock.Of<INativeAppService>(),
accountCalendarStateService,
notificationBuilder ?? Mock.Of<INotificationBuilder>(),
preferencesService,
requestDelegator ?? Mock.Of<IWinoRequestDelegator>(),
dialogService ?? Mock.Of<IMailDialogService>(),
@@ -159,7 +159,7 @@ public class CalendarRangeResolverTests
var text = formatter.Format(range, new TestDateContextProvider("de-DE", today: new DateOnly(2026, 3, 20)));
text.Should().Be("16. März - 22. März");
text.Should().Be("16. März - 22");
}
private static CalendarSettings CreateSettings(