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 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 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 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 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));
        }