Skip to content

Commit 000f9e2

Browse files
authored
Bugfix/49 settings file (#50)
* Fix issue with getMap in JsonSettingsFile * Increase version
1 parent 118d637 commit 000f9e2

File tree

4 files changed

+40
-19
lines changed

4 files changed

+40
-19
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.github.aquality-automation</groupId>
88
<artifactId>aquality-selenium-core</artifactId>
9-
<version>1.0.1</version>
9+
<version>1.0.2</version>
1010

1111
<packaging>jar</packaging>
1212
<name>Aquality Selenium Core</name>

src/main/java/aquality/selenium/core/utilities/JsonSettingsFile.java

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import java.nio.file.Paths;
1212
import java.util.*;
1313
import java.util.Map.Entry;
14+
import java.util.stream.Collectors;
15+
import java.util.stream.StreamSupport;
1416

1517
public class JsonSettingsFile implements ISettingsFile {
1618

@@ -34,9 +36,9 @@ public Object getValue(String jsonPath) {
3436
private Object getEnvValueOrDefault(String jsonPath, boolean throwIfEmpty) {
3537
String envVar = getEnvValue(jsonPath);
3638
JsonNode node = getJsonNode(jsonPath, throwIfEmpty && envVar == null);
37-
return !node.isMissingNode()
38-
? castEnvOrDefaulValue(node, envVar)
39-
: envVar;
39+
return node.isMissingNode()
40+
? envVar
41+
: castEnvOrDefaultValue(node, envVar);
4042
}
4143

4244
/**
@@ -46,7 +48,7 @@ private Object getEnvValueOrDefault(String jsonPath, boolean throwIfEmpty) {
4648
* @param envVar value got from environment variable
4749
* @return Value, casted to specific type.
4850
*/
49-
private Object castEnvOrDefaulValue(JsonNode node, String envVar) {
51+
private Object castEnvOrDefaultValue(JsonNode node, String envVar) {
5052
if (node.isBoolean()) {
5153
return envVar == null ? node.asBoolean() : Boolean.parseBoolean(envVar);
5254
} else if (node.isLong()) {
@@ -55,6 +57,8 @@ private Object castEnvOrDefaulValue(JsonNode node, String envVar) {
5557
return envVar == null ? node.asInt() : Integer.parseInt(envVar);
5658
} else if (node.isDouble()) {
5759
return envVar == null ? node.asDouble() : Double.parseDouble(envVar);
60+
} else if (node.isObject()) {
61+
return envVar == null ? node.toString() : envVar;
5862
} else {
5963
return envVar == null ? node.asText() : envVar;
6064
}
@@ -66,29 +70,31 @@ private String getEnvValue(String jsonPath) {
6670
if (envVar != null) {
6771
Logger.getInstance().debug(String.format("***** Using variable passed from environment %1$s=%2$s", key, envVar));
6872
}
69-
7073
return envVar;
7174
}
7275

7376
@Override
7477
public List<String> getList(String jsonPath) {
75-
List<String> list = new ArrayList<>();
78+
List<String> list;
7679
String envVar = getEnvValue(jsonPath);
7780
if (envVar != null) {
78-
Arrays.stream(envVar.split(",")).forEach(element -> list.add(element.trim()));
81+
list = Arrays.stream(envVar.split(","))
82+
.map(String::trim)
83+
.collect(Collectors.toList());
7984
} else {
80-
getJsonNode(jsonPath).elements().forEachRemaining(node -> list.add(node.asText()));
85+
Spliterator<JsonNode> spliterator = Spliterators.spliteratorUnknownSize(getJsonNode(jsonPath).elements(), Spliterator.ORDERED);
86+
list = StreamSupport.stream(spliterator, false)
87+
.map(JsonNode::asText)
88+
.collect(Collectors.toList());
8189
}
82-
8390
return list;
8491
}
8592

8693
@Override
8794
public Map<String, Object> getMap(String jsonPath) {
88-
Iterator<Entry<String, JsonNode>> iterator = getJsonNode(jsonPath).fields();
89-
final Map<String, Object> result = new HashMap<>();
90-
iterator.forEachRemaining(entry -> result.put(entry.getKey(), getValue(jsonPath + "/" + entry.getKey())));
91-
return result;
95+
Spliterator<Entry<String, JsonNode>> spliterator = Spliterators.spliteratorUnknownSize(getJsonNode(jsonPath).fields(), Spliterator.ORDERED);
96+
return StreamSupport.stream(spliterator, false)
97+
.collect(Collectors.toMap(Entry::getKey, entry -> getValue(jsonPath + "/" + entry.getKey())));
9298
}
9399

94100
private JsonNode getJsonNode(String jsonPath) {

src/test/java/tests/utilities/SettingsFileTests.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import static org.testng.Assert.*;
1919

2020
public class SettingsFileTests extends BaseProfileTest {
21+
2122
private static final String TIMEOUT_POLLING_INTERVAL_PATH = "/timeouts/timeoutPollingInterval";
2223
private static final String NULLVALUE_PATH = "/nullValue";
2324
private static final String ABSENTVALUE_PATH = "/absentvalue";
@@ -27,18 +28,25 @@ public class SettingsFileTests extends BaseProfileTest {
2728
private static final String BOOLEANVALUE_ENV_KEY = "booleanValue";
2829
private static final String PROFILE = "jsontest";
2930
private static final String FILE_NAME = String.format("settings.%s.json", PROFILE);
30-
private ISettingsFile jsonSettingsFile;
31-
private static final Map EXPECTED_LANGUAGES = new HashMap<String, String>() {{
31+
private static final Map<String, String> EXPECTED_LANGUAGES = new HashMap<String, String>() {{
3232
put("language", "ru");
3333
}};
3434

35+
private ISettingsFile jsonSettingsFile;
36+
3537
@BeforeMethod
3638
public void before() {
3739
System.setProperty(PROFILE_KEY, PROFILE);
3840
CustomAqualityServices.initInjector(getTestModule());
3941
jsonSettingsFile = CustomAqualityServices.getServiceProvider().getInstance(ISettingsFile.class);
4042
}
4143

44+
@Test
45+
public void testShouldBePossibleToGetMapWithJsonObject() {
46+
Map<String, Object> capabilities = jsonSettingsFile.getMap("/".concat("capabilities"));
47+
assertFalse(capabilities.get("loggingPrefs").toString().isEmpty());
48+
}
49+
4250
@Test
4351
public void testShouldBePossibleToOverrideBooleanValueViaEnvironmentVariable() {
4452
BooleanSupplier getCurrentValue = () -> (Boolean) jsonSettingsFile.getValue("/".concat(BOOLEANVALUE_ENV_KEY));
@@ -83,7 +91,7 @@ public void testShouldBePossibleToGetValue() {
8391
@Test
8492
public void testShouldBePossibleToGetListOfValues() {
8593
String argumentsPath = "/arguments/start";
86-
List expectedArguments = Arrays.asList("first", "second");
94+
List<String> expectedArguments = Arrays.asList("first", "second");
8795

8896
List<String> arguments = jsonSettingsFile.getList(argumentsPath);
8997
assertNotNull(arguments);
@@ -101,12 +109,12 @@ public void testShouldBePossibleToGetListOfValues() {
101109
public void testShouldBePossibleToGetMap() {
102110
String loggerPath = "/logger";
103111

104-
Map languages = jsonSettingsFile.getMap(loggerPath);
112+
Map<String, Object> languages = jsonSettingsFile.getMap(loggerPath);
105113
assertNotNull(languages);
106114
assertEquals(languages, EXPECTED_LANGUAGES, String.format("Map of values in settings file '%s' should be read correctly", FILE_NAME));
107115

108116
String newLanguageValue = "newLangMap";
109-
Map expectedLanguages = new HashMap<String, String>() {{
117+
Map<String, String> expectedLanguages = new HashMap<String, String>() {{
110118
put("language", newLanguageValue);
111119
}};
112120
System.setProperty(LANGUAGE_ENV_KEY, newLanguageValue);

src/test/resources/settings.jsontest.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
11
{
2+
"capabilities": {
3+
"loggingPrefs": {
4+
"driver": "INFO",
5+
"server": "OFF",
6+
"browser": "FINE"
7+
}
8+
},
29
"timeouts": {
310
"timeoutImplicit": 1000,
411
"timeoutCondition": 1000,

0 commit comments

Comments
 (0)