| File: Agents\AgentEnvironmentDetectorTests.cs | Web Access |
| Project: src\tests\Aspire.Cli.Tests\Aspire.Cli.Tests.csproj (Aspire.Cli.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.InternalTesting; using Aspire.Cli.Agents; using Aspire.Cli.Tests.TestServices; namespace Aspire.Cli.Tests.Agents; public class AgentEnvironmentDetectorTests(ITestOutputHelper outputHelper) { [Fact] public async Task DetectAsync_WithNoScanners_ReturnsNone() { using var workspace = TemporaryWorkspace.CreateForCli(outputHelper); var detector = new AgentEnvironmentDetector([]); var context = new AgentEnvironmentScanContext { WorkingDirectory = workspace.WorkspaceRoot, RepositoryRoot = workspace.WorkspaceRoot, }; var environments = await detector.DetectAsync(context, CancellationToken.None).DefaultTimeout(); Assert.Equal(AgentEnvironment.None, environments); } [Fact] public async Task DetectAsync_WithScanner_RunsScannerWithCorrectContext() { using var workspace = TemporaryWorkspace.CreateForCli(outputHelper); var scanner = new TestAgentEnvironmentScanner(); var detector = new AgentEnvironmentDetector([scanner]); var context = new AgentEnvironmentScanContext { WorkingDirectory = workspace.WorkspaceRoot, RepositoryRoot = workspace.WorkspaceRoot, }; await detector.DetectAsync(context, CancellationToken.None).DefaultTimeout(); Assert.True(scanner.WasScanned); Assert.Equal(workspace.WorkspaceRoot.FullName, scanner.ScanContext?.WorkingDirectory.FullName); Assert.Equal(workspace.WorkspaceRoot.FullName, scanner.ScanContext?.RepositoryRoot.FullName); } [Fact] public async Task DetectAsync_WithScannerThatDetectsEnvironment_ReturnsEnvironment() { using var workspace = TemporaryWorkspace.CreateForCli(outputHelper); var scanner = new TestAgentEnvironmentScanner { DetectedEnvironments = AgentEnvironment.ClaudeCode }; var detector = new AgentEnvironmentDetector([scanner]); var context = new AgentEnvironmentScanContext { WorkingDirectory = workspace.WorkspaceRoot, RepositoryRoot = workspace.WorkspaceRoot, }; var environments = await detector.DetectAsync(context, CancellationToken.None).DefaultTimeout(); Assert.Equal(AgentEnvironment.ClaudeCode, environments); } [Fact] public async Task DetectAsync_WithMultipleScanners_RunsAllScanners() { using var workspace = TemporaryWorkspace.CreateForCli(outputHelper); var scanner1 = new TestAgentEnvironmentScanner { DetectedEnvironments = AgentEnvironment.CopilotCli | AgentEnvironment.CopilotApp }; var scanner2 = new TestAgentEnvironmentScanner { DetectedEnvironments = AgentEnvironment.OpenCode | AgentEnvironment.CopilotCli }; var detector = new AgentEnvironmentDetector([scanner1, scanner2]); var context = new AgentEnvironmentScanContext { WorkingDirectory = workspace.WorkspaceRoot, RepositoryRoot = workspace.WorkspaceRoot, }; var environments = await detector.DetectAsync(context, CancellationToken.None).DefaultTimeout(); Assert.True(scanner1.WasScanned); Assert.True(scanner2.WasScanned); Assert.Equal(AgentEnvironment.CopilotCli | AgentEnvironment.CopilotApp | AgentEnvironment.OpenCode, environments); } }