public void CreateProjectGoalWithoutObjectivesThrowsException()
 {
     var pm = new ProjectManager { Session = _embeddedDocStore.OpenSession() };
     var goal = new Goal("Big New Goal", null, _existingUser.Username);
     const string exceptionMessage = "Goals must contain associated objectives.";
     Assert.That(() => pm.AddGoalToProject(_existingProject.Name, goal, _existingUser.Username), Throws.ArgumentException.With.Message.EqualTo(exceptionMessage));
 }
 public void CreateProjectGoalUserNotInProjectThrowsException()
 {
     var pm = new ProjectManager { Session = _embeddedDocStore.OpenSession() };
     var objectives = new List<Objective> { new Objective("Dancing", "Do A Dance") };
     var goal = new Goal("Big New Goal", objectives, _existingUserNotInProject.Username);
     const string exceptionMessage = "existingUserNotInProject is not authorised to edit Project existing.";
     Assert.That(() => pm.AddGoalToProject(_existingProject.Name, goal, _existingUserNotInProject.Username), Throws.ArgumentException.With.Message.EqualTo(exceptionMessage));
 }
 public void CreateProjectGoalProjectNotActiveThrowsException()
 {
     var pm = new ProjectManager { Session = _embeddedDocStore.OpenSession() };
     var objectives = new List<Objective> { new Objective("Dancing", "Do A Dance") };
     var goal = new Goal("Big New Goal", objectives, _existingUser.Username);
     var exceptionMessage = string.Format("Cannot add stream to project with status of {0}.", _existingProjectNotActive.Status);
     Assert.That(() => pm.AddGoalToProject(_existingProjectNotActive.Name, goal, _existingUser.Username), Throws.ArgumentException.With.Message.EqualTo(exceptionMessage));
 }
 public void CreateProjectGoalProjectNameNotFoundThrowsException()
 {
     var pm = new ProjectManager { Session = _embeddedDocStore.OpenSession() };
     var objectives = new List<Objective> { new Objective("Dancing", "Do A Dance") };
     var goal = new Goal("Big New Goal", objectives, _existingUser.Username);
     const string exceptionMessage = "Could not find Project notarealproject.";
     Assert.That(() => pm.AddGoalToProject("notarealproject", goal, _existingUser.Username), Throws.ArgumentException.With.Message.EqualTo(exceptionMessage));
 }
 public void AddGoalToProject(string projectName, Goal goal, string username)
 {
     var project = Session.Query<Project>().Where(p => p.Name == projectName).FirstOrDefault();
     ValidateProjectAndUser(projectName, project, username);
     if (project.Status != Status.Active)
         throw new ArgumentException(string.Format("Cannot add stream to project with status of {0}.", project.Status));
     if (goal.Objectives == null || goal.Objectives.Count() == 0)
         throw new ArgumentException("Goals must contain associated objectives.");
     project.Goals.Add(goal);
     Session.SaveChanges();
 }
 public void CreateProjectGoalWithObjectivesSuccess()
 {
     var pm = new ProjectManager { Session = _embeddedDocStore.OpenSession() };
     var objectives = new List<Objective> { new Objective("Dancing", "Do A Dance") };
     var goal = new Goal("Big New Goal", objectives, _existingUser.Username);
     pm.AddGoalToProject(_existingProject.Name, goal, _existingUser.Username);
     var session = _embeddedDocStore.OpenSession();
     var project = session.Query<Project>().Where(p => p.Name == _existingProject.Name).First();
     Assert.That(project.Goals.Count(), Is.GreaterThan(0));
     Assert.That(project.Goals[0].Status, Is.EqualTo(Status.Active));
     Assert.That(project.Goals[0].CreatedBy, Is.EqualTo(_existingUser.Username));
     Assert.That(project.Goals[0].Objectives.Count(), Is.GreaterThan(0));
     Assert.That(project.Goals[0].Objectives[0].Name, Is.EqualTo(objectives[0].Name));
     Assert.That(project.Goals[0].Objectives[0].Description, Is.EqualTo(objectives[0].Description));
     Assert.That(project.Goals[0].Objectives[0].PercentageComplete, Is.EqualTo(0));
 }