public void ShouldAssignExistingTagIfItIsADuplicate() { var webpage = new BasicMappedWebpage(); webpage.Tags.Should().HaveCount(0); A.CallTo(() => _getExistingTag.GetTag("test")).Returns(null); _sut.SetTags(_tags, webpage); webpage.Tags.Should().HaveCount(1); webpage.Tags.ElementAt(0).Name.Should().Be("test"); }
public void SetTags(List <string> taglist, Document document) { var tagsToAdd = taglist.Where( s => !document.Tags.Select(tag => tag.Name).Contains(s, StringComparer.InvariantCultureIgnoreCase)) .ToList(); var tagsToRemove = document.Tags.Where( tag => !taglist.Contains(tag.Name, StringComparer.InvariantCultureIgnoreCase)).ToList(); foreach (var item in tagsToAdd) { var tag = _getExistingTag.GetTag(item); var isNew = tag == null; if (isNew) { tag = new Tag { Name = item }; _tagRepository.Add(tag); } if (!document.Tags.Contains(tag)) { document.Tags.Add(tag); } if (!tag.Documents.Contains(document)) { tag.Documents.Add(document); } _tagRepository.Update(tag); } foreach (var tag in tagsToRemove) { document.Tags.Remove(tag); tag.Documents.Remove(document); _tagRepository.Update(tag); } }