Skip to content

Commit 17808c2

Browse files
feat: Add Polarion status provider and maven resource filtering (#241)
* feat: Add Polarion status provider and maven resource filtering
1 parent 6d09ddf commit 17808c2

File tree

5 files changed

+117
-0
lines changed

5 files changed

+117
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package ch.sbb.polarion.extension.generic.configuration;
2+
3+
import ch.sbb.polarion.extension.generic.util.VersionUtils;
4+
import com.polarion.core.config.Configuration;
5+
import org.jetbrains.annotations.NotNull;
6+
7+
@SuppressWarnings("unused") // Referenced in extensions which inherits from this project
8+
public class GenericPolarionStatusProvider extends ConfigurationStatusProvider {
9+
public static final String POLARION_ALM = "Polarion ALM";
10+
11+
@Override
12+
public @NotNull ConfigurationStatus getStatus(@NotNull Context context) {
13+
String currentCompatiblePolarionVersion = VersionUtils.getCurrentCompatiblePolarionVersion();
14+
if (currentCompatiblePolarionVersion == null || currentCompatiblePolarionVersion.trim().isEmpty()) {
15+
return new ConfigurationStatus(POLARION_ALM, Status.ERROR, "Officially supported version not specified");
16+
}
17+
18+
String versionName = Configuration.getInstance().getProduct().versionName();
19+
if (versionName.startsWith(currentCompatiblePolarionVersion)) {
20+
return new ConfigurationStatus(POLARION_ALM, Status.OK, versionName);
21+
} else {
22+
return new ConfigurationStatus(POLARION_ALM, Status.WARNING, "%s is not officially supported".formatted(versionName));
23+
}
24+
}
25+
}

app/src/main/java/ch/sbb/polarion/extension/generic/util/VersionUtils.java

+27
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
package ch.sbb.polarion.extension.generic.util;
22

3+
import java.io.IOException;
4+
import java.io.InputStream;
5+
import java.util.Properties;
36
import java.util.jar.Attributes;
47

58
import org.jetbrains.annotations.NotNull;
69

710
import ch.sbb.polarion.extension.generic.rest.model.Version;
811
import lombok.experimental.UtilityClass;
12+
import org.jetbrains.annotations.Nullable;
913

1014
@UtilityClass
1115
public class VersionUtils {
1216

17+
private static final String GENERIC_PROPERTIES_FILE = "generic.properties";
18+
1319
public static final String BUNDLE_NAME = "Bundle-Name";
1420
public static final String BUNDLE_VENDOR = "Bundle-Vendor";
1521
public static final String SUPPORT_EMAIL = "Support-Email";
@@ -41,4 +47,25 @@ public static Version getVersion() {
4147
.build();
4248
}
4349

50+
public static @Nullable String getCurrentCompatiblePolarionVersion() {
51+
return getValueFromProperties("polarion.version");
52+
}
53+
54+
public static @Nullable String getValueFromProperties(String key) {
55+
return getValueFromProperties(GENERIC_PROPERTIES_FILE, key);
56+
}
57+
58+
public static @Nullable String getValueFromProperties(String propertiesFileName, String key) {
59+
try (InputStream input = VersionUtils.class.getClassLoader().getResourceAsStream(propertiesFileName)) {
60+
if (input == null) {
61+
return null;
62+
}
63+
64+
Properties properties = new Properties();
65+
properties.load(input);
66+
return properties.getProperty(key);
67+
} catch (IOException e) {
68+
return null;
69+
}
70+
}
4471
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
polarion.version=${polarion.version}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package ch.sbb.polarion.extension.generic.configuration;
2+
3+
import ch.sbb.polarion.extension.generic.util.VersionUtils;
4+
import com.polarion.core.config.Configuration;
5+
import org.junit.jupiter.params.ParameterizedTest;
6+
import org.junit.jupiter.params.provider.Arguments;
7+
import org.junit.jupiter.params.provider.MethodSource;
8+
import org.mockito.MockedStatic;
9+
import org.mockito.Mockito;
10+
11+
import java.util.stream.Stream;
12+
13+
import static org.junit.jupiter.api.Assertions.assertEquals;
14+
import static org.mockito.Mockito.mockStatic;
15+
16+
public class GenericPolarionStatusProviderTest {
17+
public static Stream<Arguments> provideConfigurationStatus() {
18+
return Stream.of(
19+
Arguments.of("2410", "2410", configurationStatus(Status.OK, "2410")),
20+
Arguments.of("2410.1", "2410", configurationStatus(Status.OK, "2410.1")),
21+
Arguments.of("2310", "2410", configurationStatus(Status.WARNING, "2310 is not officially supported")),
22+
Arguments.of("2310.1", "2410", configurationStatus(Status.WARNING, "2310.1 is not officially supported")),
23+
Arguments.of("2410", "", configurationStatus(Status.ERROR, "Officially supported version not specified")),
24+
Arguments.of("2410", null, configurationStatus(Status.ERROR, "Officially supported version not specified"))
25+
);
26+
}
27+
28+
private static ConfigurationStatus configurationStatus(Status status, String details) {
29+
return ConfigurationStatus.builder()
30+
.name(GenericPolarionStatusProvider.POLARION_ALM)
31+
.status(status)
32+
.details(details)
33+
.build();
34+
}
35+
36+
@ParameterizedTest
37+
@MethodSource("provideConfigurationStatus")
38+
void testConfigurationStatus(String polarionVersion, String currentCompatibleVersionPolarion, ConfigurationStatus expectedConfigurationStatus) {
39+
GenericPolarionStatusProvider polarionStatusProvider = new GenericPolarionStatusProvider();
40+
41+
try (
42+
MockedStatic<Configuration> configurationMockedStatic = mockStatic(Configuration.class, Mockito.RETURNS_DEEP_STUBS);
43+
MockedStatic<VersionUtils> versionUtilsMockedStatic = mockStatic(VersionUtils.class)
44+
) {
45+
configurationMockedStatic.when(() -> Configuration.getInstance().getProduct().versionName()).thenReturn(polarionVersion);
46+
versionUtilsMockedStatic.when(VersionUtils::getCurrentCompatiblePolarionVersion).thenReturn(currentCompatibleVersionPolarion);
47+
48+
ConfigurationStatusProvider.Context context = ConfigurationStatusProvider.Context.builder().scope("").build();
49+
ConfigurationStatus configurationStatus = polarionStatusProvider.getStatus(context);
50+
assertEquals(expectedConfigurationStatus, configurationStatus);
51+
}
52+
}
53+
}

pom.xml

+11
Original file line numberDiff line numberDiff line change
@@ -813,6 +813,17 @@
813813
</plugin>
814814
</plugins>
815815
</pluginManagement>
816+
817+
<resources>
818+
<resource>
819+
<directory>src/main/resources</directory>
820+
<filtering>false</filtering>
821+
</resource>
822+
<resource> <!-- Below is a way to replace polarion version in generic.properties by version from a profile -->
823+
<directory>src/main/resources-filtered</directory>
824+
<filtering>true</filtering>
825+
</resource>
826+
</resources>
816827
</build>
817828

818829
<modules>

0 commit comments

Comments
 (0)