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