From ae8015168b8f132fd1880f854e9a4847f120d102 Mon Sep 17 00:00:00 2001 From: yma Date: Mon, 1 Sep 2025 15:43:55 +0800 Subject: [PATCH] Add ftest and unit mock test for Group Constituent Add function --- .../ftests/admin/AddGroupConstituentTest.java | 106 ++++++++++++++++++ .../jaxrs/RepositoryAdminResourcesTest.java | 56 ++++++++- .../jaxrs/mock/MockAdminController.java | 23 +++- 3 files changed, 180 insertions(+), 5 deletions(-) create mode 100644 src/test/java/org/commonjava/indy/service/repository/ftests/admin/AddGroupConstituentTest.java diff --git a/src/test/java/org/commonjava/indy/service/repository/ftests/admin/AddGroupConstituentTest.java b/src/test/java/org/commonjava/indy/service/repository/ftests/admin/AddGroupConstituentTest.java new file mode 100644 index 00000000..d8ba5d34 --- /dev/null +++ b/src/test/java/org/commonjava/indy/service/repository/ftests/admin/AddGroupConstituentTest.java @@ -0,0 +1,106 @@ +/** + * Copyright (C) 2022-2023 Red Hat, Inc. (https://github.com/Commonjava/indy-repository-service) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.commonjava.indy.service.repository.ftests.admin; + +import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.junit.TestProfile; +import org.commonjava.indy.service.repository.ftests.AbstractStoreManagementTest; +import org.commonjava.indy.service.repository.ftests.matchers.RepoEqualMatcher; +import org.commonjava.indy.service.repository.ftests.profile.MemoryFunctionProfile; +import org.commonjava.indy.service.repository.model.Group; +import org.commonjava.indy.service.repository.model.RemoteRepository; +import org.commonjava.test.http.expect.ExpectationServer; +import org.commonjava.test.http.quarkus.InjectExpected; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; + +import static io.restassured.RestAssured.given; +import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; +import static jakarta.ws.rs.core.Response.Status.OK; +import static org.commonjava.indy.service.repository.model.pkg.MavenPackageTypeDescriptor.MAVEN_PKG_KEY; +import static org.junit.Assert.assertTrue; + +/** + * This case tests the group member add + * + *
+ * GIVEN: + * + * + *
+ * WHEN: + * + * + *
+ * THEN: + * + */ +@QuarkusTest +@TestProfile( MemoryFunctionProfile.class ) +@Tag( "function" ) +public class AddGroupConstituentTest + extends AbstractStoreManagementTest +{ + + @InjectExpected() + public final ExpectationServer server = new ExpectationServer(); + + @Test + public void addGroupConstituentIt() + throws Exception + { + final String name = "G"; + final Group group = new Group( MAVEN_PKG_KEY, name ); + String json = mapper.writeValueAsString( group ); + given().body( json ) + .contentType( APPLICATION_JSON ) + .post( getRepoTypeUrl( group.getKey() ) ) + .then() + .body( new RepoEqualMatcher<>( mapper, group, Group.class ) ); + + final String urlName = "urltest"; + final String url = server.formatUrl( urlName ); + final RemoteRepository member = new RemoteRepository( MAVEN_PKG_KEY, "M", url ); + json = mapper.writeValueAsString( member ); + given().body( json ) + .contentType( APPLICATION_JSON ) + .post( getRepoTypeUrl( member.getKey() ) ) + .then() + .body( new RepoEqualMatcher<>( mapper, member, RemoteRepository.class ) ); + + final String repoUrl = getRepoUrl( group.getKey() ); + given().body( json ) + .contentType( APPLICATION_JSON ) + .put( repoUrl + "addConstituent" ) + .then() + .statusCode( OK.getStatusCode() ); + + String result = given().get( repoUrl ) + .then() + .statusCode( OK.getStatusCode() ) + .body( new RepoEqualMatcher<>( mapper, group, Group.class ) ) + .extract() + .asString(); + assertTrue( result.contains( "\"constituents\" : [ \"maven:remote:M\" ]" ) ); + } +} diff --git a/src/test/java/org/commonjava/indy/service/repository/jaxrs/RepositoryAdminResourcesTest.java b/src/test/java/org/commonjava/indy/service/repository/jaxrs/RepositoryAdminResourcesTest.java index b927c1e7..79dee54f 100644 --- a/src/test/java/org/commonjava/indy/service/repository/jaxrs/RepositoryAdminResourcesTest.java +++ b/src/test/java/org/commonjava/indy/service/repository/jaxrs/RepositoryAdminResourcesTest.java @@ -20,9 +20,9 @@ import io.quarkus.test.security.TestSecurity; import io.restassured.RestAssured; import io.restassured.parsing.Parser; +import jakarta.ws.rs.core.MediaType; import org.junit.jupiter.api.Test; -import jakarta.ws.rs.core.MediaType; import java.util.HashMap; import java.util.Map; @@ -37,8 +37,8 @@ import static jakarta.ws.rs.core.Response.Status.NOT_MODIFIED; import static jakarta.ws.rs.core.Response.Status.NO_CONTENT; import static jakarta.ws.rs.core.Response.Status.OK; -import static org.hamcrest.CoreMatchers.is; import static org.commonjava.indy.service.repository.util.PathUtils.normalize; +import static org.hamcrest.CoreMatchers.is; @QuarkusTest @TestProfile( MockTestProfile.class ) @@ -332,4 +332,56 @@ public void testGetAllInValidErrorType() .contentType( MediaType.APPLICATION_JSON ) .body( "error", is( "Not supporte repository type of hosted" ) ); } + + @Test + public void testAddGroupConstituentSuccess() + { + Map member = new HashMap<>(); + member.put( "packageType", "maven" ); + member.put( "type", "remote" ); + member.put( "name", "member" ); + member.put( "url", "http://repo.member" ); + member.put( "key", "maven:remote:member" ); + + given().when() + .body( member ) + .contentType( APPLICATION_JSON ) + .put( normalize( BASE_STORE_PATH, "maven/group/success/addConstituent" ) ) + .then() + .statusCode( OK.getStatusCode() ); + } + + @Test + public void testAddGroupConstituentNonSuccess() + { + Map member = new HashMap<>(); + member.put( "packageType", "maven" ); + member.put( "type", "remote" ); + member.put( "name", "member" ); + member.put( "url", "http://repo.member" ); + member.put( "key", "maven:remote:member" ); + given().when() + .body( member ) + .contentType( APPLICATION_JSON ) + .put( normalize( BASE_STORE_PATH, "maven/group/nonsuccess/addConstituent" ) ) + .then() + .statusCode( NOT_MODIFIED.getStatusCode() ); + } + + @Test + public void testAddGroupConstituentError() + { + Map member = new HashMap<>(); + member.put( "packageType", "maven" ); + member.put( "type", "remote" ); + member.put( "name", "member" ); + member.put( "url", "http://repo.member" ); + member.put( "key", "maven:remote:member" ); + given().when() + .body( member ) + .contentType( APPLICATION_JSON ) + .put( normalize( BASE_STORE_PATH, "maven/group/error/addConstituent" ) ) + .then() + .statusCode( INTERNAL_SERVER_ERROR.getStatusCode() ); + } } diff --git a/src/test/java/org/commonjava/indy/service/repository/jaxrs/mock/MockAdminController.java b/src/test/java/org/commonjava/indy/service/repository/jaxrs/mock/MockAdminController.java index 4bea60bf..70acfc94 100644 --- a/src/test/java/org/commonjava/indy/service/repository/jaxrs/mock/MockAdminController.java +++ b/src/test/java/org/commonjava/indy/service/repository/jaxrs/mock/MockAdminController.java @@ -15,6 +15,9 @@ */ package org.commonjava.indy.service.repository.jaxrs.mock; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Alternative; +import jakarta.ws.rs.core.Response; import org.commonjava.indy.service.repository.controller.AdminController; import org.commonjava.indy.service.repository.exception.IndyWorkflowException; import org.commonjava.indy.service.repository.model.ArtifactStore; @@ -26,9 +29,6 @@ import org.commonjava.indy.service.repository.model.StoreType; import org.junit.jupiter.api.Test; -import jakarta.enterprise.context.ApplicationScoped; -import jakarta.enterprise.inject.Alternative; -import jakarta.ws.rs.core.Response; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -141,4 +141,21 @@ public List getAllStores() Group group = new Group( MAVEN_PKG_KEY, "test3", repo1.getKey(), repo2.getKey() ); return Arrays.asList( repo1, repo2, group ); } + + @Override + public boolean addConstituentToGroup( final StoreKey key, final StoreKey member ) + throws IndyWorkflowException + { + if ( key.equals( StoreKey.fromString( "maven:group:success" ) ) && member.equals( + StoreKey.fromString( "maven:remote:member" ) ) ) + { + return true; + } + if ( key.equals( StoreKey.fromString( "maven:group:error" ) ) && member.equals( + StoreKey.fromString( "maven:remote:member" ) ) ) + { + throw new IndyWorkflowException( "error happened" ); + } + return false; + } }