public PointsList AddPoint(AddPointToListRequest model)
        {
            var pointsList = _unitOfWork.PointsListRepository.Get(model.PointsListId);

            if (pointsList == null)
            {
                throw new NotFoundException("Points list does not exist");
            }

            var newPoint = new Point {
                X = model.X, Y = model.Y
            };

            if (pointsList.Points.Contains(newPoint))
            {
                throw new AlreadyExistsException("Point already exists in points list");
            }

            _unitOfWork.PointsListRepository.AddPoint(pointsList, newPoint);

            //O(points.Count) now instead of O(points.Count^2) later
            _unitOfWork.PointsListRepository.AddSquares(pointsList,
                                                        FindSquaresAfterAddedPoint(pointsList.Points, newPoint));
            _unitOfWork.Commit();
            return(pointsList);
        }
 public IActionResult AddPoint(AddPointToListRequest model)
 {
     try
     {
         return(Ok(_pointsListService.AddPoint(model)));
     }
     catch (NotFoundException e)
     {
         return(NotFound(e.Message));
     }
     catch (AlreadyExistsException e)
     {
         return(BadRequest(e.Message));
     }
 }
Exemple #3
0
        public void AddPoint_PointDoesNotExist_CallsRepoMethod()
        {
            // Arrange
            AddPointToListRequest addPointToListRequest = new AddPointToListRequest {
                PointsListId = 1, X = 10, Y = 10
            };
            var mockedService = this.CreateServiceMock();

            mockedService.Setup(s => s.FindSquaresAfterAddedPoint(It.IsAny <List <Point> >(), It.IsAny <Point>())).Returns(new List <Square>());
            var expected = new List <Point> {
                new Point {
                    X = 0, Y = 0
                }, new Point {
                    X = 0, Y = 1
                }, new Point {
                    X = -1, Y = 1
                }, new Point {
                    X = -1, Y = 0
                }, new Point {
                    X = -2, Y = 0
                }, new Point {
                    X = -1, Y = -1
                }, new Point {
                    X = 10, Y = 10
                }
            };

            mockPointsListRepository.Setup(r => r.AddPoint(It.IsAny <PointsList>(), It.IsAny <Point>()));
            mockPointsListRepository.Setup(r => r.AddSquares(It.IsAny <PointsList>(), It.IsAny <List <Square> >()));

            // Act
            var result = mockedService.Object.AddPoint(addPointToListRequest);

            // Assert
            mockPointsListRepository.Verify(r => r.AddPoint(It.IsAny <PointsList>(), It.IsAny <Point>()), Times.Exactly(1));
            mockedService.Verify(s => s.FindSquaresAfterAddedPoint(It.IsAny <List <Point> >(), It.IsAny <Point>()), Times.Exactly(1));
        }