package com.plannaplan.entities; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import java.lang.reflect.Field; import java.sql.Timestamp; import java.util.concurrent.TimeUnit; import org.junit.Test; public class UserTest { @Test public void shouldResturnTokenIsNotExpired() { final User user = new User(); user.setToken("testowy-bezpieczny-token"); assertTrue(user.isCredentialsNonExpired(), "Credential shouldnt expire yet"); long minutes = this.getMinutesDiff(user.getTokenUsageDate()); assertTrue(minutes == 0, "Should update last token usage"); } @Test public void shouldResturnTokenIsNotExpiredWithLessThan15minutes() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { final User user = new User(); user.setToken("testowy-bezpieczny-token"); this.setLastTokenUsage(user, new Timestamp(System.currentTimeMillis() - (6 * 60 * 1000))); assertTrue(user.isCredentialsNonExpired(), "Credential shouldnt expire yet"); final long minutes = this.getMinutesDiff(user.getTokenUsageDate()); assertTrue(minutes == 0, "Should update last token usage"); } @Test public void shouldResturnTokenIsExpired() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { final User user = new User(); user.setToken("testowy-bezpieczny-token"); this.setLastTokenUsage(user, new Timestamp(System.currentTimeMillis() - (25 * 60 * 1000))); assertFalse(user.isCredentialsNonExpired(), "Credential should expire"); final long diffInMilliseconds = Math .abs(user.getTokenUsageDate().getTime() - new Timestamp(System.currentTimeMillis()).getTime()); final long minutes = TimeUnit.MILLISECONDS.toMinutes(diffInMilliseconds); assertTrue(minutes > 0, "Shouldn't update last token usage"); } private long getMinutesDiff(Timestamp timestamp) { final long diffInMilliseconds = Math .abs(timestamp.getTime() - new Timestamp(System.currentTimeMillis()).getTime()); final long minutes = TimeUnit.MILLISECONDS.toMinutes(diffInMilliseconds); return minutes; } private void setLastTokenUsage(User user, Timestamp timestampToSet) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { Field reader = User.class.getDeclaredField("tokenUsageDate"); reader.setAccessible(true); reader.set(user, timestampToSet); } }