Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 07f0600

Browse files
aq-ikhwa-techludomikula
authored andcommitted
Add support for mv integration-test phase
- Added support to test the pf4j plugins in deployment mode within the SpringBootTest as integration tests
1 parent 494f9f1 commit 07f0600

File tree

9 files changed

+213
-155
lines changed

9 files changed

+213
-155
lines changed

‎server/api-service/lowcoder-server/pom.xml‎

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515

1616
<properties>
1717
<java.version>17</java.version>
18+
<skipTests>false</skipTests>
19+
<skipUnitTests>${skipTests}</skipUnitTests>
20+
<skipIntegrationTests>${skipTests}</skipIntegrationTests>
1821
</properties>
1922

2023
<dependencies>
@@ -175,6 +178,13 @@
175178
<version>2.0.0.AM26</version>
176179
<scope>test</scope>
177180
</dependency>
181+
<dependency>
182+
<groupId>org.junit.vintage</groupId>
183+
<artifactId>junit-vintage-engine</artifactId>
184+
<version>5.9.3</version>
185+
<scope>test</scope>
186+
</dependency>
187+
178188
</dependencies>
179189

180190
<build>
@@ -186,7 +196,68 @@
186196
<plugin>
187197
<groupId>org.apache.maven.plugins</groupId>
188198
<artifactId>maven-surefire-plugin</artifactId>
189-
<version>2.12.4</version>
199+
<version>3.1.2</version>
200+
<configuration>
201+
<skipTests>${skipUnitTests}</skipTests>
202+
<excludes>
203+
<exclude>**/*IntegrationTest.java</exclude>
204+
</excludes>
205+
</configuration>
206+
</plugin>
207+
<plugin>
208+
<groupId>org.apache.maven.plugins</groupId>
209+
<artifactId>maven-failsafe-plugin</artifactId>
210+
<configuration>
211+
<skipTests>${skipIntegrationTests}</skipTests>
212+
<includes>
213+
<include>**/*IntegrationTest.java</include>
214+
</includes>
215+
<argLine>
216+
-Dpf4j.pluginsDir=../lowcoder-plugins/plugins
217+
</argLine>
218+
</configuration>
219+
<executions>
220+
<execution>
221+
<goals>
222+
<goal>integration-test</goal>
223+
<goal>verify</goal>
224+
</goals>
225+
</execution>
226+
</executions>
227+
</plugin>
228+
<plugin>
229+
<artifactId>maven-antrun-plugin</artifactId>
230+
<executions>
231+
<execution>
232+
<id>copy-plugins-jar-for-integration-tests</id>
233+
<phase>pre-integration-test</phase>
234+
<configuration>
235+
<target>
236+
<echo message="copy-plugins-jar-for-integration-tests started"/>
237+
<copy todir="../lowcoder-plugins/plugins">
238+
<fileset dir="../lowcoder-plugins" includes="/*/target/*shaded.jar" />
239+
<mapper type="flatten"/>
240+
</copy>
241+
</target>
242+
</configuration>
243+
<goals>
244+
<goal>run</goal>
245+
</goals>
246+
</execution>
247+
<execution>
248+
<id>delete-plugins-after-integration-tests-phase</id>
249+
<phase>post-integration-test</phase>
250+
<configuration>
251+
<target>
252+
<echo message="delete-plugins-after-integration-tests-phase started"/>
253+
<delete dir="../lowcoder-plugins/plugins"/>
254+
</target>
255+
</configuration>
256+
<goals>
257+
<goal>run</goal>
258+
</goals>
259+
</execution>
260+
</executions>
190261
</plugin>
191262
</plugins>
192263
</build>
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
package org.lowcoder.api.application;
2+
3+
4+
import lombok.extern.slf4j.Slf4j;
5+
import org.junit.Assert;
6+
import org.junit.Ignore;
7+
import org.junit.Test;
8+
import org.junit.runner.RunWith;
9+
import org.lowcoder.api.application.ApplicationController.CreateApplicationRequest;
10+
import org.lowcoder.api.application.view.ApplicationView;
11+
import org.lowcoder.api.common.mockuser.WithMockUser;
12+
import org.lowcoder.api.datasource.DatasourceApiService;
13+
import org.lowcoder.api.datasource.DatasourceApiServiceIntegrationTest;
14+
import org.lowcoder.api.permission.view.CommonPermissionView;
15+
import org.lowcoder.api.permission.view.PermissionItemView;
16+
import org.lowcoder.domain.application.model.Application;
17+
import org.lowcoder.domain.application.model.ApplicationType;
18+
import org.lowcoder.domain.datasource.model.Datasource;
19+
import org.lowcoder.domain.permission.model.ResourceRole;
20+
import org.lowcoder.sdk.exception.BizError;
21+
import org.lowcoder.sdk.exception.BizException;
22+
import org.springframework.beans.factory.annotation.Autowired;
23+
import org.springframework.boot.test.context.SpringBootTest;
24+
import org.springframework.test.context.junit4.SpringRunner;
25+
import reactor.core.publisher.Mono;
26+
import reactor.test.StepVerifier;
27+
28+
import java.util.Map;
29+
import java.util.Set;
30+
31+
@SuppressWarnings({"OptionalGetWithoutIsPresent"})
32+
@SpringBootTest
33+
@RunWith(SpringRunner.class)
34+
@Slf4j(topic = "ApplicationApiServiceIntegrationTest")
35+
public class ApplicationApiServiceIntegrationTest {
36+
37+
@Autowired
38+
private ApplicationApiService applicationApiService;
39+
@Autowired
40+
private DatasourceApiService datasourceApiService;
41+
42+
@SuppressWarnings("ConstantConditions")
43+
@Test
44+
@WithMockUser(id = "user02")
45+
public void testCreateApplicationSuccess() {
46+
47+
Mono<Datasource> datasourceMono = datasourceApiService.create(DatasourceApiServiceIntegrationTest.buildMysqlDatasource("mysql07")).cache();
48+
Mono<CommonPermissionView> commonPermissionViewMono =
49+
datasourceMono.flatMap(datasource -> datasourceApiService.getPermissions(datasource.getId()));
50+
Mono<Boolean> deleteMono = commonPermissionViewMono.flatMap(commonPermissionView -> {
51+
String permissionId = commonPermissionView.getUserPermissions().stream()
52+
.filter(permissionItemView -> permissionItemView.getId().equals("user02"))
53+
.findFirst()
54+
.map(PermissionItemView::getPermissionId)
55+
.get();
56+
return datasourceApiService.updatePermission(permissionId, ResourceRole.VIEWER);
57+
});
58+
//
59+
Mono<ApplicationView> applicationViewMono = datasourceMono.map(datasource -> new CreateApplicationRequest(
60+
"org01",
61+
"app05",
62+
ApplicationType.APPLICATION.getValue(),
63+
Map.of("comp", "table"),
64+
Map.of("comp", "list", "queries", Set.of(Map.of("datasourceId", datasource.getId()))),
65+
null))
66+
.delayUntil(__ -> deleteMono)
67+
.flatMap(createApplicationRequest -> applicationApiService.create(createApplicationRequest));
68+
69+
StepVerifier.create(applicationViewMono)
70+
.assertNext(applicationView -> Assert.assertNotNull(applicationView.getApplicationInfoView().getApplicationId()))
71+
.verifyComplete();
72+
}
73+
74+
@Ignore
75+
@SuppressWarnings("ConstantConditions")
76+
@Test
77+
@WithMockUser(id = "user02")
78+
public void testUpdateApplicationFailedDueToLackOfDatasourcePermissions() {
79+
80+
Mono<Datasource> datasourceMono = datasourceApiService.create(DatasourceApiServiceIntegrationTest.buildMysqlDatasource("mysql08")).cache();
81+
Mono<CommonPermissionView> commonPermissionViewMono =
82+
datasourceMono.flatMap(datasource -> datasourceApiService.getPermissions(datasource.getId()));
83+
Mono<Boolean> deleteMono = commonPermissionViewMono.flatMap(commonPermissionView -> {
84+
String permissionId = commonPermissionView.getUserPermissions().stream()
85+
.filter(permissionItemView -> permissionItemView.getId().equals("user02"))
86+
.findFirst()
87+
.map(PermissionItemView::getPermissionId)
88+
.get();
89+
return datasourceApiService.deletePermission(permissionId);
90+
});
91+
//
92+
Mono<ApplicationView> applicationViewMono = datasourceMono.map(datasource -> new CreateApplicationRequest(
93+
"org01",
94+
"app03",
95+
ApplicationType.APPLICATION.getValue(),
96+
Map.of("comp", "table"),
97+
Map.of("comp", "list", "queries", Set.of(Map.of("datasourceId", datasource.getId()))),
98+
null))
99+
.delayUntil(__ -> deleteMono)
100+
.flatMap(createApplicationRequest -> applicationApiService.create(createApplicationRequest))
101+
.flatMap(applicationView -> {
102+
Application application = Application.builder()
103+
.editingApplicationDSL(applicationView.getApplicationDSL())
104+
.name("app03")
105+
.build();
106+
return applicationApiService.update(applicationView.getApplicationInfoView().getApplicationId(), application);
107+
});
108+
109+
StepVerifier.create(applicationViewMono)
110+
.expectErrorMatches(throwable -> throwable instanceof BizException bizException
111+
&& bizException.getError() == BizError.NOT_AUTHORIZED
112+
&& bizException.getMessageKey().equals("APPLICATION_EDIT_ERROR_LACK_OF_DATASOURCE_PERMISSIONS"))
113+
.verify();
114+
}
115+
}

‎server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/application/ApplicationApiServiceTest.java‎

Lines changed: 0 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -3,29 +3,23 @@
33

44
import lombok.extern.slf4j.Slf4j;
55
import org.junit.Assert;
6-
import org.junit.Before;
7-
import org.junit.Ignore;
86
import org.junit.Test;
97
import org.junit.runner.RunWith;
108
import org.lowcoder.api.application.ApplicationController.CreateApplicationRequest;
119
import org.lowcoder.api.application.view.ApplicationPermissionView;
1210
import org.lowcoder.api.application.view.ApplicationView;
1311
import org.lowcoder.api.common.mockuser.WithMockUser;
1412
import org.lowcoder.api.datasource.DatasourceApiService;
15-
import org.lowcoder.api.datasource.DatasourceApiServiceTest;
1613
import org.lowcoder.api.home.FolderApiService;
17-
import org.lowcoder.api.permission.view.CommonPermissionView;
1814
import org.lowcoder.api.permission.view.PermissionItemView;
1915
import org.lowcoder.domain.application.model.Application;
2016
import org.lowcoder.domain.application.model.ApplicationStatus;
2117
import org.lowcoder.domain.application.model.ApplicationType;
2218
import org.lowcoder.domain.application.service.ApplicationService;
23-
import org.lowcoder.domain.datasource.model.Datasource;
2419
import org.lowcoder.domain.permission.model.ResourceHolder;
2520
import org.lowcoder.domain.permission.model.ResourceRole;
2621
import org.lowcoder.sdk.exception.BizError;
2722
import org.lowcoder.sdk.exception.BizException;
28-
import org.pf4j.PluginManager;
2923
import org.springframework.beans.factory.annotation.Autowired;
3024
import org.springframework.boot.test.context.SpringBootTest;
3125
import org.springframework.test.context.junit4.SpringRunner;
@@ -35,7 +29,6 @@
3529
import java.util.List;
3630
import java.util.Map;
3731
import java.util.Set;
38-
@SuppressWarnings({"OptionalGetWithoutIsPresent"})
3932
@SpringBootTest
4033
@RunWith(SpringRunner.class)
4134
@Slf4j(topic = "ApplicationApiServiceTest")
@@ -50,19 +43,6 @@ public class ApplicationApiServiceTest {
5043
@Autowired
5144
private DatasourceApiService datasourceApiService;
5245

53-
@Autowired
54-
private PluginManager pluginManager;
55-
56-
@Before
57-
public void init() {
58-
try {
59-
pluginManager.loadPlugins();
60-
pluginManager.startPlugins();
61-
} catch (Exception e) {
62-
log.error("Failed to load/start plugins. Exception: " + e);
63-
}
64-
}
65-
6646
@Test
6747
@WithMockUser
6848
public void testAutoInheritFoldersPermissionsOnAppCreate() {
@@ -284,78 +264,4 @@ public void testPermissions() {
284264
.verifyComplete();
285265
}
286266

287-
@Ignore
288-
@SuppressWarnings("ConstantConditions")
289-
@Test
290-
@WithMockUser(id = "user02")
291-
public void testCreateApplicationSuccess() {
292-
293-
Mono<Datasource> datasourceMono = datasourceApiService.create(DatasourceApiServiceTest.buildMysqlDatasource("mysql07")).cache();
294-
Mono<CommonPermissionView> commonPermissionViewMono =
295-
datasourceMono.flatMap(datasource -> datasourceApiService.getPermissions(datasource.getId()));
296-
Mono<Boolean> deleteMono = commonPermissionViewMono.flatMap(commonPermissionView -> {
297-
String permissionId = commonPermissionView.getUserPermissions().stream()
298-
.filter(permissionItemView -> permissionItemView.getId().equals("user02"))
299-
.findFirst()
300-
.map(PermissionItemView::getPermissionId)
301-
.get();
302-
return datasourceApiService.updatePermission(permissionId, ResourceRole.VIEWER);
303-
});
304-
//
305-
Mono<ApplicationView> applicationViewMono = datasourceMono.map(datasource -> new CreateApplicationRequest(
306-
"org01",
307-
"app05",
308-
ApplicationType.APPLICATION.getValue(),
309-
Map.of("comp", "table"),
310-
Map.of("comp", "list", "queries", Set.of(Map.of("datasourceId", datasource.getId()))),
311-
null))
312-
.delayUntil(__ -> deleteMono)
313-
.flatMap(createApplicationRequest -> applicationApiService.create(createApplicationRequest));
314-
315-
StepVerifier.create(applicationViewMono)
316-
.assertNext(applicationView -> Assert.assertNotNull(applicationView.getApplicationInfoView().getApplicationId()))
317-
.verifyComplete();
318-
}
319-
320-
@Ignore
321-
@SuppressWarnings("ConstantConditions")
322-
@Test
323-
@WithMockUser(id = "user02")
324-
public void testUpdateApplicationFailedDueToLackOfDatasourcePermissions() {
325-
326-
Mono<Datasource> datasourceMono = datasourceApiService.create(DatasourceApiServiceTest.buildMysqlDatasource("mysql08")).cache();
327-
Mono<CommonPermissionView> commonPermissionViewMono =
328-
datasourceMono.flatMap(datasource -> datasourceApiService.getPermissions(datasource.getId()));
329-
Mono<Boolean> deleteMono = commonPermissionViewMono.flatMap(commonPermissionView -> {
330-
String permissionId = commonPermissionView.getUserPermissions().stream()
331-
.filter(permissionItemView -> permissionItemView.getId().equals("user02"))
332-
.findFirst()
333-
.map(PermissionItemView::getPermissionId)
334-
.get();
335-
return datasourceApiService.deletePermission(permissionId);
336-
});
337-
//
338-
Mono<ApplicationView> applicationViewMono = datasourceMono.map(datasource -> new CreateApplicationRequest(
339-
"org01",
340-
"app03",
341-
ApplicationType.APPLICATION.getValue(),
342-
Map.of("comp", "table"),
343-
Map.of("comp", "list", "queries", Set.of(Map.of("datasourceId", datasource.getId()))),
344-
null))
345-
.delayUntil(__ -> deleteMono)
346-
.flatMap(createApplicationRequest -> applicationApiService.create(createApplicationRequest))
347-
.flatMap(applicationView -> {
348-
Application application = Application.builder()
349-
.editingApplicationDSL(applicationView.getApplicationDSL())
350-
.name("app03")
351-
.build();
352-
return applicationApiService.update(applicationView.getApplicationInfoView().getApplicationId(), application);
353-
});
354-
355-
StepVerifier.create(applicationViewMono)
356-
.expectErrorMatches(throwable -> throwable instanceof BizException bizException
357-
&& bizException.getError() == BizError.NOT_AUTHORIZED
358-
&& bizException.getMessageKey().equals("APPLICATION_EDIT_ERROR_LACK_OF_DATASOURCE_PERMISSIONS"))
359-
.verify();
360-
}
361267
}

‎server/api-service/lowcoder-server/src/test/java/org/lowcoder/api/common/SpringPluginManagerConfiguration.java‎

Lines changed: 0 additions & 23 deletions
This file was deleted.

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /