Exemple #1
0
        public void SwitchingProjectShouldSetActiveProject()
        {
            var model = new ProjectModel();

            model.AddProject("Fairy Tales");
            model.AddProject("Troy");

            Assert.AreEqual("Troy", model.GetActiveProject().Name);
            model.SetActiveProject("Fairy Tales");
            Assert.AreEqual("Fairy Tales", model.GetActiveProject().Name);
        }
Exemple #2
0
        public void ActiveProjectShouldBeSetAfterPresent()
        {
            var view = new NullView();

            var model = new ProjectModel();

            model.AddProject("Fairy Tales");
            model.AddProject("Troy");

            var presenter = new BacklogPresenter(view, model);

            presenter.Present();
            Assert.AreEqual("Troy", model.GetActiveProject().Name);
            Assert.AreEqual(view.ActiveProject.Name, model.GetActiveProject().Name);
        }
Exemple #3
0
        public void ShouldBeAbleToSaveProjectWithStatusChanges()
        {
            var model = new ProjectModel
            {
                PersistanceDirectory = ProjectDir
            };

            model.AddProject("Fairy Tales");
            model.AddStory("FT", "First");
            var active = model.GetActiveProject();

            active.Stories[0].Start(DateTime.Today);
            active.Stories[0].Importance = 42;
            active.Stories[0].MarkAsDone(DateTime.Today);

            model.SaveActiveProject();

            model = new ProjectModel
            {
                PersistanceDirectory = ProjectDir
            };
            model.Load();
            active = model.GetActiveProject();
            Assert.AreEqual("Fairy Tales", active.Name);
            Assert.AreEqual("FT", active.Abbreviation);
            Assert.AreEqual(1, active.Stories.Length);
            Assert.IsTrue(active.Stories[0].IsDone);
        }
Exemple #4
0
        public void ModelShouldKeepProjectNamesUnique()
        {
            var model = new ProjectModel();

            try
            {
                model.AddProject("Fairy Tales");
                model.AddProject("Fairy Tales");
            }
            catch (ProjectAllreadyExistsException paee)
            {
                Assert.AreEqual(
                    "A project with the name <Fairy Tales> allready exists. Please choose another name for your project.",
                    paee.Message);
            }
        }
Exemple #5
0
        public void ModelShouldBeAbleToStoreStoryDataWhenSaving()
        {
            const string projectName = "Fairy Tales";

            var model = new ProjectModel();

            model.AddProject(projectName);
            model.AddStory("FT", "Model should be able to store story data when saving");

            model.PersistanceDirectory = ProjectDir;
            model.SaveActiveProject();

            var file = new FileInfo(ProjectDir + "/" + projectName + "/FT.xml");

            var serializer = new XmlSerializer(typeof(Project));

            var reader      = new StreamReader(file.OpenRead());
            var fileContent = reader.ReadToEnd();

            reader.Close();

            var project             = model.GetProject("FT");
            var deserializedProject = (Project)serializer.Deserialize(new StringReader(fileContent));

            Assert.AreEqual(project.Name, deserializedProject.Name);
            Assert.AreEqual(project.Abbreviation, deserializedProject.Abbreviation);

            Assert.AreEqual(project.Stories.Length, deserializedProject.Stories.Length);
            for (var i = 0; i < project.Stories.Length; ++i)
            {
                Assert.AreEqual(project.Stories[i].Name, deserializedProject.Stories[i].Name);
                Assert.AreEqual(project.Stories[i].Abbreviation, deserializedProject.Stories[i].Abbreviation);
            }
        }
Exemple #6
0
        public void ModelShouldLoadProjects()
        {
            var model = new ProjectModel();

            model.AddProject("Fairy Tales");
            model.AddProject("Troy");

            model.PersistanceDirectory = ProjectDir;
            model.SaveActiveProject();
            model.SetActiveProject("Fairy Tales");
            model.SaveActiveProject();

            model = new ProjectModel {
                PersistanceDirectory = ProjectDir
            };
            model.Load();
            Project active = model.GetActiveProject();

            Assert.AreEqual("Troy", active.Name);
            Assert.IsNotNull(model.GetProject("FT"));
        }
Exemple #7
0
        public void ShouldNotShowCreateProjectControlsIfProjectsArePresent()
        {
            var view  = new NullView();
            var model = new ProjectModel();

            model.AddProject("My Project");

            var presenter = new BacklogPresenter(view, model);

            view.CreateProjectControlsVisible = false;
            presenter.Present();
            Assert.IsFalse(view.CreateProjectControlsVisible);
        }
Exemple #8
0
        public void ProjectsShouldBeSetAfterPresent()
        {
            var view = new NullView();

            var model = new ProjectModel();

            model.AddProject("Fairy Tales");

            var presenter = new BacklogPresenter(view, model);

            presenter.Present();
            Assert.AreEqual(1, model.ListProjects().Length);
        }
Exemple #9
0
        public void ModelShouldBeAbleToCreatePersistanceOutputFile()
        {
            var model = new ProjectModel();

            model.AddProject("Fairy Tales");

            model.PersistanceDirectory = ProjectDir;
            model.SaveActiveProject();

            var file = new FileInfo(ProjectDir + "/Fairy Tales/FT.xml");

            Assert.IsTrue(file.Exists);
        }
Exemple #10
0
        public void ShouldNotHideCreateProjectControlsIfVisibleAndProjectsPresent()
        {
            var view  = new NullView();
            var model = new ProjectModel();

            model.AddProject("My Project");

            var presenter = new BacklogPresenter(view, model);

            view.CreateProjectControlsVisible = true;
            presenter.Present();
            Assert.IsTrue(view.CreateProjectControlsVisible);
        }
Exemple #11
0
        public void StoriesCanBeRemovedFromAProject()
        {
            var model = new ProjectModel();

            model.AddProject("Fairy Tales");
            model.AddStory("FT", "Delete Story Story");

            Project fairyTales = model.GetProject("FT");
            Story   story      = fairyTales.Stories[0];

            model.Delete(fairyTales.Abbreviation, story);

            fairyTales = model.GetProject("FT");
            Assert.AreEqual(0, fairyTales.Stories.Length);
        }
Exemple #12
0
        public void ShouldConstraintStoryTitlesToXCharactersInStoryList()
        {
            var view  = new NullView();
            var model = new ProjectModel();

            model.AddProject("Fairy Tales");
            model.AddStory("FT", "A story with quite long title that should be abbreviated when presented.");
            var presenter = new BacklogPresenter(view, model, new TitleAbbreviator(35));

            presenter.Present();

            var story = view.ActiveProject.Stories[0];

            Assert.That(story.Name, Is.EqualTo("A story with quite long title that ..."));
        }
Exemple #13
0
        public void ModelShouldBeAbleToAddAProject()
        {
            var model = new ProjectModel();

            Project[] projects = model.ListProjects();
            Assert.AreEqual(0, projects.Length);

            model.AddProject("Fairy Tales");

            projects = model.ListProjects();
            Assert.AreEqual(1, projects.Length);

            Assert.AreEqual("Fairy Tales", projects[0].Name);
            Assert.AreEqual("FT", projects[0].Abbreviation);
        }
Exemple #14
0
        public void ModelShouldBeAbleToAddStoriesToDifferentProjects()
        {
            var model = new ProjectModel();

            model.AddProject("Fairy Tales");
            model.AddProject("Route Builder");

            model.AddStory("RB", "Add Route");
            model.AddStory("FT", "Add Stories To Different Projects");
            model.AddStory("RB", "Add Route Description");

            Project[] projects = model.ListProjects();

            Assert.AreEqual(2, projects.Length);

            Story[] stories = projects[0].Stories;
            Assert.AreEqual(1, stories.Length);
            Assert.AreEqual("FT-1", stories[0].Abbreviation);

            stories = projects[1].Stories;
            Assert.AreEqual(2, stories.Length);
            Assert.AreEqual("RB-1", stories[0].Abbreviation);
            Assert.AreEqual("RB-2", stories[1].Abbreviation);
        }
Exemple #15
0
        public void ModelShouldBeAbleToAddAStoryToAProject()
        {
            var model = new ProjectModel();

            model.AddProject("Fairy Tales");

            model.AddStory("FT", "Add Story Story");
            Project fairyTales = model.GetProject("FT");

            Story[] stories = fairyTales.Stories;
            Assert.AreEqual(1, stories.Length);

            Assert.AreEqual("FT-1", stories[0].Abbreviation);
            Assert.AreEqual("Add Story Story", stories[0].Name);
        }
Exemple #16
0
        public void ModelShouldNotAllowProjectNamesThatStartsWithDots()
        {
            var model = new ProjectModel();

            try
            {
                model.AddProject(".project");
            }
            catch (ProjectStartsWithDotException pswde)
            {
                Assert.AreEqual(
                    "Fairy Tales does not support project names that starts with a dot (.), please choose another.",
                    pswde.Message);
                Assert.AreEqual(0, model.ListProjects().Length);
            }
        }
Exemple #17
0
        public void ShouldOnlyFilterSpecifiedStories()
        {
            var model = new ProjectModel();

            model.AddProject("Fairy Tales");
            model.AddStory("FT", "Don't Filter Me!");

            var filter = new StoryFilter();

            filter.AddStoryFilter <StoryDone>();

            model.AddStoryFilter(filter);
            var activeProject = model.GetActiveProject();

            Assert.AreEqual(1, activeProject.Stories.Length);
        }
Exemple #18
0
        public void ShouldBeAbleToFilterOutStories()
        {
            var model = new ProjectModel();

            model.AddProject("Fairy Tales");
            model.AddStory("FT", "Filter Me!");

            var filter = new StoryFilter();

            filter.AddStoryFilter <StoryNotStarted>();

            model.AddStoryFilter(filter);
            var activeProject = model.GetActiveProject();

            Assert.AreEqual(0, activeProject.Stories.Length);
        }
Exemple #19
0
        public void StoryNamesShouldBeUpdateable()
        {
            var model = new ProjectModel();

            model.AddProject("Fairy Tales");
            model.AddStory("FT", "Foo Bar Story");

            Project fairyTales = model.GetProject("FT");
            Story   story      = fairyTales.Stories[0];

            story.Name = "Update Story Story";

            model.Update(fairyTales.Abbreviation, story);

            story = fairyTales.Stories[0];
            Assert.AreEqual("Update Story Story", story.Name);
        }
Exemple #20
0
        public void ModelShouldBeAbleToLoadProjectsFromPersistance()
        {
            var model = new ProjectModel {
                PersistanceDirectory = ProjectDir
            };

            model.AddProject("Fairy Tales");
            model.AddStory("FT", "Load from persistance story");
            model.SaveActiveProject();

            model = new ProjectModel {
                PersistanceDirectory = ProjectDir
            };
            model.Load();

            var project = model.GetActiveProject();

            Assert.AreEqual("Fairy Tales", project.Name);
            Assert.AreEqual(1, project.Stories.Length);
        }
Exemple #21
0
        public void ModelShouldTrunkateFileWhenSerailizeing()
        {
            var model = new ProjectModel();

            model.AddProject("Fairy Tales");
            model.AddStory("FT", "Delete Story");

            model.PersistanceDirectory = ProjectDir;
            model.SaveActiveProject();

            var active = model.GetActiveProject();

            active.Delete("FT-1");

            model.SaveActiveProject();

            model.Load();
            active = model.GetActiveProject();
            Assert.AreEqual(0, active.Stories.Length);
        }
Exemple #22
0
        public void ShouldNotFilterOnSave()
        {
            var model = new ProjectModel();

            model.AddProject("Fairy Tales");
            model.AddStory("FT", "Not Started");
            var filter = new StoryFilter();

            filter.AddStoryFilter <StoryNotStarted>();
            model.AddStoryFilter(filter);

            model.PersistanceDirectory = ProjectDir;
            model.SaveActiveProject();

            model = new ProjectModel {
                PersistanceDirectory = ProjectDir
            };
            model.Load();

            var active = model.GetActiveProject();

            Assert.AreEqual(1, active.Stories.Length);
        }