main
  1using System;
  2using Machine.Specifications;
  3using Rhino.Mocks;
  4using solidware.financials.infrastructure;
  5using solidware.financials.messages;
  6using solidware.financials.windows.ui;
  7using solidware.financials.windows.ui.presenters;
  8
  9namespace specs.unit.ui.presenters
 10{
 11    public class AddFamilyMemberPresenterSpecs
 12    {
 13        public abstract class concern
 14        {
 15            Establish context = () =>
 16            {
 17                command_builder = Create.dependency<UICommandBuilder>();
 18                sut = new AddFamilyMemberPresenter(command_builder);
 19            };
 20
 21            static protected UICommandBuilder command_builder;
 22            static protected AddFamilyMemberPresenter sut;
 23        }
 24
 25        public class when_clicking_the_cancel_button : concern
 26        {
 27            It should_invoke_the_cancel_command = () =>
 28            {
 29                cancel.received(x => x.Execute(sut));
 30            };
 31
 32            Establish context = () =>
 33            {
 34                cancel = Create.an<ObservableCommand>();
 35                command_builder.Stub(x => x.build<CancelCommand>(sut)).Return(cancel);
 36            };
 37
 38            Because of = () =>
 39            {
 40                sut.present();
 41                sut.Cancel.Execute(sut);
 42            };
 43
 44            static ObservableCommand cancel;
 45        }
 46
 47        public class when_clicking_the_save_button : concern
 48        {
 49            It should_invoke_the_save_command = () =>
 50            {
 51                save.received(x => x.Execute(sut));
 52            };
 53
 54            Establish context = () =>
 55            {
 56                save = Create.an<ObservableCommand>();
 57                command_builder.Stub(x => x.build<AddFamilyMemberPresenter.SaveCommand>(sut)).Return(save);
 58            };
 59
 60            Because of = () =>
 61            {
 62                sut.present();
 63                sut.Save.Execute(sut);
 64            };
 65
 66            static ObservableCommand save;
 67        }
 68
 69        public class SaveCommandSpecs
 70        {
 71            public class when_clicked
 72            {
 73                It should_publish_a_message_on_the_bus = () =>
 74                {
 75                    bus.received(x => x.publish(new FamilyMemberToAdd
 76                                                {
 77                                                    first_name = "mo",
 78                                                    last_name = "khan",
 79                                                    date_of_birth = new DateTime(1984, 04, 28),
 80                                                }));
 81                };
 82
 83                It should_close_the_dialog = () =>
 84                {
 85                    closed.ShouldBeTrue();
 86                };
 87
 88                Establish context = () =>
 89                {
 90                    bus = Create.dependency<ServiceBus>();
 91                    presenter = Create.an<AddFamilyMemberPresenter>();
 92                    presenter.Stub(x => x.first_name).Return("mo");
 93                    presenter.Stub(x => x.last_name).Return("khan");
 94                    presenter.Stub(x => x.date_of_birth).Return(new DateTime(1984, 04, 28));
 95                    presenter.Stub(x => x.close).Return(() => { closed = true; });
 96                    sut = new AddFamilyMemberPresenter.SaveCommand(bus);
 97                };
 98
 99                Because of = () =>
100                {
101                    sut.run(presenter);
102                };
103
104                static ServiceBus bus;
105                static AddFamilyMemberPresenter.SaveCommand sut;
106                static AddFamilyMemberPresenter presenter;
107                static bool closed;
108            }
109        }
110    }
111}