예제 #1
0
        public void Authorize_NonLoggedUser_ShouldThrowException()
        {
            var data       = new HotelBookingSystemData();
            var controller = new Controller(data, null);

            controller.Authorize(Roles.VenueAdmin);
        }
예제 #2
0
        public void TestAuthorize_NoSufficientRights_ShouldPass()
        {
            var database   = new HotelBookingSystemData();
            var controller = new VenuesController(database, new User("Alex123", "alexredis", Roles.VenueAdmin));

            controller.Add("No name", "Sofia", "Omg");
        }
예제 #3
0
        public void Authorize_WrongRole_ShouldThrowException()
        {
            var data       = new HotelBookingSystemData();
            var controller = new Controller(data, new User(UsernameOne, PasswordOne, Roles.User));

            controller.Authorize(Roles.VenueAdmin);
        }
예제 #4
0
        public void TestLogout_WithoutLoggedUser_ShouldThrow()
        {
            var database   = new HotelBookingSystemData();
            var controller = new UsersController(database, null);

            controller.Logout();
        }
예제 #5
0
        public void TestAuthorize_NotLoggedUser_ShouldReturnException()
        {
            var database   = new HotelBookingSystemData();
            var controller = new VenuesController(database, null);

            controller.Details(1);
        }
예제 #6
0
        public void TestAuthorize_ValidUser_ShouldPass()
        {
            var database   = new HotelBookingSystemData();
            var controller = new VenuesController(database, new User("No admin", "admina", Roles.VenueAdmin));

            controller.Add("No name", "No address", "No description");
        }
예제 #7
0
        public void TestAuthorize_NoSufficientRights_ShouldReturnException()
        {
            var database   = new HotelBookingSystemData();
            var controller = new VenuesController(database, new User("No admin", "admina", Roles.User));

            controller.Add("No name", "No address", "No description");
        }
예제 #8
0
        public void Logout_NotLoggedInUser_ShouldThrowException()
        {
            var data = new HotelBookingSystemData();

            var userController = new UsersController(data, null);

            var view = userController.Logout();
        }
예제 #9
0
        public void TestAllVenuesWithoutVenuesCorrectReturnString()
        {
            const string expected   = "There are currently no venues to show.";
            var          database   = new HotelBookingSystemData();
            var          controller = new VenuesController(database, null);

            var result = controller.All().Display();

            Assert.AreEqual(expected, result);
        }
예제 #10
0
        public void TestLogout_WithLoggedUser_CurrentUserIsNull()
        {
            var database   = new HotelBookingSystemData();
            var controller = new UsersController(database, new User("No admin", "admina", Roles.VenueAdmin));

            controller.Logout();
            var result = controller.CurrentUser;

            Assert.IsNull(result);
        }
예제 #11
0
        public void TestLogout_WithLoggedUser_ShouldPass()
        {
            var database   = new HotelBookingSystemData();
            var controller = new UsersController(database, new User("Alex123", "alexredis", Roles.VenueAdmin));

            controller.Logout();

            var result = controller.CurrentUser;

            Assert.IsNull(result);
        }
        public static void Main()
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;

            IHotelBookingSystemData database = new HotelBookingSystemData();
            IInputReader reader = new ConsoleReader();
            IOutputWriter writer = new ConsoleWriter();

            var engine = new Engine(database, reader, writer);
            engine.StartOperation();
        }
예제 #13
0
        public static void Main()
        {
            System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;

            var database = new HotelBookingSystemData();
            var reader   = new ConsoleInputReader();
            var writer   = new ConsoleOutputWriter();
            var engine   = new Engine(database, reader, writer);

            engine.StartOperation();
        }
예제 #14
0
        public void TestAuthorizeMethodWithEmptyUser()
        {
            string userName  = "******";
            string password  = "******";
            User   user      = new User(userName, password, Role.User);
            var    database  = new HotelBookingSystemData();
            var    controler = new UsersController(database, user);

            controler.Login(userName, password);
            controler.Logout();
            controler.Logout();
        }
예제 #15
0
        public void ViewAll_VenuesWithNotLoggedInUser_ShouldReturnExpectedMessage()
        {
            var data = new HotelBookingSystemData();

            var venuesController = new VenuesController(data, null);

            var    view         = venuesController.All();
            string actualResult = view.Display();

            var expectedResult = "There are currently no venues to show.";

            Assert.AreEqual(expectedResult, actualResult, "All venues did not return expected view!");
        }
예제 #16
0
        public void ViewAll_NoVenuesWithLoggedUser_ShouldReturnExpectedMessage()
        {
            var data = new HotelBookingSystemData();
            var user = new User(UsernameOne, PasswordOne, Roles.User);

            var venuesController = new VenuesController(data, user);

            var    view         = venuesController.All();
            string actualResult = view.Display();

            var expectedResult = "There are currently no venues to show.";

            Assert.AreEqual(expectedResult, actualResult, "All venues did not return expected view!");
        }
예제 #17
0
        public void VenuesAllNoVenues_ShouldReturnCorrectResult()
        {
            // Arrange
            IHotelBookingSystemData data = new HotelBookingSystemData();
            User user = new User("test user", "password", Roles.User);
            VenuesController controller = new VenuesController(data, user);

            // Act
            IView view = controller.All();
            string result = view.Display();
            string expected = "There are currently no venues to show.";

            // Assert
            Assert.AreEqual(expected, result);
        }
예제 #18
0
        public void Logout_LoggedVenueAdmin_ShouldReturnLogoutView()
        {
            var data = new HotelBookingSystemData();
            var user = new User(UsernameOne, PasswordOne, Roles.VenueAdmin);

            var userController = new UsersController(data, user);

            var view = userController.Logout();

            var actualResult = view.Display();

            var expectedResult = string.Format($"The user {user.Username} has logged out.");

            Assert.AreEqual(expectedResult, actualResult, "Does not log out logged in user.");
        }
예제 #19
0
        public void UsersLogoutValidUser_ShouldReturnCorrectResult()
        {
            // Arrange
            IHotelBookingSystemData data = new HotelBookingSystemData();
            User user = new User("test user", "password", Roles.User);
            UsersController controller = new UsersController(data, user);

            // Act
            controller.CurrentUser = user;
            IView view = controller.Logout();
            string result = view.Display();
            string expected = "The user test user has logged out.";

            // Assert
            Assert.AreEqual(expected, result);
        }
예제 #20
0
        public void VenuesAll_VenuesInDataWithNoLoggedInUser_ShouldReturnExpectedView()
        {
            var data             = new HotelBookingSystemData();
            var venuesController = new VenuesController(data, null);

            venuesController.Add("Valentin", "Sveti", "Praznik, na koito vsichki praznuvat, no ne i az.");

            var    view         = venuesController.All();
            string actualResult = view.Display();

            var expectedResult = new StringBuilder();

            expectedResult.AppendFormat($"*[{1}] {"Valentin"}, located at {"Sveti"}").AppendLine();
            expectedResult.Append("Free rooms: 0");

            Assert.AreEqual(expectedResult.ToString(), actualResult, "All venues did not return expected view!");
        }
예제 #21
0
        public void VenuesAllThreeVenues_ShouldReturnCorrectResult()
        {
            // Arrange
            IHotelBookingSystemData data = new HotelBookingSystemData();
            User user = new User("test user", "password", Roles.User);
            VenuesController controller = new VenuesController(data, user);

            // Act
            controller.Add("venue name1", "Pernik", "test");
            controller.Add("venue name2", "Pernik", "test");
            controller.Add("venue name3", "Pernik", "test");
            IView view = controller.All();
            string result = view.Display();
            string expected = "*[1] venue name1, located at Pernik\r\nFree rooms: 0\r\n*[2] venue name2, located at Pernik\r\nFree rooms: 0\r\n*[3] venue name3, located at Pernik\r\nFree rooms: 0";

            // Assert
            Assert.AreEqual(expected, result);
        }
예제 #22
0
        public void StartOperation()
        {
            var   database    = new HotelBookingSystemData();
            IUser currentUser = null;

            while (true)
            {
                string url = Console.ReadLine();
                if (url == null)
                {
                    break;
                }

                IEndpoint executionEndpoint = new Endpoint(url);

                var controllerType = Assembly.GetExecutingAssembly().GetTypes()
                                     .FirstOrDefault(type => type.Name == executionEndpoint.ControllerName);
                var      action     = controllerType.GetMethod(executionEndpoint.ActionName);
                object[] parameters = MapParameters(executionEndpoint, action);
                var      controller = Activator.CreateInstance(controllerType, database, currentUser) as Controller;

                string viewResult = string.Empty;
                try
                {
                    var view = action.Invoke(controller, parameters) as IView;
                    viewResult  = view.Display();
                    currentUser = controller.CurrentUser;
                }
                catch (TargetInvocationException ex)
                {
                    var errorView = new Error(ex.InnerException.Message);
                    viewResult = errorView.Display();
                }
                //catch (InvalidOperationException ex)
                //{
                //    var errorView = new Error(ex.InnerException.Message);
                //    viewResult = errorView.Display();
                //}

                Console.WriteLine(viewResult);
            }
        }
예제 #23
0
        public void TestAllVenuesWithVenuesCorrectReturnString()
        {
            var newresultString = new StringBuilder();

            newresultString.AppendLine("*[1] parvo venue, located at Chepelare")
            .AppendLine("Free rooms: 0");
            newresultString.AppendLine("*[2] Manifestaciq, located at Pred narodnoto")
            .AppendLine("Free rooms: 0");

            string expected   = newresultString.ToString().Trim();
            var    database   = new HotelBookingSystemData();
            var    controller = new VenuesController(database, new User("Alex123", "alexredis", Roles.VenueAdmin));

            controller.Add("parvo venue", "Chepelare", "omg");
            controller.Add("Manifestaciq", "Pred narodnoto", "oasdmg");

            var result = controller.All().Display();

            Assert.AreEqual(expected, result);
        }
예제 #24
0
        public void Run()
        {
            var database = new HotelBookingSystemData();
            User currentUser = null;
            while (true)
            {
                string url = Console.ReadLine();
                if (url == null)
                {
                    break;
                }

                var executionEndpoint = new Endpoint(url);

                var controllerType = Assembly
                    .GetExecutingAssembly()
                    .GetTypes()
                    .FirstOrDefault(
                        type => type.Name == executionEndpoint.ControllerName);

                var controller = Activator.CreateInstance(controllerType, database, currentUser) as Controller;

                var action = controllerType.GetMethod(executionEndpoint.ActionName);

                object[] parameters = MapParameters(executionEndpoint, action);
                string viewResult = string.Empty;
                try
                {
                    var view = action.Invoke(controller, parameters) as IView;
                    viewResult = view.Display();
                    currentUser = controller.CurrentUser;
                }
                catch (Exception ex)
                {
                    viewResult = new Error(ex.InnerException.Message).Display();
                }

                Console.WriteLine(viewResult);
            }
        }
예제 #25
0
        public void TestAllVenues_WithVenues_CorrectReturnedString()
        {
            var resultString = new StringBuilder();

            resultString.AppendLine("*[1] first venue, located at Chepelare")
            .AppendLine("Free rooms: 0");
            resultString.AppendLine("*[2] second venue, located at Sofia")
            .AppendLine("Free rooms: 0");
            resultString.AppendLine("*[3] third venue, located at Plovdiv")
            .AppendLine("Free rooms: 0");
            string expected = resultString.ToString().Trim();

            var database   = new HotelBookingSystemData();
            var controller = new VenuesController(database, new User("No admin", "admina", Roles.VenueAdmin));

            controller.Add("first venue", "Chepelare", "no");
            controller.Add("second venue", "Sofia", "no");
            controller.Add("third venue", "Plovdiv", "no");
            var result = controller.All().Display();

            Assert.AreEqual(expected, result);
        }
예제 #26
0
        public void VenuesAll_VenuesInDataWithLoggedInUser_ShouldReturnExpectedView()
        {
            var data = new HotelBookingSystemData();
            var user = new User(UsernameOne, PasswordOne, Roles.User);

            var venuesController = new VenuesController(data, user);

            venuesController.Add("Valentin", "Sveti", "Praznik, na koito vsichki praznuvat, no ne i az.");
            venuesController.Add("Halloween", "USA", "Praznika, na koito rupsitata izglejdat po-dobre - kop-kop.");

            var    view         = venuesController.All();
            string actualResult = view.Display();

            var expectedResult = new StringBuilder();

            expectedResult.AppendFormat($"*[{1}] {"Valentin"}, located at {"Sveti"}").AppendLine();
            expectedResult.AppendLine("Free rooms: 0");
            expectedResult.AppendFormat($"*[{2}] {"Halloween"}, located at {"USA"}").AppendLine();
            expectedResult.Append("Free rooms: 0");

            Assert.AreEqual(expectedResult.ToString(), actualResult, "All venues did not return expected view!");
        }
예제 #27
0
        public void UsersLogoutNoUserLogged_ShouldThrowExceptionWithCorrectMessage()
        {
            // Arrange
            IHotelBookingSystemData data = new HotelBookingSystemData();
            User user = new User("test user", "password", Roles.User);
            UsersController controller = new UsersController(data, user);

            // Act
            controller.CurrentUser = null;
            string result = string.Empty;
            try
            {
                IView view = controller.Logout();
            }
            catch (Exception ex)
            {
                result = ex.Message;
            }

            string expected = "There is no currently logged in user.";

            // Assert
            Assert.AreEqual(expected, result);
        }