master
  1using System.Collections.Generic;
  2using MbUnit.Framework;
  3using Notepad.Domain.Repositories;
  4using Notepad.Infrastructure.Extensions;
  5using Notepad.Test.Extensions;
  6using Rhino.Mocks;
  7
  8namespace Notepad.Presentation.Model.Menu.File {
  9    public class FileMenuSpecs {}
 10
 11    [TestFixture]
 12    public class when_asking_the_file_menu_for_its_name_ {
 13        [Test]
 14        public void should_return_the_correct_name() {
 15            CreateSUT().Name().ShouldBeEqualTo(MenuNames.File);
 16        }
 17
 18        private ISubMenu CreateSUT() {
 19            return new FileMenu(null, null);
 20        }
 21    }
 22
 23    [TestFixture]
 24    public class when_asking_the_file_menu_for_its_menu_items_ {
 25        private MockRepository mockery;
 26        private IRepository<IMenuItem> repository;
 27        private ISubMenu sut;
 28        private IMenuItemComparer menuItemComparer;
 29
 30        [SetUp]
 31        public void SetUp() {
 32            mockery = new MockRepository();
 33            repository = mockery.DynamicMock<IRepository<IMenuItem>>();
 34            menuItemComparer = mockery.DynamicMock<IMenuItemComparer>();
 35
 36            sut = CreateSUT();
 37        }
 38
 39        [Test]
 40        public void should_ask_the_repository_for_all_the_menu_items() {
 41            using (mockery.Record()) {
 42                Expect
 43                    .Call(repository.All())
 44                    .Return(new List<IMenuItem>())
 45                    .Repeat
 46                    .AtLeastOnce();
 47            }
 48
 49            using (mockery.Playback()) {
 50                sut.AllMenuItems().Walk();
 51            }
 52        }
 53
 54        [Test]
 55        public void should_return_the_menu_items_that_belong_to_the_file_menu() {
 56            var saveMenuItem = mockery.DynamicMock<IMenuItem>();
 57            var helpMenuItem = mockery.DynamicMock<IMenuItem>();
 58
 59            var allMenuItems = new List<IMenuItem> {saveMenuItem, helpMenuItem};
 60
 61            using (mockery.Record()) {
 62                SetupResult.For(repository.All()).Return(allMenuItems);
 63                SetupResult.For(saveMenuItem.BelongsTo(sut)).Return(true);
 64                SetupResult.For(helpMenuItem.BelongsTo(sut)).Return(false);
 65            }
 66
 67            using (mockery.Playback()) {
 68                var returnedItems = sut.AllMenuItems();
 69                returnedItems.ShouldContain(saveMenuItem);
 70                returnedItems.ShouldNotContain(helpMenuItem);
 71            }
 72        }
 73
 74        [Test]
 75        public void should_sort_the_items_in_the_file_menu() {
 76            var firstItem = mockery.DynamicMock<IMenuItem>();
 77            var secondItem = mockery.DynamicMock<IMenuItem>();
 78
 79            var allMenuItems = new List<IMenuItem> {firstItem, secondItem};
 80
 81            using (mockery.Record()) {
 82                SetupResult.For(repository.All()).Return(allMenuItems);
 83                SetupResult.For(firstItem.BelongsTo(null))
 84                    .IgnoreArguments()
 85                    .Return(true);
 86                SetupResult.For(secondItem.BelongsTo(null))
 87                    .IgnoreArguments()
 88                    .Return(true);
 89                Expect
 90                    .Call(menuItemComparer.Compare(firstItem, secondItem))
 91                    .Return(1)
 92                    .Repeat
 93                    .AtLeastOnce();
 94            }
 95
 96            using (mockery.Playback()) {
 97                sut.AllMenuItems().Walk();
 98            }
 99        }
100
101        private ISubMenu CreateSUT() {
102            return new FileMenu(repository, menuItemComparer);
103        }
104    }
105}