public async Task PassesIfEqual( RegistrationIndexValidator validator, PackageRegistrationIndexMetadata v2, PackageRegistrationIndexMetadata v3) { await validator.CompareIndexAsync(ValidatorTestUtility.GetFakeValidationContext(), v2, v3); }
public async Task Runs( RegistrationLeafValidator validator, PackageRegistrationIndexMetadata v2, PackageRegistrationIndexMetadata v3) { Assert.Equal(true, await validator.ShouldRunLeafAsync(ValidatorTestUtility.GetFakeValidationContext(), v2, v3)); }
public async Task Skips( RegistrationIndexValidator validator, PackageRegistrationIndexMetadata v2, PackageRegistrationIndexMetadata v3) { Assert.False(await validator.ShouldRunIndexAsync(ValidatorTestUtility.GetFakeValidationContext(), v2, v3)); }
public async Task Runs( RegistrationIndexValidator validator, PackageRegistrationIndexMetadata v2, PackageRegistrationIndexMetadata v3) { Assert.Equal(ShouldRunTestResult.Yes, await validator.ShouldRunIndexAsync(ValidatorTestUtility.GetFakeValidationContext(), v2, v3)); }
public async Task FailsIfUnequal( RegistrationIndexValidator validator, PackageRegistrationIndexMetadata v2, PackageRegistrationIndexMetadata v3) { await Assert.ThrowsAnyAsync <MetadataInconsistencyException>( () => validator.CompareIndexAsync(ValidatorTestUtility.GetFakeValidationContext(), v2, v3)); }
private void AddAlternatePackageInconsistencyException( List <MetadataFieldInconsistencyException <PackageRegistrationIndexMetadata> > list, PackageRegistrationIndexMetadata database, PackageRegistrationIndexMetadata v3, string alternatePackageField, Func <PackageRegistrationAlternatePackageMetadata, object> getAlternatePackageField) { AddDeprecationInconsistencyException( list, database, v3, nameof(PackageRegistrationDeprecationMetadata.AlternatePackage) + "." + alternatePackageField, d => getAlternatePackageField(d.AlternatePackage)); }
private void AddDeprecationInconsistencyException( List <MetadataFieldInconsistencyException <PackageRegistrationIndexMetadata> > list, PackageRegistrationIndexMetadata database, PackageRegistrationIndexMetadata v3, string deprecationFieldName, Func <PackageRegistrationDeprecationMetadata, object> getDeprecationField) { var exception = new MetadataFieldInconsistencyException <PackageRegistrationIndexMetadata>( database, v3, nameof(PackageRegistrationIndexMetadata.Deprecation) + "." + deprecationFieldName, i => getDeprecationField(i.Deprecation)); list.Add(exception); }
public async Task SucceedsIfPackageIsListedInDatabaseAndListedInSearch() { // Arrange var target = CreateTarget(); var context = CreateValidationContext(); DatabaseIndex = new PackageRegistrationIndexMetadata { Listed = true }; MakeVersionVisibleInSearch(); // Act var result = await target.ValidateAsync(context); // Assert Assert.Equal(TestResult.Pass, result.Result); }
public async Task SpecialCasesReturnAsExpected( RegistrationIndexValidator validator, PackageRegistrationIndexMetadata v2, PackageRegistrationIndexMetadata v3, bool shouldPass) { var compareTask = Task.Run(async() => await validator.CompareIndexAsync(ValidatorTestUtility.GetFakeValidationContext(), v2, v3)); if (shouldPass) { await compareTask; } else { await Assert.ThrowsAnyAsync <MetadataInconsistencyException>( () => compareTask); } }
public override Task CompareIndexAsync(ValidationContext context, PackageRegistrationIndexMetadata database, PackageRegistrationIndexMetadata v3) { var exceptions = new List <MetadataFieldInconsistencyException <PackageRegistrationIndexMetadata> >(); if (database.Deprecation == null && v3.Deprecation == null) { return(Task.CompletedTask); } else if (database.Deprecation == null || v3.Deprecation == null) { throw new MetadataFieldInconsistencyException <PackageRegistrationIndexMetadata>( database, v3, nameof(PackageRegistrationIndexMetadata.Deprecation), i => i.Deprecation); } if (!database.Deprecation.Reasons.OrderBy(r => r).SequenceEqual(v3.Deprecation.Reasons.OrderBy(r => r))) { AddDeprecationInconsistencyException( exceptions, database, v3, nameof(PackageRegistrationDeprecationMetadata.Reasons), d => d.Reasons); } if (database.Deprecation.Message != v3.Deprecation.Message) { AddDeprecationInconsistencyException( exceptions, database, v3, nameof(PackageRegistrationDeprecationMetadata.Message), d => d.Message); } CompareIndexAlternatePackage(exceptions, database, v3); if (exceptions.Any()) { throw new AggregateMetadataInconsistencyException <PackageRegistrationIndexMetadata>(exceptions); } return(Task.CompletedTask); }
public async Task FailsIfPackageIsUnlistedInDatabaseButListedInSearch() { // Arrange var target = CreateTarget(); var context = CreateValidationContext(); DatabaseIndex = new PackageRegistrationIndexMetadata { Listed = false }; MakeVersionVisibleInSearch(); // Act var result = await target.ValidateAsync(context); // Assert Assert.Equal(TestResult.Fail, result.Result); var exception = Assert.IsType <MetadataInconsistencyException>(result.Exception); Assert.Equal( "The metadata between the database and V3 is inconsistent! Database shows unlisted but search shows listed.", exception.Message); }
private void CompareIndexAlternatePackage( List <MetadataFieldInconsistencyException <PackageRegistrationIndexMetadata> > exceptions, PackageRegistrationIndexMetadata database, PackageRegistrationIndexMetadata v3) { if (database.Deprecation.AlternatePackage == null && v3.Deprecation.AlternatePackage == null) { return; } else if (database.Deprecation.AlternatePackage == null || v3.Deprecation.AlternatePackage == null) { AddDeprecationInconsistencyException( exceptions, database, v3, nameof(PackageRegistrationDeprecationMetadata.AlternatePackage), d => d.AlternatePackage); return; } if (database.Deprecation.AlternatePackage.Id != v3.Deprecation.AlternatePackage.Id) { AddAlternatePackageInconsistencyException( exceptions, database, v3, nameof(PackageRegistrationAlternatePackageMetadata.Id), a => a.Id); } if (database.Deprecation.AlternatePackage.Range != v3.Deprecation.AlternatePackage.Range) { AddAlternatePackageInconsistencyException( exceptions, database, v3, nameof(PackageRegistrationAlternatePackageMetadata.Range), a => a.Range); } }