Commit ee2ff71

mo khan <mo@mokhan.ca>
2011-03-18 19:29:35
add specs for AddFamilyMemberPresenter.
1 parent 3f7587e
product/desktop.ui/presenters/AddFamilyMemberPresenter.cs
@@ -21,12 +21,12 @@ namespace solidware.financials.windows.ui.presenters
             date_of_birth = Clock.today();
         }
 
-        public string first_name { get; set; }
-        public string last_name { get; set; }
-        public DateTime date_of_birth { get; set; }
+        public virtual string first_name { get; set; }
+        public virtual string last_name { get; set; }
+        public virtual DateTime date_of_birth { get; set; }
         public IObservableCommand Save { get; set; }
         public IObservableCommand Cancel { get; set; }
-        public Action close { get; set; }
+        public virtual Action close { get; set; }
 
         public class SaveCommand : UICommand<AddFamilyMemberPresenter>
         {
@@ -39,11 +39,11 @@ namespace solidware.financials.windows.ui.presenters
 
             public override void run(AddFamilyMemberPresenter presenter)
             {
-                bus.publish<FamilyMemberToAdd>(x =>
+                bus.publish(new FamilyMemberToAdd
                 {
-                    x.first_name = presenter.first_name;
-                    x.last_name = presenter.last_name;
-                    x.date_of_birth = presenter.date_of_birth;
+                    first_name = presenter.first_name,
+                    last_name = presenter.last_name,
+                    date_of_birth = presenter.date_of_birth,
                 });
                 presenter.close();
             }
product/desktop.ui/presenters/AddNewIncomeViewModel.cs
@@ -8,7 +8,6 @@ namespace solidware.financials.windows.ui.presenters
     public class AddNewIncomeViewModel : DialogPresenter
     {
         UICommandBuilder builder;
-        ApplicationState state;
 
         public AddNewIncomeViewModel(UICommandBuilder builder)
         {
product/desktop.ui/Properties/AssemblyInfo.cs
@@ -49,5 +49,5 @@ using System.Windows;
 // You can specify all the values or you can default the Build and Revision Numbers 
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("2011.3.18.1253")]
-[assembly: AssemblyFileVersion("2011.3.18.1253")]
+[assembly: AssemblyVersion("2011.3.18.1329")]
+[assembly: AssemblyFileVersion("2011.3.18.1329")]
product/messages/FamilyMemberToAdd.cs
@@ -1,8 +1,9 @@
 using System;
+using gorilla.utility;
 
 namespace solidware.financials.messages
 {
-    public class FamilyMemberToAdd
+    public class FamilyMemberToAdd : ValueType<FamilyMemberToAdd>
     {
         public string first_name { get; set; }
         public string last_name { get; set; }
product/specs/unit/ui/presenters/AddFamilyMemberPresenterSpecs.cs
@@ -0,0 +1,111 @@
+using System;
+using Machine.Specifications;
+using Rhino.Mocks;
+using solidware.financials.infrastructure;
+using solidware.financials.messages;
+using solidware.financials.windows.ui;
+using solidware.financials.windows.ui.presenters;
+
+namespace specs.unit.ui.presenters
+{
+    public class AddFamilyMemberPresenterSpecs
+    {
+        public abstract class concern
+        {
+            Establish context = () =>
+            {
+                command_builder = Create.dependency<UICommandBuilder>();
+                sut = new AddFamilyMemberPresenter(command_builder);
+            };
+
+            static protected UICommandBuilder command_builder;
+            static protected AddFamilyMemberPresenter sut;
+        }
+
+        public class when_clicking_the_cancel_button : concern
+        {
+            It should_invoke_the_cancel_command = () =>
+            {
+                cancel.received(x => x.Execute(sut));
+            };
+
+            Establish context = () =>
+            {
+                cancel = Create.an<IObservableCommand>();
+                command_builder.Stub(x => x.build<CancelCommand>(sut)).Return(cancel);
+            };
+
+            Because of = () =>
+            {
+                sut.present();
+                sut.Cancel.Execute(sut);
+            };
+
+            static IObservableCommand cancel;
+        }
+
+        public class when_clicking_the_save_button : concern
+        {
+            It should_invoke_the_save_command = () =>
+            {
+                save.received(x => x.Execute(sut));
+            };
+
+            Establish context = () =>
+            {
+                save = Create.an<IObservableCommand>();
+                command_builder.Stub(x => x.build<AddFamilyMemberPresenter.SaveCommand>(sut)).Return(save);
+            };
+
+            Because of = () =>
+            {
+                sut.present();
+                sut.Save.Execute(sut);
+            };
+
+            static IObservableCommand save;
+        }
+
+        public class SaveCommandSpecs
+        {
+            public class when_clicked
+            {
+                It should_publish_a_message_on_the_bus = () =>
+                {
+                    bus.received(x => x.publish(new FamilyMemberToAdd
+                                                {
+                                                    first_name = "mo",
+                                                    last_name = "khan",
+                                                    date_of_birth = new DateTime(1984, 04, 28),
+                                                }));
+                };
+
+                It should_close_the_dialog = () =>
+                {
+                    closed.ShouldBeTrue();
+                };
+
+                Establish context = () =>
+                {
+                    bus = Create.dependency<ServiceBus>();
+                    presenter = Create.an<AddFamilyMemberPresenter>();
+                    presenter.Stub(x => x.first_name).Return("mo");
+                    presenter.Stub(x => x.last_name).Return("khan");
+                    presenter.Stub(x => x.date_of_birth).Return(new DateTime(1984, 04, 28));
+                    presenter.Stub(x => x.close).Return(() => { closed = true; });
+                    sut = new AddFamilyMemberPresenter.SaveCommand(bus);
+                };
+
+                Because of = () =>
+                {
+                    sut.run(presenter);
+                };
+
+                static ServiceBus bus;
+                static AddFamilyMemberPresenter.SaveCommand sut;
+                static AddFamilyMemberPresenter presenter;
+                static bool closed;
+            }
+        }
+    }
+}
\ No newline at end of file
product/specs/specs.csproj
@@ -55,6 +55,7 @@
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="Create.cs" />
     <Compile Include="unit\ui\InMemoryApplicationStateSpecs.cs" />
+    <Compile Include="unit\ui\presenters\AddFamilyMemberPresenterSpecs.cs" />
     <Compile Include="unit\ui\presenters\AddNewIncomeViewModelSpecs.cs" />
   </ItemGroup>
   <ItemGroup>