/// <summary>
        /// This is used to introduce someone to the system
        /// </summary>
        /// <param name="person"></param>
        /// <param name="accountGroupId"></param>
        public void InvitePerson(PersonInvitation invitation)
        {
            if (invitation == null)
            {
                throw new ArgumentNullException(nameof(invitation));
            }

            if (invitation.AccountGroupId <= 0)
            {
                throw new ArgumentException("Account group id has to be higher than 0", nameof(invitation.AccountGroupId));
            }

            var accountGroup = Context.List <AccountGroup>().Single(x => x.Id == invitation.AccountGroupId);

            if (accountGroup.EndDate.HasValue)
            {
                throw new BusinessLogicException("Cannot add to a disabled group");
            }

            if (!Me.AccountGroupPeople.Any(x => x.AccountGroupId == invitation.AccountGroupId))
            {
                throw new BusinessLogicException("Current user does not belong in this group");
            }

            var existingInvitation = Context.List <Invitation>()
                                     .SingleOrDefault(x => x.EmailAddress.Equals(invitation.Email, StringComparison.OrdinalIgnoreCase) &&
                                                      x.AccountGroupId == invitation.AccountGroupId);

            if (existingInvitation == null)
            {
                Context.Add(new Invitation
                {
                    AccountGroup   = accountGroup,
                    AccountGroupId = invitation.AccountGroupId,
                    EmailAddress   = invitation.Email,
                    ExpirationDate = DateTime.Now.AddDays(EmailDays),
                    InvitedById    = this.Me.Id,
                    InvitedBy      = this.Me,
                    Name           = invitation.Name,
                });
            }
            else
            {
                existingInvitation.ExpirationDate = DateTime.Now.AddDays(EmailDays);
            }

            Context.SaveChanges();
        }
        public void InvitePerson_DifferentAccountGroup_AddsInvitation()
        {
            Mock <IDatabaseContext> fakeContext = new Mock <IDatabaseContext>();
            AccountManagement       management  = SimpleResolve(fakeContext, 1, 1, 2);

            AccountGroup accountGroup = new AccountGroup {
                Id = 6,
            };
            Person someoneElse = new Person
            {
                Id = 2,
            };

            string email      = "hello world";
            var    invitation = new PersonInvitation
            {
                Email          = email,
                AccountGroupId = 2,
                Name           = "dun matter"
            };

            management.InvitePerson(invitation);
            fakeContext.Verify(x => x.Add(It.IsAny <Invitation>()), Times.Once);
        }