コード例 #1
0
        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();
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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();
        }
コード例 #5
0
        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();
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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);
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
 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);
 }
コード例 #14
0
 public new bool IsLocationOrDateUpdated(RunDb runDb, RunUpdateRequest request)
 {
     return(base.IsLocationOrDateUpdated(runDb, request));
 }