public async Task <IActionResult> PostSites([FromBody] SiteCreateRequestDto model) { var oid = _authService.GetRequestOid(Request); if (!_resourceService.IsNewSiteFriendlyIdValid(model, oid)) { string errorKey = nameof(model.FriendlyId); ModelState.AddModelError(errorKey, "There already exists a Site with this ID."); return(ValidationProblem(ModelState)); } var mappedSite = _mapper.Map <Site>(model); var user = await _userManager.GetUserAsync(User); mappedSite.Oid = oid; mappedSite.CreatedByUserId = user.Id; mappedSite.CreatedAt = DateTime.UtcNow; mappedSite.IsActive = true; await _appDbContext.AddAsync(mappedSite); await _appDbContext.SaveChangesAsync(); await _resourceService.FlushCacheForNewSiteAsync(Request, oid); return(CreatedAtRoute(nameof(GetSitesDetail), new { siteId = mappedSite.Id }, _mapper.Map <SiteReadResponseDto>(mappedSite))); }
public async Task PostSitesAndGetSitesDetail_ReturnsCorrectData() { // Arrange var expectedTitle = "Test Site Integration"; var expectedDescription = "Lorum Imsum Test"; var expectedEndDate = new DateTime(2020, 12, 31); var expectedFriendlyId = "4455A"; await LoginContractorOne(); // Act - 1 var contentToPost = new SiteCreateRequestDto { Title = expectedTitle, Description = expectedDescription, EndDate = expectedEndDate, FriendlyId = expectedFriendlyId }; var postResponse = await TestClient.PostAsync("api/sites/", new StringContent(JsonConvert.SerializeObject(contentToPost), Encoding.UTF8, "application/json")); var postResponseContent = JsonConvert.DeserializeObject <SiteReadResponseDto>(await postResponse.Content.ReadAsStringAsync()); // Act - 2 var getResponse = await TestClient.GetAsync($"api/sites/{postResponseContent.Id}"); var getResponseContent = JsonConvert.DeserializeObject <SiteReadResponseDto>(await getResponse.Content.ReadAsStringAsync()); // Assert postResponse.StatusCode.Should().Be(HttpStatusCode.Created); getResponse.StatusCode.Should().Be(HttpStatusCode.OK); getResponseContent.Title.Should().Be(expectedTitle); getResponseContent.Description.Should().Be(expectedDescription); getResponseContent.EndDate.Should().Be(expectedEndDate); getResponseContent.FriendlyId.Should().Be(expectedFriendlyId); }
public async Task PostSiteWithoutLogin_YieldsUnauthorized() { // Arrange var expectedStatusCode = HttpStatusCode.Unauthorized; var expectedTitle = "Test Site Integration"; var expectedDescription = "Lorum Imsum Test"; var expectedEndDate = new DateTime(2020, 12, 31); var expectedFriendlyId = "4455A"; // Act var contentToPost = new SiteCreateRequestDto { Title = expectedTitle, Description = expectedDescription, EndDate = expectedEndDate, FriendlyId = expectedFriendlyId }; var postResponse = await TestClient.PostAsync("api/sites/", new StringContent(JsonConvert.SerializeObject(contentToPost), Encoding.UTF8, "application/json")); // Assert postResponse.StatusCode.Should().Be(expectedStatusCode); }
public bool IsNewSiteFriendlyIdValid(SiteCreateRequestDto dto, Guid oid) { return(!_appDbContext.Sites.Any(s => s.IsActive && s.Oid == oid && s.FriendlyId == dto.FriendlyId)); }