/* * Copyright 2013-2017 Erudika. https://erudika.com * * Licensed 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. * * For issues and patches go to: https://github.com/erudika */ package com.erudika.para.core; import com.erudika.para.core.User.Groups; import com.erudika.para.core.utils.CoreUtils; import com.erudika.para.persistence.DAO; import com.erudika.para.search.Search; import com.erudika.para.utils.Config; import com.erudika.para.utils.Utils; import com.erudika.para.validation.ValidationUtils; import java.util.ArrayList; import java.util.Map; import org.junit.After; import org.junit.Test; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import org.junit.Before; /** * * @author Alex Bogdanovski [alex@erudika.com] */ public class UserTest { private static User u() { User u = new User(Utils.getNewId()); u.setName("Name"); u.setGroups(Groups.USERS.toString()); u.setEmail(u.getId() + "@email.com"); u.setIdentifier(u.getEmail()); u.setPassword("123456"); return u; } private static DAO dao() { return CoreUtils.getInstance().getDao(); //new MockDAO(); } @Before public void setUp() { CoreUtils.getInstance().setSearch(mock(Search.class)); } @After public void tearDown() { } @Test public void testSetEmail() { User u = u(); assertNotNull(u.getPicture()); assertTrue(ValidationUtils.isValidObject(u)); u.setEmail("asd@asd"); assertFalse(ValidationUtils.isValidObject(u)); } @Test public void testSetCurrency() { User u = u(); u.setCurrency("asd"); assertEquals("EUR", u.getCurrency()); u.setCurrency("usd"); assertEquals("USD", u.getCurrency()); u.setCurrency(null); assertEquals("EUR", u.getCurrency()); u.setCurrency(""); assertEquals("EUR", u.getCurrency()); } @Test public void testCanModify() { User u = u(); Sysprop p = new Sysprop("test"); assertFalse(u.canModify(null)); assertFalse(u.canModify(p)); p.setCreatorid(u.getId()); p.setAppid("1"); u.setAppid("1"); assertTrue(u.canModify(p)); p.setCreatorid(null); p.setParentid(u.getId()); assertTrue(u.canModify(p)); p.setParentid(null); p.setId(u.getId()); assertTrue(u.canModify(p)); p.setId("1234"); u.setGroups(Groups.ADMINS.toString()); assertTrue(u.canModify(p)); u.setGroups(Groups.USERS.toString()); } @Test public void testCreate() { User u = u(); u.setIdentifier(null); assertNull(u.create()); u.setPassword("123"); assertNull(u.create()); u.setPassword("123456"); u.setIdentifier("fb:2"); assertNotNull(u.create()); assertNotNull(dao().read(u.getIdentifier())); } @Test @SuppressWarnings("unchecked") public void testDelete() { User u = u(); u.create(); String secIdent = "t:1"; ArrayList<ParaObject> list = new ArrayList<ParaObject>(); list.add(new Sysprop(u.getIdentifier())); list.add(new Sysprop(secIdent)); when(CoreUtils.getInstance().getSearch().findTerms(anyString(), anyString(), any(Map.class), anyBoolean())).thenReturn(list); u.attachIdentifier(secIdent); assertNotNull(dao().read(secIdent)); String oldId = u.getId(); u.setId(null); u.delete(); u.setId(oldId); assertNotNull(dao().read(u.getId())); assertNotNull(dao().read(u.getIdentifier())); assertNotNull(dao().read(secIdent)); u.delete(); assertNull(dao().read(u.getId())); assertNull(dao().read(u.getIdentifier())); assertNull(dao().read(secIdent)); } @Test public void testAttachIdentifier() { User u = u(); String secIdent = "t:2"; u.attachIdentifier(secIdent); assertNull(User.readUserForIdentifier(u)); assertNull(dao().read(secIdent)); u.create(); u.attachIdentifier(secIdent); assertNotNull(dao().read(u.getId())); assertNotNull(dao().read(secIdent)); } @Test public void testDetachIdentifier() { User u = u(); u.create(); assertNotNull(dao().read(u.getIdentifier())); u.detachIdentifier(u.getIdentifier()); assertNotNull(dao().read(u.getIdentifier())); String secIdent = "t:3"; u.attachIdentifier(secIdent); assertNotNull(dao().read(secIdent)); u.detachIdentifier(secIdent); assertNull(dao().read(secIdent)); } @Test public void testIsFacebookUser() { User u = u(); assertFalse(u.isFacebookUser()); u.setIdentifier("fb:0"); assertTrue(u.isFacebookUser()); } @Test public void testIsAdmin() { User u = u(); assertFalse(u.isAdmin()); u.setGroups(Groups.ADMINS.toString()); assertTrue(u.isAdmin()); } @Test public void testIsModerator() { User u = u(); assertFalse(u.isModerator()); u.setGroups(Groups.ADMINS.toString()); assertTrue(u.isAdmin()); assertTrue(u.isModerator()); u.setGroups(Groups.MODS.toString()); assertTrue(u.isModerator()); } @Test public void testReadUserForIdentifier() { User u = u(); String secIdent = "fb:1"; u.create(); u.attachIdentifier(secIdent); u.setIdentifier(secIdent); assertNotNull(User.readUserForIdentifier(u)); u.setIdentifier("1"); assertNull(User.readUserForIdentifier(u)); u.setIdentifier(u.getEmail()); assertNotNull(User.readUserForIdentifier(u)); u.setIdentifier("1234"); assertNull(User.readUserForIdentifier(u)); u.delete(); u.setIdentifier(secIdent); assertNull(User.readUserForIdentifier(u)); u.setIdentifier(u.getEmail()); assertNull(User.readUserForIdentifier(u)); } @Test public void testPasswordMatches() { User u = u(); u.create(); u.setPassword("123456"); assertTrue(User.passwordMatches(u)); User u1 = new User(); u1.setIdentifier(u.getIdentifier()); u1.setPassword("1234"); assertFalse(User.passwordMatches(u1)); u1.setPassword(""); assertFalse(User.passwordMatches(u1)); u1.setPassword(null); assertFalse(User.passwordMatches(u1)); u1.setPassword(u.getPassword()); u1.setIdentifier(null); assertFalse(User.passwordMatches(u1)); } @Test public void testGeneratePasswordResetToken() { User u = u(); String fail = u.generatePasswordResetToken(); assertTrue(fail.isEmpty()); Sysprop s = dao().read(u.getIdentifier()); assertNull(s); u.create(); String token1 = u.generatePasswordResetToken(); s = dao().read(u.getIdentifier()); assertNotNull(s); assertEquals(token1, s.getProperty(Config._RESET_TOKEN)); String token2 = u.generatePasswordResetToken(); s = dao().read(u.getIdentifier()); assertNotNull(s); assertEquals(token2, s.getProperty(Config._RESET_TOKEN)); assertNotEquals(token1, s.getProperty(Config._RESET_TOKEN)); } @Test public void testResetPassword() { User u = u(); u.create(); String token = u.generatePasswordResetToken(); String newpass = "1234567890"; assertTrue(u.resetPassword(token, newpass)); User u1 = new User(); u1.setIdentifier(u.getIdentifier()); u1.setPassword(newpass); assertTrue(User.passwordMatches(u1)); assertFalse(u.resetPassword(token, "654321")); assertFalse(u.resetPassword(u.generatePasswordResetToken(), "1234")); assertFalse(u.resetPassword(u.generatePasswordResetToken(), " ")); u.delete(); dao().delete(new Sysprop(u.getIdentifier())); assertFalse(u.resetPassword(u.generatePasswordResetToken(), "654321")); } @Test public void testGenerateEmailConfirmationToken() { User u = u(); u.delete(); dao().delete(new Sysprop(u.getIdentifier())); String fail = u.generateEmailConfirmationToken(); assertTrue(fail.isEmpty()); Sysprop s = dao().read(u.getIdentifier()); assertNull(s); u.create(); String token1 = u.generateEmailConfirmationToken(); s = dao().read(u.getIdentifier()); assertNotNull(s); assertEquals(token1, s.getProperty(Config._EMAIL_TOKEN)); String token2 = u.generateEmailConfirmationToken(); s = dao().read(u.getIdentifier()); assertNotNull(s); assertEquals(token2, s.getProperty(Config._EMAIL_TOKEN)); assertNotEquals(token1, s.getProperty(Config._EMAIL_TOKEN)); } @Test public void testActivateWithEmailToken() { User u = u(); String fail = u.generateEmailConfirmationToken(); assertTrue(fail.isEmpty()); assertFalse(u.getActive()); u.create(); assertFalse(u.getActive()); String token = u.generateEmailConfirmationToken(); assertTrue(u.activateWithEmailToken(token)); assertTrue(u.getActive()); assertFalse(u.activateWithEmailToken(token)); assertTrue(u.getActive()); u.delete(); dao().delete(new Sysprop(u.getIdentifier())); assertFalse(u.activateWithEmailToken(u.generatePasswordResetToken())); } }