public void VerifyAnnouncementPreferenceLimitIsNotExceeded_Should_Return_VerificationResult_With_Success_True() { const int announcementPreferenceLimit = 10; const int currentAnnouncementPreferencesCount = 1; var expectedResult = VerificationResult.Ok(); var result = _service.VerifyAnnouncementPreferenceLimitIsNotExceeded(announcementPreferenceLimit, currentAnnouncementPreferencesCount); result.Should().BeEquivalentTo(expectedResult); }
public async Task HandleAsync(CreateFlatForRentAnnouncementPreferenceCommand command, CancellationToken cancellationToken = default) { var getUserResult = await _userGetterService.GetByIdAsync(command.UserId); if (!getUserResult.Success) { throw new ResourceNotFoundException(getUserResult.Errors); } var cityAndCityDistrictsVerificationResult = await _cityVerificationService.VerifyCityAndCityDistrictsAsync(command.CityId, command.CityDistricts); if (!cityAndCityDistrictsVerificationResult.Success) { throw new ValidationException(cityAndCityDistrictsVerificationResult.Errors); } var announcementPreferenceLimitIsNotExceededVerificationResult = _userVerificationService.VerifyAnnouncementPreferenceLimitIsNotExceeded( getUserResult.Value.AnnouncementPreferenceLimit, getUserResult.Value.FlatForRentAnnouncementPreferences.Count + getUserResult.Value.RoomForRentAnnouncementPreferences.Count); if (!announcementPreferenceLimitIsNotExceededVerificationResult.Success) { throw new ValidationException(announcementPreferenceLimitIsNotExceededVerificationResult.Errors); } var flatForRentAnnouncementPreference = _mapper.Map <CreateFlatForRentAnnouncementPreferenceCommand, FlatForRentAnnouncementPreference>(command); var flatForRentAnnouncementPreferences = getUserResult.Value.FlatForRentAnnouncementPreferences.ToList(); flatForRentAnnouncementPreferences.Add(flatForRentAnnouncementPreference); var flatForRentAnnouncementPreferencesVerificationResult = _flatForRentAnnouncementPreferenceVerificationService.VerifyFlatForRentAnnouncementPreferences(flatForRentAnnouncementPreferences); if (!flatForRentAnnouncementPreferencesVerificationResult.Success) { throw new ValidationException(flatForRentAnnouncementPreferencesVerificationResult.Errors); } getUserResult.Value.AddFlatForRentAnnouncementPreference(flatForRentAnnouncementPreference, command.CorrelationId); await _communicationBus.DispatchDomainEventsAsync(getUserResult.Value, cancellationToken); await _userRepository.UpdateAsync(getUserResult.Value); var userFlatForRentAnnouncementPreferenceCreatedIntegrationEvent = new UserFlatForRentAnnouncementPreferenceCreatedIntegrationEvent(command.CorrelationId, getUserResult.Value.Id, flatForRentAnnouncementPreference.Id, getUserResult.Value.Email, flatForRentAnnouncementPreference.CityId, getUserResult.Value.ServiceActive, getUserResult.Value.AnnouncementSendingFrequency.ConvertToEnum(), flatForRentAnnouncementPreference.PriceMin, flatForRentAnnouncementPreference.PriceMax, flatForRentAnnouncementPreference.RoomNumbersMin, flatForRentAnnouncementPreference.RoomNumbersMax, flatForRentAnnouncementPreference.CityDistricts); await _integrationEventBus.PublishIntegrationEventAsync(userFlatForRentAnnouncementPreferenceCreatedIntegrationEvent); }