public async Task Should_update_feature_if_there_is_an_existing_feature_for_the_provided_application()
        {
            var application        = new Application("App01", "0.1");
            var feature            = new Feature("isBlueButtonActive", true);
            var dto                = new ApplicationFeatureDTO(feature, application, false);
            var applicationFeature = new ApplicationFeature(feature, application, true);

            _applicationFeatureRepository.GetAsync(application.Id, feature.Id).Returns(applicationFeature);

            var appFeature = await _applicationFeatureDomainService.Add(dto);

            using (new AssertionScope())
            {
                _applicationFeatureRepository.Received(0).Add(appFeature);
                appFeature.Application.Name.Should().Be("App01");
                appFeature.Application.Version.Should().Be("0.1");
                appFeature.Feature.Name.Should().Be("isBlueButtonActive");
                appFeature.Feature.IsActive.Should().Be(true);
                appFeature.IsActive.Should().Be(false);
            }
        }
        public async Task <ApplicationFeature> Add(ApplicationFeatureDTO applicationFeatureDTO)
        {
            if (!applicationFeatureDTO.IsValid())
            {
                await NotifyValidationErrors(applicationFeatureDTO);

                return(null);
            }

            var existingFeature = await _applicationFeatureRepository.GetAsync(applicationFeatureDTO.Application.Id, applicationFeatureDTO.Feature.Id);

            if (existingFeature != null)
            {
                return(UpdateApplicationFeature(existingFeature, applicationFeatureDTO));
            }

            var applicationFeature = new ApplicationFeature(applicationFeatureDTO.Feature, applicationFeatureDTO.Application, applicationFeatureDTO.IsActive);

            _applicationFeatureRepository.Add(applicationFeature);

            return(applicationFeature);
        }