public void GetWrongUserReplacesException()
        {
            using (var subscription = obsListener.LogToSqlDatabase("test", TracingDatabaseConnectionString, bufferingCount: 1))
            {
                string username = "******";
                var roles = new[] { "Employee" };
                Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(username), roles);

                var repository = new UserRepository(ldapStore, exceptionMgr, container);

                //assert that the friendly excetpion is thrown to the UI
                var ex = ExceptionAssertHelper.Throws<NotifyException>(() => repository.GetUser(username));

                subscription.Sink.FlushAsync().Wait();

                var entries = DatabaseHelper.GetAllLogEntries(TracingDatabaseConnectionString);
                Assert.AreEqual(2, entries.Count);
                Assert.IsTrue(entries.Any(e => e.Level == (int)EventLevel.Error));
                Assert.IsTrue(entries.Any(e => e.EventId == 1000));
                Assert.IsTrue(entries.Any(e => e.Payload.Contains(Resources.UserNotRegisteredMessage)));

                Assert.IsNotNull(ex, "Exception not thrown");
                StringAssert.Contains(ex.Message, Resources.FriendlyMessage);
            }
        }
        public void UpdatePreferredReimbursementMethod()
        {
            string username = "******";
            var roles = new[] { "UpdatePreferredReimbursementMethod_Role" };
            Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(username), roles);
            var repository = new UserRepository(this.ldapStore, this.exceptionMgr, this.container);

            var actual = repository.GetUser(username);
            actual.PreferredReimbursementMethod = ReimbursementMethod.Cash;

            repository.UpdateUserPreferredReimbursementMethod(actual);

            var updated = repository.GetUser(username);

            Assert.IsNotNull(updated);
            Assert.AreEqual(ReimbursementMethod.Cash, updated.PreferredReimbursementMethod);
        }
        public void GetUser()
        {
            string username = "******";
            var roles = new[] { "Employee" };
            Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(username), roles);

            var repository = new UserRepository(this.ldapStore, this.exceptionMgr, this.container);
            var user = repository.GetUser(username);

            Assert.IsNotNull(user);
            Assert.AreEqual(username, user.UserName);
            Assert.AreEqual(1, user.Roles.Count);
            Assert.AreEqual("Employee", user.Roles.First());
            Assert.AreEqual("John Doe", user.FullName);
            Assert.AreEqual("ADATUM\\mary", user.Manager);
            Assert.AreEqual("31023", user.CostCenter);
        }
        public void InvalidUserInUpdateReplacesException()
        {

            var repository = new UserRepository(LDAPStore, exceptionMgr, container);

            var ex = ExceptionAssertHelper.Throws<NotifyException>(
              () => repository.UpdateUserPreferredReimbursementMethod(null));

            //assert that the friendly execption is thrown to the UI

            Assert.IsNotNull(ex, "Exception not thrown");
            StringAssert.Contains(ex.Message, Resources.FriendlyMessage);

            //assert that the inner execption is logged to the database

            var errors = DatabaseHelper.GetExceptionsFromDB(LoggingDatabaseConnectionString);
            var error = errors.FirstOrDefault();
            Assert.IsNotNull(error, "Inner exception not logged to the db");
            StringAssert.Contains(error.FormattedMessage, "System.ArgumentNullException");
            StringAssert.Contains(error.Title, Resources.NotifyExceptionTitle);
        }
        public void GetWrongUserReplacesException()
        {
            string username = "******";
            var roles = new[] { "Employee" };
            Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(username), roles);

            var repository = new UserRepository(LDAPStore, exceptionMgr, container);

            //assert that the friendly excetpion is thrown to the UI
            var ex = ExceptionAssertHelper.Throws<NotifyException>(
              () => repository.GetUser(username));

            Assert.IsNotNull(ex, "Exception not thrown");
            StringAssert.Contains(ex.Message, Resources.FriendlyMessage);

            //assert that the inner execption is logged to the database

            var errors = DatabaseHelper.GetExceptionsFromDB(LoggingDatabaseConnectionString);
            var error = errors.FirstOrDefault();
            Assert.IsNotNull(error, "Inner exception not logged to the db");
            StringAssert.Contains(error.FormattedMessage, Resources.UserNotRegisteredMessage);
            StringAssert.Contains(error.Title, Resources.NotifyExceptionTitle);

        }
        public void InvalidUserInUpdateReplacesException()
        {
            using (var subscription = obsListener.LogToSqlDatabase("test", TracingDatabaseConnectionString, bufferingCount: 1))
            {
                var repository = new UserRepository(ldapStore, exceptionMgr, container);

                var ex = ExceptionAssertHelper.Throws<NotifyException>(
                  () => repository.UpdateUserPreferredReimbursementMethod(null));

                subscription.Sink.FlushAsync().Wait();

                var entries = DatabaseHelper.GetAllLogEntries(TracingDatabaseConnectionString);
                Assert.AreEqual(2, entries.Count);
                Assert.AreEqual((int)EventLevel.Error, entries.Last().Level);
                Assert.AreEqual(1000, entries.Last().EventId);
                StringAssert.Contains(entries.Last().Payload, "System.ArgumentNullException");

                //assert that the friendly execption is thrown to the UI

                Assert.IsNotNull(ex, "Exception not thrown");
                StringAssert.Contains(ex.Message, Resources.FriendlyMessage);
            }
        }