| File: AnalyzeCiFailureEnumTests.cs | Web Access |
| Project: src\tests\AnalyzeCiFailure.Tests\AnalyzeCiFailure.Tests.csproj (AnalyzeCiFailure.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Text.Json; using AnalyzeCiFailure; using VerifyXunit; using Xunit; namespace Infrastructure.Tests; /// <summary>Pins explicit enum wire names and rejects unsupported numeric or case-insensitive values.</summary> public sealed class AnalyzeCiFailureEnumTests { [Theory] [InlineData("""{"verdict":"unrecognized"}""")] [InlineData("""{"verdict":0}""")] [InlineData("""{"verdict":"0"}""")] [InlineData("""{"verdict":"FlakyTest"}""")] [InlineData("""{"verdict":"FLAKY-TEST"}""")] [InlineData("""{"failed_jobs":[{"classification":"unrecognized"}]}""")] [InlineData("""{"failed_jobs":[{"classification":0}]}""")] [InlineData("""{"failed_tests":[{"classification":"flaky-test"}]}""")] [InlineData("""{"failed_tests":[{"classification":0}]}""")] public void AnalysisContractRejectsUnknownOrNonWireClassifications(string json) { Assert.ThrowsAny<JsonException>(() => CiFailureJson.ToContract<AnalysisReport>(CiFailureJson.Parse(json))); } [Theory] [InlineData("0")] [InlineData("\"0\"")] [InlineData("\"unrecognized\"")] public void ClosedVocabulariesRejectNumbersAndUnknownStrings(string json) { var value = CiFailureJson.Parse(json); Assert.ThrowsAny<JsonException>(() => CiFailureJson.ToContract<RunScope>(value)); Assert.ThrowsAny<JsonException>(() => CiFailureJson.ToContract<EvidenceState>(value)); Assert.ThrowsAny<JsonException>(() => CiFailureJson.ToContract<CandidateHistoryState>(value)); Assert.ThrowsAny<JsonException>(() => CiFailureJson.ToContract<AnalysisVerdict>(value)); Assert.ThrowsAny<JsonException>(() => CiFailureJson.ToContract<JobClassification>(value)); Assert.ThrowsAny<JsonException>(() => CiFailureJson.ToContract<TestClassification>(value)); Assert.ThrowsAny<JsonException>(() => CiFailureJson.ToContract<CauseType>(value)); Assert.ThrowsAny<JsonException>(() => CiFailureJson.ToContract<TestArtifactFormat>(value)); } [Fact] public async Task ClosedVocabulariesKeepTheirExplicitWireNames() { var projection = new { scopes = Enum.GetValues<RunScope>(), evidence = Enum.GetValues<EvidenceState>(), history = Enum.GetValues<CandidateHistoryState>(), verdicts = Enum.GetValues<AnalysisVerdict>(), jobs = Enum.GetValues<JobClassification>(), tests = Enum.GetValues<TestClassification>(), causes = Enum.GetValues<CauseType>(), formats = Enum.GetValues<TestArtifactFormat>(), }; await Verifier.Verify(CiFailureJson.Serialize(projection), "json").UseDirectory("Snapshots"); } }