Extract Tasks into the ModelContextProtocol.Extensions.Tasks extension package (#1693)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Tarek Mahmoud Sayed <tarekms@ntdev.microsoft.com>
This commit is contained in:
Jeff Handley 2026-07-14 15:53:58 -07:00 • committed by GitHub
commit 2ca96f548b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1,3 +1,4 @@
using ModelContextProtocol.Extensions.Tasks;
using ModelContextProtocol.Protocol;
using ModelContextProtocol.Server;
using System.Text.Json;
@ -87,6 +88,59 @@ public class InMemoryMcpTaskStoreTests
Assert.Null(result);
}
[Fact]
public async Task GetTaskAsync_WithinTimeToLive_ReturnsTask()
{
var store = new InMemoryMcpTaskStore { DefaultTimeToLive = TimeSpan.FromMinutes(10) };
var created = await store.CreateTaskAsync(CT);
var result = await store.GetTaskAsync(created.TaskId, CT);
Assert.NotNull(result);
Assert.Equal(created.TaskId, result.TaskId);
}
[Fact]
public async Task GetTaskAsync_AfterTimeToLiveElapsed_ReturnsNull()
{
var store = new InMemoryMcpTaskStore { DefaultTimeToLive = TimeSpan.FromMilliseconds(100) };
var created = await store.CreateTaskAsync(CT);
await Task.Delay(TimeSpan.FromMilliseconds(500), CT);
var result = await store.GetTaskAsync(created.TaskId, CT);
Assert.Null(result);
}
[Fact]
public async Task GetTaskAsync_WithoutTimeToLive_DoesNotExpire()
{
var store = new InMemoryMcpTaskStore();
var created = await store.CreateTaskAsync(CT);
await Task.Delay(TimeSpan.FromMilliseconds(200), CT);
var result = await store.GetTaskAsync(created.TaskId, CT);
Assert.NotNull(result);
Assert.Equal(created.TaskId, result.TaskId);
}
[Fact]
public async Task GetTaskAsync_WithZeroTimeToLive_DoesNotExpire()
{
var store = new InMemoryMcpTaskStore { DefaultTimeToLive = TimeSpan.Zero };
var created = await store.CreateTaskAsync(CT);
await Task.Delay(TimeSpan.FromMilliseconds(200), CT);
var result = await store.GetTaskAsync(created.TaskId, CT);
Assert.NotNull(result);
Assert.Equal(created.TaskId, result.TaskId);
}
[Fact]
public async Task SetCompletedAsync_TransitionsToCompleted()
{