dependabot-nuget 0.351.0 → 0.353.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/DiscoveryWorker.cs +17 -43
  3. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/SdkProjectDiscovery.cs +102 -46
  4. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/ExperimentsManager.cs +0 -3
  5. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/DependencyGroup.cs +19 -0
  6. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/Job.cs +23 -2
  7. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/JobErrorBase.cs +4 -2
  8. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/OutOfDisk.cs +9 -0
  9. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/IApiHandler.cs +11 -1
  10. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/RunWorker.cs +25 -4
  11. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/CreateSecurityUpdatePullRequestHandler.cs +2 -2
  12. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/GroupUpdateAllVersionsHandler.cs +48 -35
  13. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/RefreshGroupUpdatePullRequestHandler.cs +3 -3
  14. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/RefreshSecurityUpdatePullRequestHandler.cs +2 -2
  15. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/RefreshVersionUpdatePullRequestHandler.cs +2 -2
  16. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/PackageReferenceUpdater.cs +20 -23
  17. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/MSBuildHelper.cs +41 -1
  18. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/PathHelper.cs +93 -0
  19. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.PackagesConfig.cs +2 -5
  20. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.Project.cs +21 -9
  21. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.cs +51 -96
  22. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/SdkProjectDiscoveryTests.cs +1 -66
  23. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/ApiModel/JobTests.cs +39 -0
  24. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/EndToEndTests.cs +142 -0
  25. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/HttpApiHandlerTests.cs +1 -0
  26. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/JobErrorBaseTests.cs +7 -0
  27. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/MessageReportTests.cs +11 -0
  28. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/MiscellaneousTests.cs +76 -7
  29. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/SerializationTests.cs +8 -0
  30. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdateHandlers/GroupUpdateAllVersionsHandlerTests.cs +242 -0
  31. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/PackageReferenceUpdaterTests.cs +30 -0
  32. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/MSBuildHelperTests.cs +25 -0
  33. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/PathHelperTests.cs +250 -0
  34. metadata +5 -4
@@ -1,8 +1,11 @@
1
1
  using System.Collections.Immutable;
2
2
  using System.Text.Json;
3
3
 
4
+ using Microsoft.Build.Evaluation;
5
+
4
6
  using NuGetUpdater.Core.Discover;
5
7
  using NuGetUpdater.Core.Run.ApiModel;
8
+ using NuGetUpdater.Core.Test.Utilities;
6
9
 
7
10
  using Xunit;
8
11
 
@@ -163,13 +166,10 @@ public partial class DiscoveryWorkerTests : DiscoveryWorkerTestBase
163
166
  );
164
167
  }
165
168
 
166
- [Theory]
167
- [InlineData(true)]
168
- [InlineData(false)]
169
- public async Task TestDependenciesSeparatedBySemicolon(bool useSingleRestore)
169
+ [Fact]
170
+ public async Task TestDependenciesSeparatedBySemicolon()
170
171
  {
171
172
  await TestDiscoveryAsync(
172
- experimentsManager: new ExperimentsManager() { UseSingleRestore = useSingleRestore },
173
173
  packages:
174
174
  [
175
175
  MockNuGetPackage.CreateSimplePackage("Some.Package", "9.0.1", "net8.0"),
@@ -368,13 +368,10 @@ public partial class DiscoveryWorkerTests : DiscoveryWorkerTestBase
368
368
  );
369
369
  }
370
370
 
371
- [Theory]
372
- [InlineData(true)]
373
- [InlineData(false)]
374
- public async Task TestPackageConfig(bool useSingleRestore)
371
+ [Fact]
372
+ public async Task TestPackageConfig()
375
373
  {
376
374
  await TestDiscoveryAsync(
377
- experimentsManager: new ExperimentsManager() { UseSingleRestore = useSingleRestore },
378
375
  packages:
379
376
  [
380
377
  MockNuGetPackage.CreateSimplePackage("Some.Package", "7.0.1", "net45"),
@@ -491,14 +488,11 @@ public partial class DiscoveryWorkerTests : DiscoveryWorkerTestBase
491
488
  );
492
489
  }
493
490
 
494
- [Theory]
495
- [InlineData(true)]
496
- [InlineData(false)]
497
- public async Task TestRepo(bool useSingleRestore)
491
+ [Fact]
492
+ public async Task TestRepo()
498
493
  {
499
494
  var solutionPath = "solution.sln";
500
495
  await TestDiscoveryAsync(
501
- experimentsManager: new ExperimentsManager() { UseSingleRestore = useSingleRestore },
502
496
  packages:
503
497
  [
504
498
  MockNuGetPackage.CreateSimplePackage("Some.Package", "9.0.1", "net7.0"),
@@ -624,13 +618,10 @@ public partial class DiscoveryWorkerTests : DiscoveryWorkerTestBase
624
618
  );
625
619
  }
626
620
 
627
- [Theory]
628
- [InlineData(true)]
629
- [InlineData(false)]
630
- public async Task TestRepo_Sln(bool useSingleRestore)
621
+ [Fact]
622
+ public async Task TestRepo_Sln()
631
623
  {
632
624
  await TestDiscoveryAsync(
633
- experimentsManager: new ExperimentsManager() { UseSingleRestore = useSingleRestore },
634
625
  packages: [
635
626
  MockNuGetPackage.CreateSimplePackage("Package.A", "1.2.3", "net8.0"),
636
627
  MockNuGetPackage.CreateSimplePackage("Package.B", "4.5.6", "net8.0"),
@@ -720,14 +711,11 @@ public partial class DiscoveryWorkerTests : DiscoveryWorkerTestBase
720
711
  );
721
712
  }
722
713
 
723
- [Theory]
724
- [InlineData(true)]
725
- [InlineData(false)]
726
- public async Task TestRepo_Slnx(bool useSingleRestore)
714
+ [Fact]
715
+ public async Task TestRepo_Slnx()
727
716
  {
728
717
  var solutionPath = "solution.slnx";
729
718
  await TestDiscoveryAsync(
730
- experimentsManager: new ExperimentsManager() { UseSingleRestore = useSingleRestore },
731
719
  packages:
732
720
  [
733
721
  MockNuGetPackage.CreateSimplePackage("Some.Package", "9.0.1", "net7.0"),
@@ -863,77 +851,6 @@ public partial class DiscoveryWorkerTests : DiscoveryWorkerTestBase
863
851
  );
864
852
  }
865
853
 
866
- [Fact]
867
- public async Task TestDirsProj_CasingMismatchIsResolved()
868
- {
869
- var dirsProjPath = "dirs.proj";
870
- await TestDiscoveryAsync(
871
- packages:
872
- [
873
- MockNuGetPackage.CreateSimplePackage("Some.Package", "9.0.1", "net7.0"),
874
- ],
875
- workspacePath: "",
876
- files: new[]
877
- {
878
- ("src/project.csproj", """
879
- <Project Sdk="Microsoft.NET.Sdk">
880
- <PropertyGroup>
881
- <TargetFrameworks>net7.0;net8.0</TargetFrameworks>
882
- </PropertyGroup>
883
-
884
- <ItemGroup>
885
- <PackageReference Include="Some.Package" />
886
- </ItemGroup>
887
- </Project>
888
- """),
889
- ("Directory.Build.props", "<Project />"),
890
- ("Directory.Packages.props", """
891
- <Project>
892
- <PropertyGroup>
893
- <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
894
- <SomePackageVersion>9.0.1</SomePackageVersion>
895
- </PropertyGroup>
896
-
897
- <ItemGroup>
898
- <PackageVersion Include="Some.Package" Version="$(SomePackageVersion)" />
899
- </ItemGroup>
900
- </Project>
901
- """),
902
- // Introduce a casing difference in the project reference
903
- (dirsProjPath, """
904
- <Project>
905
- <ItemGroup>
906
- <ProjectReference Include="SRC/PROJECT.CSPROJ" />
907
- </ItemGroup>
908
- </Project>
909
- """)
910
- },
911
- expectedResult: new()
912
- {
913
- Path = "",
914
- Projects = [
915
- new()
916
- {
917
- FilePath = "src/project.csproj",
918
- TargetFrameworks = ["net7.0", "net8.0"],
919
- Dependencies = [
920
- new("Some.Package", "9.0.1", DependencyType.PackageReference, TargetFrameworks: ["net7.0", "net8.0"], IsDirect: true)
921
- ],
922
- Properties = [
923
- new("TargetFrameworks", "net7.0;net8.0", "src/project.csproj"),
924
- ],
925
- ReferencedProjectPaths = [],
926
- ImportedFiles = [
927
- "../Directory.Build.props",
928
- "../Directory.Packages.props",
929
- ],
930
- AdditionalFiles = [],
931
- }
932
- ],
933
- }
934
- );
935
- }
936
-
937
854
  [Fact]
938
855
  public async Task NonSupportedProjectExtensionsAreSkipped()
939
856
  {
@@ -1617,4 +1534,42 @@ public partial class DiscoveryWorkerTests : DiscoveryWorkerTestBase
1617
1534
  }
1618
1535
  );
1619
1536
  }
1537
+
1538
+ [Fact]
1539
+ public async Task ExpandEntryPoints()
1540
+ {
1541
+ using var tempDir = await TemporaryDirectory.CreateWithContentsAsync(
1542
+ ("src/dirs.proj", """
1543
+ <Project>
1544
+ <ItemGroup>
1545
+ <ProjectFile Include="project1\project1.csproj" /><!-- relative -->
1546
+ <ProjectFile Include="$(MSBuildThisFileDirectory)project2\project2.csproj" /><!-- absolute -->
1547
+ </ItemGroup>
1548
+ </Project>
1549
+ """),
1550
+ ("src/project1/project1.csproj", $"""
1551
+ <Project Sdk="Microsoft.NET.Sdk">
1552
+ <PropertyGroup>
1553
+ <TargetFramework>net9.0</TargetFramework>
1554
+ </PropertyGroup>
1555
+ </Project>
1556
+ """),
1557
+ ("src/project2/project2.csproj", """
1558
+ <Project Sdk="Microsoft.NET.Sdk">
1559
+ <PropertyGroup>
1560
+ <TargetFramework>net9.0</TargetFramework>
1561
+ </PropertyGroup>
1562
+ </Project>
1563
+ """)
1564
+ );
1565
+ var actualEntryPoints = (await DiscoveryWorker.ExpandEntryPointsIntoProjectsAsync([Path.Combine(tempDir.DirectoryPath, "src/dirs.proj")], new ExperimentsManager()))
1566
+ .Select(p => p.NormalizePathToUnix())
1567
+ .ToArray();
1568
+ var expectedEntryPoints = new[]
1569
+ {
1570
+ Path.Combine(tempDir.DirectoryPath, "src/project1/project1.csproj").NormalizePathToUnix(),
1571
+ Path.Combine(tempDir.DirectoryPath, "src/project2/project2.csproj").NormalizePathToUnix(),
1572
+ };
1573
+ AssertEx.Equal(expectedEntryPoints, actualEntryPoints);
1574
+ }
1620
1575
  }
@@ -580,63 +580,12 @@ public class SdkProjectDiscoveryTests : DiscoveryWorkerTestBase
580
580
  );
581
581
  }
582
582
 
583
- [Fact]
584
- public async Task ExistingPackageIncompatibilityShouldNotPreventRestore()
585
- {
586
- // Package.A tries to pull in a transitive dependency of Transitive.Package/2.0.0 but that package is explicitly pinned at 1.0.0
587
- // Normally this would cause a restore failure which means discovery would also fail
588
- // This test ensures we can still run discovery
589
- await TestDiscoverAsync(
590
- useSingleRestore: false,
591
- packages: [
592
- MockNuGetPackage.CreateSimplePackage("Package.A", "1.0.0", "net8.0", [(null, [("Transitive.Package", "2.0.0")])]),
593
- MockNuGetPackage.CreateSimplePackage("Transitive.Package", "1.0.0", "net8.0"),
594
- MockNuGetPackage.CreateSimplePackage("Transitive.Package", "2.0.0", "net8.0"),
595
- ],
596
- startingDirectory: "src",
597
- projectPath: "src/library.csproj",
598
- files: [
599
- ("src/library.csproj", """
600
- <Project Sdk="Microsoft.NET.Sdk">
601
- <PropertyGroup>
602
- <TargetFramework>net8.0</TargetFramework>
603
- </PropertyGroup>
604
- <ItemGroup>
605
- <PackageReference Include="Package.A" Version="1.0.0" />
606
- <PackageReference Include="Transitive.Package" Version="1.0.0" />
607
- </ItemGroup>
608
- </Project>
609
- """)
610
- ],
611
- expectedProjects: [
612
- new()
613
- {
614
- FilePath = "library.csproj",
615
- Dependencies =
616
- [
617
- new("Package.A", "1.0.0", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
618
- new("Transitive.Package", "1.0.0", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true)
619
- ],
620
- ImportedFiles = [],
621
- Properties =
622
- [
623
- new("TargetFramework", "net8.0", "src/library.csproj"),
624
- ],
625
- TargetFrameworks = ["net8.0"],
626
- ReferencedProjectPaths = [],
627
- AdditionalFiles = [],
628
- }
629
- ]
630
- );
631
- }
632
-
633
583
  [Fact]
634
584
  public async Task DependenciesCanBeDiscoveredWithoutCompiling_FromProjectWithSingleTfm()
635
585
  {
636
586
  using var tempDir = new TemporaryDirectory();
637
587
  var errorSentinelPath = Path.Combine(tempDir.DirectoryPath, "error-sentinel.txt");
638
588
  await TestDiscoverAsync(
639
- useSingleRestore: true,
640
589
  startingDirectory: "src",
641
590
  packages: [
642
591
  MockNuGetPackage.CreateSimplePackage("Some.Package", "1.0.0", "net8.0"),
@@ -691,7 +640,6 @@ public class SdkProjectDiscoveryTests : DiscoveryWorkerTestBase
691
640
  using var tempDir = new TemporaryDirectory();
692
641
  var errorSentinelPath = Path.Combine(tempDir.DirectoryPath, "error-sentinel.txt");
693
642
  await TestDiscoverAsync(
694
- useSingleRestore: true,
695
643
  startingDirectory: "src",
696
644
  packages: [
697
645
  MockNuGetPackage.CreateSimplePackage("Some.Package", "1.0.0", "net8.0"),
@@ -747,19 +695,6 @@ public class SdkProjectDiscoveryTests : DiscoveryWorkerTestBase
747
695
  ImmutableArray<ExpectedSdkProjectDiscoveryResult> expectedProjects,
748
696
  MockNuGetPackage[]? packages = null
749
697
  )
750
- {
751
- await TestDiscoverAsync(useSingleRestore: true, startingDirectory, projectPath, files, expectedProjects, packages);
752
- await TestDiscoverAsync(useSingleRestore: false, startingDirectory, projectPath, files, expectedProjects, packages);
753
- }
754
-
755
- private static async Task TestDiscoverAsync(
756
- bool useSingleRestore,
757
- string startingDirectory,
758
- string projectPath,
759
- TestFile[] files,
760
- ImmutableArray<ExpectedSdkProjectDiscoveryResult> expectedProjects,
761
- MockNuGetPackage[]? packages = null
762
- )
763
698
  {
764
699
  using var testDirectory = await TemporaryDirectory.CreateWithContentsAsync(files);
765
700
 
@@ -767,7 +702,7 @@ public class SdkProjectDiscoveryTests : DiscoveryWorkerTestBase
767
702
 
768
703
  var logger = new TestLogger();
769
704
  var fullProjectPath = Path.Combine(testDirectory.DirectoryPath, projectPath);
770
- var experimentsManager = new ExperimentsManager() { UseSingleRestore = useSingleRestore };
705
+ var experimentsManager = new ExperimentsManager();
771
706
  var projectDiscovery = await SdkProjectDiscovery.DiscoverAsync(testDirectory.DirectoryPath, Path.GetDirectoryName(fullProjectPath)!, fullProjectPath, experimentsManager, logger);
772
707
  ValidateProjectResults(expectedProjects, projectDiscovery);
773
708
  }
@@ -4,6 +4,7 @@ using NuGet.Versioning;
4
4
 
5
5
  using NuGetUpdater.Core.Analyze;
6
6
  using NuGetUpdater.Core.Run.ApiModel;
7
+ using NuGetUpdater.Core.Test.Utilities;
7
8
 
8
9
  using Xunit;
9
10
 
@@ -379,6 +380,44 @@ public class JobTests
379
380
  ];
380
381
  }
381
382
 
383
+ [Fact]
384
+ public async Task ExpandJobDirectories()
385
+ {
386
+ // arrange
387
+ using var tempDir = await TemporaryDirectory.CreateWithContentsAsync(
388
+ // file names are irrelevant, but make this function easy to use
389
+ ("src/client/android/ui/file.txt", "contents irrelevant"),
390
+ ("src/client/ios/ui/file.txt", "contents irrelevant"),
391
+ ("src/legacy/winphone/ui/file.txt", "contents irrelevant"),
392
+ ("src/server/linux/cloud/file.txt", "contents irrelevant"),
393
+ ("src/server/windows/file.txt", "contents irrelevant")
394
+ );
395
+ var job = new Job()
396
+ {
397
+ Source = new()
398
+ {
399
+ Provider = "github",
400
+ Repo = "test/repo",
401
+ Directories = [
402
+ "src/server/linux", // single value
403
+ "src/client/*/ui", // wildcard
404
+ ]
405
+ }
406
+ };
407
+
408
+ // act
409
+ var actualDirectories = job.GetAllDirectories(tempDir.DirectoryPath);
410
+
411
+ // assert - directories were expanded and original order maintained
412
+ var expectedDirectories = new[]
413
+ {
414
+ "/src/server/linux",
415
+ "/src/client/android/ui",
416
+ "/src/client/ios/ui"
417
+ }.ToImmutableArray();
418
+ AssertEx.Equal(expectedDirectories, actualDirectories);
419
+ }
420
+
382
421
  private static Job CreateJob(
383
422
  ImmutableArray<AllowedUpdate> allowedUpdates,
384
423
  ImmutableArray<string> dependencies,
@@ -995,6 +995,148 @@ public class EndToEndTests
995
995
  );
996
996
  }
997
997
 
998
+ [Fact]
999
+ public async Task WildcardDirectory_OneOfWhichIsEmpty()
1000
+ {
1001
+ // job is run with a wildcard which will expand to
1002
+ // /src
1003
+ // /src/other
1004
+ // /src/project
1005
+ // but only `/src/project` contains a project file that can be operated on
1006
+ await RunAsync(
1007
+ packages: [
1008
+ MockNuGetPackage.CreateSimplePackage("Some.Package", "1.0.0", "net9.0"),
1009
+ MockNuGetPackage.CreateSimplePackage("Some.Package", "2.0.0", "net9.0"),
1010
+ ],
1011
+ job: new()
1012
+ {
1013
+ Source = new()
1014
+ {
1015
+ Provider = "github",
1016
+ Repo = "test/repo",
1017
+ Directory = "src/**/*",
1018
+ }
1019
+ },
1020
+ files: [
1021
+ ("src/Directory.Build.props", "<Project />"),
1022
+ ("src/Directory.Build.targets", "<Project />"),
1023
+ ("src/Directory.Packages.props", """
1024
+ <Project>
1025
+ <PropertyGroup>
1026
+ <ManagePackageVersionsCentrally>false</ManagePackageVersionsCentrally>
1027
+ </PropertyGroup>
1028
+ </Project>
1029
+ """),
1030
+ ("src/other/not-a-nuget-file.txt", "contents irrelevant"),
1031
+ ("src/project/project.csproj", """
1032
+ <Project Sdk="Microsoft.NET.Sdk">
1033
+ <PropertyGroup>
1034
+ <TargetFramework>net9.0</TargetFramework>
1035
+ </PropertyGroup>
1036
+ <ItemGroup>
1037
+ <PackageReference Include="Some.Package" Version="1.0.0" />
1038
+ </ItemGroup>
1039
+ </Project>
1040
+ """)
1041
+ ],
1042
+ discoveryWorker: null, // use real worker
1043
+ analyzeWorker: null, // use real worker
1044
+ updaterWorker: null, // use real worker
1045
+ expectedApiMessages: [
1046
+ new IncrementMetric()
1047
+ {
1048
+ Metric = "updater.started",
1049
+ Tags = new()
1050
+ {
1051
+ ["operation"] = "group_update_all_versions"
1052
+ }
1053
+ },
1054
+ // no dependencies reported for `/src`
1055
+ // no dependencies reported for `/src/other`
1056
+ // but dependencies _are_ reported for `/src/project`
1057
+ new UpdatedDependencyList()
1058
+ {
1059
+ Dependencies = [
1060
+ new()
1061
+ {
1062
+ Name = "Some.Package",
1063
+ Version = "1.0.0",
1064
+ Requirements = [
1065
+ new()
1066
+ {
1067
+ Requirement = "1.0.0",
1068
+ File = "/src/project/project.csproj",
1069
+ Groups = ["dependencies"],
1070
+ }
1071
+ ]
1072
+ },
1073
+ ],
1074
+ DependencyFiles = [
1075
+ "/src/Directory.Build.props",
1076
+ "/src/Directory.Build.targets",
1077
+ "/src/Directory.Packages.props",
1078
+ "/src/project/project.csproj",
1079
+ ],
1080
+ },
1081
+ new CreatePullRequest()
1082
+ {
1083
+ Dependencies = [
1084
+ new()
1085
+ {
1086
+ Name = "Some.Package",
1087
+ Version = "2.0.0",
1088
+ Requirements = [
1089
+ new()
1090
+ {
1091
+ Requirement = "2.0.0",
1092
+ File = "/src/project/project.csproj",
1093
+ Groups = ["dependencies"],
1094
+ Source = new()
1095
+ {
1096
+ SourceUrl = null,
1097
+ Type = "nuget_repo",
1098
+ }
1099
+ }
1100
+ ],
1101
+ PreviousVersion = "1.0.0",
1102
+ PreviousRequirements = [
1103
+ new()
1104
+ {
1105
+ Requirement = "1.0.0",
1106
+ File = "/src/project/project.csproj",
1107
+ Groups = ["dependencies"],
1108
+ }
1109
+ ],
1110
+ },
1111
+ ],
1112
+ UpdatedDependencyFiles = [
1113
+ new()
1114
+ {
1115
+ Directory = "/src/project",
1116
+ Name = "project.csproj",
1117
+ Content = """
1118
+ <Project Sdk="Microsoft.NET.Sdk">
1119
+ <PropertyGroup>
1120
+ <TargetFramework>net9.0</TargetFramework>
1121
+ </PropertyGroup>
1122
+ <ItemGroup>
1123
+ <PackageReference Include="Some.Package" Version="2.0.0" />
1124
+ </ItemGroup>
1125
+ </Project>
1126
+ """
1127
+ },
1128
+ ],
1129
+ BaseCommitSha = "TEST-COMMIT-SHA",
1130
+ CommitMessage = TestPullRequestCommitMessage,
1131
+ PrTitle = TestPullRequestTitle,
1132
+ PrBody = TestPullRequestBody,
1133
+ DependencyGroup = null,
1134
+ },
1135
+ new MarkAsProcessed("TEST-COMMIT-SHA")
1136
+ ]
1137
+ );
1138
+ }
1139
+
998
1140
  public const string TestPullRequestCommitMessage = "test-pull-request-commit-message";
999
1141
  public const string TestPullRequestTitle = "test-pull-request-title";
1000
1142
  public const string TestPullRequestBody = "test-pull-request-body";
@@ -147,6 +147,7 @@ public class HttpApiHandlerTests
147
147
  yield return [new DependencyFileNotParseable("unused"), "record_update_job_error"];
148
148
  yield return [new DependencyNotFound("unused"), "record_update_job_error"];
149
149
  yield return [new JobRepoNotFound("unused"), "record_update_job_error"];
150
+ yield return [new OutOfDisk(), "record_update_job_error"];
150
151
  yield return [new PrivateSourceAuthenticationFailure(["unused"]), "record_update_job_error"];
151
152
  yield return [new PrivateSourceBadResponse(["unused"], "unused"), "record_update_job_error"];
152
153
  yield return [new PrivateSourceTimedOut("unused"), "record_update_job_error"];
@@ -40,6 +40,13 @@ public class JobErrorBaseTests : TestBase
40
40
 
41
41
  public static IEnumerable<object[]> GenerateErrorFromExceptionTestData()
42
42
  {
43
+ // disk full
44
+ yield return
45
+ [
46
+ new IOException("No space left on device : '/path/to/directory'"),
47
+ new OutOfDisk(),
48
+ ];
49
+
43
50
  // something elevated to a bad response
44
51
  yield return
45
52
  [
@@ -138,6 +138,17 @@ public class MessageReportTests
138
138
  """
139
139
  ];
140
140
 
141
+ yield return
142
+ [
143
+ // message
144
+ new OutOfDisk(),
145
+ // expected
146
+ """
147
+ Error type: out_of_disk
148
+ """
149
+
150
+ ];
151
+
141
152
  yield return
142
153
  [
143
154
  // message