public void PostApartment_WithValidDto_ReturnsCreatedResponse()
        {
            // Setup
            InitializeTest();
            _locationsRepository.AddAsync(new Location
            {
                Id         = 1,
                Building   = "X",
                Flat       = "x",
                StreetName = "X"
            });

            var createAptDto = new CreateApartmentDto
            {
                NumberOfBeds = 1,
                RentalPrice  = 9,
                SquareMeters = 10,
                LocationId   = 1
            };

            //Act
            var response = _controller.Post(createAptDto);

            //Assert
            response.Result.Should().BeOfType <CreatedAtActionResult>("valid CreateApartmentDto provided");
        }
        public async Task <ActionResult <ApartmentDto> > Post(CreateApartmentDto createApartmentDto)
        {
            var location = await _locationsRepo.GetAsync(createApartmentDto.LocationId);

            if (location is null)
            {
                return(this.StatusCode(StatusCodes.Status422UnprocessableEntity, "The location with the specified Id does not exist."));
            }

            var existingApartmentForLocation = await _apartmentsRepo.GetByLocationIdAsync(createApartmentDto.LocationId);

            if (existingApartmentForLocation != null)
            {
                return(this.StatusCode(StatusCodes.Status422UnprocessableEntity, "The apartment in this location already been added."));
            }

            var apartment = _mapper.Map <Apartment>(createApartmentDto);
            await _apartmentsRepo.AddAsync(apartment);

            apartment.Location = location;

            var apartmentDto = _mapper.Map <ApartmentDto>(apartment);

            return(CreatedAtAction("Get", new { apartmentId = apartment.Id }, apartmentDto));
        }
        public void PostApartment_WithNotExistingLocation_ReturnsNotFound()
        {
            // Setup
            InitializeTest();

            var createAptDto = new CreateApartmentDto
            {
                NumberOfBeds = 1,
                RentalPrice  = 9,
                SquareMeters = 10,
                LocationId   = 111
            };

            //Act
            var response = _controller.Post(createAptDto);

            //Assert
            response.Result.Should().BeOfType <ObjectResult>("non existing locationId provided")
            .Which.StatusCode.Value.Equals(422);
        }