diff --git a/Wabbajack.Server.Test/ModListValidationTests.cs b/Wabbajack.Server.Test/ModListValidationTests.cs index f1598f24..f3e34f8d 100644 --- a/Wabbajack.Server.Test/ModListValidationTests.cs +++ b/Wabbajack.Server.Test/ModListValidationTests.cs @@ -101,6 +101,58 @@ namespace Wabbajack.BuildServer.Test await CheckListFeeds(0, 1); + } + + [Fact] + public async Task CanHealLists() + { + var modlists = await MakeModList(); + Consts.ModlistMetadataURL = modlists.ToString(); + Utils.Log("Updating modlists"); + await RevalidateLists(true); + + Utils.Log("Checking validated results"); + var data = (await ModlistMetadata.LoadFromGithub()).FirstOrDefault(l => l.Links.MachineURL == "test_list"); + Assert.NotNull(data); + Assert.Equal(0, data.ValidationSummary.Failed); + Assert.Equal(1, data.ValidationSummary.Passed); + + await CheckListFeeds(0, 1); + + Utils.Log("Break List by changing the file"); + var archive = "test_archive.txt".RelativeTo(Fixture.ServerPublicFolder); + await archive.WriteAllTextAsync("broken"); + + // We can revalidate but the non-nexus archives won't be checked yet since the list didn't change + await RevalidateLists(false); + + data = (await ModlistMetadata.LoadFromGithub()).FirstOrDefault(l => l.Links.MachineURL == "test_list"); + Assert.NotNull(data); + Assert.Equal(0, data.ValidationSummary.Failed); + Assert.Equal(1, data.ValidationSummary.Passed); + + // Run the non-nexus validator + await RevalidateLists(true); + + data = (await ModlistMetadata.LoadFromGithub()).FirstOrDefault(l => l.Links.MachineURL == "test_list"); + Assert.NotNull(data); + Assert.Equal(0, data.ValidationSummary.Failed); + Assert.Equal(0, data.ValidationSummary.Passed); + Assert.Equal(1, data.ValidationSummary.Updating); + + var patcher = Fixture.GetService(); + Assert.Equal(1, await patcher.Execute()); + + await RevalidateLists(false); + + data = (await ModlistMetadata.LoadFromGithub()).FirstOrDefault(l => l.Links.MachineURL == "test_list"); + Assert.NotNull(data); + Assert.Equal(0, data.ValidationSummary.Failed); + Assert.Equal(1, data.ValidationSummary.Passed); + Assert.Equal(0, data.ValidationSummary.Updating); + + + } private async Task RevalidateLists(bool runNonNexus) @@ -117,6 +169,9 @@ namespace Wabbajack.BuildServer.Test var validator = Fixture.GetService(); await validator.Execute(); + + var archiver = Fixture.GetService(); + await archiver.Execute(); } private async Task CheckListFeeds(int failed, int passed) diff --git a/Wabbajack.Server/DTOs/ArchiveDownload.cs b/Wabbajack.Server/DTOs/ArchiveDownload.cs index bf43b82e..6ffe0871 100644 --- a/Wabbajack.Server/DTOs/ArchiveDownload.cs +++ b/Wabbajack.Server/DTOs/ArchiveDownload.cs @@ -23,7 +23,7 @@ namespace Wabbajack.Server.DTOs public async Task Finish(SqlService service) { - IsFailed = true; + IsFailed = false; DownloadFinished = DateTime.UtcNow; await service.UpdatePendingDownload(this); } diff --git a/Wabbajack.Server/Services/ListValidator.cs b/Wabbajack.Server/Services/ListValidator.cs index 98ccdc65..b2453a7a 100644 --- a/Wabbajack.Server/Services/ListValidator.cs +++ b/Wabbajack.Server/Services/ListValidator.cs @@ -206,7 +206,7 @@ namespace Wabbajack.Server.Services return isValid ? (archive, ArchiveStatus.Valid) : (archive, ArchiveStatus.InValid); } - return (archive, ArchiveStatus.InValid); + return (archive, ArchiveStatus.Valid); } } }