mirror of
				https://github.com/scm-manager/scm-manager.git
				synced 2025-10-31 10:35:56 +01:00 
			
		
		
		
	wrap lookup command result in java.util.Optional to clarify api
This commit is contained in:
		| @@ -29,6 +29,7 @@ import org.tmatesoft.svn.core.SVNException; | ||||
| import org.tmatesoft.svn.core.io.SVNRepository; | ||||
|  | ||||
| import java.util.Arrays; | ||||
| import java.util.Optional; | ||||
|  | ||||
| @Slf4j | ||||
| public class SvnLookupCommand extends AbstractSvnCommand implements LookupCommand { | ||||
| @@ -38,18 +39,28 @@ public class SvnLookupCommand extends AbstractSvnCommand implements LookupComman | ||||
|   } | ||||
|  | ||||
|   @Override | ||||
|   public <T> T lookup(LookupCommandRequest request) { | ||||
|   public <T> Optional<T> lookup(LookupCommandRequest request) { | ||||
|     try { | ||||
|       SVNRepository repository = context.open(); | ||||
|       if (request.getArgs()[0].equalsIgnoreCase("props")) { | ||||
|         if (Arrays.stream(request.getArgs()).anyMatch(a -> a.equalsIgnoreCase("uuid"))) { | ||||
|           return (T) repository.getRepositoryUUID(false); | ||||
|         } | ||||
|       if (requestContainsArg(request, "props")) { | ||||
|         return lookupProps(request); | ||||
|       } | ||||
|     } catch (SVNException | ClassCastException e) { | ||||
|       log.error("Invalid lookup request", e); | ||||
|     } catch (SVNException e) { | ||||
|       log.error("Lookup failed: ", e); | ||||
|     } | ||||
|  | ||||
|     return null; | ||||
|     return Optional.empty(); | ||||
|   } | ||||
|  | ||||
|   private <T> Optional<T> lookupProps(LookupCommandRequest request) throws SVNException { | ||||
|     if (requestContainsArg(request, "uuid")) { | ||||
|       SVNRepository repository = context.open(); | ||||
|       return Optional.of((T) repository.getRepositoryUUID(true)); | ||||
|     } | ||||
|     log.debug("No result found on lookup"); | ||||
|     return Optional.empty(); | ||||
|   } | ||||
|  | ||||
|   private boolean requestContainsArg(LookupCommandRequest request, String props) { | ||||
|     return Arrays.stream(request.getArgs()).anyMatch(a -> a.equalsIgnoreCase(props)); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,80 @@ | ||||
| /* | ||||
|  * MIT License | ||||
|  * | ||||
|  * Copyright (c) 2020-present Cloudogu GmbH and Contributors | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|  * of this software and associated documentation files (the "Software"), to deal | ||||
|  * in the Software without restriction, including without limitation the rights | ||||
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|  * copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in all | ||||
|  * copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||
|  * SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| package sonia.scm.repository.spi; | ||||
|  | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.junit.jupiter.api.extension.ExtendWith; | ||||
| import org.mockito.InjectMocks; | ||||
| import org.mockito.Mock; | ||||
| import org.mockito.junit.jupiter.MockitoExtension; | ||||
| import org.tmatesoft.svn.core.SVNException; | ||||
| import org.tmatesoft.svn.core.io.SVNRepository; | ||||
|  | ||||
| import java.util.Optional; | ||||
|  | ||||
| import static org.assertj.core.api.Assertions.assertThat; | ||||
| import static org.mockito.Mockito.when; | ||||
|  | ||||
| @ExtendWith(MockitoExtension.class) | ||||
| class SvnLookupCommandTest { | ||||
|  | ||||
|   @Mock | ||||
|   SvnContext context; | ||||
|  | ||||
|   @Mock | ||||
|   SVNRepository svnRepository; | ||||
|  | ||||
|   @InjectMocks | ||||
|   SvnLookupCommand command; | ||||
|  | ||||
|   @Test | ||||
|   void shouldReturnEmptyOptional() { | ||||
|     LookupCommandRequest request = new LookupCommandRequest(); | ||||
|     request.setType(String.class); | ||||
|     request.setArgs(new String[]{"props"}); | ||||
|  | ||||
|     Optional<Object> result = command.lookup(request); | ||||
|  | ||||
|     assertThat(result).isNotPresent(); | ||||
|   } | ||||
|  | ||||
|   @Test | ||||
|   void shouldReturnRepositoryUUID() throws SVNException { | ||||
|     String uuid = "trillian-hitchhiker-42"; | ||||
|     when(context.open()).thenReturn(svnRepository); | ||||
|     when(svnRepository.getRepositoryUUID(true)).thenReturn(uuid); | ||||
|  | ||||
|     LookupCommandRequest request = new LookupCommandRequest(); | ||||
|     request.setType(String.class); | ||||
|     request.setArgs(new String[]{"props", "uuid"}); | ||||
|  | ||||
|     Optional<Object> result = command.lookup(request); | ||||
|  | ||||
|     assertThat(result).isPresent(); | ||||
|     assertThat(result.get()) | ||||
|       .isInstanceOf(String.class) | ||||
|       .isEqualTo(uuid); | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user