Skip to content

Commit 9ae29af

Browse files
committed
test: Add unit tests for package analysis handling of non-existent packages, deep dependencies, preview versions, and known special packages
1 parent 2e067ef commit 9ae29af

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed

tests/NetContextServer/PackageAnalyzerServiceTests.cs

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using NetContextServer.Models;
22
using NetContextServer.Services;
3+
using NuGet.Versioning;
34

45
namespace NetContextServer.Tests;
56

@@ -421,4 +422,115 @@ public void TestMethod() {
421422
}
422423
}
423424
}
425+
426+
[Fact]
427+
public async Task AnalyzePackageAsync_WithNonExistentPackage_HandlesError()
428+
{
429+
// Arrange
430+
var package = new PackageReference
431+
{
432+
Id = "NonExistentPackage" + Guid.NewGuid().ToString(),
433+
Version = "1.0.0",
434+
ProjectPath = _testProjectPath
435+
};
436+
437+
// Act
438+
var analysis = await _service.AnalyzePackageAsync(package);
439+
440+
// Assert
441+
Assert.False(analysis.HasUpdate);
442+
Assert.Null(analysis.LatestVersion);
443+
Assert.False(analysis.HasPreviewUpdate);
444+
Assert.Null(analysis.LatestPreviewVersion);
445+
}
446+
447+
[Fact]
448+
public async Task AnalyzePackageAsync_WithDeepDependencies_RespectsMaxDepth()
449+
{
450+
// Arrange
451+
var package = new PackageReference
452+
{
453+
Id = "Microsoft.EntityFrameworkCore",
454+
Version = "6.0.0",
455+
ProjectPath = _testProjectPath
456+
};
457+
458+
// Act
459+
var analysis = await _service.AnalyzePackageAsync(package);
460+
461+
// Assert
462+
Assert.NotNull(analysis.TransitiveDependencies);
463+
Assert.NotEmpty(analysis.TransitiveDependencies);
464+
// Verify we have some common known dependencies
465+
Assert.Contains(analysis.TransitiveDependencies,
466+
d => d.StartsWith("Microsoft.Extensions."));
467+
}
468+
469+
[Fact]
470+
public async Task AnalyzePackageAsync_WithPreviewVersionOnly_HandlesCorrectly()
471+
{
472+
// Arrange
473+
var package = new PackageReference
474+
{
475+
Id = "Microsoft.AspNetCore.Components.WebAssembly",
476+
Version = "6.0.0",
477+
ProjectPath = _testProjectPath
478+
};
479+
480+
// Act
481+
var analysis = await _service.AnalyzePackageAsync(package, includePreviewVersions: true);
482+
483+
// Assert
484+
if (analysis.HasUpdate || analysis.HasPreviewUpdate)
485+
{
486+
if (analysis.HasUpdate)
487+
{
488+
Assert.NotNull(analysis.LatestVersion);
489+
var currentVersion = NuGetVersion.Parse(package.Version);
490+
var latestVersion = NuGetVersion.Parse(analysis.LatestVersion);
491+
Assert.True(latestVersion > currentVersion);
492+
}
493+
if (analysis.HasPreviewUpdate)
494+
{
495+
Assert.NotNull(analysis.LatestPreviewVersion);
496+
var currentVersion = NuGetVersion.Parse(package.Version);
497+
var latestPreviewVersion = NuGetVersion.Parse(analysis.LatestPreviewVersion);
498+
Assert.True(latestPreviewVersion > currentVersion);
499+
}
500+
}
501+
}
502+
503+
[Fact]
504+
public async Task AnalyzePackageAsync_WithKnownSpecialPackage_HandlesCorrectly()
505+
{
506+
// Arrange
507+
var package = new PackageReference
508+
{
509+
Id = "xunit",
510+
Version = "2.4.2",
511+
ProjectPath = Path.Combine(_testProjectDir, "Tests", "TestProject.csproj")
512+
};
513+
514+
Directory.CreateDirectory(Path.Combine(_testProjectDir, "Tests"));
515+
await File.WriteAllTextAsync(
516+
package.ProjectPath,
517+
@"<Project Sdk=""Microsoft.NET.Sdk""><ItemGroup><PackageReference Include=""xunit"" Version=""2.4.2"" /></ItemGroup></Project>"
518+
);
519+
520+
// Act
521+
var analysis = await _service.AnalyzePackageAsync(package);
522+
523+
// Assert
524+
Assert.True(analysis.ImplicitUsage, "xunit should be recognized as an implicitly used package");
525+
Assert.True(analysis.IsUsed, "xunit should be marked as used in a test project");
526+
527+
// Verify we have a recommendation (either about updates or about it being a test package)
528+
Assert.NotNull(analysis.RecommendedAction);
529+
530+
// If there's an update available, the recommendation will be about updating
531+
if (analysis.HasUpdate)
532+
{
533+
Assert.Contains("Update available", analysis.RecommendedAction);
534+
}
535+
}
424536
}

0 commit comments

Comments
 (0)