fix: update mongo test container setup process (#28775)
This commit is contained in:
parent
72858bf1a2
commit
5c9840eb4c
|
|
@ -14,4 +14,20 @@
|
|||
|
||||
<name>mongoPlugin</name>
|
||||
|
||||
<dependencies>
|
||||
<!-- Test dependencies -->
|
||||
<dependency>
|
||||
<groupId>org.testcontainers</groupId>
|
||||
<artifactId>mongodb</artifactId>
|
||||
<version>1.19.1</version>
|
||||
<scope>test</scope>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import com.mongodb.reactivestreams.client.MongoClient;
|
|||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.testcontainers.containers.GenericContainer;
|
||||
import org.testcontainers.containers.MongoDBContainer;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
|
@ -47,6 +47,7 @@ import static com.external.plugins.utils.DatasourceUtils.extractInfoFromConnecti
|
|||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.mockito.Mockito.any;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
|
|
@ -66,11 +67,11 @@ public class MongoPluginDatasourceTest {
|
|||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@Container
|
||||
public static GenericContainer mongoContainer = new MongoTestContainer();
|
||||
public static MongoDBContainer mongoContainer = MongoTestDBContainerManager.getMongoDBForTest();
|
||||
|
||||
@BeforeAll
|
||||
public static void setUp() {
|
||||
address = mongoContainer.getContainerIpAddress();
|
||||
address = mongoContainer.getHost();
|
||||
port = mongoContainer.getFirstMappedPort();
|
||||
}
|
||||
|
||||
|
|
@ -99,10 +100,7 @@ public class MongoPluginDatasourceTest {
|
|||
|
||||
Mono<MongoClient> dsConnectionMono = pluginExecutor.datasourceCreate(dsConfig);
|
||||
StepVerifier.create(dsConnectionMono)
|
||||
.assertNext(obj -> {
|
||||
MongoClient client = obj;
|
||||
assertNotNull(client);
|
||||
})
|
||||
.assertNext(Assertions::assertNotNull)
|
||||
.verifyComplete();
|
||||
}
|
||||
|
||||
|
|
@ -268,7 +266,7 @@ public class MongoPluginDatasourceTest {
|
|||
.assertNext(invalids -> {
|
||||
String expectedError = "Appsmith server has failed to fetch SSL configuration from datasource "
|
||||
+ "configuration form. Please reach out to Appsmith customer support to resolve this.";
|
||||
assertTrue(invalids.stream().anyMatch(error -> expectedError.equals(error)));
|
||||
assertTrue(invalids.stream().anyMatch(expectedError::equals));
|
||||
})
|
||||
.verifyComplete();
|
||||
}
|
||||
|
|
@ -420,8 +418,8 @@ public class MongoPluginDatasourceTest {
|
|||
+ "&minpoolsize=0";
|
||||
Map extractedInfo = extractInfoFromConnectionStringURI(uri, MONGO_URI_REGEX);
|
||||
assertEquals("mongodb://", extractedInfo.get(KEY_URI_HEAD));
|
||||
assertEquals(null, extractedInfo.get(KEY_USERNAME));
|
||||
assertEquals(null, extractedInfo.get(KEY_PASSWORD));
|
||||
assertNull(extractedInfo.get(KEY_USERNAME));
|
||||
assertNull(extractedInfo.get(KEY_PASSWORD));
|
||||
assertEquals("localhost:28017", extractedInfo.get(KEY_HOST_PORT));
|
||||
assertEquals("mongo_samples", extractedInfo.get(KEY_URI_DEFAULT_DBNAME));
|
||||
assertEquals("w=majority&retrywrites=true&authsource=admin&minpoolsize=0", extractedInfo.get(KEY_URI_TAIL));
|
||||
|
|
@ -433,8 +431,8 @@ public class MongoPluginDatasourceTest {
|
|||
+ "&minpoolsize=0";
|
||||
Map extractedInfo = extractInfoFromConnectionStringURI(uri, MONGO_URI_REGEX);
|
||||
assertEquals("mongodb://", extractedInfo.get(KEY_URI_HEAD));
|
||||
assertEquals(null, extractedInfo.get(KEY_USERNAME));
|
||||
assertEquals(null, extractedInfo.get(KEY_PASSWORD));
|
||||
assertNull(extractedInfo.get(KEY_USERNAME));
|
||||
assertNull(extractedInfo.get(KEY_PASSWORD));
|
||||
assertEquals("localhost:28017", extractedInfo.get(KEY_HOST_PORT));
|
||||
assertEquals("mongo_samples", extractedInfo.get(KEY_URI_DEFAULT_DBNAME));
|
||||
assertEquals("w=majority&retrywrites=true&authsource=admin&minpoolsize=0", extractedInfo.get(KEY_URI_TAIL));
|
||||
|
|
|
|||
|
|
@ -14,16 +14,14 @@ import com.appsmith.external.models.Property;
|
|||
import com.appsmith.external.models.SSLDetails;
|
||||
import com.external.plugins.exceptions.MongoPluginError;
|
||||
import com.external.plugins.exceptions.MongoPluginErrorMessages;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||
import com.mongodb.MongoCommandException;
|
||||
import com.mongodb.MongoSecurityException;
|
||||
import com.mongodb.reactivestreams.client.MongoClient;
|
||||
import com.mongodb.reactivestreams.client.MongoClients;
|
||||
import com.mongodb.reactivestreams.client.MongoDatabase;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.testcontainers.containers.GenericContainer;
|
||||
import org.testcontainers.containers.MongoDBContainer;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
|
@ -70,19 +68,15 @@ public class MongoPluginErrorsTest {
|
|||
|
||||
private static String address;
|
||||
private static Integer port;
|
||||
private JsonNode value;
|
||||
private static MongoClient mongoClient;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@Container
|
||||
public static GenericContainer mongoContainer = new MongoTestContainer();
|
||||
public static MongoDBContainer mongoContainer = MongoTestDBContainerManager.getMongoDBForTest();
|
||||
|
||||
@BeforeAll
|
||||
public static void setUp() {
|
||||
address = mongoContainer.getContainerIpAddress();
|
||||
address = mongoContainer.getHost();
|
||||
port = mongoContainer.getFirstMappedPort();
|
||||
String uri = "mongodb://" + address + ":" + port;
|
||||
mongoClient = MongoClients.create(uri);
|
||||
}
|
||||
|
||||
private DatasourceConfiguration createDatasourceConfiguration() {
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ import com.mongodb.reactivestreams.client.MongoCollection;
|
|||
import org.bson.Document;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.testcontainers.containers.GenericContainer;
|
||||
import org.testcontainers.containers.MongoDBContainer;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
import reactor.core.publisher.Flux;
|
||||
|
|
@ -73,11 +73,11 @@ public class MongoPluginFormsTest {
|
|||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@Container
|
||||
public static GenericContainer mongoContainer = new MongoTestContainer();
|
||||
public static MongoDBContainer mongoContainer = MongoTestDBContainerManager.getMongoDBForTest();
|
||||
|
||||
@BeforeAll
|
||||
public static void setUp() {
|
||||
address = mongoContainer.getContainerIpAddress();
|
||||
address = mongoContainer.getHost();
|
||||
port = mongoContainer.getFirstMappedPort();
|
||||
String uri = "mongodb://" + address + ":" + port;
|
||||
mongoClient = MongoClients.create(uri);
|
||||
|
|
|
|||
|
|
@ -18,10 +18,9 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
|||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import com.mongodb.reactivestreams.client.MongoClient;
|
||||
import com.mongodb.reactivestreams.client.MongoClients;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.testcontainers.containers.GenericContainer;
|
||||
import org.testcontainers.containers.MongoDBContainer;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
|
@ -71,18 +70,15 @@ public class MongoPluginQueriesTest {
|
|||
private static String address;
|
||||
private static Integer port;
|
||||
private JsonNode value;
|
||||
private static MongoClient mongoClient;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@Container
|
||||
public static GenericContainer mongoContainer = new MongoTestContainer();
|
||||
public static MongoDBContainer mongoContainer = MongoTestDBContainerManager.getMongoDBForTest();
|
||||
|
||||
@BeforeAll
|
||||
public static void setUp() {
|
||||
address = mongoContainer.getContainerIpAddress();
|
||||
address = mongoContainer.getHost();
|
||||
port = mongoContainer.getFirstMappedPort();
|
||||
String uri = "mongodb://" + address + ":" + port;
|
||||
mongoClient = MongoClients.create(uri);
|
||||
}
|
||||
|
||||
private DatasourceConfiguration createDatasourceConfiguration() {
|
||||
|
|
|
|||
|
|
@ -9,13 +9,11 @@ import com.appsmith.external.models.Endpoint;
|
|||
import com.appsmith.external.models.Param;
|
||||
import com.appsmith.external.models.ParsedDataType;
|
||||
import com.appsmith.external.models.SSLDetails;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||
import com.mongodb.reactivestreams.client.MongoClient;
|
||||
import com.mongodb.reactivestreams.client.MongoClients;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.testcontainers.containers.GenericContainer;
|
||||
import org.testcontainers.containers.MongoDBContainer;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
|
@ -44,19 +42,15 @@ public class MongoPluginRegexTest {
|
|||
|
||||
private static String address;
|
||||
private static Integer port;
|
||||
private JsonNode value;
|
||||
private static MongoClient mongoClient;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@Container
|
||||
public static GenericContainer mongoContainer = new MongoTestContainer();
|
||||
public static MongoDBContainer mongoContainer = MongoTestDBContainerManager.getMongoDBForTest();
|
||||
|
||||
@BeforeAll
|
||||
public static void setUp() {
|
||||
address = mongoContainer.getContainerIpAddress();
|
||||
address = mongoContainer.getHost();
|
||||
port = mongoContainer.getFirstMappedPort();
|
||||
String uri = "mongodb://" + address + ":" + port;
|
||||
mongoClient = MongoClients.create(uri);
|
||||
}
|
||||
|
||||
private DatasourceConfiguration createDatasourceConfiguration() {
|
||||
|
|
|
|||
|
|
@ -8,14 +8,12 @@ import com.appsmith.external.models.DatasourceConfiguration;
|
|||
import com.appsmith.external.models.DatasourceStructure;
|
||||
import com.appsmith.external.models.Endpoint;
|
||||
import com.appsmith.external.models.SSLDetails;
|
||||
import com.fasterxml.jackson.databind.JsonNode;
|
||||
import com.mongodb.MongoSocketWriteException;
|
||||
import com.mongodb.reactivestreams.client.MongoClient;
|
||||
import com.mongodb.reactivestreams.client.MongoClients;
|
||||
import com.mongodb.reactivestreams.client.MongoDatabase;
|
||||
import org.junit.jupiter.api.BeforeAll;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.testcontainers.containers.GenericContainer;
|
||||
import org.testcontainers.containers.MongoDBContainer;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
|
@ -44,19 +42,15 @@ public class MongoPluginStaleConnTest {
|
|||
|
||||
private static String address;
|
||||
private static Integer port;
|
||||
private JsonNode value;
|
||||
private static MongoClient mongoClient;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@Container
|
||||
public static GenericContainer mongoContainer = new MongoTestContainer();
|
||||
public static MongoDBContainer mongoContainer = MongoTestDBContainerManager.getMongoDBForTest();
|
||||
|
||||
@BeforeAll
|
||||
public static void setUp() {
|
||||
address = mongoContainer.getContainerIpAddress();
|
||||
address = mongoContainer.getHost();
|
||||
port = mongoContainer.getFirstMappedPort();
|
||||
String uri = "mongodb://" + address + ":" + port;
|
||||
mongoClient = MongoClients.create(uri);
|
||||
}
|
||||
|
||||
private DatasourceConfiguration createDatasourceConfiguration() {
|
||||
|
|
|
|||
|
|
@ -1,120 +0,0 @@
|
|||
package com.external.plugins;
|
||||
|
||||
import com.github.dockerjava.api.command.InspectContainerResponse;
|
||||
import com.mongodb.DBRef;
|
||||
import com.mongodb.reactivestreams.client.MongoClient;
|
||||
import com.mongodb.reactivestreams.client.MongoClients;
|
||||
import com.mongodb.reactivestreams.client.MongoCollection;
|
||||
import org.bson.Document;
|
||||
import org.bson.types.BSONTimestamp;
|
||||
import org.bson.types.Decimal128;
|
||||
import org.testcontainers.containers.GenericContainer;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.Date;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class MongoTestContainer extends GenericContainer {
|
||||
|
||||
private static MongoClient mongoClient;
|
||||
|
||||
public MongoTestContainer() {
|
||||
super(CompletableFuture.completedFuture("mongo:4.4"));
|
||||
addExposedPorts(27017);
|
||||
}
|
||||
|
||||
/*
|
||||
* this is overridden to prepare Mongo with sample dataset after the test container is started
|
||||
*/
|
||||
@Override
|
||||
protected void containerIsStarted(InspectContainerResponse containerInfo) {
|
||||
|
||||
String uri = "mongodb://" + getHost() + ":" + getFirstMappedPort();
|
||||
mongoClient = MongoClients.create(uri);
|
||||
|
||||
Flux.from(mongoClient.getDatabase("test").listCollectionNames())
|
||||
.collectList()
|
||||
.flatMap(collectionNamesList -> {
|
||||
if (collectionNamesList.size() == 0) {
|
||||
final MongoCollection<Document> usersCollection =
|
||||
mongoClient.getDatabase("test").getCollection("users");
|
||||
Mono.from(usersCollection.insertMany(List.of(
|
||||
new Document(Map.of(
|
||||
"name",
|
||||
"Cierra Vega",
|
||||
"gender",
|
||||
"F",
|
||||
"age",
|
||||
20,
|
||||
"luckyNumber",
|
||||
987654321L,
|
||||
"dob",
|
||||
LocalDate.of(2018, 12, 31),
|
||||
"netWorth",
|
||||
new BigDecimal("123456.789012"),
|
||||
"updatedByCommand",
|
||||
false)),
|
||||
new Document(Map.of(
|
||||
"name",
|
||||
"Alden Cantrell",
|
||||
"gender",
|
||||
"M",
|
||||
"age",
|
||||
30,
|
||||
"dob",
|
||||
new Date(0),
|
||||
"netWorth",
|
||||
Decimal128.parse("123456.789012"),
|
||||
"updatedByCommand",
|
||||
false,
|
||||
"aLong",
|
||||
9_000_000_000_000_000_000L,
|
||||
"ts",
|
||||
new BSONTimestamp(1421006159, 4))),
|
||||
new Document(Map.of("name", "Kierra Gentry", "gender", "F", "age", 40)))))
|
||||
.block();
|
||||
|
||||
final MongoCollection<Document> addressCollection =
|
||||
mongoClient.getDatabase("test").getCollection("address");
|
||||
Mono.from(addressCollection.insertMany(List.of(
|
||||
new Document(Map.of(
|
||||
"user", new DBRef("test", "users", "1"),
|
||||
"street", "First Street",
|
||||
"city", "Line One",
|
||||
"state", "UP")),
|
||||
new Document(Map.of(
|
||||
"user", new DBRef("AAA", "BBB", "2000"),
|
||||
"street", "Second Street",
|
||||
"city", "Line Two",
|
||||
"state", "UP")))))
|
||||
.block();
|
||||
|
||||
final MongoCollection<Document> teamCollection =
|
||||
mongoClient.getDatabase("test").getCollection("teams");
|
||||
Mono.from(teamCollection.insertMany(List.of(
|
||||
new Document(Map.of(
|
||||
"name", "Noisy Neighbours 2",
|
||||
"goals_allowed", "20",
|
||||
"goals_forwarded", "41",
|
||||
"goal_difference", "+21",
|
||||
"xGD", "-2.5",
|
||||
"best_scoreline", "5-2")),
|
||||
new Document(Map.of(
|
||||
"name", "Red Side of the city",
|
||||
"goals_allowed", "35",
|
||||
"goals_forwarded", "28",
|
||||
"goal_difference", "-7",
|
||||
"xGD", "+3.6",
|
||||
"best_scoreline", "8-3")))))
|
||||
.block();
|
||||
}
|
||||
return Mono.empty();
|
||||
})
|
||||
.block();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,116 @@
|
|||
package com.external.plugins;
|
||||
|
||||
import com.mongodb.DBRef;
|
||||
import com.mongodb.reactivestreams.client.MongoClient;
|
||||
import com.mongodb.reactivestreams.client.MongoClients;
|
||||
import com.mongodb.reactivestreams.client.MongoCollection;
|
||||
import org.bson.Document;
|
||||
import org.bson.types.BSONTimestamp;
|
||||
import org.bson.types.Decimal128;
|
||||
import org.testcontainers.containers.MongoDBContainer;
|
||||
import org.testcontainers.utility.DockerImageName;
|
||||
import reactor.core.publisher.Flux;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.Date;
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class MongoTestDBContainerManager {
|
||||
public static final String MONGO_DOCKER_HUB_CONTAINER = "mongo:4.4";
|
||||
|
||||
public static MongoDBContainer getMongoDBForTest() {
|
||||
MongoDBContainer mongoDBContainer = new MongoDBContainer(DockerImageName.parse(MONGO_DOCKER_HUB_CONTAINER));
|
||||
mongoDBContainer.start();
|
||||
initialSetup(mongoDBContainer);
|
||||
return mongoDBContainer;
|
||||
}
|
||||
|
||||
private static void initialSetup(MongoDBContainer mongoDBContainer) {
|
||||
String uri = "mongodb://" + mongoDBContainer.getHost() + ":" + mongoDBContainer.getFirstMappedPort();
|
||||
try (MongoClient mongoClient = MongoClients.create(uri)) {
|
||||
|
||||
Flux.from(mongoClient.getDatabase("test").listCollectionNames())
|
||||
.collectList()
|
||||
.flatMap(collectionNamesList -> {
|
||||
if (collectionNamesList.isEmpty()) {
|
||||
final MongoCollection<Document> usersCollection =
|
||||
mongoClient.getDatabase("test").getCollection("users");
|
||||
Mono.from(usersCollection.insertMany(List.of(
|
||||
new Document(Map.of(
|
||||
"name",
|
||||
"Cierra Vega",
|
||||
"gender",
|
||||
"F",
|
||||
"age",
|
||||
20,
|
||||
"luckyNumber",
|
||||
987654321L,
|
||||
"dob",
|
||||
LocalDate.of(2018, 12, 31),
|
||||
"netWorth",
|
||||
new BigDecimal("123456.789012"),
|
||||
"updatedByCommand",
|
||||
false)),
|
||||
new Document(Map.of(
|
||||
"name",
|
||||
"Alden Cantrell",
|
||||
"gender",
|
||||
"M",
|
||||
"age",
|
||||
30,
|
||||
"dob",
|
||||
new Date(0),
|
||||
"netWorth",
|
||||
Decimal128.parse("123456.789012"),
|
||||
"updatedByCommand",
|
||||
false,
|
||||
"aLong",
|
||||
9_000_000_000_000_000_000L,
|
||||
"ts",
|
||||
new BSONTimestamp(1421006159, 4))),
|
||||
new Document(Map.of("name", "Kierra Gentry", "gender", "F", "age", 40)))))
|
||||
.block();
|
||||
|
||||
final MongoCollection<Document> addressCollection =
|
||||
mongoClient.getDatabase("test").getCollection("address");
|
||||
Mono.from(addressCollection.insertMany(List.of(
|
||||
new Document(Map.of(
|
||||
"user", new DBRef("test", "users", "1"),
|
||||
"street", "First Street",
|
||||
"city", "Line One",
|
||||
"state", "UP")),
|
||||
new Document(Map.of(
|
||||
"user", new DBRef("AAA", "BBB", "2000"),
|
||||
"street", "Second Street",
|
||||
"city", "Line Two",
|
||||
"state", "UP")))))
|
||||
.block();
|
||||
|
||||
final MongoCollection<Document> teamCollection =
|
||||
mongoClient.getDatabase("test").getCollection("teams");
|
||||
Mono.from(teamCollection.insertMany(List.of(
|
||||
new Document(Map.of(
|
||||
"name", "Noisy Neighbours 2",
|
||||
"goals_allowed", "20",
|
||||
"goals_forwarded", "41",
|
||||
"goal_difference", "+21",
|
||||
"xGD", "-2.5",
|
||||
"best_scoreline", "5-2")),
|
||||
new Document(Map.of(
|
||||
"name", "Red Side of the city",
|
||||
"goals_allowed", "35",
|
||||
"goals_forwarded", "28",
|
||||
"goal_difference", "-7",
|
||||
"xGD", "+3.6",
|
||||
"best_scoreline", "8-3")))))
|
||||
.block();
|
||||
}
|
||||
return Mono.empty();
|
||||
})
|
||||
.block();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user