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.events;
8using solidware.financials.windows.ui.presenters;
9using solidware.financials.windows.ui.presenters.specifications;
10
11namespace specs.unit.ui.presenters
12{
13 public class AddNewIncomeViewModelSpecs
14 {
15 public class concern
16 {
17 Establish context = () =>
18 {
19 command_builder = Create.dependency<UICommandBuilder>();
20
21 sut = new AddNewIncomeViewModel(command_builder);
22 };
23
24 static protected AddNewIncomeViewModel sut;
25 static protected UICommandBuilder command_builder;
26 }
27
28 public class when_clicking_the_cancel_button : concern
29 {
30 It should_invoke_the_cancel_command = () =>
31 {
32 cancel_command.received(x => x.Execute(sut));
33 };
34
35 Establish context = () =>
36 {
37 cancel_command = Create.an<ObservableCommand>();
38 command_builder.Stub(x => x.build<CancelCommand>(sut)).Return(cancel_command);
39 };
40
41 Because of = () =>
42 {
43 sut.present();
44 sut.Cancel.Execute(sut);
45 };
46
47 static ObservableCommand cancel_command;
48 }
49
50 public class when_clicking_the_add_button : concern
51 {
52 It should_invoke_the_add_command = () =>
53 {
54 add_command.received(x => x.Execute(sut));
55 };
56
57 Establish context = () =>
58 {
59 add_command = Create.an<ObservableCommand>();
60 command_builder.Stub(x => x.build<AddNewIncomeViewModel.AddIncomeCommand, IfFamilyMemberIsSelected<AddNewIncomeViewModel>>(sut)).Return(add_command);
61 };
62
63 Because of = () =>
64 {
65 sut.present();
66 sut.Add.Execute(sut);
67 };
68
69 static ObservableCommand add_command;
70 }
71
72 public class when_the_add_button_is_pressed
73 {
74 It should_push_a_message_to_the_service_bus = () =>
75 {
76 bus.received(x => x.publish(new AddIncomeCommandMessage
77 {
78 Amount = amount,
79 PersonId = personId
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 state = Create.an<ApplicationState>();
92 var person = new SelectedFamilyMember {id = personId};
93 state.Stub(x => x.PullOut<SelectedFamilyMember>()).Return(person);
94 presenter = Create.an<AddNewIncomeViewModel>();
95 presenter.Stub(x => x.amount).Return(amount);
96 presenter.Stub(x => x.close).Return(() => { closed = true; });
97
98 sut = new AddNewIncomeViewModel.AddIncomeCommand(bus, state);
99 };
100
101 Because of = () =>
102 {
103 sut.run(presenter);
104 };
105
106 static AddNewIncomeViewModel.AddIncomeCommand sut;
107 static ServiceBus bus;
108 static AddNewIncomeViewModel presenter;
109 static decimal amount = 1000m;
110 static ApplicationState state;
111 static Guid personId = Guid.NewGuid();
112 static bool closed;
113 }
114 }
115}