public void Throws_UserNotAuthorizedForProcessException_When_User_Not_Site_Admin()
        {
            // Setup
            IProcess <CreateOrgWithAdminUserParams, GeneralSuccessResultViewModel> process = new OrganizationAdminProcesses(_context, _genPassMock.Object, _siteAdminMock.Object);

            _siteAdminMock.Setup(x => x.Execute(It.IsAny <SiteAdminAuthorizationParams>())).Returns(new AuthorizationResultViewModel {
                UserAuthorized = false
            });

            // Act
            try
            {
                process.Execute(new CreateOrgWithAdminUserParams {
                    RequestingUserId = 12
                });
                Assert.Fail("No exception was thrown");
            }

            // Verify
            catch (UserNotAuthorizedForProcessException ex)
            {
                Assert.AreEqual(12, ex.UserId, "Exception's user id value was incorrect");
                Assert.AreEqual(typeof(SiteAdminAuthorizationParams), ex.ProcessParamType, "Exception's process param type was incorrect");
                Assert.AreEqual(typeof(AuthorizationResultViewModel), ex.ViewModelType, "Exception's view model typewas incorrect");
            }
        }
        public void Can_Create_Organization_With_Administering_User()
        {
            // Setup
            IProcess <CreateOrgWithAdminUserParams, GeneralSuccessResultViewModel> process = new OrganizationAdminProcesses(_context, _genPassMock.Object, _siteAdminMock.Object);
            string email = "myemail", password = "******", orgName = "my org", adminName = "the admin";

            // Act
            var result = process.Execute(new CreateOrgWithAdminUserParams
            {
                OrganizationName       = orgName,
                AdminEmail             = email,
                AdminName              = adminName,
                AdminPlainTextPassword = password
            });

            // Verify
            Assert.IsNotNull(result, "Process returned a null result");
            Assert.IsTrue(result.WasSuccessful, "Process did not return a successful result");

            var org = _context.Organizations.SingleOrDefault();

            Assert.IsNotNull(org, "No organization was created");
            Assert.AreEqual(orgName, org.Name, "Organization's name was incorrect");
            Assert.AreEqual(1, org.Members.Count, "Organization has a incorrect number of members");
            Assert.AreNotEqual(new Guid(), org.RegistrationToken, "Organization's registration token was incorrectly blank");

            var user = org.Members.Single();

            Assert.AreEqual(email, user.Email, "User's email was incorrect");
            Assert.AreEqual(adminName, user.FullName, "User's full name was incorrect");
            Assert.AreEqual(_hashedPassword, user.Password, "User's password was incorrect");
            Assert.IsTrue(user.IsOrganizationAdmin, "User was not set as an organization admin");
        }
        public void Can_Create_Organization_With_Administering_User()
        {
            // Setup
            IProcess<CreateOrgWithAdminUserParams, GeneralSuccessResultViewModel> process = new OrganizationAdminProcesses(_context, _genPassMock.Object, _siteAdminMock.Object);
            string email = "myemail", password = "******", orgName = "my org", adminName = "the admin";

            // Act
            var result = process.Execute(new CreateOrgWithAdminUserParams 
            { 
                OrganizationName = orgName, 
                AdminEmail = email, 
                AdminName = adminName,
                AdminPlainTextPassword = password 
            });

            // Verify
            Assert.IsNotNull(result, "Process returned a null result");
            Assert.IsTrue(result.WasSuccessful, "Process did not return a successful result");

            var org = _context.Organizations.SingleOrDefault();
            Assert.IsNotNull(org, "No organization was created");
            Assert.AreEqual(orgName, org.Name, "Organization's name was incorrect");
            Assert.AreEqual(1, org.Members.Count, "Organization has a incorrect number of members");
            Assert.AreNotEqual(new Guid(), org.RegistrationToken, "Organization's registration token was incorrectly blank");

            var user = org.Members.Single();
            Assert.AreEqual(email, user.Email, "User's email was incorrect");
            Assert.AreEqual(adminName, user.FullName, "User's full name was incorrect");
            Assert.AreEqual(_hashedPassword, user.Password, "User's password was incorrect");
            Assert.IsTrue(user.IsOrganizationAdmin, "User was not set as an organization admin");
        }
        public void Throws_UserNotAuthorizedForProcessException_When_User_Not_Site_Admin()
        {
            // Setup
            IProcess<CreateOrgWithAdminUserParams, GeneralSuccessResultViewModel> process = new OrganizationAdminProcesses(_context, _genPassMock.Object, _siteAdminMock.Object);
            _siteAdminMock.Setup(x => x.Execute(It.IsAny<SiteAdminAuthorizationParams>())).Returns(new AuthorizationResultViewModel { UserAuthorized = false });

            // Act
            try
            {
                process.Execute(new CreateOrgWithAdminUserParams { RequestingUserId = 12 });
                Assert.Fail("No exception was thrown");
            }

            // Verify
            catch (UserNotAuthorizedForProcessException ex)
            {
                Assert.AreEqual(12, ex.UserId, "Exception's user id value was incorrect");
                Assert.AreEqual(typeof(SiteAdminAuthorizationParams), ex.ProcessParamType, "Exception's process param type was incorrect");
                Assert.AreEqual(typeof(AuthorizationResultViewModel), ex.ViewModelType, "Exception's view model typewas incorrect");
            }
        }