Skip to content

Commit 9f0e35d

Browse files
authored
Merge pull request #52 from MarcinSwierczynski/HandleDuplicateHold_Tests
Add unit tests for HandleDuplicateHold
2 parents 71ad037 + 48712dd commit 9f0e35d

File tree

2 files changed

+67
-3
lines changed

2 files changed

+67
-3
lines changed

src/main/java/io/pillopl/library/lending/patron/application/hold/HandleDuplicateHold.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,25 @@
55
import io.pillopl.library.catalogue.BookId;
66
import io.pillopl.library.lending.patron.model.PatronId;
77
import io.vavr.control.Try;
8-
import lombok.AllArgsConstructor;
98
import org.springframework.context.event.EventListener;
109

10+
import java.time.Clock;
11+
1112
import static java.time.Instant.now;
1213

13-
@AllArgsConstructor
1414
public class HandleDuplicateHold {
1515

1616
private final CancelingHold cancelingHold;
17+
private final Clock clock;
18+
19+
public HandleDuplicateHold(CancelingHold cancelingHold) {
20+
this(cancelingHold, Clock.systemUTC());
21+
}
22+
23+
public HandleDuplicateHold(CancelingHold cancelingHold, Clock clock) {
24+
this.cancelingHold = cancelingHold;
25+
this.clock = clock;
26+
}
1727

1828
@EventListener
1929
public Try<Result> handle(BookDuplicateHoldFound event) {
@@ -22,7 +32,7 @@ public Try<Result> handle(BookDuplicateHoldFound event) {
2232

2333
private CancelHoldCommand cancelHoldCommandFrom(BookDuplicateHoldFound event) {
2434
return new CancelHoldCommand(
25-
now(),
35+
now(clock),
2636
new PatronId(event.getSecondPatronId()),
2737
new BookId(event.getBookId()));
2838
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package io.pillopl.library.lending.patron.application.hold
2+
3+
import io.pillopl.library.catalogue.BookId
4+
import io.pillopl.library.lending.book.model.BookDuplicateHoldFound
5+
import io.pillopl.library.lending.patron.model.PatronId
6+
import spock.lang.Specification
7+
8+
import java.time.Clock
9+
import java.time.Instant
10+
import java.time.ZoneOffset
11+
12+
import static io.pillopl.library.lending.book.model.BookFixture.anyBookId
13+
import static io.pillopl.library.lending.librarybranch.model.LibraryBranchFixture.anyBranch
14+
import static io.pillopl.library.lending.patron.model.PatronFixture.anyPatronId
15+
import static java.time.Instant.now
16+
17+
class HandleDuplicateHoldTest extends Specification {
18+
19+
CancelingHold cancelingHold = Mock()
20+
21+
def "should start cancelling hold if book was already hold by other patron"() {
22+
given:
23+
Clock clock = Clock.fixed(Instant.parse('2020-02-27T12:21:00Z'), ZoneOffset.UTC)
24+
and:
25+
HandleDuplicateHold duplicateHold = new HandleDuplicateHold(cancelingHold, clock)
26+
and:
27+
BookDuplicateHoldFound bookDuplicateHoldFound = duplicateHoldFoundBy()
28+
and:
29+
CancelHoldCommand cancelHoldCommand = cancelHoldCommandFrom(bookDuplicateHoldFound, clock)
30+
when:
31+
duplicateHold.handle(bookDuplicateHoldFound)
32+
then:
33+
1 * cancelingHold.cancelHold(cancelHoldCommand)
34+
}
35+
36+
BookDuplicateHoldFound duplicateHoldFoundBy() {
37+
return new BookDuplicateHoldFound(
38+
now(),
39+
anyPatronId().patronId,
40+
anyPatronId().patronId,
41+
anyBranch().libraryBranchId,
42+
anyBookId().bookId
43+
)
44+
}
45+
46+
CancelHoldCommand cancelHoldCommandFrom(BookDuplicateHoldFound event, Clock clock) {
47+
return new CancelHoldCommand(
48+
clock.instant(),
49+
new PatronId(event.getSecondPatronId()),
50+
new BookId(event.getBookId())
51+
)
52+
}
53+
54+
}

0 commit comments

Comments
 (0)