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); }
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); }
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"); } }
public virtual void ReportSession(WorkSession session) { throw new System.NotImplementedException(); }
public virtual void OwnerUpdateSession(WorkSession session) { throw new System.NotImplementedException(); }
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(); }
public void UpdateSession(WorkSession session) { AuthenticateUser(); var originalSession = DbContext.WorkSessions.Find(session.Id); DbContext.Entry(originalSession).CurrentValues.SetValues(session); DbContext.SaveChanges(); }
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; } }
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; }
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"); } }