/***************************************************************************
* Copyright 2006-2016 by Christian Ihle *
* contact@kouchat.net *
* *
* This file is part of KouChat. *
* *
* KouChat is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 3 of *
* the License, or (at your option) any later version. *
* *
* KouChat is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with KouChat. *
* If not, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
package net.usikkert.kouchat.settings;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;
import net.usikkert.kouchat.misc.User;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.contrib.java.lang.system.RestoreSystemProperties;
/**
* Test of {@link MeFactory}.
*
* @author Christian Ihle
*/
@SuppressWarnings("HardCodedStringLiteral")
public class MeFactoryTest {
@Rule
public RestoreSystemProperties restoreSystemProperties = new RestoreSystemProperties("os.name", "user.name");
private MeFactory meFactory;
@Before
public void setUp() {
meFactory = new MeFactory();
}
@Test
public void createMeShouldSetUserAsMe() {
final User me = meFactory.createMe();
assertTrue(me.isMe());
}
@Test
public void createMeShouldSetOperatingSystemFromSystemProperty() {
System.setProperty("os.name", "Wintendo");
final User me = meFactory.createMe();
assertEquals("Wintendo", me.getOperatingSystem());
}
@Test
public void createMeShouldSetNickNameWithCapitalFirstLetterFromUserNameInSystemProperty() {
System.setProperty("user.name", "superman");
final User me = meFactory.createMe();
assertEquals("Superman", me.getNick());
}
@Test
public void createMeShouldSetNickNameToFirstTenLettersOfUserName() {
System.setProperty("user.name", "theAmazingSpiderman");
final User me = meFactory.createMe();
assertEquals("TheAmazing", me.getNick());
}
@Test
public void createMeShouldSetNickNameToFirstWordInUserName() {
System.setProperty("user.name", "super kou");
final User me = meFactory.createMe();
assertEquals("Super", me.getNick());
}
@Test
public void createMeShouldSetNickNameToFirstTenLettersOfFirstWordInUserName() {
System.setProperty("user.name", "ultrasuperduper kou");
final User me = meFactory.createMe();
assertEquals("Ultrasuper", me.getNick());
}
@Test
public void createMeShouldSetNickNameToCodeIfUserNameIsMissing() {
System.clearProperty("user.name");
final User me = meFactory.createMe();
assertEquals(String.valueOf(me.getCode()), me.getNick());
}
@Test
public void createMeShouldSetNickNameToCodeIfUserNameIsInvalid() {
System.setProperty("user.name", "kou$");
final User me = meFactory.createMe();
assertEquals(String.valueOf(me.getCode()), me.getNick());
}
@Test
public void createMeShouldUseUniqueCodes() {
final List<Integer> uniqueCodes = new ArrayList<Integer>();
for (int i = 0; i < 100; i++) {
final User me = meFactory.createMe();
final int code = me.getCode();
assertFalse(uniqueCodes.contains(code));
assertTrue(code >= 10000000);
assertTrue(code <= 20000000);
uniqueCodes.add(code);
}
assertEquals(100, uniqueCodes.size());
}
@Test
public void createMeShouldSetLogonTimeToNow() {
final User me = meFactory.createMe();
final long timeSinceLogon = System.currentTimeMillis() - me.getLogonTime();
assertTrue(timeSinceLogon >= 0);
assertTrue(timeSinceLogon < 1000);
}
@Test
public void createMeShouldSetLastIdleToNow() {
final User me = meFactory.createMe();
final long timeSinceLastIdle = System.currentTimeMillis() - me.getLastIdle();
assertTrue(timeSinceLastIdle >= 0);
assertTrue(timeSinceLastIdle < 1000);
}
}