|
| 1 | +using System.Text.Json; |
| 2 | +using CalendarMcp.Core.Models; |
| 3 | +using CalendarMcp.Core.Services; |
| 4 | +using CalendarMcp.Core.Tools; |
| 5 | +using CalendarMcp.Tests.Helpers; |
| 6 | +using Microsoft.Extensions.Logging.Abstractions; |
| 7 | +using Rocks; |
| 8 | + |
| 9 | +namespace CalendarMcp.Tests.Tools; |
| 10 | + |
| 11 | +[TestClass] |
| 12 | +public class UpdateEventToolTests |
| 13 | +{ |
| 14 | + private static readonly DateTime Start = new(2025, 6, 1, 10, 0, 0); |
| 15 | + private static readonly DateTime End = new(2025, 6, 1, 11, 0, 0); |
| 16 | + |
| 17 | + [TestMethod] |
| 18 | + public async Task UpdateEvent_Success() |
| 19 | + { |
| 20 | + var account = TestData.CreateAccount(id: "acc-1", provider: "microsoft365"); |
| 21 | + |
| 22 | + var regExp = new IAccountRegistryCreateExpectations(); |
| 23 | + regExp.Setups.GetAccountAsync("acc-1") |
| 24 | + .ReturnValue(Task.FromResult<AccountInfo?>(account)); |
| 25 | + |
| 26 | + var provExp = new IProviderServiceCreateExpectations(); |
| 27 | + provExp.Setups.UpdateEventAsync( |
| 28 | + "acc-1", "cal-1", "ev-1", |
| 29 | + Arg.Any<string?>(), Arg.Any<DateTime?>(), Arg.Any<DateTime?>(), |
| 30 | + Arg.Any<string?>(), Arg.Any<List<string>?>(), Arg.Any<string?>(), Arg.Any<CancellationToken>()) |
| 31 | + .ReturnValue(Task.CompletedTask); |
| 32 | + |
| 33 | + var factExp = new IProviderServiceFactoryCreateExpectations(); |
| 34 | + factExp.Setups.GetProvider("microsoft365").ReturnValue(provExp.Instance()); |
| 35 | + |
| 36 | + var tool = new UpdateEventTool(regExp.Instance(), factExp.Instance(), |
| 37 | + NullLogger<UpdateEventTool>.Instance); |
| 38 | + |
| 39 | + var result = await tool.UpdateEvent("acc-1", "cal-1", "ev-1", subject: "Updated", start: Start, end: End, timeZone: "America/Chicago"); |
| 40 | + var doc = JsonDocument.Parse(result); |
| 41 | + |
| 42 | + Assert.IsTrue(doc.RootElement.GetProperty("success").GetBoolean()); |
| 43 | + Assert.AreEqual("ev-1", doc.RootElement.GetProperty("eventId").GetString()); |
| 44 | + |
| 45 | + regExp.Verify(); |
| 46 | + factExp.Verify(); |
| 47 | + provExp.Verify(); |
| 48 | + } |
| 49 | + |
| 50 | + [TestMethod] |
| 51 | + public async Task UpdateEvent_AccountNotFound_ReturnsError() |
| 52 | + { |
| 53 | + var regExp = new IAccountRegistryCreateExpectations(); |
| 54 | + regExp.Setups.GetAccountAsync("nonexistent") |
| 55 | + .ReturnValue(Task.FromResult<AccountInfo?>(null)); |
| 56 | + |
| 57 | + var factExp = new IProviderServiceFactoryCreateExpectations(); |
| 58 | + var tool = new UpdateEventTool(regExp.Instance(), factExp.Instance(), |
| 59 | + NullLogger<UpdateEventTool>.Instance); |
| 60 | + |
| 61 | + var result = await tool.UpdateEvent("nonexistent", "cal-1", "ev-1"); |
| 62 | + var doc = JsonDocument.Parse(result); |
| 63 | + |
| 64 | + Assert.AreEqual("Account 'nonexistent' not found", doc.RootElement.GetProperty("error").GetString()); |
| 65 | + regExp.Verify(); |
| 66 | + } |
| 67 | +} |
0 commit comments