public void RackValidator_Delete_PassesIfNoAssets()
        {
            var mockRepo = new Mock <IRackRepository>();
            var sut      = new RackValidator(mockRepo.Object);

            sut.ShouldNotHaveValidationErrorFor(x => x.Assets, null as List <Asset>);
        }
        public void RackValidator_FailsIfColumnIsInvalid()
        {
            var mockRepo = new Mock <IRackRepository>();
            var sut      = new RackValidator(mockRepo.Object);

            sut.ShouldHaveValidationErrorFor(x => x.Column, 0);
            sut.ShouldHaveValidationErrorFor(x => x.Column, -1);
        }
        public void RackValidator_FailsIfRowIsInvalid()
        {
            var mockRepo = new Mock <IRackRepository>();
            var sut      = new RackValidator(mockRepo.Object);

            sut.ShouldHaveValidationErrorFor(x => x.Row, null as string);
            sut.ShouldHaveValidationErrorFor(x => x.Row, "AA");
            sut.ShouldHaveValidationErrorFor(x => x.Row, "3");
        }
        public async void RackValidator_Delete_FailsIfContainsAssets()
        {
            var mockRepo = new Mock <IRackRepository>();
            var sut      = new RackValidator(mockRepo.Object);

            var rack = GetValidRackWithAssets();

            var result = await sut.ValidateAsync(rack, ruleSet : "delete");

            Assert.False(result.IsValid);
            Assert.Contains(result.Errors,
                            validationFailure => validationFailure.PropertyName == nameof(rack.Assets));
        }
        public async void RackValidator_Create_FailsIfSameAddressExistsInDifferentDatacenters()
        {
            var mockRepo = new Mock <IRackRepository>();

            mockRepo.Setup(x => x.AddressExistsAsync(It.IsAny <string>(), It.IsAny <int>(), Guid.NewGuid()))
            .ReturnsAsync(true);
            var sut = new RackValidator(mockRepo.Object);

            var rack = GetValidRackWithAssets();

            var result = await sut.ValidateAsync(rack, ruleSet : "create");

            Assert.True(result.IsValid);
        }