integration tests for GUI and code cleanup
This commit is contained in:
		
							parent
							
								
									1e7b6f807f
								
							
						
					
					
						commit
						360f6d6755
					
				
					 15 changed files with 369 additions and 67 deletions
				
			
		|  | @ -30,7 +30,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode; | |||
| 
 | ||||
| import ch.ethz.seb.sebserver.gbl.Constants; | ||||
| import ch.ethz.seb.sebserver.gbl.api.JSONMapper; | ||||
| import ch.ethz.seb.sebserver.gbl.model.EntityKey; | ||||
| import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.FormBinding; | ||||
| import ch.ethz.seb.sebserver.gui.widget.ImageUpload; | ||||
| import ch.ethz.seb.sebserver.gui.widget.MultiSelection; | ||||
|  | @ -47,17 +46,9 @@ public final class Form implements FormBinding { | |||
|     private final Map<String, List<Form>> subLists = new LinkedHashMap<>(); | ||||
|     private final Map<String, Set<String>> groups = new LinkedHashMap<>(); | ||||
| 
 | ||||
|     private final EntityKey entityKey; | ||||
| 
 | ||||
|     Form(final JSONMapper jsonMapper, final EntityKey entityKey) { | ||||
|     Form(final JSONMapper jsonMapper) { | ||||
|         this.jsonMapper = jsonMapper; | ||||
|         this.objectRoot = this.jsonMapper.createObjectNode(); | ||||
|         this.entityKey = entityKey; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public EntityKey entityKey() { | ||||
|         return this.entityKey; | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|  |  | |||
|  | @ -26,7 +26,6 @@ import org.slf4j.LoggerFactory; | |||
| import ch.ethz.seb.sebserver.gbl.Constants; | ||||
| import ch.ethz.seb.sebserver.gbl.api.JSONMapper; | ||||
| import ch.ethz.seb.sebserver.gbl.model.Entity; | ||||
| import ch.ethz.seb.sebserver.gbl.model.EntityKey; | ||||
| import ch.ethz.seb.sebserver.gbl.util.Tuple; | ||||
| import ch.ethz.seb.sebserver.gui.service.i18n.PolyglotPageService; | ||||
| import ch.ethz.seb.sebserver.gui.service.page.PageContext; | ||||
|  | @ -50,7 +49,6 @@ public class FormBuilder { | |||
|     private boolean emptyCellSeparation = true; | ||||
| 
 | ||||
|     FormBuilder( | ||||
|             final EntityKey entityKey, | ||||
|             final JSONMapper jsonMapper, | ||||
|             final WidgetFactory widgetFactory, | ||||
|             final PolyglotPageService polyglotPageService, | ||||
|  | @ -60,7 +58,7 @@ public class FormBuilder { | |||
|         this.widgetFactory = widgetFactory; | ||||
|         this.polyglotPageService = polyglotPageService; | ||||
|         this.pageContext = pageContext; | ||||
|         this.form = new Form(jsonMapper, entityKey); | ||||
|         this.form = new Form(jsonMapper); | ||||
| 
 | ||||
|         this.formParent = new Composite(pageContext.getParent(), SWT.NONE); | ||||
|         final GridLayout layout = new GridLayout(rows, true); | ||||
|  |  | |||
|  | @ -97,7 +97,7 @@ public class FormHandle<T extends Entity> { | |||
| 
 | ||||
|         fieldAccessor.setError(this.i18nSupport.getText(new LocTextKey( | ||||
|                 FIELD_VALIDATION_LOCTEXT_PREFIX + valError.errorType, | ||||
|                 (Object[]) valError.attributes))); | ||||
|                 (Object[]) valError.getAttributes()))); | ||||
|     } | ||||
| 
 | ||||
|     public FormHandle<T> process(final Consumer<Form> consumer) { | ||||
|  |  | |||
|  | @ -12,7 +12,6 @@ import org.springframework.context.annotation.Lazy; | |||
| import org.springframework.stereotype.Component; | ||||
| 
 | ||||
| import ch.ethz.seb.sebserver.gbl.api.JSONMapper; | ||||
| import ch.ethz.seb.sebserver.gbl.model.EntityKey; | ||||
| import ch.ethz.seb.sebserver.gbl.profile.GuiProfile; | ||||
| import ch.ethz.seb.sebserver.gui.service.i18n.PolyglotPageService; | ||||
| import ch.ethz.seb.sebserver.gui.service.page.PageContext; | ||||
|  | @ -42,21 +41,6 @@ public class PageFormService { | |||
|             final int rows) { | ||||
| 
 | ||||
|         return new FormBuilder( | ||||
|                 pageContext.getEntityKey(), | ||||
|                 this.jsonMapper, | ||||
|                 this.widgetFactory, | ||||
|                 this.polyglotPageService, | ||||
|                 pageContext, | ||||
|                 rows); | ||||
|     } | ||||
| 
 | ||||
|     public FormBuilder getBuilder( | ||||
|             final EntityKey entityKey, | ||||
|             final PageContext pageContext, | ||||
|             final int rows) { | ||||
| 
 | ||||
|         return new FormBuilder( | ||||
|                 entityKey, | ||||
|                 this.jsonMapper, | ||||
|                 this.widgetFactory, | ||||
|                 this.polyglotPageService, | ||||
|  |  | |||
|  | @ -8,7 +8,10 @@ | |||
| 
 | ||||
| package ch.ethz.seb.sebserver.gui.service.page; | ||||
| 
 | ||||
| import java.util.Collection; | ||||
| 
 | ||||
| import ch.ethz.seb.sebserver.gbl.api.APIMessage; | ||||
| import ch.ethz.seb.sebserver.gbl.util.Utils; | ||||
| 
 | ||||
| public class FieldValidationError { | ||||
| 
 | ||||
|  | @ -16,7 +19,7 @@ public class FieldValidationError { | |||
|     public final String domainName; | ||||
|     public final String fieldName; | ||||
|     public final String errorType; | ||||
|     public final String[] attributes; | ||||
|     public final Collection<String> attributes; | ||||
| 
 | ||||
|     public FieldValidationError(final APIMessage apiMessage) { | ||||
|         this( | ||||
|  | @ -29,11 +32,19 @@ public class FieldValidationError { | |||
|             final String[] attributes) { | ||||
| 
 | ||||
|         this.messageCode = messageCode; | ||||
|         this.attributes = attributes; | ||||
|         this.attributes = Utils.immutableCollectionOf(attributes); | ||||
| 
 | ||||
|         this.domainName = (attributes != null && attributes.length > 0) ? attributes[0] : null; | ||||
|         this.fieldName = (attributes != null && attributes.length > 1) ? attributes[1] : null; | ||||
|         this.errorType = (attributes != null && attributes.length > 2) ? attributes[2] : null; | ||||
|     } | ||||
| 
 | ||||
|     public String[] getAttributes() { | ||||
|         if (this.attributes == null) { | ||||
|             return new String[0]; | ||||
|         } | ||||
| 
 | ||||
|         return this.attributes.toArray(new String[this.attributes.size()]); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -8,12 +8,8 @@ | |||
| 
 | ||||
| package ch.ethz.seb.sebserver.gui.service.remote.webservice.api; | ||||
| 
 | ||||
| import ch.ethz.seb.sebserver.gbl.model.EntityKey; | ||||
| 
 | ||||
| public interface FormBinding { | ||||
| 
 | ||||
|     EntityKey entityKey(); | ||||
| 
 | ||||
|     String getFormAsJson(); | ||||
| 
 | ||||
|     String getFormUrlEncoded(); | ||||
|  |  | |||
|  | @ -28,11 +28,9 @@ import org.springframework.web.client.RestClientResponseException; | |||
| import com.fasterxml.jackson.core.JsonProcessingException; | ||||
| import com.fasterxml.jackson.core.type.TypeReference; | ||||
| 
 | ||||
| import ch.ethz.seb.sebserver.gbl.api.API; | ||||
| import ch.ethz.seb.sebserver.gbl.api.APIMessage; | ||||
| import ch.ethz.seb.sebserver.gbl.api.JSONMapper; | ||||
| import ch.ethz.seb.sebserver.gbl.model.Entity; | ||||
| import ch.ethz.seb.sebserver.gbl.model.EntityKey; | ||||
| import ch.ethz.seb.sebserver.gbl.model.Page; | ||||
| import ch.ethz.seb.sebserver.gbl.util.Result; | ||||
| import ch.ethz.seb.sebserver.webservice.servicelayer.PaginationService.SortOrder; | ||||
|  | @ -72,7 +70,7 @@ public abstract class RestCall<T> { | |||
|         log.debug("Call webservice API on {} for {}", this.path, builder); | ||||
| 
 | ||||
|         try { | ||||
|             final ResponseEntity<String> responseEntity = RestCall.this.restService | ||||
|             final ResponseEntity<String> responseEntity = this.restService | ||||
|                     .getWebserviceAPIRestTemplate() | ||||
|                     .exchange( | ||||
|                             builder.buildURI(), | ||||
|  | @ -211,10 +209,8 @@ public abstract class RestCall<T> { | |||
|         } | ||||
| 
 | ||||
|         public RestCallBuilder withFormBinding(final FormBinding formBinding) { | ||||
|             final EntityKey entityKey = formBinding.entityKey(); | ||||
|             if (entityKey != null) { | ||||
|                 return withURIVariable(API.PARAM_MODEL_ID, formBinding.entityKey().modelId) | ||||
|                         .withBody(formBinding.getFormAsJson()); | ||||
|             if (RestCall.this.httpMethod == HttpMethod.PUT) { | ||||
|                 return withBody(formBinding.getFormAsJson()); | ||||
|             } else { | ||||
|                 this.body = formBinding.getFormUrlEncoded(); | ||||
|                 return this; | ||||
|  |  | |||
|  | @ -9,13 +9,9 @@ | |||
| package ch.ethz.seb.sebserver.gui.service.remote.webservice.api; | ||||
| 
 | ||||
| import java.util.Collection; | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.stream.Collectors; | ||||
| 
 | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.context.annotation.Lazy; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.web.client.RestTemplate; | ||||
|  | @ -23,8 +19,6 @@ import org.springframework.web.util.UriComponentsBuilder; | |||
| 
 | ||||
| import ch.ethz.seb.sebserver.gbl.api.JSONMapper; | ||||
| import ch.ethz.seb.sebserver.gbl.profile.GuiProfile; | ||||
| import ch.ethz.seb.sebserver.gbl.util.Tuple; | ||||
| import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.institution.GetInstitutionNames; | ||||
| import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.AuthorizationContextHolder; | ||||
| import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.WebserviceURIService; | ||||
| 
 | ||||
|  | @ -33,8 +27,6 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.WebserviceURISer | |||
| @GuiProfile | ||||
| public class RestService { | ||||
| 
 | ||||
|     private static final Logger log = LoggerFactory.getLogger(RestService.class); | ||||
| 
 | ||||
|     private final AuthorizationContextHolder authorizationContextHolder; | ||||
|     private final WebserviceURIService webserviceURIBuilderSupplier; | ||||
|     private final Map<String, RestCall<?>> calls; | ||||
|  | @ -80,19 +72,4 @@ public class RestService { | |||
|         return restCall.newBuilder(); | ||||
|     } | ||||
| 
 | ||||
|     public final List<Tuple<String>> getInstitutionSelection() { | ||||
|         try { | ||||
|             return getBuilder(GetInstitutionNames.class) | ||||
|                     .call() | ||||
|                     .map(list -> list | ||||
|                             .stream() | ||||
|                             .map(entityName -> new Tuple<>(entityName.modelId, entityName.name)) | ||||
|                             .collect(Collectors.toList())) | ||||
|                     .getOrThrow(); | ||||
|         } catch (final Exception e) { | ||||
|             log.error("Failed to get selection resource for Institution selection", e); | ||||
|             return Collections.emptyList(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -98,6 +98,7 @@ public class OAuth2AuthorizationContextHolder implements AuthorizationContextHol | |||
|                     this.guiClientSecret, | ||||
|                     this.webserviceURIService, | ||||
|                     this.clientHttpRequestFactory); | ||||
| 
 | ||||
|             session.setAttribute(CONTEXT_HOLDER_ATTRIBUTE, context); | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
|  | @ -8,6 +8,9 @@ | |||
| 
 | ||||
| package ch.ethz.seb.sebserver.gbl.model.institution; | ||||
| 
 | ||||
| import static org.junit.Assert.assertEquals; | ||||
| import static org.junit.Assert.assertTrue; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| 
 | ||||
| import org.junit.Test; | ||||
|  | @ -21,10 +24,13 @@ public class InstitutionTest { | |||
| 
 | ||||
|     @Test | ||||
|     public void test() throws JsonParseException, JsonMappingException, IOException { | ||||
|         final String testJson = "{\"id\":\"1\",\"name\":\"ETH Zürichrgerg\",\"urlSuffix\":\"\"}"; | ||||
|         final String testJson = "{\"id\":\"1\",\"name\":\"ETH Zürich\",\"urlSuffix\":\"\"}"; | ||||
| 
 | ||||
|         final JSONMapper mapper = new JSONMapper(); | ||||
|         final Institution inst = mapper.readValue(testJson, Institution.class); | ||||
|         assertTrue(inst.id != null); | ||||
|         assertTrue(inst.id.longValue() == 1); | ||||
|         assertEquals("ETH Zürich", inst.name); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,53 @@ | |||
| /* | ||||
|  * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) | ||||
|  * | ||||
|  * This Source Code Form is subject to the terms of the Mozilla Public | ||||
|  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. | ||||
|  */ | ||||
| 
 | ||||
| package ch.ethz.seb.sebserver.gui.form; | ||||
| 
 | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| public class FormBuilderTest { | ||||
| 
 | ||||
|     @Test | ||||
|     public void testFormBuilder() { | ||||
| 
 | ||||
| //        final PolyglotPageService polyglotPageService = Mockito.mock(PolyglotPageService.class); | ||||
| //        final ServerPushService serverPushService = Mockito.mock(ServerPushService.class); | ||||
| //        final WidgetFactory WidgetFactory = new WidgetFactory(polyglotPageService, serverPushService); | ||||
| // | ||||
| //        final PageFormService pageFormService = new PageFormService( | ||||
| //                new JSONMapper(), | ||||
| //                WidgetFactory, | ||||
| //                polyglotPageService); | ||||
| // | ||||
| //        final PageContext formContext = Mockito.mock(PageContext.class); | ||||
| //        final SaveInstitution rest = Mockito.mock(SaveInstitution.class); | ||||
| // | ||||
| //        final Composite content = Mockito.mock(Composite.class); | ||||
| // | ||||
| //        final FormHandle<Institution> formHandle = pageFormService.getBuilder( | ||||
| //                formContext.copyOf(content), 4) | ||||
| //                .readonly(formContext.isReadonly()) | ||||
| //                .putStaticValue(Domain.INSTITUTION.ATTR_ID, "1") | ||||
| //                .addField(FormBuilder.text( | ||||
| //                        Domain.INSTITUTION.ATTR_NAME, | ||||
| //                        "sebserver.institution.form.name", | ||||
| //                        "Test Institution")) | ||||
| //                .addField(FormBuilder.text( | ||||
| //                        Domain.INSTITUTION.ATTR_URL_SUFFIX, | ||||
| //                        "sebserver.institution.form.urlSuffix", | ||||
| //                        "inst")) | ||||
| //                .addField(FormBuilder.imageUpload( | ||||
| //                        Domain.INSTITUTION.ATTR_LOGO_IMAGE, | ||||
| //                        "sebserver.institution.form.logoImage", | ||||
| //                        "")) | ||||
| //                .buildFor(rest); | ||||
| // | ||||
| //        assertNotNull(formHandle); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,68 @@ | |||
| /* | ||||
|  * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) | ||||
|  * | ||||
|  * This Source Code Form is subject to the terms of the Mozilla Public | ||||
|  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. | ||||
|  */ | ||||
| 
 | ||||
| package ch.ethz.seb.sebserver.gui.integration; | ||||
| 
 | ||||
| import static org.junit.Assert.*; | ||||
| 
 | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import ch.ethz.seb.sebserver.gbl.api.EntityType; | ||||
| import ch.ethz.seb.sebserver.gbl.authorization.PrivilegeType; | ||||
| import ch.ethz.seb.sebserver.gbl.model.user.UserInfo; | ||||
| import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.CurrentUser; | ||||
| import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.OAuth2AuthorizationContextHolder; | ||||
| 
 | ||||
| public class CurrentUserTest extends GuiIntegrationTest { | ||||
| 
 | ||||
|     @Test | ||||
|     public void testCurrentUserLoginAndGet() { | ||||
|         final OAuth2AuthorizationContextHolder authorizationContextHolder = getAuthorizationContextHolder(); | ||||
| 
 | ||||
|         final CurrentUser currentUser = new CurrentUser(authorizationContextHolder); | ||||
| 
 | ||||
|         // no user is logged in for now | ||||
|         assertNull(currentUser.get()); | ||||
| 
 | ||||
|         // login as SEB Administrator | ||||
|         authorizationContextHolder.getAuthorizationContext().login("admin", "admin"); | ||||
|         final UserInfo userInfo = currentUser.getOrHandleError(error -> { | ||||
|             fail("expecting no error here"); | ||||
|             return null; | ||||
|         }); | ||||
|         assertNotNull(userInfo); | ||||
|         assertEquals("user1", userInfo.uuid); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void testCurrentUserPrivileges() { | ||||
|         final OAuth2AuthorizationContextHolder authorizationContextHolder = getAuthorizationContextHolder(); | ||||
| 
 | ||||
|         final CurrentUser currentUser = new CurrentUser(authorizationContextHolder); | ||||
|         // login as SEB Administrator | ||||
|         authorizationContextHolder.getAuthorizationContext().login("admin", "admin"); | ||||
| 
 | ||||
|         assertTrue(currentUser.hasBasePrivilege(PrivilegeType.READ_ONLY, EntityType.INSTITUTION)); | ||||
|         assertTrue(currentUser.hasPrivilege(PrivilegeType.WRITE, currentUser.get())); | ||||
|         assertTrue(currentUser.hasBasePrivilege(PrivilegeType.WRITE, EntityType.INSTITUTION)); | ||||
|         assertTrue(currentUser.hasInstitutionalPrivilege(PrivilegeType.MODIFY, EntityType.INSTITUTION)); | ||||
|     } | ||||
| 
 | ||||
|     @Test | ||||
|     public void testCurrentUserLogin() { | ||||
|         final OAuth2AuthorizationContextHolder authorizationContextHolder = login("admin", "admin"); | ||||
|         final CurrentUser currentUser = new CurrentUser(authorizationContextHolder); | ||||
|         final UserInfo userInfo = currentUser.getOrHandleError(error -> { | ||||
|             fail("expecting no error here"); | ||||
|             return null; | ||||
|         }); | ||||
|         assertNotNull(userInfo); | ||||
|         assertEquals("user1", userInfo.uuid); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,121 @@ | |||
| /* | ||||
|  * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) | ||||
|  * | ||||
|  * This Source Code Form is subject to the terms of the Mozilla Public | ||||
|  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. | ||||
|  */ | ||||
| 
 | ||||
| package ch.ethz.seb.sebserver.gui.integration; | ||||
| 
 | ||||
| import static org.junit.Assert.assertNotNull; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| import java.net.HttpURLConnection; | ||||
| 
 | ||||
| import javax.servlet.http.HttpSession; | ||||
| 
 | ||||
| import org.junit.Before; | ||||
| import org.junit.runner.RunWith; | ||||
| import org.mockito.Mockito; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.beans.factory.annotation.Value; | ||||
| import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; | ||||
| import org.springframework.boot.test.context.SpringBootTest; | ||||
| import org.springframework.http.client.SimpleClientHttpRequestFactory; | ||||
| import org.springframework.security.web.FilterChainProxy; | ||||
| import org.springframework.test.context.ActiveProfiles; | ||||
| import org.springframework.test.context.junit4.SpringRunner; | ||||
| import org.springframework.test.web.servlet.MockMvc; | ||||
| import org.springframework.test.web.servlet.setup.MockMvcBuilders; | ||||
| import org.springframework.web.context.WebApplicationContext; | ||||
| 
 | ||||
| import ch.ethz.seb.sebserver.SEBServer; | ||||
| import ch.ethz.seb.sebserver.gbl.api.JSONMapper; | ||||
| import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.OAuth2AuthorizationContextHolder; | ||||
| import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.SEBServerAuthorizationContext; | ||||
| import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.WebserviceURIService; | ||||
| 
 | ||||
| @RunWith(SpringRunner.class) | ||||
| @SpringBootTest( | ||||
|         classes = SEBServer.class, | ||||
|         webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) | ||||
| @ActiveProfiles("test") | ||||
| @AutoConfigureMockMvc | ||||
| public abstract class GuiIntegrationTest { | ||||
| 
 | ||||
|     @Value("${sebserver.webservice.api.admin.clientId}") | ||||
|     protected String clientId; | ||||
|     @Value("${sebserver.webservice.api.admin.clientSecret}") | ||||
|     protected String clientSecret; | ||||
|     @Value("${sebserver.webservice.api.admin.endpoint}") | ||||
|     protected String endpoint; | ||||
| 
 | ||||
|     @Autowired | ||||
|     protected WebApplicationContext wac; | ||||
|     @Autowired | ||||
|     protected JSONMapper jsonMapper; | ||||
|     @Autowired | ||||
|     protected FilterChainProxy springSecurityFilterChain; | ||||
| 
 | ||||
|     protected MockMvc mockMvc; | ||||
| 
 | ||||
|     @Before | ||||
|     public void setup() { | ||||
|         this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac) | ||||
|                 .addFilter(this.springSecurityFilterChain).build(); | ||||
|     } | ||||
| 
 | ||||
|     protected OAuth2AuthorizationContextHolder getAuthorizationContextHolder() { | ||||
| 
 | ||||
|         final HttpSession sessionMock = Mockito.mock(HttpSession.class); | ||||
|         final WebserviceURIService webserviceURIService = new WebserviceURIService( | ||||
|                 "http", "localhost", "8080", this.endpoint); | ||||
| 
 | ||||
|         return new OAuth2AuthorizationContextHolder( | ||||
|                 this.clientId, | ||||
|                 this.clientSecret, | ||||
|                 webserviceURIService, | ||||
|                 new SimpleClientHttpRequestFactory() { | ||||
| 
 | ||||
|                     @Override | ||||
|                     protected void prepareConnection( | ||||
|                             final HttpURLConnection connection, | ||||
|                             final String httpMethod) throws IOException { | ||||
| 
 | ||||
|                         super.prepareConnection(connection, httpMethod); | ||||
|                         connection.setInstanceFollowRedirects(false); | ||||
|                     } | ||||
|                 }) { | ||||
| 
 | ||||
|             private SEBServerAuthorizationContext authContext = null; | ||||
| 
 | ||||
|             @Override | ||||
|             public SEBServerAuthorizationContext getAuthorizationContext() { | ||||
|                 if (this.authContext == null) { | ||||
|                     this.authContext = super.getAuthorizationContext(sessionMock); | ||||
|                 } | ||||
|                 return this.authContext; | ||||
|             } | ||||
|         }; | ||||
|     } | ||||
| 
 | ||||
|     protected SEBServerAuthorizationContext getAuthorizationContext() { | ||||
|         final SEBServerAuthorizationContext authorizationContext = | ||||
|                 getAuthorizationContextHolder().getAuthorizationContext(); | ||||
|         assertNotNull(authorizationContext); | ||||
|         return authorizationContext; | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     protected OAuth2AuthorizationContextHolder login(final String name, final String pwd) { | ||||
|         final OAuth2AuthorizationContextHolder authorizationContextHolder = getAuthorizationContextHolder(); | ||||
|         final SEBServerAuthorizationContext authorizationContext = authorizationContextHolder.getAuthorizationContext(); | ||||
|         if (authorizationContext.isLoggedIn()) { | ||||
|             throw new IllegalStateException("another user is already logged in"); | ||||
|         } | ||||
|         authorizationContext.login(name, pwd); | ||||
|         return authorizationContextHolder; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,63 @@ | |||
| /* | ||||
|  * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) | ||||
|  * | ||||
|  * This Source Code Form is subject to the terms of the Mozilla Public | ||||
|  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. | ||||
|  */ | ||||
| 
 | ||||
| package ch.ethz.seb.sebserver.gui.integration; | ||||
| 
 | ||||
| import static org.junit.Assert.*; | ||||
| 
 | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collection; | ||||
| 
 | ||||
| import org.junit.Test; | ||||
| import org.springframework.http.HttpMethod; | ||||
| import org.springframework.http.MediaType; | ||||
| 
 | ||||
| import com.fasterxml.jackson.core.type.TypeReference; | ||||
| 
 | ||||
| import ch.ethz.seb.sebserver.gbl.api.API; | ||||
| import ch.ethz.seb.sebserver.gbl.api.JSONMapper; | ||||
| import ch.ethz.seb.sebserver.gbl.model.institution.Institution; | ||||
| import ch.ethz.seb.sebserver.gbl.util.Result; | ||||
| import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall; | ||||
| import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestService; | ||||
| import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.OAuth2AuthorizationContextHolder; | ||||
| 
 | ||||
| public class RestServiceTest extends GuiIntegrationTest { | ||||
| 
 | ||||
|     @Test | ||||
|     public void testRestServiceInit() { | ||||
|         final OAuth2AuthorizationContextHolder authorizationContextHolder = login("admin", "admin"); | ||||
|         final Collection<RestCall<?>> calls = new ArrayList<>(); | ||||
|         calls.add(new RestServiceTest.GetInstitution()); | ||||
| 
 | ||||
|         final RestService restService = new RestService(authorizationContextHolder, new JSONMapper(), calls); | ||||
| 
 | ||||
|         final Result<Institution> call = restService.getBuilder(RestServiceTest.GetInstitution.class) | ||||
|                 .withURIVariable(API.PARAM_MODEL_ID, "2") | ||||
|                 .call(); | ||||
| 
 | ||||
|         assertNotNull(call); | ||||
|         assertFalse(call.hasError()); | ||||
|         final Institution institution = call.get(); | ||||
|         assertEquals("Institution2", institution.name); | ||||
|     } | ||||
| 
 | ||||
|     public static class GetInstitution extends RestCall<Institution> { | ||||
| 
 | ||||
|         public GetInstitution() { | ||||
|             super( | ||||
|                     new TypeReference<Institution>() { | ||||
|                     }, | ||||
|                     HttpMethod.GET, | ||||
|                     MediaType.APPLICATION_FORM_URLENCODED, | ||||
|                     API.INSTITUTION_ENDPOINT + API.MODEL_ID_VAR_PATH_SEGMENT); | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,37 @@ | |||
| /* | ||||
|  * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) | ||||
|  * | ||||
|  * This Source Code Form is subject to the terms of the Mozilla Public | ||||
|  * License, v. 2.0. If a copy of the MPL was not distributed with this | ||||
|  * file, You can obtain one at http://mozilla.org/MPL/2.0/. | ||||
|  */ | ||||
| 
 | ||||
| package ch.ethz.seb.sebserver.gui.integration; | ||||
| 
 | ||||
| import static org.junit.Assert.*; | ||||
| 
 | ||||
| import org.junit.Test; | ||||
| 
 | ||||
| import ch.ethz.seb.sebserver.gbl.model.user.UserInfo; | ||||
| import ch.ethz.seb.sebserver.gbl.util.Result; | ||||
| import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.SEBServerAuthorizationContext; | ||||
| 
 | ||||
| public class SEBServerAuthorizationContextTest extends GuiIntegrationTest { | ||||
| 
 | ||||
|     @Test | ||||
|     public void testLoginLogoutAsSEBAdmin() { | ||||
| 
 | ||||
|         final SEBServerAuthorizationContext authorizationContext = getAuthorizationContext(); | ||||
| 
 | ||||
|         assertTrue(authorizationContext.login("admin", "admin")); | ||||
|         assertTrue(authorizationContext.isLoggedIn()); | ||||
|         final Result<UserInfo> loggedInUser = authorizationContext.getLoggedInUser(); | ||||
|         assertFalse(loggedInUser.hasError()); | ||||
|         final UserInfo userInfo = loggedInUser.get(); | ||||
|         assertEquals("user1", userInfo.uuid); | ||||
| 
 | ||||
|         assertTrue(authorizationContext.logout()); | ||||
|         assertFalse(authorizationContext.isLoggedIn()); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 anhefti
						anhefti