Compare commits
3 Commits
master
...
spock-test
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6dc153309b | ||
|
|
3218fb056e | ||
|
|
8306b5158a |
12
pom.xml
12
pom.xml
@@ -109,6 +109,18 @@
|
|||||||
<version>1.3-groovy-2.5</version>
|
<version>1.3-groovy-2.5</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.athaydes</groupId>
|
||||||
|
<artifactId>spock-reports</artifactId>
|
||||||
|
<version>1.8.0</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>*</groupId>
|
||||||
|
<artifactId>*</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.rest-assured</groupId>
|
<groupId>io.rest-assured</groupId>
|
||||||
<artifactId>rest-assured</artifactId>
|
<artifactId>rest-assured</artifactId>
|
||||||
|
|||||||
@@ -2,10 +2,14 @@ package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model;
|
|||||||
|
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.exception.TooManyBooksAssignedToUserException;
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.exception.TooManyBooksAssignedToUserException;
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@EqualsAndHashCode
|
@EqualsAndHashCode
|
||||||
|
@ToString
|
||||||
public class ActiveUser {
|
public class ActiveUser {
|
||||||
|
|
||||||
private final Long id;
|
private final Long id;
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model;
|
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model;
|
||||||
|
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.ToString;
|
||||||
|
|
||||||
@EqualsAndHashCode
|
@EqualsAndHashCode
|
||||||
|
@ToString
|
||||||
public class AvailableBook implements Book {
|
public class AvailableBook implements Book {
|
||||||
|
|
||||||
private final Long id;
|
private final Long id;
|
||||||
|
|||||||
@@ -3,8 +3,10 @@ package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model;
|
|||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
@Getter
|
@Getter
|
||||||
@Builder
|
@Builder
|
||||||
public class BookReservationCommand {
|
public class BookReservationCommand {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model;
|
package io.wkrzywiec.hexagonal.library.domain.borrowing.core.model;
|
||||||
|
|
||||||
import lombok.EqualsAndHashCode;
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
|
|
||||||
|
|||||||
@@ -4,29 +4,39 @@ import io.wkrzywiec.hexagonal.library.domain.borrowing.core.BorrowingFacade
|
|||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.AvailableBook
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.AvailableBook
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.MakeBookAvailableCommand
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.MakeBookAvailableCommand
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.outgoing.BorrowingEventPublisher
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.outgoing.BorrowingEventPublisher
|
||||||
|
import spock.lang.Narrative
|
||||||
import spock.lang.Specification
|
import spock.lang.Specification
|
||||||
|
import spock.lang.Subject
|
||||||
|
import spock.lang.Title
|
||||||
|
|
||||||
|
@Title("Unit tests for borrowing book logic")
|
||||||
|
@Narrative("""
|
||||||
|
BorrowingFacade class encapsulate a logic of
|
||||||
|
managing books in a library. It contains methods
|
||||||
|
responsible for registering new book, borrowing it,
|
||||||
|
reserving it and taking it back.
|
||||||
|
""")
|
||||||
|
@Subject(BorrowingFacade)
|
||||||
class BorrowingFacadeSpec extends Specification {
|
class BorrowingFacadeSpec extends Specification {
|
||||||
|
|
||||||
private BorrowingFacade facade;
|
private BorrowingFacade facade
|
||||||
private InMemoryBorrowingDatabase database;
|
private InMemoryBorrowingDatabase database
|
||||||
private BorrowingEventPublisher eventPublisher;
|
private BorrowingEventPublisher eventPublisher
|
||||||
|
|
||||||
def setup(){
|
def setup() {
|
||||||
database = new InMemoryBorrowingDatabase();
|
database = new InMemoryBorrowingDatabase()
|
||||||
eventPublisher = new BorrowingEventPublisherFake();
|
eventPublisher = new BorrowingEventPublisherFake()
|
||||||
facade = new BorrowingFacade(database, eventPublisher);
|
facade = new BorrowingFacade(database, eventPublisher)
|
||||||
}
|
}
|
||||||
|
|
||||||
def "Make a book available"(){
|
def "Make a book available"() {
|
||||||
|
|
||||||
given: "prepare a command"
|
given: "prepare a command"
|
||||||
def command = new MakeBookAvailableCommand(100L)
|
def makeBookAvailableCommand = new MakeBookAvailableCommand(100)
|
||||||
|
|
||||||
when: "receive MakeBookAvailableCommand"
|
when: "receive MakeBookAvailableCommand"
|
||||||
facade.handle(command)
|
facade.handle(makeBookAvailableCommand)
|
||||||
|
|
||||||
then: "check database to have this book as available"
|
then: "check database to have this book as available"
|
||||||
database.availableBooks[100L].idAsLong == new AvailableBook(100L).idAsLong
|
database.availableBooks[100L] == new AvailableBook(100)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
package io.wkrzywiec.hexagonal.library.domain.borrowing;
|
|
||||||
|
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BookReservedEvent;
|
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.outgoing.BorrowingEventPublisher;
|
|
||||||
|
|
||||||
public class BorrowingEventPublisherFake implements BorrowingEventPublisher {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void publish(BookReservedEvent event) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -4,14 +4,19 @@ import io.wkrzywiec.hexagonal.library.domain.borrowing.core.BorrowingFacade;
|
|||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ActiveUser;
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ActiveUser;
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.AvailableBook;
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.AvailableBook;
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BookReservationCommand;
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BookReservationCommand;
|
||||||
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BookReservedEvent;
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BorrowBookCommand;
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BorrowBookCommand;
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BorrowedBook;
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BorrowedBook;
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.GiveBackBookCommand;
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.GiveBackBookCommand;
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.MakeBookAvailableCommand;
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.MakeBookAvailableCommand;
|
||||||
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.OverdueReservation;
|
||||||
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservationDetails;
|
||||||
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservationId;
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservedBook;
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservedBook;
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.exception.ActiveUserNotFoundException;
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.exception.ActiveUserNotFoundException;
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.exception.AvailableBookNotFoundExeption;
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.exception.AvailableBookNotFoundExeption;
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.exception.TooManyBooksAssignedToUserException;
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.exception.TooManyBooksAssignedToUserException;
|
||||||
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.outgoing.BorrowingDatabase;
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.outgoing.BorrowingEventPublisher;
|
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.outgoing.BorrowingEventPublisher;
|
||||||
import org.apache.commons.lang3.reflect.FieldUtils;
|
import org.apache.commons.lang3.reflect.FieldUtils;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
@@ -23,12 +28,16 @@ import java.time.temporal.ChronoUnit;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Random;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
public class BorrowingFacadeTest {
|
class BorrowingFacadeTest {
|
||||||
|
|
||||||
private BorrowingFacade facade;
|
private BorrowingFacade facade;
|
||||||
private InMemoryBorrowingDatabase database;
|
private InMemoryBorrowingDatabase database;
|
||||||
@@ -214,3 +223,80 @@ public class BorrowingFacadeTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class InMemoryBorrowingDatabase implements BorrowingDatabase {
|
||||||
|
|
||||||
|
ConcurrentHashMap<Long, ActiveUser> activeUsers = new ConcurrentHashMap<>();
|
||||||
|
ConcurrentHashMap<Long, AvailableBook> availableBooks = new ConcurrentHashMap<>();
|
||||||
|
ConcurrentHashMap<Long, ReservedBook> reservedBooks = new ConcurrentHashMap<>();
|
||||||
|
ConcurrentHashMap<Long, BorrowedBook> borrowedBooks = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save(AvailableBook availableBook) {
|
||||||
|
availableBooks.put(availableBook.getIdAsLong(), availableBook);
|
||||||
|
reservedBooks.remove(availableBook.getIdAsLong());
|
||||||
|
borrowedBooks.remove(availableBook.getIdAsLong());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<AvailableBook> getAvailableBook(Long bookId) {
|
||||||
|
if (availableBooks.containsKey(bookId)) {
|
||||||
|
return Optional.of(availableBooks.get(bookId));
|
||||||
|
} else {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<ActiveUser> getActiveUser(Long userId) {
|
||||||
|
if (activeUsers.containsKey(userId)) {
|
||||||
|
return Optional.of(activeUsers.get(userId));
|
||||||
|
} else {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ReservationDetails save(ReservedBook reservedBook) {
|
||||||
|
Long reservationId = new Random().nextLong();
|
||||||
|
availableBooks.remove(reservedBook.getIdAsLong());
|
||||||
|
reservedBooks.put(reservationId, reservedBook);
|
||||||
|
return new ReservationDetails(new ReservationId(reservationId), reservedBook);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void save(BorrowedBook borrowedBook) {
|
||||||
|
reservedBooks.remove(borrowedBook.getIdAsLong());
|
||||||
|
borrowedBooks.put(borrowedBook.getIdAsLong(), borrowedBook);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<OverdueReservation> findReservationsForMoreThan(Long days) {
|
||||||
|
return reservedBooks.values().stream()
|
||||||
|
.filter(reservedBook ->
|
||||||
|
Instant.now().isAfter(
|
||||||
|
reservedBook.getReservedDateAsInstant().plus(days, ChronoUnit.DAYS)))
|
||||||
|
.map(reservedBook ->
|
||||||
|
new OverdueReservation(
|
||||||
|
1L,
|
||||||
|
reservedBook.getIdAsLong()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<ReservedBook> getReservedBook(Long bookId) {
|
||||||
|
return Optional.of(reservedBooks.get(bookId));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<BorrowedBook> getBorrowedBook(Long bookId) {
|
||||||
|
return Optional.of(borrowedBooks.get(bookId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class BorrowingEventPublisherFake implements BorrowingEventPublisher {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void publish(BookReservedEvent event) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,89 +0,0 @@
|
|||||||
package io.wkrzywiec.hexagonal.library.domain.borrowing;
|
|
||||||
|
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ActiveUser;
|
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.AvailableBook;
|
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.BorrowedBook;
|
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.DueDate;
|
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.OverdueReservation;
|
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservationDetails;
|
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservationId;
|
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.model.ReservedBook;
|
|
||||||
import io.wkrzywiec.hexagonal.library.domain.borrowing.core.ports.outgoing.BorrowingDatabase;
|
|
||||||
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.time.temporal.ChronoUnit;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.Random;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
public class InMemoryBorrowingDatabase implements BorrowingDatabase {
|
|
||||||
|
|
||||||
ConcurrentHashMap<Long, ActiveUser> activeUsers = new ConcurrentHashMap<>();
|
|
||||||
ConcurrentHashMap<Long, AvailableBook> availableBooks = new ConcurrentHashMap<>();
|
|
||||||
ConcurrentHashMap<Long, ReservedBook> reservedBooks = new ConcurrentHashMap<>();
|
|
||||||
ConcurrentHashMap<Long, BorrowedBook> borrowedBooks = new ConcurrentHashMap<>();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void save(AvailableBook availableBook) {
|
|
||||||
availableBooks.put(availableBook.getIdAsLong(), availableBook);
|
|
||||||
reservedBooks.remove(availableBook.getIdAsLong());
|
|
||||||
borrowedBooks.remove(availableBook.getIdAsLong());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<AvailableBook> getAvailableBook(Long bookId) {
|
|
||||||
if (availableBooks.containsKey(bookId)) {
|
|
||||||
return Optional.of(availableBooks.get(bookId));
|
|
||||||
} else {
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<ActiveUser> getActiveUser(Long userId) {
|
|
||||||
if (activeUsers.containsKey(userId)) {
|
|
||||||
return Optional.of(activeUsers.get(userId));
|
|
||||||
} else {
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ReservationDetails save(ReservedBook reservedBook) {
|
|
||||||
Long reservationId = new Random().nextLong();
|
|
||||||
availableBooks.remove(reservedBook.getIdAsLong());
|
|
||||||
reservedBooks.put(reservationId, reservedBook);
|
|
||||||
return new ReservationDetails(new ReservationId(reservationId), reservedBook);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void save(BorrowedBook borrowedBook) {
|
|
||||||
reservedBooks.remove(borrowedBook.getIdAsLong());
|
|
||||||
borrowedBooks.put(borrowedBook.getIdAsLong(), borrowedBook);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<OverdueReservation> findReservationsForMoreThan(Long days) {
|
|
||||||
return reservedBooks.values().stream()
|
|
||||||
.filter(reservedBook ->
|
|
||||||
Instant.now().isAfter(
|
|
||||||
reservedBook.getReservedDateAsInstant().plus(days, ChronoUnit.DAYS)))
|
|
||||||
.map(reservedBook ->
|
|
||||||
new OverdueReservation(
|
|
||||||
1L,
|
|
||||||
reservedBook.getIdAsLong()))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<ReservedBook> getReservedBook(Long bookId) {
|
|
||||||
return Optional.of(reservedBooks.get(bookId));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<BorrowedBook> getBorrowedBook(Long bookId) {
|
|
||||||
return Optional.of(borrowedBooks.get(bookId));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
# Name of the implementation class(es) of report creator(s) to enable (separate multiple entries with commas)
|
||||||
|
# Currently supported classes are:
|
||||||
|
# 1. com.athaydes.spockframework.report.internal.HtmlReportCreator
|
||||||
|
# 2. com.athaydes.spockframework.report.template.TemplateReportCreator
|
||||||
|
com.athaydes.spockframework.report.IReportCreator=com.athaydes.spockframework.report.internal.HtmlReportCreator
|
||||||
|
|
||||||
|
# Set properties of the report creator
|
||||||
|
# For the HtmlReportCreator, the only properties available are
|
||||||
|
# (the location of the css files is relative to the classpath):
|
||||||
|
com.athaydes.spockframework.report.internal.HtmlReportCreator.featureReportCss=spock-feature-report.css
|
||||||
|
com.athaydes.spockframework.report.internal.HtmlReportCreator.summaryReportCss=spock-summary-report.css
|
||||||
|
com.athaydes.spockframework.report.internal.HtmlReportCreator.printThrowableStackTrace=false
|
||||||
|
com.athaydes.spockframework.report.internal.HtmlReportCreator.inlineCss=true
|
||||||
|
com.athaydes.spockframework.report.internal.HtmlReportCreator.enabled=true
|
||||||
|
# options are: "class_name_and_title", "class_name", "title"
|
||||||
|
com.athaydes.spockframework.report.internal.HtmlReportCreator.specSummaryNameOption=class_name_and_title
|
||||||
|
|
||||||
|
# exclude Specs Table of Contents
|
||||||
|
com.athaydes.spockframework.report.internal.HtmlReportCreator.excludeToc=false
|
||||||
|
|
||||||
|
# Output directory (where the spock reports will be created) - relative to working directory
|
||||||
|
com.athaydes.spockframework.report.outputDir=target/spock-reports
|
||||||
|
|
||||||
|
# Output directory where to store the aggregated JSON report (used to support parallel builds)
|
||||||
|
com.athaydes.spockframework.report.aggregatedJsonReportDir=
|
||||||
|
|
||||||
|
# If set to true, hides blocks which do not have any description
|
||||||
|
com.athaydes.spockframework.report.hideEmptyBlocks=false
|
||||||
|
|
||||||
|
# Set the name of the project under test so it can be displayed in the report
|
||||||
|
com.athaydes.spockframework.report.projectName=
|
||||||
|
|
||||||
|
# Set the version of the project under test so it can be displayed in the report
|
||||||
|
com.athaydes.spockframework.report.projectVersion=Unknown
|
||||||
|
|
||||||
|
# Show the source code for each block
|
||||||
|
com.athaydes.spockframework.report.showCodeBlocks=true
|
||||||
|
|
||||||
|
# Set the root location of the Spock test source code (only used if showCodeBlocks is 'true')
|
||||||
|
com.athaydes.spockframework.report.testSourceRoots=src/test/groovy
|
||||||
|
|
||||||
|
# Set properties specific to the TemplateReportCreator
|
||||||
|
com.athaydes.spockframework.report.template.TemplateReportCreator.specTemplateFile=/templateReportCreator/spec-template.md
|
||||||
|
com.athaydes.spockframework.report.template.TemplateReportCreator.reportFileExtension=md
|
||||||
|
com.athaydes.spockframework.report.template.TemplateReportCreator.summaryTemplateFile=/templateReportCreator/summary-template.md
|
||||||
|
com.athaydes.spockframework.report.template.TemplateReportCreator.summaryFileName=summary.md
|
||||||
|
com.athaydes.spockframework.report.template.TemplateReportCreator.enabled=true
|
||||||
Reference in New Issue
Block a user