123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468 |
- package org.apache.archiva.rest.services.v2;
-
- /*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- */
-
- import io.restassured.response.Response;
- import org.apache.archiva.components.rest.model.PagedResult;
- import org.apache.archiva.rest.api.model.v2.RepositoryGroup;
- import org.apache.archiva.rest.api.services.v2.ArchivaRestError;
- import org.junit.jupiter.api.AfterAll;
- import org.junit.jupiter.api.BeforeAll;
- import org.junit.jupiter.api.DisplayName;
- import org.junit.jupiter.api.MethodOrderer;
- import org.junit.jupiter.api.Tag;
- import org.junit.jupiter.api.Test;
- import org.junit.jupiter.api.TestInstance;
- import org.junit.jupiter.api.TestMethodOrder;
-
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
-
- import static io.restassured.RestAssured.given;
- import static io.restassured.http.ContentType.JSON;
- import static org.easymock.EasyMock.contains;
- import static org.hamcrest.Matchers.endsWith;
- import static org.junit.jupiter.api.Assertions.*;
-
- /**
- * @author Martin Stockhammer <martin_s@apache.org>
- */
- @TestInstance( TestInstance.Lifecycle.PER_CLASS )
- @Tag( "rest-native" )
- @TestMethodOrder( MethodOrderer.Random.class )
- @DisplayName( "Native REST tests for V2 RepositoryGroupService" )
- public class NativeRepositoryGroupServiceTest extends AbstractNativeRestServices
- {
- @Override
- protected String getServicePath( )
- {
- return "/repository_groups";
- }
-
- @BeforeAll
- void setup( ) throws Exception
- {
- super.setupNative( );
- }
-
- @AfterAll
- void destroy( ) throws Exception
- {
- super.shutdownNative( );
- }
-
- @Test
- void testGetEmptyList( )
- {
- String token = getAdminToken( );
- Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .get( "" )
- .then( ).statusCode( 200 ).extract( ).response( );
- assertNotNull( response );
- PagedResult result = response.getBody( ).jsonPath( ).getObject( "", PagedResult.class );
- assertEquals( 0, result.getPagination( ).getTotalCount( ) );
-
- }
-
- @Test
- void testAddGroup( )
- {
- String token = getAdminToken( );
- try
- {
- Map<String, Object> jsonAsMap = new HashMap<>( );
- jsonAsMap.put( "id", "group_001" );
- Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .body( jsonAsMap )
- .post( "" )
- .prettyPeek()
- .then( ).statusCode( 201 ).extract( ).response( );
- assertNotNull( response );
- RepositoryGroup result = response.getBody( ).jsonPath( ).getObject( "", RepositoryGroup.class );
- assertNotNull( result );
-
- response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .get( "" )
- .then( ).statusCode( 200 ).extract( ).response( );
- assertNotNull( response );
- PagedResult resultList = response.getBody( ).jsonPath( ).getObject( "", PagedResult.class );
- assertEquals( 1, resultList.getPagination( ).getTotalCount( ) );
- } finally
- {
- given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .delete( "group_001" )
- .then( ).statusCode( 200 );
- }
- }
-
- @Test
- void testAddExistingGroup( )
- {
- String token = getAdminToken( );
- try
- {
- Map<String, Object> jsonAsMap = new HashMap<>( );
- jsonAsMap.put( "id", "group_001" );
- Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .body( jsonAsMap )
- .post( "" )
- .then( ).statusCode( 201 ).extract( ).response( );
- assertNotNull( response );
- response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .redirects().follow( false )
- .body( jsonAsMap )
- .post( "" )
- .prettyPeek()
- .then( ).statusCode( 303 )
- .assertThat()
- .header( "Location", endsWith("group_001") ).extract( ).response( );
- } finally
- {
- given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .delete( "group_001" )
- .then( ).statusCode( 200 );
- }
- }
-
-
- @Test
- void testAddMultipleGroups( )
- {
- String token = getAdminToken( );
- List<String> groups = new ArrayList<>( );
- try
- {
- for ( int i=0; i<10; i++)
- {
- String groupName = String.format( "group_%03d", i );
- groups.add( groupName );
- Map<String, Object> jsonAsMap = new HashMap<>( );
- jsonAsMap.put( "id", groupName );
- Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .body( jsonAsMap )
- .post( "" )
- .then( ).statusCode( 201 ).extract( ).response( );
- assertNotNull( response );
- RepositoryGroup result = response.getBody( ).jsonPath( ).getObject( "", RepositoryGroup.class );
- assertNotNull( result );
- }
- Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .get( "" )
- .then( ).statusCode( 200 ).extract( ).response( );
- assertNotNull( response );
- PagedResult resultList = response.getBody( ).jsonPath( ).getObject( "", PagedResult.class );
- assertEquals( 10, resultList.getPagination( ).getTotalCount( ) );
- } finally
- {
- for (String groupName : groups)
- {
- given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .delete( groupName )
- .then( ).statusCode( 200 );
- }
- }
- }
-
- @Test
- void testRemoveRepositoryGroup( )
- {
- String token = getAdminToken( );
- List<String> groups = new ArrayList<>( );
- try
- {
- for ( int i=0; i<10; i++)
- {
- String groupName = String.format( "group_%03d", i );
- groups.add( groupName );
- Map<String, Object> jsonAsMap = new HashMap<>( );
- jsonAsMap.put( "id", groupName );
- Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .body( jsonAsMap )
- .post( "" )
- .then( ).statusCode( 201 ).extract( ).response( );
- assertNotNull( response );
- RepositoryGroup result = response.getBody( ).jsonPath( ).getObject( "", RepositoryGroup.class );
- assertNotNull( result );
- }
- Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .delete( "group_001" )
- .then( ).statusCode( 200 ).extract( ).response( );
- assertNotNull( response );
-
- response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .get( "" )
- .then( ).statusCode( 200 ).extract( ).response( );
- assertNotNull( response );
- PagedResult resultList = response.getBody( ).jsonPath( ).getObject( "", PagedResult.class );
- assertEquals( 9, resultList.getPagination( ).getTotalCount( ) );
-
-
- response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .delete( "group_005" )
- .then( ).statusCode( 200 ).extract( ).response( );
- assertNotNull( response );
-
- response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .get( "" )
- .then( ).statusCode( 200 ).extract( ).response( );
- assertNotNull( response );
- resultList = response.getBody( ).jsonPath( ).getObject( "", PagedResult.class );
- assertEquals( 8, resultList.getPagination( ).getTotalCount( ) );
-
- } finally
- {
- for (String groupName : groups)
- {
- if (!("group_001".equals(groupName) || "group_005".equals(groupName) ) )
- {
- given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .delete( groupName )
- .then( ).statusCode( 200 );
- }
- }
- }
- }
-
-
- @Test
- void testAddRepositoryToGroup( )
- {
- String token = getAdminToken( );
- try
- {
- Map<String, Object> jsonAsMap = new HashMap<>( );
- jsonAsMap.put( "id", "group_001" );
- Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .body( jsonAsMap )
- .post( "" )
- .prettyPeek()
- .then( ).statusCode( 201 ).extract( ).response( );
- assertNotNull( response );
- RepositoryGroup result = response.getBody( ).jsonPath( ).getObject( "", RepositoryGroup.class );
- assertNotNull( result );
-
- response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .get( "" )
- .then( ).statusCode( 200 ).extract( ).response( );
- assertNotNull( response );
- PagedResult resultList = response.getBody( ).jsonPath( ).getObject( "", PagedResult.class );
- assertEquals( 1, resultList.getPagination( ).getTotalCount( ) );
-
- response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .body( jsonAsMap )
- .put( "group_001/repositories/internal" )
- .prettyPeek()
- .then( ).statusCode( 200 ).extract( ).response( );
-
- assertNotNull( response );
- result = response.getBody( ).jsonPath( ).getObject( "", RepositoryGroup.class );
- assertNotNull( result );
- assertEquals( 1, result.getRepositories( ).size( ) );
- assertTrue( result.getRepositories( ).contains( "internal" ) );
-
- } finally
- {
- given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .delete( "group_001" )
- .then( ).statusCode( 200 );
- }
- }
-
- @Test
- void testAddRepositoryToGroupIdempotency( )
- {
- String token = getAdminToken( );
- try
- {
- Map<String, Object> jsonAsMap = new HashMap<>( );
- jsonAsMap.put( "id", "group_001" );
- Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .body( jsonAsMap )
- .post( "" )
- .prettyPeek()
- .then( ).statusCode( 201 ).extract( ).response( );
- assertNotNull( response );
- RepositoryGroup result = response.getBody( ).jsonPath( ).getObject( "", RepositoryGroup.class );
- assertNotNull( result );
-
- response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .get( "" )
- .then( ).statusCode( 200 ).extract( ).response( );
- assertNotNull( response );
- PagedResult resultList = response.getBody( ).jsonPath( ).getObject( "", PagedResult.class );
- assertEquals( 1, resultList.getPagination( ).getTotalCount( ) );
-
- response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .body( jsonAsMap )
- .put( "group_001/repositories/internal" )
- .prettyPeek()
- .then( ).statusCode( 200 ).extract( ).response( );
-
- response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .body( jsonAsMap )
- .put( "group_001/repositories/internal" )
- .prettyPeek()
- .then( ).statusCode( 200 ).extract( ).response( );
-
- assertNotNull( response );
- result = response.getBody( ).jsonPath( ).getObject( "", RepositoryGroup.class );
- assertNotNull( result );
- assertEquals( 1, result.getRepositories( ).size( ) );
- assertTrue( result.getRepositories( ).contains( "internal" ) );
-
- } finally
- {
- given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .delete( "group_001" )
- .then( ).statusCode( 200 );
- }
- }
-
-
- @Test
- void testRemoveRepositoryFromGroup( )
- {
- String token = getAdminToken( );
- try
- {
- Map<String, Object> jsonAsMap = new HashMap<>( );
- jsonAsMap.put( "id", "group_001" );
- jsonAsMap.put( "repositories", Arrays.asList( "internal" ) );
- Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .body( jsonAsMap )
- .post( "" )
- .prettyPeek()
- .then( ).statusCode( 201 ).extract( ).response( );
- assertNotNull( response );
- RepositoryGroup result = response.getBody( ).jsonPath( ).getObject( "", RepositoryGroup.class );
- assertNotNull( result );
-
- response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .get( "" )
- .then( ).statusCode( 200 ).extract( ).response( );
- assertNotNull( response );
- PagedResult resultList = response.getBody( ).jsonPath( ).getObject( "", PagedResult.class );
- assertEquals( 1, resultList.getPagination( ).getTotalCount( ) );
-
- assertNotNull( result.getRepositories( ) );
- assertEquals( 1, result.getRepositories( ).size( ) );
- assertTrue( result.getRepositories( ).contains( "internal" ) );
-
- response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .body( jsonAsMap )
- .delete( "group_001/repositories/internal" )
- .prettyPeek()
- .then( ).statusCode( 200 ).extract( ).response( );
-
- assertNotNull( response );
- result = response.getBody( ).jsonPath( ).getObject( "", RepositoryGroup.class );
- assertNotNull( result );
- assertEquals( 0, result.getRepositories( ).size( ) );
-
- } finally
- {
- given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .delete( "group_001" )
- .then( ).statusCode( 200 );
- }
- }
-
- @Test
- void testRemoveRepositoryFromGroup404( )
- {
- String token = getAdminToken( );
- try
- {
- Map<String, Object> jsonAsMap = new HashMap<>( );
- jsonAsMap.put( "id", "group_001" );
- jsonAsMap.put( "repositories", Arrays.asList( "internal" ) );
- Response response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .body( jsonAsMap )
- .post( "" )
- .prettyPeek()
- .then( ).statusCode( 201 ).extract( ).response( );
- assertNotNull( response );
- RepositoryGroup result = response.getBody( ).jsonPath( ).getObject( "", RepositoryGroup.class );
- assertNotNull( result );
-
- response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .get( "" )
- .then( ).statusCode( 200 ).extract( ).response( );
- assertNotNull( response );
- PagedResult resultList = response.getBody( ).jsonPath( ).getObject( "", PagedResult.class );
- assertEquals( 1, resultList.getPagination( ).getTotalCount( ) );
-
- assertNotNull( result.getRepositories( ) );
- assertEquals( 1, result.getRepositories( ).size( ) );
- assertTrue( result.getRepositories( ).contains( "internal" ) );
-
- response = given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .body( jsonAsMap )
- .delete( "group_001/repositories/internalxx" )
- .prettyPeek()
- .then( ).statusCode( 404 ).extract( ).response( );
-
- assertNotNull( response );
- ArchivaRestError error = response.getBody( ).jsonPath( ).getObject( "", ArchivaRestError.class );
- assertNotNull( error );
- } finally
- {
- given( ).spec( getRequestSpec( token ) ).contentType( JSON )
- .when( )
- .delete( "group_001" )
- .then( ).statusCode( 200 );
- }
- }
-
- }
|