master
1using System.Collections.Generic;
2using MbUnit.Framework;
3using Notepad.Domain.Repositories;
4using Notepad.Presentation.Model.Menu;
5using Notepad.Presentation.Views.Menu;
6using Rhino.Mocks;
7
8namespace Notepad.Presentation.Presenters.Menu {
9 public class MainMenuPresenterSpecs {}
10
11 [TestFixture]
12 public class when_initializing_the_main_menu_presenter_ {
13 private MockRepository mockery;
14 private IRepository<ISubMenu> repository;
15 private IMainMenuView mainMenu;
16 private ISubMenuItemComparer comparer;
17
18 [SetUp]
19 public void SetUp() {
20 mockery = new MockRepository();
21 repository = mockery.DynamicMock<IRepository<ISubMenu>>();
22 mainMenu = mockery.DynamicMock<IMainMenuView>();
23 comparer = mockery.DynamicMock<ISubMenuItemComparer>();
24 }
25
26 [Test]
27 public void should_ask_the_repository_for_all_the_sub_menus() {
28 var subMenus = new List<ISubMenu>();
29 using (mockery.Record()) {
30 Expect
31 .Call(repository.All())
32 .Return(subMenus)
33 .Repeat
34 .AtLeastOnce();
35 }
36
37 using (mockery.Playback()) {
38 CreateSUT().Initialize();
39 }
40 }
41
42 [Test]
43 public void should_add_each_of_the_sub_menus_to_the_main_menu() {
44 var fileMenu = mockery.DynamicMock<ISubMenu>();
45 var subMenus = new List<ISubMenu> {fileMenu};
46
47 using (mockery.Record()) {
48 SetupResult
49 .For(repository.All())
50 .Return(subMenus);
51 mainMenu.Add(fileMenu);
52 }
53
54 using (mockery.Playback()) {
55 CreateSUT().Initialize();
56 }
57 }
58
59 [Test]
60 public void should_sort_the_sub_menus_using_the_comparer() {
61 var firstMenu = mockery.DynamicMock<ISubMenu>();
62 var secondMenu = mockery.DynamicMock<ISubMenu>();
63
64 var subMenus = new List<ISubMenu> {firstMenu, secondMenu};
65
66 using (mockery.Record()) {
67 SetupResult
68 .For(repository.All())
69 .Return(subMenus);
70 Expect
71 .Call(comparer.Compare(firstMenu, secondMenu))
72 .Return(0)
73 .Repeat
74 .AtLeastOnce();
75 }
76
77 using (mockery.Playback()) {
78 CreateSUT().Initialize();
79 }
80 }
81
82 private IMainMenuPresenter CreateSUT() {
83 return new MainMenuPresenter(mainMenu, repository, comparer);
84 }
85 }
86}