using System.ComponentModel.DataAnnotations; using Bit.Api.Auth.Models.Request; using Xunit; namespace Bit.Api.Test.Auth.Models.Request; public class TwoFactorDuoRequestModelValidationTests { [Fact] public void ShouldReturnValidationError_WhenHostIsInvalid() { // Arrange var model = new UpdateTwoFactorDuoRequestModel { Host = "invalidHost", ClientId = "clientId", ClientSecret = "clientSecret", }; // Act var result = model.Validate(new ValidationContext(model)); // Assert Assert.Single(result); Assert.Equal("Host is invalid.", result.First().ErrorMessage); Assert.Equal("Host", result.First().MemberNames.First()); } [Fact] public void ShouldReturnValidationError_WhenValuesAreInvalid() { // Arrange var model = new UpdateTwoFactorDuoRequestModel { Host = "api-12345abc.duosecurity.com" }; // Act var result = model.Validate(new ValidationContext(model)); // Assert Assert.Single(result); Assert.Equal("Neither v2 or v4 values are valid.", result.First().ErrorMessage); Assert.Contains("ClientId", result.First().MemberNames); Assert.Contains("ClientSecret", result.First().MemberNames); Assert.Contains("IntegrationKey", result.First().MemberNames); Assert.Contains("SecretKey", result.First().MemberNames); } [Fact] public void ShouldReturnSuccess_WhenValuesAreValid() { // Arrange var model = new UpdateTwoFactorDuoRequestModel { Host = "api-12345abc.duosecurity.com", ClientId = "clientId", ClientSecret = "clientSecret", }; // Act var result = model.Validate(new ValidationContext(model)); // Assert Assert.Empty(result); } }