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}