public void Should_Add_Update_Delete_Links_Successfully() { MockExternalLinksForCrud(); var updateDto = new AddEditDeleteExternalLinkDTO { LinksToDelete = new[] { 1, 2 }, LinksToCreate = new List <NewExternalLinkDTO> { new NewExternalLinkDTO { Name = "newLink1", Url = "newLink2" } }, LinksToUpdate = new List <ExternalLinkDTO> { new ExternalLinkDTO { Id = 3, Name = "modifiedLink3", Url = "http://link3modified.com" } }, OrganizationId = 2, UserId = "testUser" }; _externalLinkService.UpdateLinks(updateDto); _externalLinkDbSet.Received(2).Remove(Arg.Any <ExternalLink>()); _externalLinkDbSet.Received(1).Add(Arg.Any <ExternalLink>()); Assert.AreEqual("modifiedLink3", _externalLinkDbSet.First(x => x.Id == 3).Name); Assert.AreEqual("http://link3modified.com", _externalLinkDbSet.First(x => x.Id == 3).Url); }
public void UpdateLinks(AddEditDeleteExternalLinkDTO updateLinksDto) { var timestamp = DateTime.UtcNow; DuplicateValuesValidation(updateLinksDto); UpdateLinks(updateLinksDto, timestamp); DeleteLinks(updateLinksDto, timestamp); CreateNewLinks(updateLinksDto, timestamp); }
private void UpdateLinks(AddEditDeleteExternalLinkDTO updateLinks, DateTime timestamp) { var updatedLinksIds = updateLinks.LinksToUpdate.Select(l => l.Id); var linksToUpdate = _externalLinkDbSet .Where(l => updatedLinksIds.Contains(l.Id) && l.OrganizationId == updateLinks.OrganizationId) .ToList(); foreach (var updatedLink in updateLinks.LinksToUpdate) { var link = linksToUpdate.First(l => l.Id == updatedLink.Id); link.Name = updatedLink.Name; link.Url = updatedLink.Url; link.Modified = timestamp; link.ModifiedBy = updateLinks.UserId; } }
private void DeleteLinks(AddEditDeleteExternalLinkDTO updateLinks, DateTime timestamp) { var linksToDelete = _externalLinkDbSet .Where(l => updateLinks.LinksToDelete.Contains(l.Id) && l.OrganizationId == updateLinks.OrganizationId) .ToList(); foreach (var link in linksToDelete) { link.UpdateMetadata(updateLinks.UserId, timestamp); } _uow.SaveChanges(false); foreach (var link in linksToDelete) { _externalLinkDbSet.Remove(link); } }
private void CreateNewLinks(AddEditDeleteExternalLinkDTO updateLinks, DateTime timestamp) { foreach (var link in updateLinks.LinksToCreate) { var newLink = new ExternalLink { Name = link.Name, Url = link.Url, OrganizationId = updateLinks.OrganizationId, Created = timestamp, CreatedBy = updateLinks.UserId, Modified = timestamp }; _externalLinkDbSet.Add(newLink); } _uow.SaveChanges(false); }
public void Should_Throw_If_Trying_To_Add_Duplicate_Link() { MockExternalLinks(); var updateDto = new AddEditDeleteExternalLinkDTO { LinksToDelete = new[] { 1, 2 }, LinksToCreate = new List <NewExternalLinkDTO> { new NewExternalLinkDTO { Name = "Test1", Url = "UrlTest1" } }, LinksToUpdate = new List <ExternalLinkDTO>(), OrganizationId = 2, UserId = "testUser" }; var ex = Assert.Throws <ValidationException>(() => _externalLinkService.UpdateLinks(updateDto)); Assert.AreEqual(ErrorCodes.DuplicatesIntolerable, ex.ErrorCode); }
private void DuplicateValuesValidation(AddEditDeleteExternalLinkDTO updateLinksDto) { var hasDuplicate = new List <bool>(); var orgLinks = GetAll(updateLinksDto.OrganizationId); foreach (var link in updateLinksDto.LinksToCreate) { hasDuplicate.Add(orgLinks.Any(x => x.Name == link.Name || x.Url == link.Url)); } foreach (var link in updateLinksDto.LinksToUpdate) { hasDuplicate.Add(orgLinks.Any(x => (x.Name == link.Name || x.Url == link.Url) && x.Id != link.Id)); } if (hasDuplicate.Any(x => x)) { throw new ValidationException(ErrorCodes.DuplicatesIntolerable, "Provided values must be unique"); } }