public void UpdateConcept_Returns_ConceptDto_On_Success() { var concept = Mock.MockConcept(_status); concept.Media = new List <Media>(); A.CallTo(() => StatusRepository.GetById(A <int> ._)).Returns(_status); A.CallTo(() => ConceptRepository.GetById(A <int> ._)).Returns(Mock.MockConcept(_status)); A.CallTo(() => ConceptRepository.Update(A <Concept> ._)).Returns(concept); A.CallTo(() => ConceptMediaRepository.DeleteConnectionBetweenConceptAndMedia(A <int> ._, A <List <int> > ._)).Returns(true); A.CallTo(() => ConceptMediaRepository.InsertMediaForConcept(A <int> ._, A <List <MediaWithMediaType> > ._)).Returns(new List <ConceptMedia>()); var result = Service.UpdateConcept(Mock.MockUpdateConceptDto()); Assert.NotNull(result.Data); Assert.IsType <ConceptDto>(result.Data); }
public Response UpdateConcept(UpdateConceptDto dto) { var newConceptVersion = Mapper.Map <Concept>(dto); var viewModel = new Response(); var oldConceptVersion = _conceptRepository.GetById(newConceptVersion.Id); // Concept does not exist in the database, so cannot update it. if (oldConceptVersion == null) { return(null); } var language = GetLanguage(viewModel, dto.MetaIds); if (language == null) { return(viewModel); } // Readonly fields newConceptVersion.LanguageId = language.Id; newConceptVersion.Created = oldConceptVersion.Created; newConceptVersion.ExternalId = oldConceptVersion.ExternalId; newConceptVersion.MediaIds = oldConceptVersion.MediaIds; newConceptVersion.AuthorName = oldConceptVersion.AuthorName; newConceptVersion.AuthorEmail = oldConceptVersion.AuthorEmail; newConceptVersion.GroupId = oldConceptVersion.GroupId; newConceptVersion.UrlToContent = oldConceptVersion.UrlToContent; try { _conceptRepository.Update(newConceptVersion); } catch (Exception e) { viewModel.Errors.TryAddModelError("errorMessage", "An database error has occured. Could not update concept."); return(viewModel); } //updating meta list for concept var oldMetaList = oldConceptVersion.Meta; List <MetaData> newMetaIdList = _metaRepository.GetLanguageVariationForThisList(oldMetaList, language.Id); List <int> metaIds = new List <int>(); foreach (var metaData in newMetaIdList) { metaIds.Add(metaData.Id); } // Updating media for concept var toBeDeleted = oldConceptVersion.Media .Where(x => !dto.Media.Exists(y => y.ExternalId == x.ExternalId && y.MediaTypeId == x.MediaTypeId)) .Select(x => x.Id) .ToList(); var toBeInserted = dto.Media .Where(x => !oldConceptVersion.Media.Exists(y => y.ExternalId == x.ExternalId && y.MediaTypeId == x.MediaTypeId)) .ToList(); try { if (toBeDeleted.Count > 0) { _conceptMediaRepository.DeleteConnectionBetweenConceptAndMedia(oldConceptVersion.Id, toBeDeleted); } } catch (Exception e) { viewModel.Errors.TryAddModelError("errorMessage", "An database error has occured. Could not delete medias for concept."); return(viewModel); } try { _conceptMediaRepository.InsertMediaForConcept(oldConceptVersion.Id, toBeInserted); } catch (Exception e) { viewModel.Errors.TryAddModelError("errorMessage", "An database error has occured. Could not insert media on concept."); return(viewModel); } viewModel.Data = Mapper.Map <ConceptDto>(_conceptRepository.GetById(dto.Id)); return(viewModel); }