public void IsLocationOrDateUpdated_LongitudeAndLatitudeDifferencesLessThanTolerance_ReturnsFalse() { // arrange var latitude = 0.45; var longitude = 0.67; var newLatitude = 0.45009; // LocationTolerance = 0.0001 var newLongitude = 0.67009; // LocationTolerance = 0.0001 var date = new DateTime(2020, 02, 02); var runDb = new RunDb() { Latitude = latitude, Longitude = longitude, Date = date }; var request = new RunUpdateRequest() { Latitude = newLatitude, Longitude = newLongitude, Date = date }; // act var result = _runService.IsLocationOrDateUpdated(runDb, request); // assert result.Should().BeFalse(); }
public void DeleteRunAsync_InternaServerError_ThrowsCustomException() { // arrange var userId = Guid.NewGuid().ToString(); var rundId = 3; var runs = new RunDb[] { new RunDb() { Id = rundId, UserId = userId } }; _mockDbContext.CreateDbSetMock(x => x.Runs, runs); var exceptionMessage = "exception message"; _mockDbContext.Setup(x => x.Remove(It.IsAny <RunDb>())) .Throws(new Exception(exceptionMessage)); // act var result = Assert.ThrowsAsync <JoggingTrackerInternalServerErrorException>( () => _runService.DeleteRunAsync(userId, rundId)).Result; // assert var expectedErrorMessage = $"{ErrorMessages.RunDeleteErrorMessage} : {exceptionMessage}"; result.Message.Should().Be(expectedErrorMessage); _mockDbContext.Verify(x => x.SaveChangesAsync(It.IsAny <CancellationToken>()), Times.Never); }
public void DeleteRunAsync_RunIdExists_UserIdIsIncorrect_ThrowsNoFoundException() { // arrange var userId = Guid.NewGuid().ToString(); var rundId = 3; var runs = new RunDb[] { new RunDb() { Id = rundId, UserId = Guid.NewGuid().ToString() } }; _mockDbContext.CreateDbSetMock(x => x.Runs, runs); // act var result = Assert.ThrowsAsync <JoggingTrackerNotFoundException>( () => _runService.DeleteRunAsync(userId, rundId)).Result; // assert result.Message.Should().Be(ErrorMessages.RunNotFound); _mockDbContext.Verify(x => x.Remove(It.IsAny <RunDb>()), Times.Never); _mockDbContext.Verify(x => x.SaveChangesAsync(It.IsAny <CancellationToken>()), Times.Never); }
public void IsLocationOrDateUpdated_DateIsUpdated_ReturnsTrue() { // arrange var latitude = 0.45; var longitude = 0.67; var date = new DateTime(2020, 02, 02); var newDate = new DateTime(2010, 01, 01); var runDb = new RunDb() { Latitude = latitude, Longitude = longitude, Date = date }; var request = new RunUpdateRequest() { Latitude = latitude, Longitude = longitude, Date = newDate }; // act var result = _runService.IsLocationOrDateUpdated(runDb, request); // assert result.Should().BeTrue(); }
public void IsLocationOrDateUpdated_LocationAndDateAreTheSame_ReturnsFalse() { // arrange var latitude = 0.45; var longitude = 0.67; var date = new DateTime(2020, 02, 02); var runDb = new RunDb() { Latitude = latitude, Longitude = longitude, Date = date }; var request = new RunUpdateRequest() { Latitude = latitude, Longitude = longitude, Date = date }; // act var result = _runService.IsLocationOrDateUpdated(runDb, request); // assert result.Should().BeFalse(); }
public void UpdateRunAsync_LocationUpdated_RunIsUpdated_WeatherServiceIsCalled() { // arrange var date = DateTime.Now; var latitude = 3.44; var longitude = 67.456; var newDate = new DateTime(1999, 1, 2); var newLatitude = 56.44; var newLongitude = 34.456; var newForecast = "new forecast"; var request = new RunUpdateRequest() { Date = newDate, Distance = 1, Time = 2, Latitude = newLatitude, Longitude = newLongitude }; var userId = Guid.NewGuid().ToString(); var rundId = 3; var dbRuns = new RunDb[] { new RunDb() { Id = rundId, UserId = userId, Date = date, Latitude = latitude, Longitude = longitude, WeatherConditions = "good forecast" } }; _mockDbContext.CreateDbSetMock(x => x.Runs, dbRuns); _mockWeatherService.Setup(x => x.GetWeatherConditionsAsync( newDate, newLatitude, newLongitude)).Returns(Task.FromResult(newForecast)); // act var result = _runService.UpdateRunAsync(userId, rundId, request).Result; // assert result.Id.Should().Be(rundId); result.UserId.Should().Be(userId); result.Date.Should().Be(request.Date); result.Distance.Should().Be(request.Distance); result.Time.Should().Be(request.Time); result.Latitude.Should().Be(request.Latitude); result.Longitude.Should().Be(request.Longitude); result.WeatherConditions.Should().Be(newForecast); _mockWeatherService.Verify(x => x.GetWeatherConditionsAsync( newDate, newLatitude, newLongitude), Times.Once); _mockDbContext.Verify(x => x.Update(It.IsAny <RunDb>()), Times.Once); _mockDbContext.Verify(x => x.SaveChangesAsync(It.IsAny <CancellationToken>()), Times.Once); }
public void UpdateRunAsync_CorrectRunId_IncorrectUserId_ThrowsNoFoundException() { // arrange var request = new RunUpdateRequest() { Date = DateTime.Now, Distance = 1, Time = 2, Latitude = 3, Longitude = 4 }; var userId = Guid.NewGuid().ToString(); var rundId = 3; var dbRuns = new RunDb[] { new RunDb() { Id = rundId, UserId = Guid.NewGuid().ToString() } }; _mockDbContext.CreateDbSetMock(x => x.Runs, dbRuns); // act var result = Assert.ThrowsAsync <JoggingTrackerNotFoundException>( () => _runService.UpdateRunAsync(userId, rundId, request)).Result; // assert result.Message.Should().Be(ErrorMessages.RunNotFound); _mockDbContext.Verify(x => x.Update(It.IsAny <RunDb>()), Times.Never); _mockDbContext.Verify(x => x.SaveChangesAsync(It.IsAny <CancellationToken>()), Times.Never); }
public void From_RunDb_To_RunDto() { var rundDb = new RunDb() { Id = 2, UserId = Guid.NewGuid().ToString(), Date = DateTime.Now, Distance = 5, Time = 1000, Latitude = 78.8, Longitude = 45.45, WeatherConditions = "test weather conditions" }; var runDto = _mapper.Map <RunDb, RunDto>(rundDb); runDto.Id.Should().Be(rundDb.Id); runDto.UserId.Should().Be(rundDb.UserId); runDto.Date.Should().Be(rundDb.Date); runDto.Distance.Should().Be(rundDb.Distance); runDto.Time.Should().Be(rundDb.Time); runDto.Latitude.Should().Be(rundDb.Latitude); runDto.Longitude.Should().Be(rundDb.Longitude); runDto.WeatherConditions.Should().Be(rundDb.WeatherConditions); }
public void UpdateRunAsync_LocationAndDateAreNotChanged_RunIsUpdated_WeatherServiceIsNotCalled() { // arrange var date = DateTime.Now; var latitude = 3.44; var longitude = 67.456; var request = new RunUpdateRequest() { Date = date, Distance = 1, Time = 2, Latitude = latitude, Longitude = longitude }; var userId = Guid.NewGuid().ToString(); var rundId = 3; var dbRuns = new RunDb[] { new RunDb() { Id = rundId, UserId = userId, Date = date, Latitude = latitude, Longitude = longitude, WeatherConditions = "good forecast" } }; _mockDbContext.CreateDbSetMock(x => x.Runs, dbRuns); // act var result = _runService.UpdateRunAsync(userId, rundId, request).Result; // assert result.Id.Should().Be(rundId); result.UserId.Should().Be(userId); result.Date.Should().Be(dbRuns[0].Date.Date); result.Distance.Should().Be(request.Distance); result.Time.Should().Be(request.Time); result.Latitude.Should().Be(dbRuns[0].Latitude); result.Longitude.Should().Be(dbRuns[0].Longitude); result.WeatherConditions.Should().Be(dbRuns[0].WeatherConditions); _mockWeatherService.Verify(x => x.GetWeatherConditionsAsync( It.IsAny <DateTime>(), It.IsAny <double>(), It.IsAny <double>()), Times.Never); _mockDbContext.Verify(x => x.Update(It.IsAny <RunDb>()), Times.Once); _mockDbContext.Verify(x => x.SaveChangesAsync(It.IsAny <CancellationToken>()), Times.Once); }
public void UpdateRunAsync_InternalServerExceptionOnUpdate_ThrowsException() { // arrange var date = DateTime.Now; var latitude = 3.44; var longitude = 67.456; var request = new RunUpdateRequest() { Date = date, Distance = 1, Time = 2, Latitude = latitude, Longitude = longitude }; var userId = Guid.NewGuid().ToString(); var rundId = 3; var dbRuns = new RunDb[] { new RunDb() { Id = rundId, UserId = userId, Date = date, Latitude = latitude, Longitude = longitude, WeatherConditions = "good forecast" } }; _mockDbContext.CreateDbSetMock(x => x.Runs, dbRuns); var errorMessage = "error message"; _mockDbContext.Setup(x => x.Update(It.IsAny <RunDb>())) .Throws(new Exception(errorMessage)); // act var result = Assert.ThrowsAsync <JoggingTrackerInternalServerErrorException>( () => _runService.UpdateRunAsync(userId, rundId, request)).Result; // assert var expectedErrorMessage = $"{ErrorMessages.RunSaveErrorMessage} : {errorMessage}"; result.Message.Should().Be(expectedErrorMessage); _mockDbContext.Verify(x => x.SaveChangesAsync(It.IsAny <CancellationToken>()), Times.Never); }
public void GetRunsAsync_IncorrectFilter_ThrowsException() { // arrange var runs = new RunDb[] { }; _mockDbContext.CreateDbSetMock(x => x.Runs, runs); var filter = "password = '******'"; // act var result = Assert.ThrowsAsync <JoggingTrackerBadRequestException>( () => _runService.GetRunsAsync(Guid.NewGuid().ToString(), filter)).Result; // assert result.Message.Should().StartWith(ErrorMessages.CouldntParseFilter); }
public async void DeleteRunAsync_RecordExists_RemoveRecord() { // arrange var userId = Guid.NewGuid().ToString(); var rundId = 3; var runs = new RunDb[] { new RunDb() { Id = rundId, UserId = userId } }; _mockDbContext.CreateDbSetMock(x => x.Runs, runs); // act await _runService.DeleteRunAsync(userId, rundId); // assert _mockDbContext.Verify(x => x.Remove(It.IsAny <RunDb>()), Times.Once); _mockDbContext.Verify(x => x.SaveChangesAsync(It.IsAny <CancellationToken>()), Times.Once); }
protected bool IsLocationOrDateUpdated(RunDb runDb, RunUpdateRequest request) { return(runDb.Date != request.Date || Math.Abs(runDb.Latitude - request.Latitude) >= Constants.AppConstants.LocationTolerance || Math.Abs(runDb.Longitude - request.Longitude) > Constants.AppConstants.LocationTolerance); }
public new bool IsLocationOrDateUpdated(RunDb runDb, RunUpdateRequest request) { return(base.IsLocationOrDateUpdated(runDb, request)); }