public IActionResult UpdateReferenceGender(int id, ReferenceGenderDto payload)
        {
            var referenceGenderInDb = _unitOfWork.ReferenceGenders.Get(id);

            if (referenceGenderInDb == null)
            {
                return(NotFound());
            }

            _mapper.Map(payload, referenceGenderInDb);
            _unitOfWork.Complete();

            return(NoContent());
        }
        public async Task Update_MalformedPayload_HttpBadRequest()
        {
            // Arrange
            var randomGenderId    = PreDefinedData.GetRandomGenderId();
            var path              = GetRelativePath(nameof(ReferenceGendersController), randomGenderId.ToString());
            var apiUpdatingGender = new ReferenceGenderDto
            {
                Id = randomGenderId
                     // Code is required, keep it missing
            };

            // Act
            var response = await Client.PutAsync(path, new StringContent(
                                                     JsonConvert.SerializeObject(apiUpdatingGender),
                                                     Encoding.UTF8,
                                                     JsonMediaType));

            // Assert
            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
        }
        public async Task Create_MalformedPayload_HttpBadRequest()
        {
            // Arrange
            var path = GetRelativePath(nameof(ReferenceGendersController));

            var newGenderDto = new ReferenceGenderDto
            {
                // Code is required, keep it missing
                CreatedDate = DateTime.UtcNow
            };

            // Act
            var response = await Client.PostAsync(path, new StringContent(
                                                      JsonConvert.SerializeObject(newGenderDto),
                                                      Encoding.UTF8,
                                                      JsonMediaType));

            // Assert
            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.BadRequest));
        }
        public async Task Update_InvalidGender_HttpNotFound()
        {
            // Arrange
            var notExistsGenderCode = PreDefinedData.GetNotExistsGenderCode();
            var path = GetRelativePath(nameof(ReferenceGendersController), int.MaxValue.ToString());
            var apiUpdatingGender = new ReferenceGenderDto
            {
                Id       = int.MaxValue,
                Code     = notExistsGenderCode,
                LongName = "Update"
            };

            // Act
            var response = await Client.PutAsync(path, new StringContent(
                                                     JsonConvert.SerializeObject(apiUpdatingGender),
                                                     Encoding.UTF8,
                                                     JsonMediaType));

            // Assert
            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.NotFound));
        }
        public async Task Create_ExistingGender_HttpConflict()
        {
            // Arrange
            var path           = GetRelativePath(nameof(ReferenceGendersController));
            var randomGenderId = PreDefinedData.GetRandomGenderId();
            var randomGender   = PreDefinedData.ReferenceGenders[randomGenderId - 1];

            var newGenderDto = new ReferenceGenderDto
            {
                Code        = randomGender.Code,
                LongName    = "Create",
                CreatedDate = DateTime.UtcNow
            };

            // Act
            var response = await Client.PostAsync(path, new StringContent(
                                                      JsonConvert.SerializeObject(newGenderDto),
                                                      Encoding.UTF8,
                                                      JsonMediaType));

            // Assert
            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.Conflict));
        }
        public IActionResult CreateReferenceGender(ReferenceGenderDto payload)
        {
            var referenceGender = _mapper.Map <ReferenceGenderDto, ReferenceGender>(payload);

            var referenceGenderInDb = _unitOfWork.ReferenceGenders.Find(p => p.Code == payload.Code);

            if (referenceGenderInDb.Any())
            {
                return(new ConflictResult());
            }

            _unitOfWork.ReferenceGenders.Add(referenceGender);
            _unitOfWork.Complete();

            payload.Id = referenceGender.Id;

            return(CreatedAtAction(nameof(GetReferenceGender),
                                   new
            {
                id = payload.Id
            },
                                   payload));
        }
        public async Task Create_ValidPayload_HttpCreatedAndReturnsNewGender()
        {
            // Arrange
            var path = GetRelativePath(nameof(ReferenceGendersController));
            var notExistsGenderCode = PreDefinedData.GetNotExistsGenderCode();
            var newGenderDto        = new ReferenceGenderDto
            {
                Code         = notExistsGenderCode,
                LongName     = "New",
                CreatedDate  = DateTime.UtcNow,
                CreatedBy    = CreatedModifiedBy,
                ModifiedDate = DateTime.UtcNow,
                ModifiedBy   = CreatedModifiedBy
            };

            // Act
            var response = await Client.PostAsync(path, new StringContent(
                                                      JsonConvert.SerializeObject(newGenderDto),
                                                      Encoding.UTF8,
                                                      JsonMediaType));

            var responseString = await response.Content.ReadAsStringAsync();

            // Assert
            Assert.DoesNotThrow(
                () => response.EnsureSuccessStatusCode(),
                string.Format(HttpExceptionFormattedMessage, responseString));
            Assert.That(response.StatusCode, Is.EqualTo(HttpStatusCode.Created));

            var apiReturnedObject =
                JsonConvert.DeserializeObject <ReferenceGenderDto>(responseString);

            Assert.That(apiReturnedObject.Id, Is.GreaterThan(0));

            newGenderDto.Id = apiReturnedObject.Id;
            AssertHelper.AreObjectsEqual(apiReturnedObject, newGenderDto);
        }