public async Task SaveArticle_ForExistingArticleWithNewUsers_ShouldSucceed() { var originalUser1 = new User { Email = USER1_EMAIL, Name = "User1" }; Context.Users.Add(originalUser1); var originalUser2 = new User { Email = USER2_EMAIL, Name = "User2" }; Context.Users.Add(originalUser2); var originalTag = new Tag { Name = TAG_NAME }; Context.Tags.Add(originalTag); var originalArticle = CreateArticle(); Context.Articles.Add(originalArticle); var originalArticleTag = new ArticleTag { Article = originalArticle, Tag = originalTag }; Context.ArticleTags.Add(originalArticleTag); var originalArticleUser = new ArticleUser { Article = originalArticle, User = originalUser1, Status = ArticleStatus.New }; Context.ArticleUsers.Add(originalArticleUser); var originalTagUser1 = new TagUser { Tag = originalTag, User = originalUser1, }; Context.TagUsers.Add(originalTagUser1); var originalTagUser2 = new TagUser { Tag = originalTag, User = originalUser2, }; Context.TagUsers.Add(originalTagUser1); SaveAndRecreateContext(); _pdfService.Setup(s => s.QueueArticle(It.IsAny <string>())) .Returns(Task.CompletedTask); var service = GetSut <ArticleService>(); var user2 = Context.Users.Single(u => u.Email == USER2_EMAIL); var tag = Context.Tags.Single(t => t.Name == TAG_NAME); var article = new Article { Title = originalArticle.Title, Url = originalArticle.Url, AuthorName = originalArticle.AuthorName }; await service.SaveArticle( article, new List <User> { user2 }, tag); SaveAndRecreateContext(); var articles = Context.Articles.ToList(); var savedArticle = Context .Articles .Include(a => a.ArticleTags) .ThenInclude(at => at.Tag) .Include(a => a.ArticleUsers) .ThenInclude(au => au.User) .Single(a => a.Title == article.Title); savedArticle.Should().NotBeNull(); savedArticle.ArticleUsers.Should().NotBeNull(); savedArticle.ArticleUsers.Should().HaveCount(2); var articleUser1 = savedArticle.ArticleUsers.Single(au => au.User.Email == USER1_EMAIL); articleUser1.Status.Should().Be(ArticleStatus.New); var articleUser2 = savedArticle.ArticleUsers.Single(au => au.User.Email == USER2_EMAIL); articleUser1.Status.Should().Be(ArticleStatus.New); savedArticle.ArticleTags.Should().NotBeNull(); savedArticle.ArticleTags.Should().HaveCount(1); var articleTag = savedArticle.ArticleTags.Single(at => at.Tag.Name == TAG_NAME); _pdfService.Verify(s => s.QueueArticle(article.Url), Times.Never); _pdfService.VerifyNoOtherCalls(); }
public async Task <IActionResult> PutUser([FromBody] User user) { UserType userType = _context.UserTypes.FirstOrDefault(e => e.Type == user.UserType.Type); User tmpUser = await _context.Users .Include(u => u.UserSkills).ThenInclude(us => us.Skill) .Include(u => u.UserSkills).ThenInclude(us => us.User) .Include(u => u.ContactInfo) .Include(u => u.TagUsers).ThenInclude(u => u.Tag) .Include(u => u.Location) .FirstOrDefaultAsync(u => u.UserID == user.UserID); tmpUser.UserType = userType; tmpUser.Location.Country = user.Location.Country; tmpUser.Location.Address = user.Location.Address; tmpUser.Location.Postcode = user.Location.Postcode; tmpUser.ContactInfo.MobileNumber = user.ContactInfo.MobileNumber; tmpUser.ContactInfo.LinkedIn = user.ContactInfo.LinkedIn; tmpUser.Email = user.Email; tmpUser.BirthYear = user.BirthYear; tmpUser.Bio = user.Bio; tmpUser.LastName = user.LastName; tmpUser.Name = user.Name; tmpUser.Username = user.Username; tmpUser.Password = user.Password; tmpUser.Image = user.Image; foreach (TagUser tc in user.TagUsers) { TagUser tmpTagUser = _context.TagUsers.Include(t => t.Tag).SingleOrDefault(t => t.Tag.TagName == tc.Tag.TagName && t.TagUserID == tc.TagUserID); if (tmpTagUser == null || tmpTagUser.Equals(null)) { //tag is nog niet toegevoegd aan user Tag tmpTag = _context.Tags.SingleOrDefault(t => t.TagName == tc.Tag.TagName); if (tmpTag == null || tmpTag.Equals(null)) { tmpUser.TagUsers.Add(new TagUser() { Tag = new Tag() { TagName = tc.Tag.TagName }, User = tmpUser }); } } } foreach (UserSkill us in user.UserSkills) { UserSkill tmpUserSkill = _context.UserSkills.Include(uss => uss.Skill).SingleOrDefault(uss => uss.Skill.SkillName == us.Skill.SkillName && uss.UserSkillID == us.UserSkillID); if (tmpUserSkill == null || tmpUserSkill.Equals(null)) { //skill is nog niet toegevoegd aan user Skill tmpSkill = _context.Skills.SingleOrDefault(s => s.SkillName == us.Skill.SkillName); if (tmpSkill == null || tmpSkill.Equals(null)) { tmpUser.UserSkills.Add(new UserSkill() { User = tmpUser, Skill = new Skill() { SkillName = us.Skill.SkillName } }); } else { tmpUser.UserSkills.Add(new UserSkill() { User = tmpUser, Skill = tmpSkill }); } } } _context.Entry(tmpUser).State = EntityState.Modified; await _context.SaveChangesAsync(); return(Ok()); }