Return the default resolver if the factory URL refers directly to a devfile
Signed-off-by: Igor Vinokur <ivinokur@redhat.com>pull/519/head
parent
b68fa97aa2
commit
6e1dcc2683
|
|
@ -11,6 +11,7 @@
|
|||
*/
|
||||
package org.eclipse.che.api.factory.server;
|
||||
|
||||
import static com.google.common.base.Strings.isNullOrEmpty;
|
||||
import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static org.eclipse.che.api.factory.server.ApiExceptionMapper.toApiException;
|
||||
|
|
@ -39,6 +40,7 @@ import org.eclipse.che.api.factory.server.scm.exception.ScmConfigurationPersiste
|
|||
import org.eclipse.che.api.factory.server.scm.exception.ScmUnauthorizedException;
|
||||
import org.eclipse.che.api.factory.server.scm.exception.UnknownScmProviderException;
|
||||
import org.eclipse.che.api.factory.server.scm.exception.UnsatisfiedScmPreconditionException;
|
||||
import org.eclipse.che.api.factory.server.urlfactory.DevfileFilenamesProvider;
|
||||
import org.eclipse.che.api.factory.shared.dto.FactoryMetaDto;
|
||||
|
||||
/**
|
||||
|
|
@ -176,6 +178,7 @@ public class FactoryService extends Service {
|
|||
private Set<FactoryParametersResolver> specificFactoryParametersResolvers;
|
||||
|
||||
@Inject private DefaultFactoryParameterResolver defaultFactoryResolver;
|
||||
@Inject private DevfileFilenamesProvider devfileFilenamesProvider;
|
||||
|
||||
/**
|
||||
* Provides a suitable resolver for the given parameters. If there is no at least one resolver
|
||||
|
|
@ -185,6 +188,14 @@ public class FactoryService extends Service {
|
|||
*/
|
||||
public FactoryParametersResolver getFactoryParametersResolver(Map<String, String> parameters)
|
||||
throws BadRequestException {
|
||||
String url = parameters.get(URL_PARAMETER_NAME);
|
||||
// Check if the URL is a raw devfile URL. If so, use the default resolver,
|
||||
// which resolves factories from a direct URL to a devfile content.
|
||||
if (!isNullOrEmpty(url)
|
||||
&& devfileFilenamesProvider.getConfiguredDevfileFilenames().stream()
|
||||
.anyMatch(url::endsWith)) {
|
||||
return defaultFactoryResolver;
|
||||
}
|
||||
for (FactoryParametersResolver factoryParametersResolver :
|
||||
specificFactoryParametersResolvers) {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -14,9 +14,11 @@ package org.eclipse.che.api.factory.server;
|
|||
import static io.restassured.RestAssured.given;
|
||||
import static jakarta.ws.rs.core.Response.Status.BAD_REQUEST;
|
||||
import static java.lang.String.valueOf;
|
||||
import static java.util.Collections.singletonList;
|
||||
import static java.util.Collections.singletonMap;
|
||||
import static org.eclipse.che.api.factory.server.FactoryService.VALIDATE_QUERY_PARAMETER;
|
||||
import static org.eclipse.che.api.factory.shared.Constants.CURRENT_VERSION;
|
||||
import static org.eclipse.che.api.factory.shared.Constants.URL_PARAMETER_NAME;
|
||||
import static org.eclipse.che.dto.server.DtoFactory.newDto;
|
||||
import static org.everrest.assured.JettyHttpServer.ADMIN_USER_NAME;
|
||||
import static org.everrest.assured.JettyHttpServer.ADMIN_USER_PASSWORD;
|
||||
|
|
@ -55,6 +57,7 @@ import org.eclipse.che.api.factory.server.impl.SourceStorageParametersValidator;
|
|||
import org.eclipse.che.api.factory.server.model.impl.AuthorImpl;
|
||||
import org.eclipse.che.api.factory.server.model.impl.FactoryImpl;
|
||||
import org.eclipse.che.api.factory.server.scm.PersonalAccessTokenManager;
|
||||
import org.eclipse.che.api.factory.server.urlfactory.DevfileFilenamesProvider;
|
||||
import org.eclipse.che.api.factory.server.urlfactory.RemoteFactoryUrl;
|
||||
import org.eclipse.che.api.factory.shared.dto.FactoryDto;
|
||||
import org.eclipse.che.api.user.server.PreferenceManager;
|
||||
|
|
@ -108,6 +111,7 @@ public class FactoryServiceTest {
|
|||
@Mock private AdditionalFilenamesProvider additionalFilenamesProvider;
|
||||
@Mock private DefaultFactoryParameterResolver defaultFactoryParameterResolver;
|
||||
@Mock private PersonalAccessTokenManager personalAccessTokenManager;
|
||||
@Mock private DevfileFilenamesProvider devfileFilenamesProvider;
|
||||
|
||||
@InjectMocks private FactoryParametersResolverHolder factoryParametersResolverHolder;
|
||||
|
||||
|
|
@ -265,6 +269,25 @@ public class FactoryServiceTest {
|
|||
"Factory url required");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnDefaultFactoryParameterResolver() throws Exception {
|
||||
// given
|
||||
when(devfileFilenamesProvider.getConfiguredDevfileFilenames())
|
||||
.thenReturn(singletonList("devfile.yaml"));
|
||||
|
||||
// when
|
||||
FactoryParametersResolver factoryParametersResolver =
|
||||
factoryParametersResolverHolder.getFactoryParametersResolver(
|
||||
singletonMap(URL_PARAMETER_NAME, "https://host/path/devfile.yaml"));
|
||||
|
||||
// then
|
||||
assertTrue(
|
||||
factoryParametersResolver
|
||||
.getClass()
|
||||
.getName()
|
||||
.startsWith(DefaultFactoryParameterResolver.class.getName()));
|
||||
}
|
||||
|
||||
private FactoryImpl createFactory() {
|
||||
return createNamedFactory(FACTORY_NAME);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue