public async Task apiParticipateTest() { memMoq.Setup(m => m.CreateEntry(It.IsAny <object>())).Returns(new Mock <ICacheEntry>().Object); UserContext _context = GetContext(); LogIn(users[1]); // open no participants, but user[1] is Admin int c; c = GetGroupPartCount(groups[0].Id); JsonResult res = await controller.apiParticipate(groups[0].Id); Assert.AreEqual(c, GetGroupPartCount(groups[0].Id)); Assert.IsInstanceOf <JsonError>(res.Value); // closed, user[1] is already c = GetGroupPartCount(groups[1].Id); res = await controller.apiParticipate(groups[1].Id); Assert.AreEqual(c - 1, GetGroupPartCount(groups[1].Id)); res = await controller.apiParticipate(groups[1].Id); Assert.AreEqual(c, GetGroupPartCount(groups[1].Id)); // private, user[1] is already c = GetGroupPartCount(groups[2].Id); res = await controller.apiParticipate(groups[2].Id); Assert.AreEqual(c - 1, GetGroupPartCount(groups[2].Id)); res = await controller.apiParticipate(groups[2].Id); Assert.IsInstanceOf <JsonError>(res.Value); // private group Assert.AreEqual(c - 1, GetGroupPartCount(groups[2].Id)); // restore implicit _context.Group.Find(groups[2].Id).Participants.Add(new GroupUser(users[1], _context.Group.Find(groups[2].Id))); _context.SaveChanges(); LogIn(users[2]); // open c = GetGroupPartCount(groups[0].Id); res = await controller.apiParticipate(groups[0].Id); Assert.AreEqual(c + 1, GetGroupPartCount(groups[0].Id)); Assert.AreEqual(c + 1 + groups[0].Admins.Count, new List <UserModel>((IEnumerable <UserModel>)res.Value.GetType().GetProperty("Participants").GetValue(res.Value)).Count); Assert.True((bool)res.Value.GetType().GetProperty("IsParticipant").GetValue(res.Value)); res = await controller.apiParticipate(groups[0].Id); Assert.AreEqual(c, GetGroupPartCount(groups[0].Id)); // closed, already c = GetGroupPartCount(groups[1].Id); res = await controller.apiParticipate(groups[1].Id); Assert.AreEqual(c - 1, GetGroupPartCount(groups[1].Id)); Assert.False((bool)res.Value.GetType().GetProperty("IsParticipant").GetValue(res.Value)); res = await controller.apiParticipate(groups[1].Id); Assert.AreEqual(c, GetGroupPartCount(groups[1].Id)); // private c = GetGroupPartCount(groups[2].Id); res = await controller.apiParticipate(groups[2].Id); Assert.AreEqual(c, GetGroupPartCount(groups[2].Id)); Assert.IsInstanceOf <JsonError>(res.Value); res = await controller.apiParticipate(1000); Assert.IsInstanceOf <JsonError>(res.Value); }