Java tutorial
/* * 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. */ package org.apache.openmeetings.webservice; import static java.util.UUID.randomUUID; import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED; import static org.apache.openmeetings.AbstractJUnitDefaults.adminUsername; import static org.apache.openmeetings.AbstractJUnitDefaults.createPass; import static org.apache.openmeetings.AbstractJUnitDefaults.rnd; import static org.apache.openmeetings.AbstractJUnitDefaults.userpass; import static org.apache.openmeetings.db.util.ApplicationHelper.ensureApplication; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.Collection; import java.util.Locale; import java.util.TimeZone; import javax.ws.rs.core.Form; import javax.ws.rs.core.Response; import org.apache.openmeetings.db.dao.user.UserDao; import org.apache.openmeetings.db.dto.basic.ServiceResult; import org.apache.openmeetings.db.dto.basic.ServiceResult.Type; import org.apache.openmeetings.db.dto.room.RoomOptionsDTO; import org.apache.openmeetings.db.dto.user.ExternalUserDTO; import org.apache.openmeetings.db.dto.user.UserDTO; import org.apache.openmeetings.db.entity.user.Address; import org.apache.openmeetings.db.entity.user.User; import org.apache.openmeetings.util.OmException; import org.apache.openmeetings.web.app.WebSession; import org.apache.wicket.util.string.StringValue; import org.junit.Test; public class TestUserService extends AbstractWebServiceTest { private static final String DUMMY_PICTURE_URL = "https://openmeetings.apache.org/images/logo.png"; @Test public void invalidLoginTest() { ServiceResult r = loginNoCheck("invalid-user", "bad pass"); assertNotNull("Valid ServiceResult should be returned", r); assertEquals("Login should NOT be successful", Type.ERROR.name(), r.getType()); } @Test public void loginTest() { ServiceResult r = login(); assertNotNull("Valid ServiceResult should be returned", r); } private static ServiceResult getHash(String sid, boolean expectError) { ExternalUserDTO user = new ExternalUserDTO().setExternalId("1").setExternalType(UNIT_TEST_EXT_TYPE) .setEmail("user1@junit.openmeetings.apache.org").setFirstname("First Name 1") .setLastname("Last Name 1").setProfilePictureUrl(DUMMY_PICTURE_URL).setLogin("login1"); RoomOptionsDTO options = new RoomOptionsDTO().setRoomId(5L).setModerator(true); try (Response resp = getClient(getUserUrl()).path("/hash").query("sid", sid) .form(new Form().param("user", user.toString()).param("options", options.toString()))) { assertNotNull("Valid ServiceResult should be returned", resp); if (expectError) { assertEquals("Call should NOT be successful", Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), resp.getStatus()); return null; } else { assertEquals("Call should be successful", Response.Status.OK.getStatusCode(), resp.getStatus()); return resp.readEntity(ServiceResult.class); } } } @Test public void hashTestNoAuth() { getHash("aa", true); } @Test public void hashTest() throws OmException { ServiceResult r = login(); ServiceResult r1 = getHash(r.getMessage(), false); assertEquals("OM Call should be successful", Type.SUCCESS.name(), r1.getType()); ensureApplication(-1L); // to ensure WebSession is attached WebSession ws = WebSession.get(); assertTrue(ws.signIn(adminUsername, userpass, User.Type.user, null)); Long userId0 = WebSession.getUserId(); ws.checkHashes(StringValue.valueOf(r1.getMessage()), StringValue.valueOf("")); assertTrue("Login via secure hash should be successful", ws.isSignedIn()); Long userId1 = WebSession.getUserId(); assertNotEquals(userId0, userId1); User u = getBean(UserDao.class).get(userId1); assertNotNull("User should be created successfuly", u); assertEquals("Picture URL should be preserved", DUMMY_PICTURE_URL, u.getPictureUri()); } @Test public void addUserTest() { String[] tzList = TimeZone.getAvailableIDs(); String tz = TimeZone.getTimeZone(tzList[rnd.nextInt(tzList.length)]).getID(); ServiceResult r = login(); UserDTO u = new UserDTO(); String uuid = randomUUID().toString(); u.setLogin("test" + uuid); u.setPassword(createPass()); u.setFirstname("testF" + uuid); u.setLastname("testL" + uuid); u.setAddress(new Address()); u.getAddress().setEmail(uuid + "@local"); u.getAddress().setCountry(Locale.getDefault().getCountry()); u.setTimeZoneId(tz); u.setExternalId(uuid); u.setExternalType(UNIT_TEST_EXT_TYPE); UserDTO user = getClient(getUserUrl()).path("/").query("sid", r.getMessage()) .type(APPLICATION_FORM_URLENCODED) .post(new Form().param("user", u.toString()).param("confirm", "" + false), UserDTO.class); assertNotNull("Valid UserDTO should be returned", user); assertNotNull("Id should not be NULL", user.getId()); assertEquals("OM Call should be successful", u.getLogin(), user.getLogin()); assertEquals("OM Call should be successful", tz, user.getTimeZoneId()); } @Test public void list() { ServiceResult r = login(); Collection<? extends UserDTO> users = getClient(getUserUrl()).path("/").query("sid", r.getMessage()) .getCollection(UserDTO.class); assertNotNull("Collection should be not null", users); assertFalse("Collection should be not empty", users.isEmpty()); } }