Esempio n. 1
0
        public async Task UpdateLinksAsync(AddEditDeleteExternalLinkDto updateLinksDto)
        {
            var timestamp = DateTime.UtcNow;

            await DuplicateValuesValidationAsync(updateLinksDto);

            await UpdateLinksAsync(updateLinksDto, timestamp);
            await DeleteLinksAsync(updateLinksDto, timestamp);
            await CreateNewLinksAsync(updateLinksDto, timestamp);
        }
Esempio n. 2
0
        private async Task DuplicateValuesValidationAsync(AddEditDeleteExternalLinkDto updateLinksDto)
        {
            var externalLinks = await _externalLinkDbSet
                                .Where(x => x.OrganizationId == updateLinksDto.OrganizationId)
                                .Select(x => new ExternalLinkDto
            {
                Id   = x.Id,
                Name = x.Name,
                Url  = x.Url
            })
                                .ToListAsync();

            if (updateLinksDto.LinksToCreate.Any(c => externalLinks.Any(l => l.Name == c.Name || l.Url == c.Url)) ||
                updateLinksDto.LinksToUpdate.Any(c => externalLinks.Any(l => (l.Name == c.Name || l.Url == c.Url) && l.Id != c.Id)))
            {
                throw new ValidationException(ErrorCodes.DuplicatesIntolerable, "Provided values must be unique");
            }
        }
Esempio n. 3
0
        private async Task UpdateLinksAsync(AddEditDeleteExternalLinkDto updateLinks, DateTime timestamp)
        {
            var updatedLinksIds = updateLinks.LinksToUpdate.Select(l => l.Id);

            var linksToUpdate = await _externalLinkDbSet
                                .Where(l => updatedLinksIds.Contains(l.Id) && l.OrganizationId == updateLinks.OrganizationId)
                                .ToListAsync();

            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;
                link.Type       = updatedLink.Type;
            }
        }
Esempio n. 4
0
        private async Task DeleteLinksAsync(AddEditDeleteExternalLinkDto updateLinks, DateTime timestamp)
        {
            var linksToDelete = await _externalLinkDbSet
                                .Where(l =>
                                       updateLinks.LinksToDelete.Contains(l.Id) &&
                                       l.OrganizationId == updateLinks.OrganizationId)
                                .ToListAsync();

            foreach (var link in linksToDelete)
            {
                link.UpdateMetadata(updateLinks.UserId, timestamp);
            }

            await _uow.SaveChangesAsync(false);

            foreach (var link in linksToDelete)
            {
                _externalLinkDbSet.Remove(link);
            }
        }
Esempio n. 5
0
        private async Task CreateNewLinksAsync(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,
                    Type           = link.Type
                };

                _externalLinkDbSet.Add(newLink);
            }

            await _uow.SaveChangesAsync(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.ThrowsAsync <ValidationException>(async() => await _externalLinkService.UpdateLinksAsync(updateDto));

            Assert.AreEqual(ErrorCodes.DuplicatesIntolerable, ex.ErrorCode);
        }
        public async Task 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"
            };

            await _externalLinkService.UpdateLinksAsync(updateDto);

            _externalLinkDbSet.Received(2).Remove(Arg.Any <ExternalLink>());
            _externalLinkDbSet.Received(1).Add(Arg.Any <ExternalLink>());
            var externalLink = await _externalLinkDbSet.FirstAsync(x => x.Id == 3);

            Assert.AreEqual("modifiedLink3", externalLink.Name);
            Assert.AreEqual("http://link3modified.com", externalLink.Url);
        }