/
ReservationServiceTest.java
143 lines (108 loc) · 3.78 KB
/
ReservationServiceTest.java
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package ro.vichim.test.testdoubles.service;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import ro.vichim.test.testdoubles.model.ReservationBuilder;
import ro.vichim.testdoubles.model.Reservation;
import ro.vichim.testdoubles.service.AuthorizationService;
import ro.vichim.testdoubles.service.ReservationRepository;
import ro.vichim.testdoubles.service.ReservationService;
public class ReservationServiceTest {
@Test
public void acceptsValidReservation() {
Reservation reservation = new ReservationBuilder().build();
AuthorizationService authService = new AuthorizationService() {
@Override
public boolean authorizesAccess(String username, String resource) {
return true;
}
};
ReservationService sut = new ReservationService(authService , emptyRepository());
assertTrue(sut.bookRoom(reservation));
}
@Test
public void storesValidReservation() {
Reservation reservation = new ReservationBuilder().build();
AuthorizationService authService = new AuthorizationService() {
@Override
public boolean authorizesAccess(String username, String resource) {
return true;
}
};
ReservationRepositorySpy repositorySpy = new ReservationRepositorySpy();
ReservationService sut = new ReservationService(authService, repositorySpy);
sut.bookRoom(reservation);
assertEquals(reservation, repositorySpy.getStoredReservation());
}
@Test
public void rejectsReservationFromUnauthorizedUser() {
Reservation reservation = new ReservationBuilder().build();
AuthorizationService authService = new AuthorizationService() {
@Override
public boolean authorizesAccess(String username, String resource) {
return false;
}
};
ReservationService sut = new ReservationService(authService, null);
assertFalse(sut.bookRoom(reservation));
}
@Test
public void rejectsReservationForRoomAlreadyBooked() {
final Reservation reservation = new ReservationBuilder().build();
AuthorizationService authService = new AuthorizationService() {
@Override
public boolean authorizesAccess(String username, String resource) {
return true;
}
};
ReservationRepository repository = new ReservationRepository() {
@Override
public void store(Reservation reservation) {
}
@Override
public Reservation findSimilar(Reservation reservation) {
return reservation;
}
};
ReservationService sut = new ReservationService(authService, repository);
assertFalse(sut.bookRoom(reservation));
}
@Test
public void rejectsReservationBreakingTheRoomOccupancyPolicy() {
Reservation reservation = new ReservationBuilder().big().forOnePerson().build();
AuthorizationService authService = new AuthorizationService() {
@Override
public boolean authorizesAccess(String username, String resource) {
return true;
}
};
ReservationService sut = new ReservationService(authService, emptyRepository());
assertFalse(sut.bookRoom(reservation));
}
private ReservationRepository emptyRepository() {
return new ReservationRepository() {
@Override
public void store(Reservation reservation) {
}
@Override
public Reservation findSimilar(Reservation reservation) {
return null;
}
};
}
private class ReservationRepositorySpy implements ReservationRepository {
private Reservation storedReservation;
@Override
public Reservation findSimilar(Reservation reservation) {
return null;
}
@Override
public void store(Reservation reservation) {
this.storedReservation = reservation;
}
public Reservation getStoredReservation() {
return storedReservation;
}
}
}