package org.dicadeveloper.weplantaforest.user;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;
import org.dicadeveloper.weplantaforest.common.errorHandling.ErrorCodes;
import org.dicadeveloper.weplantaforest.common.errorHandling.IpatException;
import org.dicadeveloper.weplantaforest.common.support.Language;
import org.dicadeveloper.weplantaforest.encryption.PasswordEncrypter;
import org.dicadeveloper.weplantaforest.testsupport.DbInjecter;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.ClassMode;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest({ "spring.profiles.active=test" })
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@DirtiesContext(classMode = ClassMode.AFTER_CLASS)
public class UserServiceTest {
@Autowired
private UserRepository _userRepository;
@Autowired
UserService _userService;
@Autowired
private PasswordEncrypter _passwordEncrypter;
@Autowired
private DbInjecter _dbInjecter;
private static String userName = "User";
@Test
public void testARegistrateUserUserNameAlreadyExists() {
_dbInjecter.injectUser("Adam", "adam@iplantatree.de");
UserRegistrationData userRegistrationData = new UserRegistrationData();
userRegistrationData.setUsername("Adam");
try {
_userService.registrateUser(userRegistrationData);
} catch (IpatException e) {
assertEquals(ErrorCodes.USER_ALREADY_EXISTS, e.getErrorInfos()
.get(0)
.getErrorCode());
}
assertEquals(1, _userRepository.count());
}
@Test
public void testBARegistrateUserInvalidMail() {
UserRegistrationData userRegistrationData = new UserRegistrationData();
userRegistrationData.setUsername(userName);
userRegistrationData.setMail("invalid-mail");
;
try {
_userService.registrateUser(userRegistrationData);
} catch (IpatException e) {
assertEquals(ErrorCodes.INVALID_MAIL, e.getErrorInfos()
.get(0)
.getErrorCode());
}
assertEquals(1, _userRepository.count());
}
@Test
public void testCARegistrateUserMailAlreadyExists() {
UserRegistrationData userRegistrationData = new UserRegistrationData();
userRegistrationData.setUsername(userName);
userRegistrationData.setMail("adam@iplantatree.de");
;
try {
_userService.registrateUser(userRegistrationData);
} catch (IpatException e) {
assertEquals(ErrorCodes.MAIL_ALREADY_EXISTS, e.getErrorInfos()
.get(0)
.getErrorCode());
}
assertEquals(1, _userRepository.count());
}
@Test
public void testDARegistrateUserSuccess() {
UserRegistrationData userRegistrationData = new UserRegistrationData();
userRegistrationData.setUsername(userName);
userRegistrationData.setMail("user@iplantatree.de");
userRegistrationData.setOrgType(OrganizationType.PRIVATE.toString());
userRegistrationData.setLanguage(Language.DEUTSCH.toString());
try {
_userService.registrateUser(userRegistrationData);
} catch (IpatException e) {
String errorCode = e.getErrorInfos()
.get(0)
.getErrorCode();
fail("user registration should not fail here\nerrorCode:" + errorCode);
}
assertEquals(2, _userRepository.count());
User registratedUser = _userRepository.findByName(userName);
assertEquals(false, registratedUser.isEnabled());
}
@Test
public void testEactivateUserInvalidKey() {
User registratedUser = _userRepository.findByName(userName);
String activationKey = "invalid_key";
try {
_userService.activateUser(2L, activationKey);
} catch (IpatException e) {
assertEquals(ErrorCodes.INVALID_ACTIVATION_KEY, e.getErrorInfos()
.get(0)
.getErrorCode());
}
registratedUser = _userRepository.findByName(userName);
assertEquals(false, registratedUser.isEnabled());
}
@Test
public void testFcreatePasswordResetMailUserNotActivated() {
try {
_userService.createPasswordResetMail(userName);
} catch (IpatException e) {
assertEquals(ErrorCodes.USER_NOT_ACTIVATED, e.getErrorInfos()
.get(0)
.getErrorCode());
}
}
@Test
public void testGactivateUserSuccess() {
User registratedUser = _userRepository.findByName(userName);
String activationKey = registratedUser.getActivationKey();
try {
_userService.activateUser(2L, activationKey);
} catch (IpatException e) {
String errorCode = e.getErrorInfos()
.get(0)
.getErrorCode();
fail("user registration should not fail here\nerrorCode:" + errorCode);
}
registratedUser = _userRepository.findByName(userName);
assertEquals(true, registratedUser.isEnabled());
}
@Test
public void testHactivateUserAlreadyActivated() {
User registratedUser = _userRepository.findByName(userName);
String activationKey = registratedUser.getActivationKey();
try {
_userService.activateUser(2L, activationKey);
} catch (IpatException e) {
assertEquals(ErrorCodes.USER_ALREADY_ACTIVATED, e.getErrorInfos()
.get(0)
.getErrorCode());
}
registratedUser = _userRepository.findByName(userName);
assertEquals(true, registratedUser.isEnabled());
}
@Test
public void testIcreatePasswordResetMailSuccess() {
try {
_userService.createPasswordResetMail(userName);
} catch (IpatException e) {
String errorCode = e.getErrorInfos()
.get(0)
.getErrorCode();
fail("creating password reset mail should not fail here\nerrorCode:" + errorCode);
}
}
@Test
public void testJverifyPasswordResetLinkInvalidKey() {
String activationKey = "invalidKey";
try {
_userService.verifiyPasswordResetLink(2L, activationKey);
} catch (IpatException e) {
assertEquals(ErrorCodes.INVALID_ACTIVATION_KEY, e.getErrorInfos()
.get(0)
.getErrorCode());
}
}
@Test
public void testKverifyPasswordResetLinkSuccess() {
User registratedUser = _userRepository.findByName(userName);
String activationKey = registratedUser.getActivationKey();
try {
_userService.verifiyPasswordResetLink(2L, activationKey);
} catch (IpatException e) {
String errorCode = e.getErrorInfos()
.get(0)
.getErrorCode();
fail("verify password reset link should not fail here\nerrorCode:" + errorCode);
}
}
@Test
public void testLresetPasswordForUserInvalidKey() {
String activationKey = "invalidKey";
try {
_userService.resetPasswordForUser(2L, activationKey, "newPassword");
} catch (IpatException e) {
assertEquals(ErrorCodes.INVALID_ACTIVATION_KEY, e.getErrorInfos()
.get(0)
.getErrorCode());
}
}
@Test
public void testMresetPasswordForUserSuccess() {
User registratedUser = _userRepository.findByName(userName);
String activationKey = registratedUser.getActivationKey();
try {
_userService.resetPasswordForUser(2L, activationKey, "newPassword");
} catch (IpatException e) {
String errorCode = e.getErrorInfos()
.get(0)
.getErrorCode();
fail("reset password should not fail here\nerrorCode:" + errorCode);
}
registratedUser = _userRepository.findByName(userName);
assertNotNull(registratedUser.getPassword());
}
@Test
public void testNcreateAnonymousUser() {
User user = null;
try {
user = _userService.createAnonymous();
} catch (IpatException e) {
String errorCode = e.getErrorInfos()
.get(0)
.getErrorCode();
fail("creating anonymous should not fail here\nerrorCode:" + errorCode);
}
assertNotNull(user);
}
@Test
public void testOAtestEditUserEditNameAlreadyExists() {
try {
_userService.editUser(userName, "NAME", "Adam");
} catch (IpatException e) {
assertEquals(ErrorCodes.USER_ALREADY_EXISTS, e.getErrorInfos()
.get(0)
.getErrorCode());
}
}
@Test
public void testOBtestEditUserEditNameSuccess() {
try {
_userService.editUser(userName, "NAME", "Edited_User");
} catch (IpatException e) {
String errorCode = e.getErrorInfos()
.get(0)
.getErrorCode();
fail("edit username should not fail here\nerrorCode:" + errorCode);
}
userName = "Edited_User";
}
@Test
public void testOCeditUserEditAboutMe() {
try {
_userService.editUser(userName, "ABOUTME", "aboutme");
} catch (IpatException e) {
String errorCode = e.getErrorInfos()
.get(0)
.getErrorCode();
fail("edit aboutme should not fail here\nerrorCode:" + errorCode);
}
User editedUser = _userRepository.findOne(2L);
assertNotNull(editedUser);
assertEquals("aboutme", editedUser.getAboutMe());
}
@Test
public void testODeditUserEditLocation() {
try {
_userService.editUser(userName, "LOCATION", "location");
} catch (IpatException e) {
String errorCode = e.getErrorInfos()
.get(0)
.getErrorCode();
fail("edit location should not fail here\nerrorCode:" + errorCode);
}
User editedUser = _userRepository.findOne(2L);
assertNotNull(editedUser);
assertEquals("location", editedUser.getLocation());
}
@Test
public void testOEeditUserEditOrganisation() {
try {
_userService.editUser(userName, "ORGANISATION", "organisation");
} catch (IpatException e) {
String errorCode = e.getErrorInfos()
.get(0)
.getErrorCode();
fail("edit organisation should not fail here\nerrorCode:" + errorCode);
}
User editedUser = _userRepository.findOne(2L);
assertNotNull(editedUser);
assertEquals("organisation", editedUser.getOrganisation());
}
@Test
public void testOFeditUserEditHomepage() {
try {
_userService.editUser(userName, "HOMEPAGE", "homepage");
} catch (IpatException e) {
String errorCode = e.getErrorInfos()
.get(0)
.getErrorCode();
fail("edit homepage should not fail here\nerrorCode:" + errorCode);
}
User editedUser = _userRepository.findOne(2L);
assertNotNull(editedUser);
assertEquals("homepage", editedUser.getHomepage());
}
@Test
public void testOGeditUserEditMailInvalidMail() {
try {
_userService.editUser(userName, "MAIL", "invalid_mail");
} catch (IpatException e) {
assertEquals(ErrorCodes.INVALID_MAIL, e.getErrorInfos()
.get(0)
.getErrorCode());
}
}
@Test
public void testOHeditUserEditMailAlreadyExists() {
try {
_userService.editUser(userName, "MAIL", "adam@iplantatree.de");
} catch (IpatException e) {
assertEquals(ErrorCodes.MAIL_ALREADY_EXISTS, e.getErrorInfos()
.get(0)
.getErrorCode());
}
}
@Test
public void testOIeditUserEditMailSuccess() {
try {
_userService.editUser(userName, "MAIL", "edited_user@iplantatree.de");
} catch (IpatException e) {
String errorCode = e.getErrorInfos()
.get(0)
.getErrorCode();
fail("edit mail should not fail here\nerrorCode:" + errorCode);
}
User editedUser = _userRepository.findOne(2L);
assertNotNull(editedUser);
assertEquals("edited_user@iplantatree.de", editedUser.getMail());
}
@Test
public void testOJeditUserEditNewsletter() {
try {
_userService.editUser(userName, "NEWSLETTER", "JA");
} catch (IpatException e) {
String errorCode = e.getErrorInfos()
.get(0)
.getErrorCode();
fail("edit newsletter should not fail here\nerrorCode:" + errorCode);
}
User editedUser = _userRepository.findOne(2L);
assertNotNull(editedUser);
assertEquals(true, editedUser.isNewsletter());
}
@Test
public void testOKeditUserEditOrganizationType() {
try {
_userService.editUser(userName, "ORGANIZATION_TYPE", OrganizationType.COMMERCIAL.toString());
} catch (IpatException e) {
String errorCode = e.getErrorInfos()
.get(0)
.getErrorCode();
fail("edit organiization type should not fail here\nerrorCode:" + errorCode);
}
User editedUser = _userRepository.findOne(2L);
assertNotNull(editedUser);
assertEquals(OrganizationType.COMMERCIAL, editedUser.getOrganizationType());
}
@Test
public void testOLeditUserEditLanguage() {
try {
_userService.editUser(userName, "LANGUAGE", Language.ENGLISH.toString());
} catch (IpatException e) {
String errorCode = e.getErrorInfos()
.get(0)
.getErrorCode();
fail("edit language should not fail here\nerrorCode:" + errorCode);
}
User editedUser = _userRepository.findOne(2L);
assertNotNull(editedUser);
assertEquals(Language.ENGLISH, editedUser.getLang());
}
@Test
public void testOMeditPassword() {
try {
_userService.editUser(userName, "PASSWORD", "new_password");
} catch (IpatException e) {
String errorCode = e.getErrorInfos()
.get(0)
.getErrorCode();
fail("edit language should not fail here\nerrorCode:" + errorCode);
}
User editedUser = _userRepository.findOne(2L);
assertNotNull(editedUser);
assertEquals(_passwordEncrypter.encryptPassword("new_password"), editedUser.getPassword());
}
@Test
public void testPgetUserDetails(){
_dbInjecter.injectTreeType("wood", "desc", 0.5);
_dbInjecter.injectProject("Project", "Adam", "very n1 project", true, 0, 0);
_dbInjecter.injectProjectArticle("wood", "Project", 3.0);
_dbInjecter.injectTreeToProject("wood", userName, 1, 900000L, "Project");
_dbInjecter.injectTreeToProject("wood", "Adam", 2, 900000L, "Project");
UserReportData userData = _userService.getUserDetails(userName, true);
assertEquals(userName, userData.getUserName());
assertEquals(2, userData.getRank());
assertEquals(1L, userData.getCo2Data().getTreesCount().longValue());
assertEquals("aboutme", userData.getAboutMe());
assertEquals("location", userData.getLocation());
assertEquals("organisation", userData.getOrganisation());
assertEquals("homepage", userData.getHomepage());
assertEquals("edited_user@iplantatree.de", userData.getMail());
assertEquals("JA", userData.getNewsletter());
assertEquals(OrganizationType.COMMERCIAL.getDescription(), userData.getOrganizationType());
assertEquals(Language.ENGLISH, userData.getLang());
}
}