73 lines
3.5 KiB
C#
73 lines
3.5 KiB
C#
using System.Linq;
|
|
using FluentAssertions;
|
|
using Wino.Core.Domain.Entities.Calendar;
|
|
using Wino.Core.Domain.Enums;
|
|
using Wino.Services;
|
|
using Xunit;
|
|
|
|
namespace Wino.Core.Tests.Services;
|
|
|
|
public class CalendarContextMenuItemServiceTests
|
|
{
|
|
private readonly CalendarContextMenuItemService _service = new();
|
|
|
|
[Fact]
|
|
public void GetContextMenuItems_ForEditableSingleEvent_ReturnsOpenShowAsAndDeleteAsPrimary()
|
|
{
|
|
var calendarItem = new CalendarItem
|
|
{
|
|
Id = Guid.NewGuid(),
|
|
Title = "Editable single event",
|
|
ShowAs = CalendarItemShowAs.Busy
|
|
};
|
|
|
|
var items = _service.GetContextMenuItems(calendarItem);
|
|
|
|
items.Should().HaveCount(3);
|
|
items.Should().ContainSingle(item => item.Action.ActionType == CalendarContextMenuActionType.Open && item.IsPrimary);
|
|
items.Should().ContainSingle(item => item.Action.ActionType == CalendarContextMenuActionType.ShowAs && item.IsPrimary);
|
|
items.Should().ContainSingle(item => item.Action.ActionType == CalendarContextMenuActionType.Delete && item.IsPrimary);
|
|
items.Should().NotContain(item => item.Action.ActionType == CalendarContextMenuActionType.Respond);
|
|
|
|
var showAsItem = items.Single(item => item.Action.ActionType == CalendarContextMenuActionType.ShowAs);
|
|
showAsItem.Children.Should().HaveCount(5);
|
|
showAsItem.Children.Select(child => child.Action.ShowAs).Should().BeEquivalentTo(
|
|
[
|
|
CalendarItemShowAs.Free,
|
|
CalendarItemShowAs.Tentative,
|
|
CalendarItemShowAs.Busy,
|
|
CalendarItemShowAs.OutOfOffice,
|
|
CalendarItemShowAs.WorkingElsewhere
|
|
]);
|
|
}
|
|
|
|
[Fact]
|
|
public void GetContextMenuItems_ForLockedRecurringChild_ReturnsRespondDeleteViewSeriesAndJoinOnline()
|
|
{
|
|
var calendarItem = new CalendarItem
|
|
{
|
|
Id = Guid.NewGuid(),
|
|
Title = "Recurring invite",
|
|
IsLocked = true,
|
|
RecurringCalendarItemId = Guid.NewGuid(),
|
|
HtmlLink = "https://contoso.example/meeting"
|
|
};
|
|
|
|
var items = _service.GetContextMenuItems(calendarItem);
|
|
|
|
items.Should().ContainSingle(item => item.Action.ActionType == CalendarContextMenuActionType.Open && item.IsPrimary);
|
|
items.Should().ContainSingle(item => item.Action.ActionType == CalendarContextMenuActionType.Respond && item.IsPrimary);
|
|
items.Should().ContainSingle(item => item.Action.ActionType == CalendarContextMenuActionType.Delete && item.IsPrimary);
|
|
items.Should().ContainSingle(item => item.Action.ActionType == CalendarContextMenuActionType.Open && item.Action.TargetType == CalendarEventTargetType.Series && !item.IsPrimary);
|
|
items.Should().ContainSingle(item => item.Action.ActionType == CalendarContextMenuActionType.JoinOnline && !item.IsPrimary);
|
|
|
|
var respondItem = items.Single(item => item.Action.ActionType == CalendarContextMenuActionType.Respond);
|
|
respondItem.Children.Should().HaveCount(2);
|
|
respondItem.Children.Select(child => child.Action.TargetType).Should().BeEquivalentTo([CalendarEventTargetType.Single, CalendarEventTargetType.Series]);
|
|
respondItem.Children.Should().OnlyContain(child => child.Children.Count == 3);
|
|
|
|
var deleteItem = items.Single(item => item.Action.ActionType == CalendarContextMenuActionType.Delete);
|
|
deleteItem.Children.Select(child => child.Action.TargetType).Should().BeEquivalentTo([CalendarEventTargetType.Single, CalendarEventTargetType.Series]);
|
|
}
|
|
}
|