summaryrefslogtreecommitdiff
path: root/src/test/Cmpp298.Assignment3.Test/Presentation/NewInvoicePresenterTest.cs
blob: 2ccd4ca2cc8c6dfad375c10de211759e27d13244 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
using System.Collections.Generic;
using Cmpp298.Assignment3.Dto;
using Cmpp298.Assignment3.Presentation;
using Cmpp298.Assignment3.Task;
using MbUnit.Framework;
using Rhino.Mocks;
using Rhino.Mocks.Constraints;

namespace Cmpp298.Assignment3.Test.Presentation {
	[TestFixture]
	public class NewInvoicePresenterTest {
		private MockRepository _mockery;
		private INewInvoiceView _view;
		private IInvoiceTask _invoiceTask;
		private IVendorTask _vendorTask;
		private ITermTask _termTask;
		private IDropDownListAdapter _termsDropDown;

		[SetUp]
		public void SetUp( ) {
			_mockery = new MockRepository( );
			_view = _mockery.Stub< INewInvoiceView >( );
			_invoiceTask = _mockery.Stub< IInvoiceTask >( );
			_vendorTask = _mockery.Stub< IVendorTask >( );
			_termTask = _mockery.Stub< ITermTask >( );
			_termsDropDown = _mockery.Stub< IDropDownListAdapter >( );

			SetupResult.For( _view.Terms ).Return( _termsDropDown );
		}

		[Test]
		public void Should_Load_Vendor_Names_On_Load( ) {
			const string vendorId = "34";
			using ( _mockery.Record( ) ) {
				DisplayVendorNameDto displayVendorNameDto = new DisplayVendorNameDto( vendorId, "IBM" );
				Expect.Call( _vendorTask.FindVendorNameBy( vendorId ) ).Return( displayVendorNameDto );
				_view.BindTo( displayVendorNameDto );
			}
			using ( _mockery.Playback( ) ) {
				CreateSut( vendorId ).Load( );
			}
		}

		[Test]
		public void Should_Load_Terms_On_Load( ) {
			IList< IDropDownListItem > terms = new List< IDropDownListItem >( );
			terms.Add( new DropDownListItem( "Net due 10 days", "1" ) );
			terms.Add( new DropDownListItem( "Net due 20 days", "2" ) );
			terms.Add( new DropDownListItem( "Net due 30 days", "3" ) );
			terms.Add( new DropDownListItem( "Net due 60 days", "4" ) );
			terms.Add( new DropDownListItem( "Net due 90 days", "5" ) );

			using ( _mockery.Record( ) ) {
				Expect.Call( _termTask.GetAll( ) ).Return( terms );
				_termsDropDown.BindTo( terms );
			}
			using ( _mockery.Playback( ) ) {
				const string vendorId = "34";
				CreateSut( vendorId ).Load( );
			}
		}

		[Test]
		public void Should_Create_New_Invoice_Number_On_Load( ) {
			using ( _mockery.Record( ) ) {}
			using ( _mockery.Playback( ) ) {
				CreateSut( "34" ).Load( );
				Assert.IsTrue( _view.InvoiceNumber != null, "Invoice number should have been generated" );
			}
		}

		[Test]
		public void Should_Save_New_Invoice( ) {
			const string vendorId = "34";
			using ( _mockery.Record( ) ) {
				SetupResult.For( _view.InvoiceDate ).Return( "1/5/2007 12:00:00 AM" );
				SetupResult.For( _view.InvoiceTotal ).Return( "116.54" );
				SetupResult.For( _view.PaymentTotal ).Return( "116.54" );
				SetupResult.For( _view.CreditTotal ).Return( "0.00" );
				SetupResult.For( _view.DueDate ).Return( "3/4/2007 12:00:00 AM" );
				SetupResult.For( _view.PaymentDate ).Return( "2/22/2007 12:00:00 AM" );
				Expect.Call( _termsDropDown.SelectedItem ).Return( new DropDownListItem( "Net due 60 days", "4" ) );

				_invoiceTask.SaveNewInvoice(
					new SaveInvoiceDto( vendorId, "QP58872", "1/5/2007 12:00:00 AM", "116.5400", "116.5400", "0.0000",
					                    "3/4/2007 12:00:00 AM",
					                    "2/22/2007 12:00:00 AM", "4" ) );
			}
			using ( _mockery.Playback( ) ) {
				CreateSut( vendorId ).SaveInvoice( );
			}
		}

		[Test]
		public void Should_Check_For_Valid_Input( ) {
			const string vendorId = "34";
			using ( _mockery.Record( ) ) {
				SetupResult.For( _view.InvoiceTotal ).Return( "abcd" );
				SetupResult.For( _view.PaymentTotal ).Return( "abcd" );
				SetupResult.For( _view.CreditTotal ).Return( "abcd" );

				_view.ShowError( null );
				LastCall.Constraints( Is.NotNull( ) );
			}
			using ( _mockery.Playback( ) ) {
				CreateSut( vendorId ).SaveInvoice( );
			}
		}

		private NewInvoicePresenter CreateSut( string vendorId ) {
			return new NewInvoicePresenter( vendorId, _view, _invoiceTask, _vendorTask, _termTask );
		}
	}
}