PageRenderTime 30ms CodeModel.GetById 7ms RepoModel.GetById 0ms app.codeStats 0ms

/tags/build-1.0.0.29307/src/test/ScrumSprintMonitor.WorkItemMonitor.Test/TeamMembersListViewModelSpecs.cs

#
C# | 455 lines | 327 code | 119 blank | 9 comment | 2 complexity | 4954b1f5b261c475fb3bee4524ce5d69 MD5 | raw file
Possible License(s): Apache-2.0, BSD-3-Clause, CC-BY-3.0
  1. // ReSharper disable InconsistentNaming
  2. namespace ScrumSprintMonitor.WorkItemMonitor.Test
  3. {
  4. #region #using Directives
  5. using System;
  6. using System.Collections.Generic;
  7. using System.ComponentModel;
  8. using System.Linq;
  9. using Design;
  10. using Implementation;
  11. using Infrastructure;
  12. using Infrastructure.Configuration;
  13. using MbUnit.Framework;
  14. using Microsoft.Practices.ServiceLocation;
  15. using Modules.WorkItemMonitor.ViewModels;
  16. using Ninject.Core;
  17. using Rhino.Mocks;
  18. using Rhino.Mocks.Interfaces;
  19. using UI.Wpf.ViewModels;
  20. using UnitTest.Base;
  21. #endregion
  22. public class TeamMembersListViewModelSpecs
  23. {
  24. #region Nested type: base_team_members_list_viewmodel_context_spec
  25. public abstract class base_team_members_list_viewmodel_context_spec : ContextInstanceSpecification<TeamMembersListViewModel>
  26. {
  27. #region Overrides of ContextInstanceSpecification<TeamMembersListViewModel>
  28. private IKernel kernel;
  29. private IPresentationConfiguration presentationConfiguration;
  30. private IRemainingWorkStatusEvaluator remainingWorkStatusEvaluator;
  31. protected IServiceLocator serviceLocator;
  32. protected ISprint sprint;
  33. protected override void Establish_context()
  34. {
  35. base.Establish_context();
  36. SystemTime.Now = () => new DateTime(2009, 1, 29, 11, 0, 0, DateTimeKind.Utc);
  37. NinjectTestContainerAbstraction.AssignModules(typeof(NinjectTestModule));
  38. this.serviceLocator = NinjectTestContainerAbstraction.EnsureContainerIsSetUp();
  39. this.kernel = ((NinjectTestContainerAbstraction) this.serviceLocator).Instance;
  40. this.sprint = this.serviceLocator.GetInstance<ISprint>();
  41. this.remainingWorkStatusEvaluator = MockRepository.GenerateStub<IRemainingWorkStatusEvaluator>();
  42. this.presentationConfiguration = MockRepository.GenerateStub<IPresentationConfiguration>();
  43. TestAssetLibrary.ConfigureSprintWithMockData(this.sprint, this.serviceLocator);
  44. }
  45. protected override TeamMembersListViewModel Create_subject_under_test()
  46. {
  47. return new TeamMembersListViewModel(this.serviceLocator, this.kernel, this.remainingWorkStatusEvaluator, this.presentationConfiguration);
  48. }
  49. protected override void Dispose_context()
  50. {
  51. base.Dispose_context();
  52. var disposable = this.serviceLocator as IDisposable;
  53. if (disposable != null)
  54. {
  55. disposable.Dispose();
  56. }
  57. }
  58. #endregion
  59. }
  60. #endregion
  61. #region Nested type: when_accessing_view_model_after_disposed
  62. [TestFixture]
  63. public class when_accessing_view_model_after_disposed : base_team_members_list_viewmodel_context_spec
  64. {
  65. private Action call;
  66. #region Overrides of ContextInstanceSpecification<TeamMembersListViewModel>
  67. protected override void Because()
  68. {
  69. base.Because();
  70. SUT.Dispose();
  71. ITeamMemberViewModel unassignedWork;
  72. this.call = () => unassignedWork = SUT.UnassignedWork;
  73. }
  74. #endregion
  75. [Test]
  76. [ExpectedException(typeof(ObjectDisposedException))]
  77. public void then_exception_should_be_raised()
  78. {
  79. this.call();
  80. }
  81. }
  82. #endregion
  83. #region Nested type: when_new_team_members_are_added
  84. [TestFixture]
  85. public class when_new_team_members_are_added : base_team_members_list_viewmodel_context_spec
  86. {
  87. private ITeamMemberInfoProvider teamMemberInfoProvider;
  88. #region Overrides of ContextInstanceSpecification<TeamMembersListViewModel>
  89. protected override void Establish_context()
  90. {
  91. base.Establish_context();
  92. this.teamMemberInfoProvider = TestAssetLibrary.CreateTeamMemberInfoProvider();
  93. var teamMembers = TestAssetLibrary.CreateTeamMembers(this.teamMemberInfoProvider, this.sprint.WorkItemStore.WorkItems);
  94. this.sprint.Stub(s => s.TeamMembers).Return(teamMembers);
  95. }
  96. protected override void Because()
  97. {
  98. AddTeamMember("Jesse");
  99. AddTeamMember("Matt");
  100. AddTeamMember("Samuel");
  101. AddTeamMember("Robert");
  102. AddTeamMember("Surya");
  103. AddTeamMember("Rolando");
  104. AddTeamMember("Rohanna");
  105. }
  106. private void AddTeamMember(string name)
  107. {
  108. this.sprint.TeamMembers.Add(new TeamMember(this.teamMemberInfoProvider.GetTeamMemberInformation(name), new IWorkItemAdapter[] {},
  109. new TeamMemberRemainingWorkload()));
  110. }
  111. #endregion
  112. [Test]
  113. //[WorkItem(3857)]
  114. public void then_NumberOfColumnsInGridView_should_be_3()
  115. {
  116. Assert.AreEqual(3, SUT.NumberOfColumnsInGridView);
  117. }
  118. }
  119. #endregion
  120. #region Nested type: when_processed_work_items_near_sprint_end
  121. [TestFixture]
  122. public class when_processed_work_items_near_sprint_end : base_team_members_list_viewmodel_context_spec
  123. {
  124. private IEventRaiser sprintEventRaiser;
  125. #region Overrides of ContextInstanceSpecification<TeamMembersListViewModel>
  126. protected override void Establish_context()
  127. {
  128. base.Establish_context();
  129. this.sprintEventRaiser = this.sprint.GetEventRaiser(x => x.PropertyChanged += null);
  130. var teamMembers = TestAssetLibrary.CreateTeamMembers(TestAssetLibrary.CreateTeamMemberInfoProvider(), this.sprint.WorkItemStore.WorkItems);
  131. this.sprint.Stub(s => s.TeamMembers).Return(teamMembers);
  132. }
  133. protected override void Initialize_subject_under_test()
  134. {
  135. base.Initialize_subject_under_test();
  136. // Initialize SUT by accessing a property
  137. int count = SUT.TeamMembersIncludingUnassigned.Count;
  138. }
  139. protected override void Because()
  140. {
  141. this.sprint.TeamMembers[0].RemainingWorkload.PotentialSprintHours = 1.0;
  142. this.sprint.TeamMembers[1].RemainingWorkload.PotentialSprintHours = 4.0;
  143. this.sprint.Stub(s => s.AvailableTime).Return(TimeSpan.FromHours(5.0)).Repeat.Any();
  144. this.sprintEventRaiser.Raise(this.sprint, new PropertyChangedEventArgs("AvailableTime"));
  145. }
  146. #endregion
  147. [Test]
  148. public void then_1st_team_member_should_be_roger()
  149. {
  150. Assert.AreEqual("Roger", SUT.TeamMembersIncludingUnassigned[0].DisplayName);
  151. }
  152. [Test]
  153. public void then_2nd_team_member_should_be_pedro()
  154. {
  155. Assert.AreEqual("Pedro", SUT.TeamMembersIncludingUnassigned[1].DisplayName);
  156. }
  157. }
  158. #endregion
  159. #region Nested type: when_team_member_has_no_more_work
  160. [TestFixture]
  161. public class when_team_member_has_no_more_work : base_team_members_list_viewmodel_context_spec
  162. {
  163. private int teamMembersCount;
  164. #region Overrides of ContextInstanceSpecification<TeamMembersListViewModel>
  165. protected override void Establish_context()
  166. {
  167. base.Establish_context();
  168. var teamMembers = TestAssetLibrary.CreateTeamMembers(TestAssetLibrary.CreateTeamMemberInfoProvider(), this.sprint.WorkItemStore.WorkItems);
  169. this.sprint.Stub(s => s.TeamMembers).Return(teamMembers);
  170. }
  171. protected override void Initialize_subject_under_test()
  172. {
  173. base.Initialize_subject_under_test();
  174. // Initialize SUT by accessing a property
  175. this.teamMembersCount = SUT.TeamMembersIncludingUnassigned.Count;
  176. }
  177. protected override void Because()
  178. {
  179. this.sprint.TeamMembers[0].AssignedWorkItems = new IWorkItemAdapter[0];
  180. }
  181. #endregion
  182. [Test]
  183. public void then_one_team_member_disappears()
  184. {
  185. Assert.AreEqual(this.teamMembersCount - 1, SUT.TeamMembersIncludingUnassigned.Count);
  186. }
  187. }
  188. #endregion
  189. #region Nested type: when_team_members_are_cleared
  190. [TestFixture]
  191. public class when_team_members_are_cleared : base_team_members_list_viewmodel_context_spec
  192. {
  193. private ITeamMemberInfoProvider teamMemberInfoProvider;
  194. #region Overrides of ContextInstanceSpecification<TeamMembersListViewModel>
  195. protected override void Establish_context()
  196. {
  197. base.Establish_context();
  198. this.teamMemberInfoProvider = TestAssetLibrary.CreateTeamMemberInfoProvider();
  199. var teamMembers = TestAssetLibrary.CreateTeamMembers(this.teamMemberInfoProvider, this.sprint.WorkItemStore.WorkItems);
  200. this.sprint.Stub(s => s.TeamMembers).Return(teamMembers);
  201. }
  202. protected override void Because()
  203. {
  204. this.sprint.TeamMembers.Clear();
  205. }
  206. #endregion
  207. [Test]
  208. //[WorkItem(3857)]
  209. public void then_NumberOfColumnsInGridView_should_be_1()
  210. {
  211. Assert.AreEqual(1, SUT.NumberOfColumnsInGridView);
  212. }
  213. [Test]
  214. public void then_TeamMembersIncludingUnassigned_should_be_empty()
  215. {
  216. Assert.IsFalse(SUT.TeamMembersIncludingUnassigned.Any());
  217. }
  218. }
  219. #endregion
  220. #region Nested type: when_unassigned_workitem_is_added
  221. [TestFixture]
  222. public class when_unassigned_workitem_is_added : base_team_members_list_viewmodel_context_spec
  223. {
  224. private IEventRaiser sprintEventRaiser;
  225. private ITeamMemberInfoProvider teamMemberInfoProvider;
  226. #region Overrides of ContextInstanceSpecification<TeamMembersListViewModel>
  227. protected override void Establish_context()
  228. {
  229. base.Establish_context();
  230. this.teamMemberInfoProvider = TestAssetLibrary.CreateTeamMemberInfoProvider();
  231. this.sprintEventRaiser = this.sprint.GetEventRaiser(x => x.PropertyChanged += null);
  232. var teamMembers = TestAssetLibrary.CreateTeamMembers(this.teamMemberInfoProvider, this.sprint.WorkItemStore.WorkItems);
  233. this.sprint.Stub(s => s.TeamMembers).Return(teamMembers);
  234. }
  235. protected override void Initialize_subject_under_test()
  236. {
  237. base.Initialize_subject_under_test();
  238. // Initialize SUT by accessing a property
  239. int count = SUT.TeamMembersIncludingUnassigned.Count;
  240. }
  241. protected override void Because()
  242. {
  243. this.sprint.WorkItemStore.WorkItems.Add(TestAssetLibrary.CreateWorkItem(10, null, 10.0));
  244. this.sprint.Stub(s => s.UnassignedWork).Return(new TeamMember(this.teamMemberInfoProvider.GetTeamMemberInformation(null),
  245. this.sprint.WorkItemStore.WorkItems.Where(x => string.IsNullOrEmpty(x.AssignedTo)),
  246. new TeamMemberRemainingWorkload()));
  247. this.sprintEventRaiser.Raise(this.sprint, new PropertyChangedEventArgs("UnassignedWork"));
  248. }
  249. #endregion
  250. [Test]
  251. public void then_1st_team_member_should_be_unassigned()
  252. {
  253. Assert.AreEqual(null, SUT.TeamMembersIncludingUnassigned[0].DisplayName);
  254. }
  255. }
  256. #endregion
  257. #region Nested type: when_unassigned_workitem_is_added
  258. [TestFixture]
  259. public class when_unassigned_workitem_is_removed : base_team_members_list_viewmodel_context_spec
  260. {
  261. private IEventRaiser sprintEventRaiser;
  262. private ITeamMemberInfoProvider teamMemberInfoProvider;
  263. #region Overrides of ContextInstanceSpecification<TeamMembersListViewModel>
  264. protected override void Establish_context()
  265. {
  266. base.Establish_context();
  267. this.teamMemberInfoProvider = TestAssetLibrary.CreateTeamMemberInfoProvider();
  268. this.sprintEventRaiser = this.sprint.GetEventRaiser(x => x.PropertyChanged += null);
  269. var teamMembers = TestAssetLibrary.CreateTeamMembers(this.teamMemberInfoProvider, this.sprint.WorkItemStore.WorkItems);
  270. this.sprint.Stub(s => s.TeamMembers).Return(teamMembers);
  271. this.sprint.Stub(s => s.UnassignedWork).Return(new TeamMember(this.teamMemberInfoProvider.GetTeamMemberInformation(null),
  272. this.sprint.WorkItemStore.WorkItems.Where(x => string.IsNullOrEmpty(x.AssignedTo)),
  273. new TeamMemberRemainingWorkload()));
  274. }
  275. protected override void Initialize_subject_under_test()
  276. {
  277. base.Initialize_subject_under_test();
  278. // Initialize SUT by accessing a property
  279. int count = SUT.TeamMembersIncludingUnassigned.Count;
  280. }
  281. protected override void Because()
  282. {
  283. this.sprint.Stub(s => s.UnassignedWork).Return(null).Repeat.Any();
  284. this.sprintEventRaiser.Raise(this.sprint, new PropertyChangedEventArgs("UnassignedWork"));
  285. }
  286. #endregion
  287. [Test]
  288. public void then_unassigned_team_member_should_be_gone()
  289. {
  290. Assert.IsFalse(SUT.TeamMembersIncludingUnassigned.Any(x => string.IsNullOrEmpty(x.DisplayName)));
  291. }
  292. }
  293. #endregion
  294. #region Nested type: when_team_members_are_added
  295. [TestFixture]
  296. public class when_team_members_are_added : base_team_members_list_viewmodel_context_spec
  297. {
  298. private IEventRaiser sprintEventRaiser;
  299. private ITeamMemberInfoProvider teamMemberInfoProvider;
  300. private int teamMemberCount;
  301. #region Overrides of ContextInstanceSpecification<TeamMembersListViewModel>
  302. protected override void Establish_context()
  303. {
  304. base.Establish_context();
  305. this.teamMemberInfoProvider = TestAssetLibrary.CreateTeamMemberInfoProvider();
  306. this.sprintEventRaiser = this.sprint.GetEventRaiser(x => x.PropertyChanged += null);
  307. var teamMembers = TestAssetLibrary.CreateTeamMembers(this.teamMemberInfoProvider, this.sprint.WorkItemStore.WorkItems);
  308. this.sprint.Stub(s => s.TeamMembers).Return(teamMembers);
  309. this.sprint.Stub(s => s.UnassignedWork).Return(new TeamMember(this.teamMemberInfoProvider.GetTeamMemberInformation(null),
  310. this.sprint.WorkItemStore.WorkItems.Where(x => string.IsNullOrEmpty(x.AssignedTo)),
  311. new TeamMemberRemainingWorkload()));
  312. }
  313. protected override void Initialize_subject_under_test()
  314. {
  315. base.Initialize_subject_under_test();
  316. // Initialize SUT by accessing a property
  317. this.teamMemberCount = SUT.TeamMembersIncludingUnassigned.Count;
  318. }
  319. protected override void Because()
  320. {
  321. var teamMembersCopy = new List<ITeamMember>(this.sprint.TeamMembers);
  322. this.sprint.TeamMembers.Clear();
  323. teamMembersCopy.ForEach(x => this.sprint.TeamMembers.Add(new TeamMember(x.Information, x.AssignedWorkItems, new TeamMemberRemainingWorkload())));
  324. this.sprintEventRaiser.Raise(this.sprint, new PropertyChangedEventArgs("UnassignedWork"));
  325. }
  326. #endregion
  327. [Test]
  328. public void then_team_member_count_should_be_the_same()
  329. {
  330. Assert.AreEqual(this.teamMemberCount, SUT.TeamMembersIncludingUnassigned.Count);
  331. }
  332. }
  333. #endregion
  334. }
  335. }
  336. // ReSharper restore InconsistentNaming