/// <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); }