Skip to content

Commit 8ad1c3f

Browse files
Mock CancelingHold in HandleDuplicateHoldTest
1 parent 48dab81 commit 8ad1c3f

File tree

2 files changed

+38
-52
lines changed

2 files changed

+38
-52
lines changed

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,24 @@
88
import lombok.AllArgsConstructor;
99
import org.springframework.context.event.EventListener;
1010

11+
import java.time.Clock;
12+
1113
import static java.time.Instant.now;
1214

13-
@AllArgsConstructor
1415
public class HandleDuplicateHold {
1516

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

1830
@EventListener
1931
public Try<Result> handle(BookDuplicateHoldFound event) {
@@ -22,7 +34,7 @@ public Try<Result> handle(BookDuplicateHoldFound event) {
2234

2335
private CancelHoldCommand cancelHoldCommandFrom(BookDuplicateHoldFound event) {
2436
return new CancelHoldCommand(
25-
now(),
37+
now(clock),
2638
new PatronId(event.getSecondPatronId()),
2739
new BookId(event.getBookId()));
2840
}
Lines changed: 24 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,54 @@
11
package io.pillopl.library.lending.patron.application.hold
22

3-
import io.pillopl.library.commons.commands.Result
3+
import io.pillopl.library.catalogue.BookId
44
import io.pillopl.library.lending.book.model.BookDuplicateHoldFound
5-
import io.pillopl.library.lending.book.model.BookOnHold
6-
import io.pillopl.library.lending.patron.model.Patron
7-
import io.pillopl.library.lending.patron.model.PatronEvent
8-
import io.pillopl.library.lending.patron.model.PatronFixture
95
import io.pillopl.library.lending.patron.model.PatronId
10-
import io.pillopl.library.lending.patron.model.Patrons
11-
import io.vavr.control.Option
12-
import io.vavr.control.Try
136
import spock.lang.Specification
147

8+
import java.time.Clock
9+
import java.time.Instant
10+
import java.time.ZoneOffset
11+
1512
import static io.pillopl.library.lending.book.model.BookFixture.anyBookId
16-
import static io.pillopl.library.lending.book.model.BookFixture.bookOnHold
1713
import static io.pillopl.library.lending.librarybranch.model.LibraryBranchFixture.anyBranch
1814
import static io.pillopl.library.lending.patron.model.PatronFixture.anyPatronId
19-
import static io.pillopl.library.lending.patron.model.PatronFixture.regularPatron
2015
import static java.time.Instant.now
2116

2217
class HandleDuplicateHoldTest extends Specification {
2318

24-
BookOnHold bookOnHold = bookOnHold()
25-
PatronId patronId = anyPatronId()
26-
27-
FindBookOnHold willFindBook = { bookId, patronId -> Option.of(bookOnHold) }
28-
Patrons repository = Stub()
19+
CancelingHold cancelingHold = Mock()
2920

30-
def "should successfully cancel hold if book was hold by the patron"() {
21+
def "should start cancelling hold if book was already hold by other patron"() {
3122
given:
32-
CancelingHold cancelingHold = new CancelingHold(willFindBook, repository)
33-
HandleDuplicateHold duplicateHold = new HandleDuplicateHold(cancelingHold)
23+
Clock clock = Clock.fixed(Instant.parse('2020-02-27T12:21:00Z'), ZoneOffset.UTC)
3424
and:
35-
persistedRegularPatronWithBookOnHold()
36-
when:
37-
Try<Result> result = duplicateHold.handle(duplicateHoldFoundBy(patronId))
38-
then:
39-
result.isSuccess()
40-
result.get() == Result.Success
41-
}
42-
43-
def "should reject cancelling hold if book was not hold by the patron"() {
44-
given:
45-
CancelingHold cancelingHold = new CancelingHold(willFindBook, repository)
46-
HandleDuplicateHold duplicateHold = new HandleDuplicateHold(cancelingHold)
25+
HandleDuplicateHold duplicateHold = new HandleDuplicateHold(cancelingHold, clock)
26+
and:
27+
BookDuplicateHoldFound bookDuplicateHoldFound = duplicateHoldFoundBy()
4728
and:
48-
persistedRegularPatron()
29+
CancelHoldCommand cancelHoldCommand = cancelHoldCommandFrom(bookDuplicateHoldFound, clock)
4930
when:
50-
Try<Result> result = duplicateHold.handle(duplicateHoldFoundBy(patronId))
31+
duplicateHold.handle(bookDuplicateHoldFound)
5132
then:
52-
result.isSuccess()
53-
result.get() == Result.Rejection
33+
1 * cancelingHold.cancelHold(cancelHoldCommand)
5434
}
5535

56-
PatronId persistedRegularPatronWithBookOnHold() {
57-
Patron patron = PatronFixture.regularPatronWithHold(bookOnHold)
58-
repository.findBy(patronId) >> Option.of(patron)
59-
repository.publish(_ as PatronEvent) >> patron
60-
return patronId
61-
}
62-
63-
PatronId persistedRegularPatron() {
64-
Patron patron = regularPatron(patronId)
65-
repository.findBy(patronId) >> Option.of(patron)
66-
repository.publish(_ as PatronEvent) >> patron
67-
return patronId
68-
}
69-
70-
BookDuplicateHoldFound duplicateHoldFoundBy(PatronId patron) {
36+
BookDuplicateHoldFound duplicateHoldFoundBy() {
7137
return new BookDuplicateHoldFound(
7238
now(),
7339
anyPatronId().patronId,
74-
patron.patronId,
40+
anyPatronId().patronId,
7541
anyBranch().libraryBranchId,
7642
anyBookId().bookId
7743
)
7844
}
7945

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+
8054
}

0 commit comments

Comments
 (0)