Esempio n. 1
0
        public void MainTest()
        {
            ViewResult            result;
            RedirectToRouteResult redirectToRouteResult;
            FormCollection        collection = new FormCollection();

            #region  егистрация/Атовризация

            IUser user0 = Registation(Email0);
            IUser user2 = Registation(Email2, out result, out redirectToRouteResult, null);
            IUser user1 = Registation(Email1, out result, out redirectToRouteResult, null);

            #endregion

            #region Создание доски
            BoardsController boardsController = Base.GetController <BoardsController>();
            collection.Clear();
            collection.Add("name", "test");
            collection.Add("description", "description");
            redirectToRouteResult = (RedirectToRouteResult)boardsController.Create(collection);
            int boardId = redirectToRouteResult.RouteValues["Id"].To <int>();
            var board   = boardsController.Utility.Boards.Get(boardId);
            Assert.IsNotNull(board);
            #endregion

            #region Проверяем статусы

            TasksStatusesController    tasksStatusesController = Base.GetController <TasksStatusesController>();
            PartialViewResult          resultBase = tasksStatusesController.List(boardId);
            IEnumerable <ITasksStatus> statuses   = (IEnumerable <ITasksStatus>)resultBase.Model;
            Assert.AreEqual(statuses.First().Name, "Беклог");

            tasksStatusesController = Base.GetController <TasksStatusesController>();
            resultBase = tasksStatusesController.Edit(boardId,
                                                      new TimezStatus
            {
                Name    = "test",
                BoardId = boardId
            });

            statuses = (IEnumerable <ITasksStatus>)resultBase.Model;
            Assert.AreEqual(statuses.ElementAt(statuses.Count() - 1).Name, "test");

            #endregion

            #region проверяем задачи

            var user            = boardsController.Utility.Users.Get(Email1);
            var boardStatusList = boardsController.Utility.Statuses.GetByBoard(board.Id);

            // получаем доску
            var boardData = (ViewResultBase)boardsController.Edit(boardId);
            Assert.IsInstanceOfType(boardData.Model, typeof(IBoard));
            ProjectsController     projectController = Base.GetController <ProjectsController>();
            IEnumerable <IProject> projs             = (IEnumerable <IProject>)projectController.List(boardId).Model;
            Assert.IsNotNull(projs);

            // получаем цвета доски
            var boardColor = (ViewResultBase)boardsController.EditColorList(boardId);
            Assert.IsInstanceOfType(boardColor.ViewData.Model, typeof(IEnumerable <IBoardsColor>));
            IEnumerable <IBoardsColor> boardColors = boardColor.ViewData.Model as IEnumerable <IBoardsColor>;

            // Создание задачи
            collection.Clear();
            collection["task-id"]          = null;
            collection["task-statusid"]    = boardStatusList[0].Id.ToString();
            collection["task-userid"]      = user.Id.ToString();
            collection["task-name"]        = "Тестовая задача";
            collection["task-description"] = "Описание тестовой задачи";

            collection["task-projectsid"] = projs.First().Id.ToString();
            collection["task-colorid"]    = boardColors.First().Id.ToString(CultureInfo.InvariantCulture);

            // проверяем создание
            KanbanController kanbanController = Base.GetController <KanbanController>();
            ViewResultBase   taskData         = (ViewResultBase)kanbanController.TaskPopup(boardId, null, collection);
            ITask            task             = CheckTask(taskData);
            Assert.IsTrue(task.CreatorUserId == kanbanController.Utility.Authentication.UserId);

            // архивирование
            collection["task-name"] = "Тестовая задача2";
            taskData = (ViewResultBase)kanbanController.TaskPopup(boardId, null, collection);
            ITask task2 = CheckTask(taskData);
            kanbanController.ToArchive(boardId, task2.Id);
            TasksController tasksController = Base.GetController <TasksController>();
            taskData = tasksController.Details(boardId, task2.Id, true);
            Assert.IsTrue((taskData.Model as ITask).Id == task2.Id);
            Assert.IsTrue((bool)taskData.ViewData["isArchive"]);

            // обновляем задачу
            collection.Clear();
            collection["task-id"] = task.Id.ToString();
            ITasksStatus planningStatus = boardStatusList.First(x => x.PlanningRequired);
            collection["task-statusid"]    = planningStatus.Id.ToString();
            collection["task-userid"]      = user.Id.ToString();
            collection["task-name"]        = "Тестовая задачаю. Обновление";
            collection["task-description"] = "Описание тестовой задачи. Обновление";
            collection["task-projectsid"]  = projs.First().Id.ToString();
            collection["task-colorid"]     = boardColors.ToList()[1].Id.ToString();
            kanbanController.Dispose();
            kanbanController = Base.GetController <KanbanController>();
            var json = (JsonResult)kanbanController.TaskPopup(boardId, task.Id, collection);
            Assert.IsTrue((json.Data as JsonMessage).Message == new PlanningTimeRequered(planningStatus).Message);


            // проверяем изменение цвета
            kanbanController = Base.GetController <KanbanController>();
            var color = kanbanController.SetColor(task.Id, boardColors.ToList()[0].Id, boardId);
            Assert.AreNotEqual(color, "");

            // проверям установку времени
            kanbanController = Base.GetController <KanbanController>();
            collection.Clear();
            collection["task-forsed-count"] = "true";
            collection["task-forsed-time"]  = "false";
#pragma warning disable 168
            JsonResult planningTime = (JsonResult)kanbanController.SetPlanningTime(boardId, task.Id, 180, task.TaskStatusId, collection);
#pragma warning restore 168

            // проверяем обновление статуса
            kanbanController = Base.GetController <KanbanController>();
            collection.Clear();
            collection["task-forsed-count"] = "true";
            collection["task-forsed-time"]  = "false";
            kanbanController.UpdateStatus(boardId, task.Id, boardStatusList[0].Id, collection);

            // проверяем исполнителя
            kanbanController = Base.GetController <KanbanController>();
            user             = kanbanController.Utility.Users.Get(Email2);
            kanbanController.SetExecutor(task.BoardId, task.Id, user.Id);

            // проверяем проект
            // сначала создадим проект
            projectController.Dispose();
            projectController = Base.GetController <ProjectsController>();
            collection.Clear();
            string projectName = "тестовый проект " + DateTime.Now.Ticks.ToString();
            collection["Name"] = projectName;
            var projectData = (ViewResultBase)projectController.Edit(boardId, null, collection);
            // проверяем создание проекта
            Assert.IsInstanceOfType(projectData.ViewData.Model, typeof(IEnumerable <IProject>));
            var projects = projectData.ViewData.Model as IEnumerable <IProject>;
            var project  = projects.SingleOrDefault(p => p.Name == projectName);
            Assert.IsNotNull(project);

            // изменяем проект
            kanbanController = Base.GetController <KanbanController>();
            kanbanController.SetProject(task.BoardId, task.Id, project.Id);

            // переназначение
            ParticipantController participantController = Base.GetController <ParticipantController>();
            collection.Clear();
            collection["participant-id"] = user1.Id.ToString();
            participantController.Tasks(boardId, user0.Id, collection);
            collection["participant-id"] = user2.Id.ToString();
            participantController.Tasks(boardId, user0.Id, collection);
            // удаление
            kanbanController = Base.GetController <KanbanController>();
            kanbanController.DeleteTask(task2.Id, task2.BoardId);
            kanbanController.DeleteTask(task.Id, task.BoardId);

            // проверяем удаление
            kanbanController = Base.GetController <KanbanController>();
            kanbanController.Index(boardId);
            kanbanController = Base.GetController <KanbanController>();
            collection.Clear();
            PartialViewResult kanban = kanbanController.Kanban(boardId, collection);
            Assert.IsInstanceOfType(kanban.ViewData["Tasks"], typeof(IEnumerable <ITask>));
            IEnumerable <ITask> boardTasks = kanban.ViewData["Tasks"] as IEnumerable <ITask>;
            ITask deletedTask = boardTasks.FirstOrDefault(t => t.Id == task.Id);
            Assert.IsNull(deletedTask);

            // Проверка попадания в журнал ошибок и предупреждений
            var logController = Base.GetController <LogController>();
            var logData       = (ViewResultBase)logController.Items(boardId, null);

            Assert.IsInstanceOfType(logData.ViewData.Model, typeof(IEnumerable <IEventHistory>));
            var logs        = logData.ViewData.Model as IEnumerable <IEventHistory>;
            var boardEvents = logs.Where(p => p.BoardId == boardId);
            Assert.AreNotEqual(boardEvents.Count(), 0);

            Assert.AreNotEqual(boardEvents.Count(e => (e.EventType & EventType.CreateTask) == EventType.CreateTask), 0);
            Assert.AreNotEqual(boardEvents.Count(e => (e.EventType & EventType.Delete) == EventType.Delete), 0);
            Assert.AreNotEqual(boardEvents.Count(e => (e.EventType & EventType.Update) == EventType.Update), 0);
            Assert.AreNotEqual(boardEvents.Count(e => (e.EventType & EventType.TaskColorChanged) == EventType.TaskColorChanged), 0);
            Assert.AreNotEqual(boardEvents.Count(e => (e.EventType & EventType.TaskAssigned) == EventType.TaskAssigned), 0);
            Assert.AreNotEqual(boardEvents.Count(e => (e.EventType & EventType.ProjectChanged) == EventType.ProjectChanged), 0);
            Assert.AreNotEqual(boardEvents.Count(e => (e.EventType & EventType.PlaningTimeChanged) == EventType.PlaningTimeChanged), 0);


            #endregion

            #region Удаление досок
            boardsController.Dispose();
            boardsController = Base.GetController <BoardsController>();
            PartialViewResult partialResult = boardsController.List(null);
            Assert.IsInstanceOfType(partialResult.Model, typeof(List <IBoard>));
            foreach (IBoard item in partialResult.Model as List <IBoard> )
            {
                boardsController = Base.GetController <BoardsController>();
                boardsController.Delete(item.Id);
                try
                {
                    board = boardsController.Utility.Boards.Get(item.Id);
                    Assert.IsNull(board);
                }
                catch (Exception ex)
                {
                    Assert.IsInstanceOfType(ex, typeof(AccessDeniedException));
                }
            }
            #endregion

            boardsController.Utility.Users.Delete(Email1);
            Assert.IsNull(boardsController.Utility.Users.Get(Email1));
        }