Event creation.
This commit is contained in:
@@ -99,6 +99,7 @@ public class AccountServiceTests : IAsyncLifetime
|
||||
|
||||
var authenticationProvider = new Mock<IAuthenticationProvider>();
|
||||
var mimeFileService = new Mock<IMimeFileService>();
|
||||
var contactPictureFileService = new Mock<IContactPictureFileService>();
|
||||
|
||||
var preferencesService = new Mock<IPreferencesService>();
|
||||
preferencesService.SetupProperty(a => a.StartupEntityId);
|
||||
@@ -108,6 +109,7 @@ public class AccountServiceTests : IAsyncLifetime
|
||||
signatureService.Object,
|
||||
authenticationProvider.Object,
|
||||
mimeFileService.Object,
|
||||
preferencesService.Object);
|
||||
preferencesService.Object,
|
||||
contactPictureFileService.Object);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
using CommunityToolkit.Mvvm.Messaging;
|
||||
using FluentAssertions;
|
||||
using Wino.Core.Domain.Entities.Calendar;
|
||||
using Wino.Core.Domain.Entities.Shared;
|
||||
using Wino.Core.Domain.Enums;
|
||||
using Wino.Core.Domain.Models.Calendar;
|
||||
using Wino.Core.Helpers;
|
||||
using Wino.Core.Requests.Calendar;
|
||||
using Wino.Messaging.Client.Calendar;
|
||||
using Xunit;
|
||||
|
||||
namespace Wino.Core.Tests.Services;
|
||||
|
||||
public sealed class CreateCalendarEventRequestTests
|
||||
{
|
||||
[Fact]
|
||||
public void ApplyUiChanges_ForNonRecurringEvent_SendsOptimisticAddAndRevertDelete()
|
||||
{
|
||||
var composeResult = CreateComposeResult();
|
||||
var assignedCalendar = CreateAssignedCalendar();
|
||||
var request = new CreateCalendarEventRequest(composeResult, assignedCalendar);
|
||||
var recipient = new CalendarRequestRecipient();
|
||||
|
||||
WeakReferenceMessenger.Default.RegisterAll(recipient);
|
||||
|
||||
try
|
||||
{
|
||||
request.LocalCalendarItemId.Should().NotBeNull();
|
||||
|
||||
request.ApplyUIChanges();
|
||||
request.RevertUIChanges();
|
||||
|
||||
recipient.Added.Should().ContainSingle();
|
||||
recipient.Deleted.Should().ContainSingle();
|
||||
recipient.Added[0].Id.Should().Be(request.LocalCalendarItemId!.Value);
|
||||
recipient.Deleted[0].Id.Should().Be(request.LocalCalendarItemId!.Value);
|
||||
}
|
||||
finally
|
||||
{
|
||||
WeakReferenceMessenger.Default.UnregisterAll(recipient);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ApplyUiChanges_ForRecurringEvent_DoesNotSendOptimisticMessages()
|
||||
{
|
||||
var composeResult = CreateComposeResult();
|
||||
composeResult.Recurrence = "RRULE:FREQ=DAILY;INTERVAL=1";
|
||||
var request = new CreateCalendarEventRequest(composeResult, CreateAssignedCalendar());
|
||||
var recipient = new CalendarRequestRecipient();
|
||||
|
||||
WeakReferenceMessenger.Default.RegisterAll(recipient);
|
||||
|
||||
try
|
||||
{
|
||||
request.LocalCalendarItemId.Should().BeNull();
|
||||
request.Item.Should().BeNull();
|
||||
|
||||
request.ApplyUIChanges();
|
||||
request.RevertUIChanges();
|
||||
|
||||
recipient.Added.Should().BeEmpty();
|
||||
recipient.Deleted.Should().BeEmpty();
|
||||
request.PreparedItem.Should().NotBeNull();
|
||||
}
|
||||
finally
|
||||
{
|
||||
WeakReferenceMessenger.Default.UnregisterAll(recipient);
|
||||
}
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void SynchronizationActionHelper_ForCreateRequest_ReturnsCalendarCreateAction()
|
||||
{
|
||||
var request = new CreateCalendarEventRequest(CreateComposeResult(), CreateAssignedCalendar());
|
||||
|
||||
var actionItems = SynchronizationActionHelper.CreateActionItems([request], Guid.NewGuid(), "Test");
|
||||
|
||||
actionItems.Should().ContainSingle();
|
||||
actionItems[0].Description.Should().Be(Wino.Core.Domain.Translator.SyncAction_CreatingEvent);
|
||||
}
|
||||
|
||||
private static CalendarEventComposeResult CreateComposeResult()
|
||||
{
|
||||
return new CalendarEventComposeResult
|
||||
{
|
||||
CalendarId = Guid.NewGuid(),
|
||||
AccountId = Guid.NewGuid(),
|
||||
Title = "Planning",
|
||||
Location = "Room 4",
|
||||
HtmlNotes = "<p>Notes</p>",
|
||||
StartDate = new DateTime(2026, 3, 7, 10, 0, 0),
|
||||
EndDate = new DateTime(2026, 3, 7, 11, 0, 0),
|
||||
TimeZoneId = TimeZoneInfo.Local.Id,
|
||||
ShowAs = CalendarItemShowAs.Busy
|
||||
};
|
||||
}
|
||||
|
||||
private static AccountCalendar CreateAssignedCalendar()
|
||||
{
|
||||
return new AccountCalendar
|
||||
{
|
||||
Id = Guid.NewGuid(),
|
||||
AccountId = Guid.NewGuid(),
|
||||
Name = "Primary",
|
||||
DefaultShowAs = CalendarItemShowAs.Busy,
|
||||
MailAccount = new MailAccount
|
||||
{
|
||||
Id = Guid.NewGuid(),
|
||||
Address = "user@example.com",
|
||||
SenderName = "User"
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
internal sealed class CalendarRequestRecipient :
|
||||
IRecipient<CalendarItemAdded>,
|
||||
IRecipient<CalendarItemDeleted>
|
||||
{
|
||||
public List<CalendarItem> Added { get; } = [];
|
||||
public List<CalendarItem> Deleted { get; } = [];
|
||||
|
||||
public void Receive(CalendarItemAdded message) => Added.Add(message.CalendarItem);
|
||||
|
||||
public void Receive(CalendarItemDeleted message) => Deleted.Add(message.CalendarItem);
|
||||
}
|
||||
}
|
||||
@@ -358,13 +358,15 @@ public class MailFetchingTests : IAsyncLifetime
|
||||
var authProvider = new Mock<IAuthenticationProvider>();
|
||||
var mimeFileService = new Mock<IMimeFileService>();
|
||||
var preferencesService = new Mock<IPreferencesService>();
|
||||
var contactPictureFileService = new Mock<IContactPictureFileService>();
|
||||
|
||||
var accountService = new AccountService(
|
||||
db,
|
||||
signatureService.Object,
|
||||
authProvider.Object,
|
||||
mimeFileService.Object,
|
||||
preferencesService.Object);
|
||||
preferencesService.Object,
|
||||
contactPictureFileService.Object);
|
||||
|
||||
var folderService = new FolderService(db, accountService);
|
||||
var contactService = new ContactService(db);
|
||||
|
||||
Reference in New Issue
Block a user