package org.jtalks.poulpe.model.entity; import com.google.common.collect.Lists; import org.joda.time.DateTime; import org.jtalks.common.model.entity.Group; import org.jtalks.common.model.entity.User; import org.springframework.util.SerializationUtils; import org.testng.annotations.Test; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.List; import static org.testng.Assert.*; import static org.unitils.reflectionassert.ReflectionAssert.assertReflectionEquals; /** * @author stanislav bashkirtsev */ public class PoulpeUserTest { @Test public void userShouldBeInGroup() { PoulpeUser user = new PoulpeUser(); user.setGroups(Lists.newArrayList(groupWithId(1), groupWithId(100), groupWithId(200))); assertTrue(user.isInGroupWithId(100)); } @Test public void userShouldNotBeInGroup() { PoulpeUser user = new PoulpeUser(); user.setGroups(Lists.newArrayList(groupWithId(1), groupWithId(100), groupWithId(200))); assertFalse(user.isInGroupWithId(99)); } public Group groupWithId(long id) { Group group = new Group(); group.setId(id); return group; } @Test public void theEntityFieldsShouldBeSerialized() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { PoulpeUser user = new PoulpeUser("username","email","password","salt"); user.setId(1); user.setAvatar(new byte[]{1}); user.setVersion(1L); user.setFirstName("First Name"); user.setLastName("Last Name"); user.setBanReason("Ban Reason"); user.setEnabled(true); user.setRole("Role"); Method setLastLogin = User.class.getDeclaredMethod("setLastLogin", DateTime.class); Method setEncodedUsername = User.class.getDeclaredMethod("setEncodedUsername", String.class); setLastLogin.setAccessible(true); setEncodedUsername.setAccessible(true); setLastLogin.invoke(user,DateTime.now()); setEncodedUsername.invoke(user,"Encoded Username"); byte[] serialize = SerializationUtils.serialize(user); PoulpeUser serializedUser = (PoulpeUser)SerializationUtils.deserialize(serialize); assertReflectionEquals(user, serializedUser); } @Test public void groupsFieldIsNotSerializable(){ List<Group> groups = PoulpeGroup.createGroupsWithNames("The Group"); PoulpeUser userInGroup = PoulpeUser.withId(1); userInGroup.setGroups(groups); byte[] serialize = SerializationUtils.serialize(userInGroup); PoulpeUser serializedUser = (PoulpeUser) SerializationUtils.deserialize(serialize); assertNull(serializedUser.getGroups(), "After deserialiation, the transient field `List<Group> groups` must be null"); } }