summaryrefslogtreecommitdiff
path: root/slips/src/test/Marina.Test/Unit/Domain/SlipTest.cs
blob: 300a441d521a20cdce32655cc68940a9cc0d88b3 (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
using System;
using Marina.Domain;
using Marina.Domain.Exceptions;
using Marina.Domain.Interfaces;
using Marina.Test.Utility;
using MbUnit.Framework;

namespace Marina.Test.Unit.Domain {
	[TestFixture]
	public class SlipTest {
		public ISlip CreateSUT() {
			return new Slip( -1, ObjectMother.Dock( ), 100, 100, false );
		}

		[Test]
		public void Should_not_be_leased_to_anyone() {
			Assert.IsFalse( CreateSUT( ).IsLeased( ) );
		}

		//[Test]
		//public void Should_be_able_to_lease_to_a_customer()
		//{
		//    ICustomer customer = ObjectMother.Customer();
		//    ISlip slip = CreateSUT();
		//    ILeaseDuration durationOfLease = LeaseDurations.Daily;

		//    ISlipLease lease = slip.LeaseTo(customer, durationOfLease);

		//    Assert.AreEqual(customer, lease.Owner());
		//    Assert.AreEqual(slip, lease.Slip());
		//    Assert.AreEqual(durationOfLease, lease.Duration());
		//    Assert.AreEqual(DateTime.Now.Date, lease.StartDate());
		//}

		[Test]
		public void Lease_should_expire_at_11_am_the_following_day() {
			DateTime elevenAmTomorrow = DateTime.Now.AddDays( 1 ).Date.AddHours( 11 );
			ISlipLease lease = CreateSUT( ).LeaseTo( ObjectMother.Customer( ), LeaseDurations.Daily );
			Assert.AreEqual( elevenAmTomorrow, lease.ExpiryDate( ) );
		}

		[Test]
		public void Lease_should_expire_in_seven_days_on_the_eleventh_hour() {
			DateTime oneWeekFromToday = DateTime.Now.AddDays( 7 ).Date.AddHours( 11 );
			ISlipLease lease = CreateSUT( ).LeaseTo( ObjectMother.Customer( ), LeaseDurations.Weekly );
			Assert.AreEqual( oneWeekFromToday, lease.ExpiryDate( ) );
		}

		[Test]
		public void Lease_should_expire_in_thirty_days_on_the_eleventh_hour() {
			DateTime oneMonthFromToday = DateTime.Now.AddDays( 30 ).Date.AddHours( 11 );
			ISlipLease lease = CreateSUT( ).LeaseTo( ObjectMother.Customer( ), LeaseDurations.Monthly );
			Assert.AreEqual( oneMonthFromToday, lease.ExpiryDate( ) );
		}

		[Test]
		public void Lease_should_expire_in_365_days_on_the_eleventh_hour() {
			DateTime oneYearFromToday = DateTime.Now.AddDays( 365 ).Date.AddHours( 11 );
			ISlipLease lease = CreateSUT( ).LeaseTo( ObjectMother.Customer( ), LeaseDurations.Yearly );
			Assert.AreEqual( oneYearFromToday, lease.ExpiryDate( ) );
		}

		[Test]
		public void Should_be_leased_to_an_owner() {
			ISlip slip = CreateSUT( );
			slip.LeaseTo( ObjectMother.Customer( ), LeaseDurations.Yearly );
			Assert.IsTrue( slip.IsLeased( ), "Should be leased to an owner" );
		}

		[Test]
		[ExpectedException( typeof( SlipIsAlreadyLeasedException ) )]
		public void Should_return_current_lease_if_it_is_already_leased_to_a_customer() {
			ISlip slip = CreateSUT( );
			slip.LeaseTo( ObjectMother.Customer( ), LeaseDurations.Yearly );
			slip.LeaseTo( ObjectMother.Customer( ), LeaseDurations.Weekly );
		}
	}
}