Example #1
0
        public async Task Validate_when_user_is_admin_of_group()
        {
            // Arrange
            string userSub = Guid.NewGuid().ToString();
            var    user    = new User
            {
                FirstName = "Integration",
                LastName  = "Test",
                Sub       = userSub
            };

            var group = new Domain.Entities.Group {
                Admin = user, Name = "A group"
            };

            var userToGroup = new UserToGroup {
                User = user, Group = group
            };

            await _dbContext.Users.AddAsync(user);

            await _dbContext.Groups.AddAsync(group);

            await _dbContext.UsersToGroups.AddAsync(userToGroup);

            await _dbContext.SaveChangesAsync();

            var sut = new GetGroupMembersValidator(_dbContext);

            // Act
            bool isValid = await sut.IsValidAsync(new GetGroupMembers(userSub, group.Id));

            // Assert
            isValid.ShouldBeTrue();
        }
Example #2
0
        //Get: Attendee/InviteToGroup
        public ActionResult InviteToGroup(int id)
        {
            UserToGroup UsersGroup = new UserToGroup();

            UsersGroup.Group = db.Groups.Find(id);
            return(View(UsersGroup));
        }
Example #3
0
        public ActionResult Create(GroupCreateViewModel model)
        //public ActionResult Create([Bind(Include = "Id,UserId,GroupId")] UserToGroup userToGroup)
        {
            if (ModelState.IsValid)
            {
                var newGroup = new Group {
                    Name = model.Group.Name
                };
                var newUserToGroup = new UserToGroup {
                    UserId = model.CurrentUserId, GroupId = newGroup.Id, AcceptedInvite = true
                };
                var newGroupToEvent = new GroupToEvents {
                    GroupId = newGroup.Id, EventId = model.Event.Id
                };
                db.Groups.Add(newGroup);
                db.UserToGroups.Add(newUserToGroup);
                db.GroupToEvents.Add(newGroupToEvent);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            ViewBag.GroupId = new SelectList(db.Groups, "Id", "Name");
            ViewBag.EventId = new SelectList(db.Events, "Id", "Name");
            return(View());
        }
        public async Task <string> AddUserToGroup(string groupId, string userId)
        {
            UserToGroup utg         = new UserToGroup(userId);
            var         groupJson   = JsonConvert.SerializeObject(utg);
            string      fullRequest = "/groups/" + groupId + "/members/$ref";

            return(await SendGraphPostRequest(fullRequest, groupJson));
        }
Example #5
0
        public ActionResult LeaveGroup(string userId, int?groupId)
        {
            UserToGroup userToGroupToRemove = (from row in db.UserToGroups where row.UserId == userId && row.GroupId == groupId select row).First();

            db.UserToGroups.Remove(userToGroupToRemove);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Example #6
0
        public async Task Invalidate_when_user_is_already_invited()
        {
            // Arrange
            var sut = new InviteToGroupValidator(_dbContext);

            string userSub         = Guid.NewGuid().ToString();
            string nonGroupUserSub = Guid.NewGuid().ToString();

            var admin = new User
            {
                FirstName = "Integration",
                LastName  = "Test",
                Sub       = userSub
            };

            var invitedGroupUser = new User
            {
                FirstName = "Integration2",
                LastName  = "Test2",
                Sub       = nonGroupUserSub
            };

            var group = new Domain.Entities.Group
            {
                Admin = admin,
                Name  = "my group"
            };

            var userToGroups = new UserToGroup {
                Group = group, User = admin
            };
            var groupInvite = new GroupInvite
            {
                Group = group,
                InvitationReceiver = invitedGroupUser,
                InvitationSender   = admin
            };

            await _dbContext.Users.AddAsync(admin);

            await _dbContext.Users.AddAsync(invitedGroupUser);

            await _dbContext.Groups.AddAsync(group);

            await _dbContext.UsersToGroups.AddAsync(userToGroups);

            await _dbContext.GroupInvites.AddAsync(groupInvite);

            await _dbContext.SaveChangesAsync();

            // Act
            bool isValid = await sut.IsValidAsync(new InviteToGroup(userSub, group.Id, invitedGroupUser.Id));

            // Assert
            isValid.ShouldBeFalse();
        }
Example #7
0
        public async Task Validate_request_when_is_part_of_group()
        {
            // Arrange
            string userSub  = Guid.NewGuid().ToString();
            string adminSub = Guid.NewGuid().ToString();

            var user = new User
            {
                FirstName = "Integration",
                LastName  = "Test",
                Sub       = userSub
            };

            var admin = new User
            {
                FirstName = "Admin",
                LastName  = "User",
                Sub       = adminSub
            };

            var group = new Domain.Entities.Group
            {
                Admin = admin,
                Name  = "A group"
            };

            var userToGroup = new UserToGroup {
                Group = group, User = user
            };
            var adminToGroup = new UserToGroup {
                Group = group, User = admin
            };

            await _dbContext.Users.AddAsync(user);

            await _dbContext.Groups.AddAsync(group);

            await _dbContext.UsersToGroups.AddAsync(userToGroup);

            await _dbContext.UsersToGroups.AddAsync(adminToGroup);

            await _dbContext.SaveChangesAsync();

            var sut = new GetGroupSafeLocationsValidator(_dbContext);

            // Act
            bool isValid = await sut.IsValidAsync(new GetGroupSafeLocations(userSub, group.Id));

            // Assert
            isValid.ShouldBeTrue();
        }
Example #8
0
 public ActionResult Edit(GroupEditViewModel model, UserToGroup userToGroup, int?id)
 {
     if (ModelState.IsValid)
     {
         var groupToUpdate       = db.Groups.Find(db.UserToGroups.Find(userToGroup.Id).GroupId);
         var userToGroupToUpdate = db.UserToGroups.Find(userToGroup.Id);
         userToGroupToUpdate.GroupId = groupToUpdate.Id;
         groupToUpdate.Name          = model.Name;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     ViewBag.GroupId = new SelectList(db.Groups, "Id", "Name", userToGroup.GroupId);
     ViewBag.UserId  = new SelectList(db.Users, "Id", "Email", userToGroup.UserId);
     return(View(userToGroup));
 }
Example #9
0
        public async Task Validate_when_user_is_admin_of_group_and_invited_existing_user()
        {
            // Arrange
            var sut = new InviteToGroupValidator(_dbContext);

            string userSub         = Guid.NewGuid().ToString();
            string nonGroupUserSub = Guid.NewGuid().ToString();

            var admin = new User
            {
                FirstName = "Integration",
                LastName  = "Test",
                Sub       = userSub
            };

            var nonGroupUser = new User
            {
                FirstName = "Integration",
                LastName  = "Test",
                Sub       = nonGroupUserSub
            };

            var group = new Domain.Entities.Group
            {
                Admin = admin,
                Name  = "my group"
            };

            var userToGroups = new UserToGroup {
                Group = group, User = admin
            };

            await _dbContext.Users.AddAsync(admin);

            await _dbContext.Users.AddAsync(nonGroupUser);

            await _dbContext.Groups.AddAsync(group);

            await _dbContext.UsersToGroups.AddAsync(userToGroups);

            await _dbContext.SaveChangesAsync();

            // Act
            bool isValid = await sut.IsValidAsync(new InviteToGroup(userSub, group.Id, nonGroupUser.Id));

            // Assert
            isValid.ShouldBeTrue();
        }
        public IActionResult CreateGroup([FromBody] Group group)
        {
            if (group == null)
            {
                return(BadRequest("Invalid client request: group object was null"));
            }

            if (!ModelState.IsValid)
            {
                _logger.LogError("Invalid user: model state not valid");
                return(BadRequest("Invalid user: model state not valid"));
            }

            if (!group.ValidateCreateGroup())
            {
                return(BadRequest("Sent object was not valid!"));
            }

            try
            {
                var userMail = AuthControllerExtensions.JwtNameExtractor(Request.Headers["Authorization"]);
                var dbUser   = _repository.User.GetUserByEmail(userMail);

                group.AdminUserId = dbUser.Id;

                _repository.Group.CreateGroup(group);
                _repository.Save();

                var adminMembership = new UserToGroup()
                {
                    GroupId = group.Id,
                    UserId  = dbUser.Id
                };

                _repository.UserToGroup.AddMembership(adminMembership);
                _repository.Save();

                return(Ok(_repository.Group.GetGroupById(group.Id)));
            }

            catch (Exception e) {
                _logger.LogError($"Something went wrong inside CreateGroup: {e.Message}");
                return(BadRequest("Something went wrong while creating group, the group was not saved!"));
            }
        }
Example #11
0
        public async Task Invalidate_request_when_user_adds_himself_to_group()
        {
            // Arrange
            var    sut     = new InviteToGroupValidator(_dbContext);
            string userSub = Guid.NewGuid().ToString();

            var user = new User
            {
                FirstName = "Integration",
                LastName  = "Test",
                Sub       = userSub
            };

            var group = new Domain.Entities.Group
            {
                Admin = user,
                Name  = "my group"
            };

            var userToGroups = new UserToGroup {
                Group = group, User = user
            };

            await _dbContext.Users.AddAsync(user);

            await _dbContext.Groups.AddAsync(group);

            await _dbContext.UsersToGroups.AddAsync(userToGroups);

            await _dbContext.SaveChangesAsync();

            // Act
            bool isValid = await sut.IsValidAsync(new InviteToGroup(userSub, group.Id, user.Id));

            // Assert
            isValid.ShouldBeFalse();
        }
Example #12
0
        public async Task Invalidate_when_invited_user_not_found()
        {
            // Arrange
            var    sut     = new InviteToGroupValidator(_dbContext);
            string userSub = Guid.NewGuid().ToString();

            var admin = new User
            {
                FirstName = "Integration",
                LastName  = "Test",
                Sub       = userSub
            };

            var group = new Domain.Entities.Group
            {
                Admin = admin,
                Name  = "my group"
            };

            var userToGroups = new UserToGroup {
                Group = group, User = admin
            };

            await _dbContext.Users.AddAsync(admin);

            await _dbContext.Groups.AddAsync(group);

            await _dbContext.UsersToGroups.AddAsync(userToGroups);

            await _dbContext.SaveChangesAsync();

            // Act
            bool isValid = await sut.IsValidAsync(new InviteToGroup(userSub, group.Id, Guid.NewGuid()));

            // Assert
            isValid.ShouldBeFalse();
        }
Example #13
0
        public ActionResult InviteToGroup(UserToGroup model)
        {
            if (ModelState.IsValid)
            {
                UserToGroup userToGroup = new UserToGroup();
                foreach (ApplicationUser user in db.Users)
                {
                    if (user.Email == model.User.Email)
                    {
                        ApplicationUser invitee = user;
                        userToGroup.UserId = invitee.Id;
                    }
                }
                userToGroup.GroupId        = model.Group.Id;
                userToGroup.AcceptedInvite = false;
                db.UserToGroups.Add(userToGroup);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }
            UserToGroup UsersGroup = new UserToGroup();

            UsersGroup.Group = db.Groups.Find(model.Group.Id);
            return(View(UsersGroup));
        }
        public IActionResult AddMember([FromBody] UserToGroup userToGroupParam)
        {
            var group = _repository.Group.GetGroupById(userToGroupParam.GroupId);

            if (group == null)
            {
                _logger.LogError("Group was not found!");
                return(BadRequest("Invalid client request: Group was not found"));
            }

            var userToAdd = _repository.User.FindByCondition(us => us.Id == userToGroupParam.UserId).FirstOrDefault();

            if (userToAdd == null)
            {
                _logger.LogError("User with this id was not found!");
                return(BadRequest("User with this id was not found!"));
            }

            var currentGroupMemberships = _repository.UserToGroup.GetMembershipsForGroup(group).ToList();

            foreach (var mem in currentGroupMemberships)
            {
                if (mem.UserId == userToAdd.Id)
                {
                    _logger.LogError("User is already member of this group!");
                    return(BadRequest("User is already member of this group!"));
                }
            }

            try
            {
                if (group.IsPublic.Equals("true"))
                {
                    var userToGroupPublic = new UserToGroup()
                    {
                        UserId  = userToAdd.Id,
                        GroupId = group.Id
                    };
                    _repository.UserToGroup.AddMembership(userToGroupPublic);
                    _repository.Save();
                    return(Accepted());
                }

                var userMail     = AuthControllerExtensions.JwtNameExtractor(Request.Headers["Authorization"]);
                var loggedInUser = _repository.User.GetUserByEmail(userMail);

                if (loggedInUser.Id != group.AdminUserId)
                {
                    _logger.LogError("Logged in user is no admin therefore he cant add members");
                    return(BadRequest("Logged in user is no admin therefore he cant add members"));
                }

                var userToGroup = new UserToGroup()
                {
                    UserId  = userToAdd.Id,
                    GroupId = group.Id
                };

                _repository.UserToGroup.AddMembership(userToGroup);
                _repository.Save();
                return(Accepted());
            }

            catch (Exception e)
            {
                _logger.LogError($"Something went wrong inside AddMember: {e.Message}");
                return(StatusCode(500, "Something went wrong while adding a new member"));
            }
        }