Exemple #1
0
        public ActionResult Sync(string teamId
                                 , string projectId
                                 , string memberId
                                 , string tag
                                 , string taskKey
                                 , string taskId
                                 , string changes
                                 , string by
                                 , string sorts)
        {
            var a             = this.Context.Current;
            var team          = this.GetTeamOfCurrentAccount(teamId);
            var project       = string.IsNullOrWhiteSpace(projectId) ? null : this.GetProject(team, projectId);
            var member        = string.IsNullOrWhiteSpace(memberId) ? null : this.GetMember(team, memberId);
            var currentMember = this.GetCurrentMember(team);

            tag = (tag ?? string.Empty).Trim();

            return(Json(this.Sync(changes, by, sorts
                                  , o => this.ApplyOtherChanges(team, o)
                                  , () =>
            {
                var t = new Teams.Task(currentMember, team);

                #region 默认值设置
                if (project != null)
                {
                    t.AddToProject(project);
                    if (this._log.IsInfoEnabled)
                    {
                        this._log.InfoFormat("默认为新任务设置项目#{0}|{1}", project.ID, project.Name);
                    }
                }
                if (member != null)
                {
                    t.AssignTo(member);
                    if (this._log.IsInfoEnabled)
                    {
                        this._log.InfoFormat("默认将新任务分配给#{0}|{1}", member.ID, member.Name);
                    }
                }
                if (!string.IsNullOrWhiteSpace(tag))
                {
                    t.AddTag(tag);
                    if (this._log.IsInfoEnabled)
                    {
                        this._log.InfoFormat("默认为新任务设置标签#{0}", tag);
                    }
                }
                #endregion

                return t;
            }
                                  , (o, c) =>
            {
                var task = o as Teams.Task;

                //团队成员可发表评论
                if (!string.IsNullOrWhiteSpace(c.Name) && //delete变更没有name
                    c.Name.Equals("comments", StringComparison.InvariantCultureIgnoreCase))
                {
                    Assert.IsTrue(this.IsTeamOfCurrentAccount(team));
                }
                else
                {
                    //任务创建者或执行人
                    Assert.IsTrue(this.IsCreator(team, task, a) || this.IsAssignee(task, currentMember));
                }
            }
                                  //是否是属于个人的排序
                                  , () => project == null &&
                                  string.IsNullOrWhiteSpace(memberId) &&
                                  string.IsNullOrWhiteSpace(tag) &&
                                  string.IsNullOrWhiteSpace(taskKey) &&
                                  string.IsNullOrWhiteSpace(taskId)
                                  //个人排序key
                                  , o => this.GetSortKey(team, o)
                                  , o =>
            {
                #region 保存非个人排序数据
                //HACK:若有memberId则认为是查看member视图,此时不对排序数据做保存
                if (project != null)
                {
                    //存储至项目排序数据
                    project.Settings[by] = o;
                    this._teamService.Update(team);
                    if (this._log.IsDebugEnabled)
                    {
                        this._log.DebugFormat("将{0}排序数据保存至项目#{1}:{2}", by, project.ID, o);
                    }
                }
                else if (!string.IsNullOrWhiteSpace(tag))
                {
                    team.Settings[this.GetSortKey(by, tag)] = o;
                    this._teamService.Update(team);
                    if (this._log.IsDebugEnabled)
                    {
                        this._log.DebugFormat("将{0}|{1}排序数据保存至团队#{2}:{3}", by, tag, team.ID, o);
                    }
                }
                #endregion
            })));
        }
Exemple #2
0
        public void ClearTaskAssigneeAfterTeamMemberRemovedTest()
        {
            var account = CreateAccount();
            var team = CreateSampleTeam();
            var member = AddSampleMemberToTeam(team);
            var task = new Task(member, team);
            task.AssignTo(member);
            this._teamTaskService.Create(task);
            this.Evict(member);
            this.Evict(team);
            this.Evict(task);
            team = _teamService.GetTeam(team.ID);
            member = team.GetMember(member.ID);
            task = this._teamTaskService.GetTask(task.ID);
            Assert.IsNotNull(task);
            Assert.IsNotNull(task.AssigneeId);
            Assert.AreEqual(member.ID, task.AssigneeId.Value);

            this._teamService.RemoveMember(member, team);
            this.Evict(member);
            this.Evict(team);
            this.Evict(task);
            team = _teamService.GetTeam(team.ID);
            member = team.GetMember(member.ID);
            task = this._teamTaskService.GetTask(task.ID);
            Assert.IsNull(member);
            Assert.IsNotNull(task);
            Assert.IsNull(task.AssigneeId);
        }
Exemple #3
0
        public void UpdateTeamTask()
        {
            var a = this.CreateAccount();
            var team = CreateSampleTeam();
            var creatorMember = AddSampleMemberToTeam(a, team);
            var member = AddSampleMemberToTeam(team);
            var project = AddSampleProjectToTeam(team);
            var task = new Task(creatorMember, team);
            task.AssignTo(member);
            task.AddToProject(project);
            this._teamTaskService.Create(task);

            this.Evict(task);

            var task2 = this._teamTaskService.GetTask(task.ID);
            var member2 = AddSampleMemberToTeam(team);

            task2.AssignTo(member2);
            task2.RemoveFromProject(project);

            Assert.AreEqual(member2.ID, task2.AssigneeId.Value);
            Assert.AreEqual(0, task2.ProjectIds.Count());

            this._teamTaskService.Update(task2);
            this.Evict(task2);
            var task3 = this._teamTaskService.GetTask(task2.ID);

            Assert.AreEqual(task2.Subject, task3.Subject);
            Assert.AreEqual(task2.Body, task3.Body);
            Assert.AreEqual(task2.Priority, task3.Priority);
            Assert.AreEqual(task2.DueTime, task3.DueTime);
            Assert.AreEqual(task2.IsCompleted, task3.IsCompleted);
            Assert.AreEqual(task2.CreatorMemberId, task3.CreatorMemberId);

            Assert.AreEqual(task2.TeamId, task3.TeamId);
            Assert.AreEqual(task2.AssigneeId.Value, task3.AssigneeId.Value);
            Assert.AreEqual(task2.ProjectIds.Count(), task3.ProjectIds.Count());

            this.Evict(task3);

            var task4 = this._teamTaskService.GetTask(task3.ID);

            task4.RemoveAssignee();

            Assert.AreEqual(null, task4.AssigneeId);

            this._teamTaskService.Update(task4);
            this.Evict(task4);
            var task5 = this._teamTaskService.GetTask(task4.ID);

            Assert.AreEqual(task4.AssigneeId, task5.AssigneeId);
        }
Exemple #4
0
        public void RemoveTaskAssigneeTest()
        {
            var account = this.CreateAccount();
            var team = CreateSampleTeam();
            var creatorMember = AddSampleMemberToTeam(account, team);
            var member1 = AddSampleMemberToTeam(team);
            var member2 = AddSampleMemberToTeam(team);
            var task = new Task(creatorMember, team);
            task.AssignTo(member1);
            this._teamTaskService.Create(task);
            this.Evict(task);
            task = this._teamTaskService.GetTask(task.ID);
            Assert.IsNotNull(task.AssigneeId);
            Assert.AreEqual(member1.ID, task.AssigneeId.Value);

            task.AssignTo(member2);
            this._teamTaskService.Update(task);
            this.Evict(task);
            task = this._teamTaskService.GetTask(task.ID);
            Assert.IsNotNull(task.AssigneeId);
            Assert.AreEqual(member2.ID, task.AssigneeId.Value);

            task.RemoveAssignee();
            this._teamTaskService.Update(task);
            this.Evict(task);
            task = this._teamTaskService.GetTask(task.ID);
            Assert.IsNull(task.AssigneeId);
        }
Exemple #5
0
        public void GetTasksTest()
        {
            var account1 = this.CreateAccount();
            var account2 = this.CreateAccount();
            var team = CreateSampleTeam();
            var member1 = AddSampleMemberToTeam(account1, team);
            var member2 = AddSampleMemberToTeam(account2, team);
            var project1 = AddSampleProjectToTeam(team);
            var project2 = AddSampleProjectToTeam(team);

            var teamTask1 = new Task(member1, team);
            teamTask1.AssignTo(member2);
            teamTask1.MarkAsCompleted();
            teamTask1.AddToProject(project1);

            var teamTask2 = new Task(member2, team);
            teamTask2.AssignTo(member1);
            teamTask2.MarkAsCompleted();
            teamTask2.AddToProject(project2);

            var teamTask3 = new Task(member1, team);
            teamTask3.AssignTo(member1);
            teamTask3.AddToProject(project1);

            this._teamTaskService.Create(teamTask1);
            this._teamTaskService.Create(teamTask2);
            this._teamTaskService.Create(teamTask3);

            var member1Tasks = this._teamTaskService.GetTasksByMember(member1);
            Assert.AreEqual(2, member1Tasks.Count());
            Assert.IsTrue(member1Tasks.Any(x => x.ID == teamTask2.ID));
            Assert.IsTrue(member1Tasks.Any(x => x.ID == teamTask3.ID));

            var member2Tasks = this._teamTaskService.GetTasksByMember(member2);
            Assert.AreEqual(1, member2Tasks.Count());
            Assert.IsTrue(member2Tasks.Any(x => x.ID == teamTask1.ID));

            var incompletedMember1Tasks = this._teamTaskService.GetIncompletedTasksByMember(member1);
            Assert.AreEqual(1, incompletedMember1Tasks.Count());
            Assert.IsTrue(incompletedMember1Tasks.Any(x => x.ID == teamTask3.ID));

            var incompletedMember2Tasks = this._teamTaskService.GetIncompletedTasksByMember(member2);
            Assert.AreEqual(0, incompletedMember2Tasks.Count());

            var teamTasks1OfCreatorOrAssignee = this._teamTaskService.GetTasksByAccount(team, account1);
            Assert.AreEqual(3, teamTasks1OfCreatorOrAssignee.Count());
            Assert.IsTrue(teamTasks1OfCreatorOrAssignee.Any(x => x.ID == teamTask1.ID));
            Assert.IsTrue(teamTasks1OfCreatorOrAssignee.Any(x => x.ID == teamTask2.ID));
            Assert.IsTrue(teamTasks1OfCreatorOrAssignee.Any(x => x.ID == teamTask3.ID));

            var teamTasks2OfCreatorOrAssignee = this._teamTaskService.GetTasksByAccount(team, account2);
            Assert.AreEqual(2, teamTasks2OfCreatorOrAssignee.Count());
            Assert.IsTrue(teamTasks2OfCreatorOrAssignee.Any(x => x.ID == teamTask1.ID));
            Assert.IsTrue(teamTasks2OfCreatorOrAssignee.Any(x => x.ID == teamTask2.ID));

            var incompletedTeamTasks1OfCreatorOrAssignee = this._teamTaskService.GetIncompletedTasksByAccount(team, account1);
            Assert.AreEqual(1, incompletedTeamTasks1OfCreatorOrAssignee.Count());
            Assert.IsTrue(incompletedTeamTasks1OfCreatorOrAssignee.Any(x => x.ID == teamTask3.ID));

            var incompletedTeamTasks2OfCreatorOrAssignee = this._teamTaskService.GetIncompletedTasksByAccount(team, account2);
            Assert.AreEqual(0, incompletedTeamTasks2OfCreatorOrAssignee.Count());

            var project1Tasks = this._teamTaskService.GetTasksByProject(project1);
            Assert.AreEqual(2, project1Tasks.Count());
            Assert.IsTrue(project1Tasks.Any(x => x.ID == teamTask1.ID));
            Assert.IsTrue(project1Tasks.Any(x => x.ID == teamTask3.ID));

            var project2Tasks = this._teamTaskService.GetTasksByProject(project2);
            Assert.AreEqual(1, project2Tasks.Count());
            Assert.IsTrue(project2Tasks.Any(x => x.ID == teamTask2.ID));

            var project1IncompletedTasks = this._teamTaskService.GetIncompletedTasksByProject(project1);
            Assert.AreEqual(1, project1IncompletedTasks.Count());
            Assert.IsTrue(project1IncompletedTasks.Any(x => x.ID == teamTask3.ID));

            var project2IncompletedTasks = this._teamTaskService.GetIncompletedTasksByProject(project2);
            Assert.AreEqual(0, project2IncompletedTasks.Count());
        }
Exemple #6
0
        public void DeleteTeamTask()
        {
            var a = this.CreateAccount();
            var team = CreateSampleTeam();
            var member = AddSampleMemberToTeam(team);
            var project = AddSampleProjectToTeam(team);
            var task = new Task(member, team);
            task.AssignTo(member);
            task.AddToProject(project);
            this._teamTaskService.Create(task);

            this.Evict(task);

            var task2 = this._teamTaskService.GetTask(task.ID);

            _teamTaskService.Delete(task2);

            this.Evict(task2);

            var task3 = this._teamTaskService.GetTask(task2.ID);

            Assert.IsNull(task3);
        }
Exemple #7
0
        public void CreateTeamTask()
        {
            var a = this.CreateAccount();
            var team = CreateSampleTeam();
            var member = AddSampleMemberToTeam(team);
            var project = AddSampleProjectToTeam(team);
            var task = new Task(member, team);
            task.AssignTo(member);
            task.AddToProject(project);

            Assert.AreNotEqual(DateTime.MinValue, task.CreateTime);
            Assert.AreNotEqual(DateTime.MinValue, task.LastUpdateTime);

            Assert.AreEqual(member.ID, task.CreatorMemberId);
            Assert.AreEqual(project.ID, task.ProjectIds.First().ID);
            Assert.AreEqual(team.ID, task.TeamId);
            Assert.AreEqual(1, task.ProjectIds.Count());
            Assert.AreEqual(project.ID, task.ProjectIds.First().ID);

            this._teamTaskService.Create(task);
            Assert.Greater(task.ID, 0);

            this.Evict(task);

            var task2 = this._teamTaskService.GetTask(task.ID);

            Assert.AreEqual(task.Subject, task2.Subject);
            Assert.AreEqual(task.Body, task2.Body);
            Assert.AreEqual(task.Priority, task2.Priority);
            Assert.AreEqual(task.DueTime, task2.DueTime);
            Assert.AreEqual(task.IsCompleted, task2.IsCompleted);
            Assert.AreEqual(task.CreatorMemberId, task2.CreatorMemberId);

            Assert.AreEqual(task.TeamId, task2.TeamId);
            Assert.AreEqual(task.AssigneeId.Value, task2.AssigneeId.Value);
            Assert.AreEqual(task.ProjectIds.Count(), task2.ProjectIds.Count());
            Assert.AreEqual(task.ProjectIds.First().ID, task2.ProjectIds.First().ID);
        }