From bb95fd6718f9153cc7a616b6e4549d1cb51573f7 Mon Sep 17 00:00:00 2001 From: Brian Long Date: Mon, 2 May 2022 23:45:50 +0100 Subject: [PATCH] split from aps-public-rest-api --- .gitignore | 11 + pom.xml | 206 ++++++++++++++++++ .../activiti/ApsClientCxfConfiguration.java | 32 +++ .../alfresco/activiti/ApsClientCxfImpl.java | 29 +++ .../activiti/ApsPublicRestApiCxfImpl.java | 31 +++ .../activiti/ApsClientConfiguration.java | 138 ++++++++++++ .../activiti/ApsPublicRestApiImpl.java | 62 ++++++ .../ApsClientJerseyConfiguration.java | 32 +++ .../activiti/ApsClientJerseyImpl.java | 29 +++ .../activiti/ApsPublicRestApiJerseyImpl.java | 31 +++ .../activiti/ConnectionCxfClientPojoIT.java | 32 +++ .../activiti/ConnectionCxfClientSpringIT.java | 28 +++ .../alfresco/activiti/ConditionalIT.java | 35 +++ .../alfresco/activiti/ConnectionClientIT.java | 54 +++++ .../activiti/ArrayResponseUnitTest.java | 37 ++++ .../ConnectionJerseyClientPojoIT.java | 31 +++ .../ConnectionJerseyClientSpringIT.java | 27 +++ .../activiti/ResultListResponseUnitTest.java | 43 ++++ src/test/resources/local-oauth.properties | 5 + src/test/resources/local.properties | 3 + 20 files changed, 896 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/cxf/com/inteligr8/alfresco/activiti/ApsClientCxfConfiguration.java create mode 100644 src/main/cxf/com/inteligr8/alfresco/activiti/ApsClientCxfImpl.java create mode 100644 src/main/cxf/com/inteligr8/alfresco/activiti/ApsPublicRestApiCxfImpl.java create mode 100644 src/main/java/com/inteligr8/alfresco/activiti/ApsClientConfiguration.java create mode 100644 src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestApiImpl.java create mode 100644 src/main/jersey/com/inteligr8/alfresco/activiti/ApsClientJerseyConfiguration.java create mode 100644 src/main/jersey/com/inteligr8/alfresco/activiti/ApsClientJerseyImpl.java create mode 100644 src/main/jersey/com/inteligr8/alfresco/activiti/ApsPublicRestApiJerseyImpl.java create mode 100644 src/test/cxf/com/inteligr8/alfresco/activiti/ConnectionCxfClientPojoIT.java create mode 100644 src/test/cxf/com/inteligr8/alfresco/activiti/ConnectionCxfClientSpringIT.java create mode 100644 src/test/java/com/inteligr8/alfresco/activiti/ConditionalIT.java create mode 100644 src/test/java/com/inteligr8/alfresco/activiti/ConnectionClientIT.java create mode 100644 src/test/jersey/com/inteligr8/alfresco/activiti/ArrayResponseUnitTest.java create mode 100644 src/test/jersey/com/inteligr8/alfresco/activiti/ConnectionJerseyClientPojoIT.java create mode 100644 src/test/jersey/com/inteligr8/alfresco/activiti/ConnectionJerseyClientSpringIT.java create mode 100644 src/test/jersey/com/inteligr8/alfresco/activiti/ResultListResponseUnitTest.java create mode 100644 src/test/resources/local-oauth.properties create mode 100644 src/test/resources/local.properties diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6bff6c6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +# Maven +target +pom.xml.versionsBackup + +# Eclipse +.project +.classpath +.settings + +# Visual Studio Code +.vscode diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..1a0753d --- /dev/null +++ b/pom.xml @@ -0,0 +1,206 @@ + + 4.0.0 + com.inteligr8.alfresco + aps-public-rest-client + 2.0-SNAPSHOT + Alfresco Process Services ReST API Client for Java + + + utf-8 + 8 + 8 + lines,vars,source + + + http://localhost:8080 + aps1 + + 5.7.2 + 5.2.14.RELEASE + 2.35 + 3.4.7 + + + + + com.inteligr8 + common-rest-client + 2.0-SNAPSHOT + ${jaxrs.impl} + + + com.inteligr8.alfresco + aps-public-rest-api + 2.0-SNAPSHOT + ${aps.app.tag} + + + org.junit.jupiter + junit-jupiter-api + ${junit.version} + test + + + org.springframework + spring-test + ${spring.version} + test + + + org.apache.httpcomponents + httpclient + 4.5.9 + test + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.2.0 + + + add-jaxrs-src + add-source + + + src/main/${jaxrs.impl} + + + + + add-test-src + add-test-source + + + src/test/${jaxrs.impl} + + + + + + + maven-jar-plugin + + ${jaxrs.impl} + + + + maven-surefire-plugin + 3.0.0-M5 + + + org.junit.jupiter + junit-jupiter-engine + ${junit.version} + + + + + maven-failsafe-plugin + 3.0.0-M5 + + + org.junit.jupiter + junit-jupiter-engine + ${junit.version} + + + + + maven-javadoc-plugin + + + javadoc + package + jar + + public + + + + + + + + + + jaxrs-jersey + + true + + jaxrs.impl + jersey + + + + jersey + + + + org.glassfish.jersey.inject + jersey-hk2 + ${jersey.version} + test + + + org.glassfish.jersey.media + jersey-media-json-jackson + ${jersey.version} + test + + + + + jaxrs-cxf + + + jaxrs.impl + cxf + + + + cxf + + + + org.apache.cxf + cxf-rt-rs-client + ${cxf.version} + provided + + + + + + + + inteligr8-releases + https://repos.inteligr8.com/nexus/repository/inteligr8-public + true + false + + + inteligr8-snapshots + https://repos.inteligr8.com/nexus/repository/inteligr8-snapshots + false + true + + + + + + inteligr8-releases + https://repos.inteligr8.com/nexus/repository/inteligr8-public + + + inteligr8-snapshots + https://repos.inteligr8.com/nexus/repository/inteligr8-snapshots + + + diff --git a/src/main/cxf/com/inteligr8/alfresco/activiti/ApsClientCxfConfiguration.java b/src/main/cxf/com/inteligr8/alfresco/activiti/ApsClientCxfConfiguration.java new file mode 100644 index 0000000..5875357 --- /dev/null +++ b/src/main/cxf/com/inteligr8/alfresco/activiti/ApsClientCxfConfiguration.java @@ -0,0 +1,32 @@ +package com.inteligr8.alfresco.activiti; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +import com.inteligr8.rs.ClientCxfConfiguration; + +/** + * This class provides a POJO & Spring-based implementation of the + * ClientCxfConfiguration interface. You can use it outside of the Spring + * context, but you will need the spring-context and spring-beans libraries in + * your non-Spring application. + * + * @author brian@inteligr8.com + */ +@Configuration +@ComponentScan +public class ApsClientCxfConfiguration extends ApsClientConfiguration implements ClientCxfConfiguration { + + @Value("${process.service.cxf.defaultBusEnabled:true}") + private boolean defaultBusEnabled; + + public boolean isDefaultBusEnabled() { + return this.defaultBusEnabled; + } + + public void setDefaultBusEnabled(boolean defaultBusEnabled) { + this.defaultBusEnabled = defaultBusEnabled; + } + +} diff --git a/src/main/cxf/com/inteligr8/alfresco/activiti/ApsClientCxfImpl.java b/src/main/cxf/com/inteligr8/alfresco/activiti/ApsClientCxfImpl.java new file mode 100644 index 0000000..fa2aaf6 --- /dev/null +++ b/src/main/cxf/com/inteligr8/alfresco/activiti/ApsClientCxfImpl.java @@ -0,0 +1,29 @@ +package com.inteligr8.alfresco.activiti; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import com.inteligr8.rs.ClientCxfImpl; + +/** + * This class provides a POJO & Spring-based implementation of the Apache + * CXF client. You can use it outside of the Spring context, but you will need + * the spring-context and spring-beans libraries in your non-Spring + * application. + * + * @author brian@inteligr8.com + */ +@Component("aps.client.cxf") +@Lazy +public class ApsClientCxfImpl extends ClientCxfImpl { + + /** + * This constructor is for Spring or POJO use + */ + @Autowired + public ApsClientCxfImpl(ApsClientCxfConfiguration config) { + super(config); + } + +} diff --git a/src/main/cxf/com/inteligr8/alfresco/activiti/ApsPublicRestApiCxfImpl.java b/src/main/cxf/com/inteligr8/alfresco/activiti/ApsPublicRestApiCxfImpl.java new file mode 100644 index 0000000..965e351 --- /dev/null +++ b/src/main/cxf/com/inteligr8/alfresco/activiti/ApsPublicRestApiCxfImpl.java @@ -0,0 +1,31 @@ +package com.inteligr8.alfresco.activiti; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import com.inteligr8.alfresco.activiti.api.AppDefinitionsCxfApi; + +/** + * This class provides the Apache CXF client to the JAX-RS API for the APS + * Public ReST API. + * + * @author brian@inteligr8.com + */ +@Component("aps.api.cxf") +@Lazy +public class ApsPublicRestApiCxfImpl extends ApsPublicRestApiImpl implements ApsPublicRestCxfApi { + + /** + * This constructor is for Spring or POJO use + */ + @Autowired + public ApsPublicRestApiCxfImpl(ApsClientCxfImpl client) { + super(client); + } + + public AppDefinitionsCxfApi getAppDefinitionsCxfApi() { + return this.getApi(AppDefinitionsCxfApi.class); + } + +} diff --git a/src/main/java/com/inteligr8/alfresco/activiti/ApsClientConfiguration.java b/src/main/java/com/inteligr8/alfresco/activiti/ApsClientConfiguration.java new file mode 100644 index 0000000..02a3fbd --- /dev/null +++ b/src/main/java/com/inteligr8/alfresco/activiti/ApsClientConfiguration.java @@ -0,0 +1,138 @@ +package com.inteligr8.alfresco.activiti; + +import org.springframework.beans.factory.annotation.Value; + +import com.inteligr8.rs.ClientConfiguration; + +/** + * This class provides a POJO & Spring-based implementation of the + * ClientConfiguration interface. You can use it outside of the Spring + * context, but you will need the spring-context and spring-beans libraries in + * your non-Spring application. + * + * @author brian@inteligr8.com + */ +public abstract class ApsClientConfiguration implements ClientConfiguration { + + @Value("${process.service.baseUrl:http://localhost:8080/activiti-app}") + private String baseUrl; + + @Value("${process.service.security.basicAuth.username:admin@app.activiti.com}") + private String basicAuthUsername; + + @Value("${process.service.security.basicAuth.password:admin}") + private String basicAuthPassword; + + @Value("${process.service.security.bearerToken:#{null}}") + private String bearerToken; + + @Value("${process.service.security.oauth.tokenUrl:#{null}}") + private String oAuthTokenUrl; + + @Value("${process.service.security.oauth.clientId:#{null}}") + private String oAuthClientId; + + @Value("${process.service.security.oauth.clientSecret:#{null}}") + private String oAuthClientSecret; + + @Value("${process.service.security.oauth.authCode:#{null}}") + private String oAuthAuthCode; + + @Value("${process.service.security.oauth.authRedirectUri:#{null}}") + private String oAuthAuthRedirectUri; + + @Value("${process.service.security.oauth.grantUsername:#{null}}") + private String oAuthUsername; + + @Value("${process.service.security.oauth.grantPassword:#{null}}") + private String oAuthPassword; + + public String getBaseUrl() { + return this.baseUrl; + } + + public void setBaseUrl(String baseUrl) { + this.baseUrl = baseUrl; + } + + public String getBasicAuthUsername() { + return this.basicAuthUsername; + } + + public void setBasicAuthUsername(String basicAuthUsername) { + this.basicAuthUsername = basicAuthUsername; + } + + public String getBasicAuthPassword() { + return this.basicAuthPassword; + } + + public void setBasicAuthPassword(String basicAuthPassword) { + this.basicAuthPassword = basicAuthPassword; + } + + public String getBearerToken() { + return this.bearerToken; + } + + public void setBearerToken(String bearerToken) { + this.bearerToken = bearerToken; + } + + public String getOAuthTokenUrl() { + return this.oAuthTokenUrl; + } + + public void setOAuthTokenUrl(String oAuthTokenUrl) { + this.oAuthTokenUrl = oAuthTokenUrl; + } + + public String getOAuthClientId() { + return this.oAuthClientId; + } + + public void setOAuthClientId(String oAuthClientId) { + this.oAuthClientId = oAuthClientId; + } + + public String getOAuthClientSecret() { + return this.oAuthClientSecret; + } + + public void setOAuthClientSecret(String oAuthClientSecret) { + this.oAuthClientSecret = oAuthClientSecret; + } + + public String getOAuthAuthCode() { + return this.oAuthAuthCode; + } + + public void setOAuthAuthCode(String oAuthAuthCode) { + this.oAuthAuthCode = oAuthAuthCode; + } + + public String getOAuthAuthRedirectUri() { + return this.oAuthAuthRedirectUri; + } + + public void setOAuthAuthRedirectUri(String oAuthAuthRedirectUri) { + this.oAuthAuthRedirectUri = oAuthAuthRedirectUri; + } + + public String getOAuthUsername() { + return this.oAuthUsername; + } + + public void setOAuthUsername(String oAuthUsername) { + this.oAuthUsername = oAuthUsername; + } + + public String getOAuthPassword() { + return this.oAuthPassword; + } + + public void setOAuthPassword(String oAuthPassword) { + this.oAuthPassword = oAuthPassword; + } + +} diff --git a/src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestApiImpl.java b/src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestApiImpl.java new file mode 100644 index 0000000..52e0922 --- /dev/null +++ b/src/main/java/com/inteligr8/alfresco/activiti/ApsPublicRestApiImpl.java @@ -0,0 +1,62 @@ +package com.inteligr8.alfresco.activiti; + +import com.inteligr8.alfresco.activiti.api.AdminApi; +import com.inteligr8.alfresco.activiti.api.AppDefinitionsApi; +import com.inteligr8.alfresco.activiti.api.AppVersionApi; +import com.inteligr8.alfresco.activiti.api.ModelsApi; +import com.inteligr8.alfresco.activiti.api.ProcessInstancesApi; +import com.inteligr8.alfresco.activiti.api.ProfileApi; +import com.inteligr8.alfresco.activiti.api.TasksApi; +import com.inteligr8.rs.Client; + +/** + * This class serves as the entrypoint to the JAX-RS API for the APS Public + * ReST API. + * + * @author brian@inteligr8.com + */ +public class ApsPublicRestApiImpl implements ApsPublicRestApi { + + private Client client; + + public ApsPublicRestApiImpl(Client client) { + this.client = client; + } + + public Client getClient() { + return this.client; + } + + protected final T getApi(Class apiClass) { + return this.client.getApi(apiClass); + } + + public AdminApi getAdminApi() { + return this.getApi(AdminApi.class); + } + + public AppDefinitionsApi getAppDefinitionsApi() { + return this.getApi(AppDefinitionsApi.class); + } + + public AppVersionApi getAppVersionApi() { + return this.getApi(AppVersionApi.class); + } + + public ModelsApi getModelsApi() { + return this.getApi(ModelsApi.class); + } + + public ProcessInstancesApi getProcessInstancesApi() { + return this.getApi(ProcessInstancesApi.class); + } + + public ProfileApi getProfileApi() { + return this.getApi(ProfileApi.class); + } + + public TasksApi getTasksApi() { + return this.getApi(TasksApi.class); + } + +} diff --git a/src/main/jersey/com/inteligr8/alfresco/activiti/ApsClientJerseyConfiguration.java b/src/main/jersey/com/inteligr8/alfresco/activiti/ApsClientJerseyConfiguration.java new file mode 100644 index 0000000..3e23e97 --- /dev/null +++ b/src/main/jersey/com/inteligr8/alfresco/activiti/ApsClientJerseyConfiguration.java @@ -0,0 +1,32 @@ +package com.inteligr8.alfresco.activiti; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +import com.inteligr8.rs.ClientJerseyConfiguration; + +/** + * This class provides a POJO & Spring-based implementation of the + * ClientJerseyConfiguration interface. You can use it outside of the Spring + * context, but you will need the spring-context and spring-beans libraries in + * your non-Spring application. + * + * @author brian@inteligr8.com + */ +@Configuration +@ComponentScan +public class ApsClientJerseyConfiguration extends ApsClientConfiguration implements ClientJerseyConfiguration { + + @Value("${process.service.jersey.putBodyRequired:true}") + private boolean putBodyRequired; + + public boolean isPutBodyRequired() { + return this.putBodyRequired; + } + + public void setPutBodyRequired(boolean putBodyRequired) { + this.putBodyRequired = putBodyRequired; + } + +} diff --git a/src/main/jersey/com/inteligr8/alfresco/activiti/ApsClientJerseyImpl.java b/src/main/jersey/com/inteligr8/alfresco/activiti/ApsClientJerseyImpl.java new file mode 100644 index 0000000..ccdd66a --- /dev/null +++ b/src/main/jersey/com/inteligr8/alfresco/activiti/ApsClientJerseyImpl.java @@ -0,0 +1,29 @@ +package com.inteligr8.alfresco.activiti; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import com.inteligr8.rs.ClientJerseyImpl; + +/** + * This class provides a POJO & Spring-based implementation of the Jersey + * client configured for APS. You can use it outside of the Spring context, + * but you will need the spring-context and spring-beans libraries in your + * non-Spring application. + * + * @author brian@inteligr8.com + */ +@Component("aps.client.jersey") +@Lazy +public class ApsClientJerseyImpl extends ClientJerseyImpl { + + /** + * This constructor is for Spring and POJO use + */ + @Autowired + public ApsClientJerseyImpl(ApsClientJerseyConfiguration config) { + super(config); + } + +} diff --git a/src/main/jersey/com/inteligr8/alfresco/activiti/ApsPublicRestApiJerseyImpl.java b/src/main/jersey/com/inteligr8/alfresco/activiti/ApsPublicRestApiJerseyImpl.java new file mode 100644 index 0000000..6c85e7c --- /dev/null +++ b/src/main/jersey/com/inteligr8/alfresco/activiti/ApsPublicRestApiJerseyImpl.java @@ -0,0 +1,31 @@ +package com.inteligr8.alfresco.activiti; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import com.inteligr8.alfresco.activiti.api.AppDefinitionsJerseyApi; + +/** + * This class provides the Jersey client to the JAX-RS API for the APS Public + * ReST API. + * + * @author brian@inteligr8.com + */ +@Component("aps.api.jersey") +@Lazy +public class ApsPublicRestApiJerseyImpl extends ApsPublicRestApiImpl implements ApsPublicRestJerseyApi { + + /** + * This constructor is for Spring or POJO use + */ + @Autowired + public ApsPublicRestApiJerseyImpl(ApsClientJerseyImpl client) { + super(client); + } + + public AppDefinitionsJerseyApi getAppDefinitionsJerseyApi() { + return this.getApi(AppDefinitionsJerseyApi.class); + } + +} diff --git a/src/test/cxf/com/inteligr8/alfresco/activiti/ConnectionCxfClientPojoIT.java b/src/test/cxf/com/inteligr8/alfresco/activiti/ConnectionCxfClientPojoIT.java new file mode 100644 index 0000000..9afb2c5 --- /dev/null +++ b/src/test/cxf/com/inteligr8/alfresco/activiti/ConnectionCxfClientPojoIT.java @@ -0,0 +1,32 @@ +package com.inteligr8.alfresco.activiti; + +import org.junit.jupiter.api.BeforeAll; + +import com.inteligr8.rs.ClientConfiguration; + +public class ConnectionCxfClientPojoIT extends ConnectionClientIT { + + private static ApsPublicRestApiImpl api; + + @BeforeAll + public static void initClient() { + ApsClientCxfConfiguration config = new ApsClientCxfConfiguration(); + config.setBaseUrl("http://localhost:8080/activiti-app"); + config.setBasicAuthUsername("admin"); + config.setBasicAuthPassword("admin"); + + api = new ApsPublicRestApiCxfImpl( + new ApsClientCxfImpl(config)); + } + + @Override + public ApsPublicRestApiImpl getApi() { + return api; + } + + @Override + public ClientConfiguration getConfiguration() { + return api.getClient().getConfig(); + } + +} diff --git a/src/test/cxf/com/inteligr8/alfresco/activiti/ConnectionCxfClientSpringIT.java b/src/test/cxf/com/inteligr8/alfresco/activiti/ConnectionCxfClientSpringIT.java new file mode 100644 index 0000000..6d25f20 --- /dev/null +++ b/src/test/cxf/com/inteligr8/alfresco/activiti/ConnectionCxfClientSpringIT.java @@ -0,0 +1,28 @@ +package com.inteligr8.alfresco.activiti; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; + +import com.inteligr8.rs.ClientConfiguration; + +@TestPropertySource(locations = {"/local-oauth.properties"}) +@SpringJUnitConfig(classes = {ApsClientCxfConfiguration.class, ApsPublicRestApiCxfImpl.class, ApsClientCxfImpl.class}) +public class ConnectionCxfClientSpringIT extends ConnectionClientIT { + + @Autowired + @Qualifier("aps.api.cxf") + private ApsPublicRestApiImpl api; + + @Override + public ApsPublicRestApiImpl getApi() { + return this.api; + } + + @Override + public ClientConfiguration getConfiguration() { + return this.api.getClient().getConfig(); + } + +} diff --git a/src/test/java/com/inteligr8/alfresco/activiti/ConditionalIT.java b/src/test/java/com/inteligr8/alfresco/activiti/ConditionalIT.java new file mode 100644 index 0000000..de77a23 --- /dev/null +++ b/src/test/java/com/inteligr8/alfresco/activiti/ConditionalIT.java @@ -0,0 +1,35 @@ +package com.inteligr8.alfresco.activiti; + +import org.apache.http.HttpResponse; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpUriRequest; +import org.apache.http.client.methods.RequestBuilder; +import org.apache.http.impl.client.DefaultRedirectStrategy; +import org.apache.http.impl.client.HttpClientBuilder; + +import com.inteligr8.rs.ClientConfiguration; + +public abstract class ConditionalIT { + + public abstract ClientConfiguration getConfiguration(); + + public boolean hostExists() { + String uri = this.getConfiguration().getBaseUrl(); + + HttpUriRequest request = RequestBuilder.get() + .setUri(uri) + .build(); + + HttpClient client = HttpClientBuilder.create() + .setRedirectStrategy(DefaultRedirectStrategy.INSTANCE) + .build(); + + try { + HttpResponse response = client.execute(request); + return response.getStatusLine().getStatusCode() < 300; + } catch (Exception e) { + return false; + } + } + +} diff --git a/src/test/java/com/inteligr8/alfresco/activiti/ConnectionClientIT.java b/src/test/java/com/inteligr8/alfresco/activiti/ConnectionClientIT.java new file mode 100644 index 0000000..6b30469 --- /dev/null +++ b/src/test/java/com/inteligr8/alfresco/activiti/ConnectionClientIT.java @@ -0,0 +1,54 @@ +package com.inteligr8.alfresco.activiti; + +import java.util.Arrays; +import java.util.UUID; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledIf; + +import com.inteligr8.alfresco.activiti.model.AppVersion; +import com.inteligr8.alfresco.activiti.model.CreateProcessInstance; +import com.inteligr8.alfresco.activiti.model.ProcessInstance; +import com.inteligr8.alfresco.activiti.model.User; +import com.inteligr8.alfresco.activiti.model.Variable; + +public abstract class ConnectionClientIT extends ConditionalIT { + + public abstract ApsPublicRestApiImpl getApi(); + + @Test + @EnabledIf("hostExists") + public void testAppVersion() { + AppVersion obj = this.getApi().getAppVersionApi().get(); + + Assertions.assertNotNull(obj); + Assertions.assertEquals("1", obj.getMajorVersion()); + Assertions.assertEquals("bpmSuite", obj.getType()); + } + + @Test + @EnabledIf("hostExists") + public void testProfile() { + User obj = this.getApi().getProfileApi().get(); + + Assertions.assertNotNull(obj); + Assertions.assertEquals("admin@app.activiti.com", obj.getEmail()); + } + + @Test + @EnabledIf("hostExists") + public void testStartProcess() { + CreateProcessInstance request = new CreateProcessInstance(); + request.setProcessDefinitionKey("qcDocument"); + request.setVariables(Arrays.asList(new Variable("acsNodeId", null, null, UUID.randomUUID().toString()))); + + ProcessInstance response = this.getApi().getProcessInstancesApi().create(request); + + Assertions.assertNotNull(response); + Assertions.assertNotNull(response.getId()); + Assertions.assertNotNull(response.getId().length() > 0); + Assertions.assertEquals("qcDocument", response.getProcessDefinitionKey()); + } + +} diff --git a/src/test/jersey/com/inteligr8/alfresco/activiti/ArrayResponseUnitTest.java b/src/test/jersey/com/inteligr8/alfresco/activiti/ArrayResponseUnitTest.java new file mode 100644 index 0000000..e88d058 --- /dev/null +++ b/src/test/jersey/com/inteligr8/alfresco/activiti/ArrayResponseUnitTest.java @@ -0,0 +1,37 @@ +package com.inteligr8.alfresco.activiti; + +import java.util.List; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledIf; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; + +import com.inteligr8.alfresco.activiti.model.Tenant; +import com.inteligr8.rs.ClientConfiguration; + +@TestPropertySource(locations = {"/local.properties"}) +@SpringJUnitConfig(classes = {ApsClientJerseyConfiguration.class, ApsPublicRestApiJerseyImpl.class, ApsClientJerseyImpl.class}) +public class ArrayResponseUnitTest extends ConditionalIT { + + @Autowired + @Qualifier("aps.api.jersey") + private ApsPublicRestApiImpl api; + + @Override + public ClientConfiguration getConfiguration() { + return this.api.getClient().getConfig(); + } + + @Test + @EnabledIf("hostExists") + public void testTenants() { + List objs = this.api.getAdminApi().getTenants(); + + Assertions.assertNotNull(objs); + } + +} diff --git a/src/test/jersey/com/inteligr8/alfresco/activiti/ConnectionJerseyClientPojoIT.java b/src/test/jersey/com/inteligr8/alfresco/activiti/ConnectionJerseyClientPojoIT.java new file mode 100644 index 0000000..b33d8fe --- /dev/null +++ b/src/test/jersey/com/inteligr8/alfresco/activiti/ConnectionJerseyClientPojoIT.java @@ -0,0 +1,31 @@ +package com.inteligr8.alfresco.activiti; + +import org.junit.jupiter.api.BeforeAll; + +import com.inteligr8.rs.ClientConfiguration; + +public class ConnectionJerseyClientPojoIT extends ConnectionClientIT { + + private static ApsPublicRestApiImpl api; + + @BeforeAll + public static void initClient() { + ApsClientJerseyConfiguration config = new ApsClientJerseyConfiguration(); + config.setBaseUrl("http://localhost:8080/activiti-app"); + config.setBasicAuthUsername("admin"); + config.setBasicAuthPassword("admin"); + + api = new ApsPublicRestApiJerseyImpl( + new ApsClientJerseyImpl(config)); + } + + public ApsPublicRestApiImpl getApi() { + return api; + } + + @Override + public ClientConfiguration getConfiguration() { + return api.getClient().getConfig(); + } + +} diff --git a/src/test/jersey/com/inteligr8/alfresco/activiti/ConnectionJerseyClientSpringIT.java b/src/test/jersey/com/inteligr8/alfresco/activiti/ConnectionJerseyClientSpringIT.java new file mode 100644 index 0000000..1ad8b89 --- /dev/null +++ b/src/test/jersey/com/inteligr8/alfresco/activiti/ConnectionJerseyClientSpringIT.java @@ -0,0 +1,27 @@ +package com.inteligr8.alfresco.activiti; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; + +import com.inteligr8.rs.ClientConfiguration; + +@TestPropertySource(locations = {"/local.properties"}) +@SpringJUnitConfig(classes = {ApsClientJerseyConfiguration.class, ApsPublicRestApiJerseyImpl.class, ApsClientJerseyImpl.class}) +public class ConnectionJerseyClientSpringIT extends ConnectionClientIT { + + @Autowired + @Qualifier("aps.api.jersey") + private ApsPublicRestApiImpl api; + + public ApsPublicRestApiImpl getApi() { + return this.api; + } + + @Override + public ClientConfiguration getConfiguration() { + return this.api.getClient().getConfig(); + } + +} diff --git a/src/test/jersey/com/inteligr8/alfresco/activiti/ResultListResponseUnitTest.java b/src/test/jersey/com/inteligr8/alfresco/activiti/ResultListResponseUnitTest.java new file mode 100644 index 0000000..1e52d83 --- /dev/null +++ b/src/test/jersey/com/inteligr8/alfresco/activiti/ResultListResponseUnitTest.java @@ -0,0 +1,43 @@ +package com.inteligr8.alfresco.activiti; + +import java.util.List; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.EnabledIf; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; + +import com.inteligr8.alfresco.activiti.model.GroupLight; +import com.inteligr8.alfresco.activiti.model.ResultList; +import com.inteligr8.alfresco.activiti.model.UserLight; +import com.inteligr8.rs.ClientConfiguration; + +@TestPropertySource(locations = {"/local.properties"}) +@SpringJUnitConfig(classes = {ApsClientJerseyConfiguration.class, ApsPublicRestApiJerseyImpl.class, ApsClientJerseyImpl.class}) +public class ResultListResponseUnitTest extends ConditionalIT { + + @Autowired + @Qualifier("aps.api.jersey") + private ApsPublicRestApiImpl api; + + @Override + public ClientConfiguration getConfiguration() { + return this.api.getClient().getConfig(); + } + + @Test + @EnabledIf("hostExists") + public void testGroupMembers() { + List groups = this.api.getAdminApi().getGroups(1L, false, false); + Assertions.assertFalse(groups.isEmpty()); + + for (GroupLight group : groups) { + ResultList users = this.api.getAdminApi().getMembers(group.getId(), null, null, null); + Assertions.assertNotNull(users); + } + } + +} diff --git a/src/test/resources/local-oauth.properties b/src/test/resources/local-oauth.properties new file mode 100644 index 0000000..5703de1 --- /dev/null +++ b/src/test/resources/local-oauth.properties @@ -0,0 +1,5 @@ +process.service.baseUrl=http://localhost:8080/activiti-app +process.service.security.oauth.tokenUrl=http://auth.example.org:8080/auth/realms/alfresco/protocol/openid-connect/token +process.service.security.oauth.clientId=api +process.service.security.oauth.grantUsername=admin +process.service.security.oauth.grantPassword=admin diff --git a/src/test/resources/local.properties b/src/test/resources/local.properties new file mode 100644 index 0000000..4d026f3 --- /dev/null +++ b/src/test/resources/local.properties @@ -0,0 +1,3 @@ +process.service.baseUrl=http://localhost:8080/activiti-app +process.service.security.basicAuth.username=admin@app.activiti.com +process.service.security.basicAuth.password=admin