/*
* Copyright 2006-2014 the original author or authors.
*
* 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.
*/
package org.jrecruiter.service;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.StringWriter;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import javax.xml.bind.Marshaller;
import javax.xml.transform.stream.StreamResult;
import org.apache.commons.io.IOUtils;
import org.jrecruiter.common.CalendarUtils;
import org.jrecruiter.common.CollectionUtils;
import org.jrecruiter.common.Constants.UserAuthenticationType;
import org.jrecruiter.dao.BackupDao;
import org.jrecruiter.dao.jaxb.BackupDaoJaxb;
import org.jrecruiter.model.Industry;
import org.jrecruiter.model.Role;
import org.jrecruiter.model.User;
import org.jrecruiter.model.UserToRole;
import org.jrecruiter.model.export.Backup;
import org.jrecruiter.service.system.impl.SystemSetupServiceImpl;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.oxm.jaxb.Jaxb2Marshaller;
import org.springframework.test.util.ReflectionTestUtils;
import org.jrecruiter.model.Region;
/**
* Contains test methods to verify the deserialization of backup data using Jaxb.
*
* @author Gunnar Hillert
*
*/
public class SystemSetupServiceTest {
public static final Logger LOGGER = LoggerFactory.getLogger(SystemSetupServiceTest.class);
private SystemSetupService createSystemSetupService() throws Exception {
Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller();
BackupDao backupDao = new BackupDaoJaxb();
jaxb2Marshaller.setClassesToBeBound(new Class[]{Backup.class});
jaxb2Marshaller.afterPropertiesSet();
final SystemSetupService systemSetupService = new SystemSetupServiceImpl();
ReflectionTestUtils.setField(backupDao, "marshaller", jaxb2Marshaller);
ReflectionTestUtils.setField(systemSetupService, "backupDao", backupDao);
return systemSetupService;
}
@Test
public void testConvertToBackupData() throws Exception {
final java.io.InputStream inputStream = DemoServiceTest.class.getResourceAsStream("/org/jrecruiter/core/seeddata/seeddata.xml");
//FIXME verify file existence
final SystemSetupService systemSetupService = this.createSystemSetupService();
final Backup backup = systemSetupService.convertToBackupData(inputStream);
final List<Industry> industries = backup.getIndustries();
final List<Region> regions = backup.getRegions();
final List<Role> roles = backup.getRoles();
assertTrue("Expecting 16 industries but found: " + industries.size(), industries.size() == 16);
assertTrue("Expecting 10 regions but found: " + regions.size(), regions.size() == 10);
assertTrue("Expecting 2 roles but found: " + roles.size(), roles.size() == 2);
for (final Industry industry : industries) {
assertNotNull(industry.getId());
assertNotNull(industry.getName());
}
for (final Region region : regions) {
assertNotNull(region.getId());
assertNotNull(region.getName());
}
for (final Role role : roles) {
assertNotNull(role.getId());
assertNotNull(role.getName());
}
final List<User> users = backup.getUsers();
assertTrue("Expecting 1 user but found: " + users.size(), users.size() == 1);
for (final User user : users) {
assertNotNull(user.getId());
assertNotNull(user.getUsername());
assertEquals("aswCoBHvJHtCSyJWRHvch0e4sKflhzkRsP8bUsf1FPTjEkFi3nlQbgtbRx95GluwVr82Ol6WHaLiW/eeoJzXvwjZjEYPgrVYuZmm3Xn0Rek=", user.getPassword());
}
}
@Test
public void testConvertTestToBackupData() throws Exception {
final java.io.InputStream inputStream = DemoServiceTest.class.getResourceAsStream("/org/jrecruiter/core/seeddata/demodata.xml");
//FIXME verify file existence
final SystemSetupService systemSetupService = this.createSystemSetupService();
final Backup backup = systemSetupService.convertToBackupData(inputStream);
final List<Industry> industries = backup.getIndustries();
final List<Region> regions = backup.getRegions();
final List<Role> roles = backup.getRoles();
assertTrue("Expecting 0 industries but found: " + industries.size(), industries.size() == 0);
assertTrue("Expecting 0 regions but found: " + regions.size(), regions.size() == 0);
assertTrue("Expecting 0 roles but found: " + roles.size(), roles.size() == 0);
final List<User> users = backup.getUsers();
assertTrue("Expecting 1 user but found: " + users.size(), users.size() == 1);
for (final User user : users) {
assertNotNull(user.getId());
assertNotNull(user.getUsername());
assertTrue("Expecting 1 role associated but found: " + user.getUserToRoles().size(), user.getUserToRoles().size() == 1);
for (UserToRole userToRole : user.getUserToRoles()) {
assertNotNull(userToRole.getRoleName());
}
}
}
@Test
public void testSimpleMarshelling() throws Exception {
final String expectedString = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><backup><industries/><regions><region id=\"1\">MyRegion</region></regions><roles/><users/><jobs/><statistics/></backup>";
final StringWriter stringWriter = new StringWriter();
Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller();
jaxb2Marshaller.setClassesToBeBound(new Class[]{Backup.class});
jaxb2Marshaller.afterPropertiesSet();
Backup backup = new Backup();
Region region = new Region(1L, "MyRegion");
final List<Region> regions = CollectionUtils.getArrayList();
regions.add(region);
backup.setRegions(regions);
jaxb2Marshaller.marshal(backup, new StreamResult(stringWriter));
assertNotNull(stringWriter);
assertEquals(expectedString, stringWriter.toString());
}
@Test
public void testUserMarshalling() throws Exception {
final java.io.InputStream inputStream = DemoServiceTest.class.getResourceAsStream("/org/jrecruiter/core/service/testUserMarshallingExpectation.txt");
final String expectedString = IOUtils.toString(inputStream, "UTF-8");
final StringWriter stringWriter = new StringWriter();
Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller();
jaxb2Marshaller.setClassesToBeBound(new Class[]{Backup.class});
Map<String, Object> jaxbContextProperties = CollectionUtils.getHashMap();
jaxbContextProperties.put(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
jaxb2Marshaller.setMarshallerProperties(jaxbContextProperties);
jaxb2Marshaller.afterPropertiesSet();
final Backup backup = new Backup();
final User user = new User();
user.setCompany("company");
user.setEmail("email");
user.setEnabled(true);
user.setFax("123456789");
user.setFirstName("firstName");
user.setId(99L);
final Calendar lastLoginDate = CalendarUtils.getCalendarInUTC(2010, 6, 25, 15, 50, 0);
final Calendar registrationDate = CalendarUtils.getCalendarInUTC(2010, 5, 25, 15, 50, 0);
final Calendar updateDate = CalendarUtils.getCalendarInUTC(2010, 5, 24, 15, 50, 0);
user.setLastLoginDate(lastLoginDate.getTime());
user.setLastName("lastName");
user.setPassword("password");
user.setPhone("123456789");
user.setRegistrationDate(registrationDate.getTime());
user.setUpdateDate(updateDate.getTime());
user.setUserAuthenticationType(UserAuthenticationType.USERNAME_PASSWORD);
user.setUsername("username");
Role role = new Role(1L, "SPECIAL_ROLE");
user.getUserToRoles().add(new UserToRole(1L, role, user));
user.setVerificationKey("SOME_LONG_STRING");
final List<User> users = CollectionUtils.getArrayList();
final List<Role> roles = CollectionUtils.getArrayList();
users.add(user);
backup.setUsers(users);
backup.setRoles(roles);
jaxb2Marshaller.marshal(backup, new StreamResult(stringWriter));
LOGGER.info(stringWriter.toString());
assertNotNull(stringWriter);
assertEquals(expectedString, stringWriter.toString());
}
}