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);
        }
예제 #2
0
        public void UpdateLinks(AddEditDeleteExternalLinkDTO updateLinksDto)
        {
            var timestamp = DateTime.UtcNow;

            DuplicateValuesValidation(updateLinksDto);

            UpdateLinks(updateLinksDto, timestamp);
            DeleteLinks(updateLinksDto, timestamp);
            CreateNewLinks(updateLinksDto, timestamp);
        }
예제 #3
0
        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;
            }
        }
예제 #4
0
        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);
            }
        }
예제 #5
0
        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);
        }
예제 #7
0
        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");
            }
        }