Exemple #1
0
        public void Intg_AddSessionForProjectUserByCoStarter_SessionBeforeLatestTime_Faild()
        {
            SetupOneUserOneProjectDb();
            var hub = new CoStartHub();

            var session = new WorkSession
            {
                StartTime = new DateTime(2012, 2, 2, 0, 0, 0),
                EndTime = new DateTime(2012, 2, 2, 1, 0, 0),
            };
            hub.AddSessionForProjectUserByCoStarter(1, "*****@*****.**", session);
        }
Exemple #2
0
        public void Intg_AddSessionForProjectUserByCoStarter_SessionAfterLatestTime_Success()
        {
            SetupOneUserOneProjectDb();
            var hub = new CoStartHub();
            var endTime = new DateTime(2012, 2, 2, 1, 15, 0);
            var session = new WorkSession
            {
                StartTime = new DateTime(2012, 2, 2, 1, 0, 0),
                EndTime = endTime,
            };
            hub.AddSessionForProjectUserByCoStarter(1, "*****@*****.**", session);
            var dbcontext = new CoStartDbContext();
            var sessionCreated = dbcontext.WorkSessions.Single(x => x.EndTime == new DateTime(2012, 2, 2, 1, 15, 0));
            Assert.AreEqual(1, sessionCreated.ProjectId);
            Assert.AreEqual(1, sessionCreated.UserId);

            var projectEnroll = dbcontext.ProjectUserEnrollments.Where(x => x.ProjectId == 1 && x.UserId == 1).Single();
            Assert.AreEqual(endTime, projectEnroll.LatestReportTime);
        }
Exemple #3
0
        public void AddSessionForProjectUserByCoStarter(long projectId, string userEmail, WorkSession session)
        {
            var project = GetProjectWithSession(projectId);
            var normEmail = userEmail.ToLower().Trim();
            var user = dbContext.Users.Single(x => x.Email == normEmail);
            var projectUserEnroll =
                DbContext.ProjectUserEnrollments.Single(enroll => user.Id == enroll.UserId && enroll.ProjectId == project.Id);

            if (IsSessionValid(session, projectUserEnroll))
            {
                if (session.EndTime > projectUserEnroll.LatestReportTime)
                {
                    projectUserEnroll.LatestReportTime = session.EndTime;
                }
                MergeOrCreateSession(session, project, user);
                DbContext.SaveChanges();
            }
            else
            {
                throw new CoStartException("Not a valid session");
            }
        }
Exemple #4
0
 public virtual void ReportSession(WorkSession session)
 {
     throw new System.NotImplementedException();
 }
Exemple #5
0
 public virtual void OwnerUpdateSession(WorkSession session)
 {
     throw new System.NotImplementedException();
 }
Exemple #6
0
        private static void SetupOneUserOneProjectDb()
        {
            var dbcontext = new CoStartDbContext();
            dbcontext.Projects.Add(new Project
            {
                Id = 1,
                Name = "Test1's project1",
                Url = "http://*****:*****@hgggmail.com",
            });
            dbcontext.Roles.Add(new Role
            {
                Id = 1,
                Name = "Collaborator"
            });

            dbcontext.ProjectUserEnrollments.Add(new ProjectUserEnrollment
            {
                Id = 1,
                ProjectId = 1,
                UserId = 1,
                LatestReportTime = new DateTime(2012, 2, 2, 1, 0, 0),
                RoleId = 1,
            });

            var session = new WorkSession
            {
                StartTime = new DateTime(2012, 2, 2, 0, 0, 0),
                EndTime = new DateTime(2012, 2, 2, 1, 0, 0),
                UserId = 1,
                ProjectId = 1,

            };
            dbcontext.WorkSessions.Add(session);
            dbcontext.SaveChanges();
        }
Exemple #7
0
 public void UpdateSession(WorkSession session)
 {
     AuthenticateUser();
     var originalSession = DbContext.WorkSessions.Find(session.Id);
     DbContext.Entry(originalSession).CurrentValues.SetValues(session);
     DbContext.SaveChanges();
 }
Exemple #8
0
 private void MergeOrCreateSession(WorkSession session, Project project, User user)
 {
     var lastSession = project.WorkSessions.Where(x => x.EndTime == session.StartTime && x.UserId == user.Id).SingleOrDefault();
     if (lastSession == null)
     {
         session.ProjectId = project.Id;
         session.UserId = user.Id;
         DbContext.WorkSessions.Add(session);
     }
     else
     {
         lastSession.EndTime = session.EndTime;
     }
 }
Exemple #9
0
 private bool IsSessionValid(WorkSession session, ProjectUserEnrollment enroll)
 {
     var span = session.EndTime - session.StartTime;
     return (session.StartTime >= enroll.LatestReportTime)
         && span.TotalMinutes < 30 && session.EndTime <DateTime.Now;
 }
Exemple #10
0
        public static async void AddSessionForProjectUser(string serviceUrl, string userEmail, WorkSession session)
        {
            var CoStartHubName = "costart";

            var connection = new HubConnection(serviceUrl);
            var proxy = connection.CreateProxy(CoStartHubName);
            connection.Start().Wait();
            try
            {

                await proxy.Invoke("addSessionForProjectUserByCoStarter", 1, userEmail, session);
            }
            catch (Exception ex)
            {
                throw new CoStartException("Failed to report time");
            }          
        }