/*
* 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 java.math.BigDecimal;
import java.net.URI;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import junit.framework.TestCase;
import org.jrecruiter.common.ApiKeysHolder;
import org.jrecruiter.common.Constants;
import org.jrecruiter.common.Constants.JobStatus;
import org.jrecruiter.common.Constants.OfferedBy;
import org.jrecruiter.dao.ConfigurationDao;
import org.jrecruiter.dao.JobCountPerDayDao;
import org.jrecruiter.dao.JobDao;
import org.jrecruiter.dao.RegionDao;
import org.jrecruiter.dao.StatisticDao;
import org.jrecruiter.dao.UserDao;
import org.jrecruiter.model.Configuration;
import org.jrecruiter.model.Job;
import org.jrecruiter.model.Role;
import org.jrecruiter.model.ServerSettings;
import org.jrecruiter.model.Statistic;
import org.jrecruiter.model.User;
import org.jrecruiter.model.UserToRole;
import org.jrecruiter.model.statistics.JobCountPerDay;
import org.jrecruiter.model.Region;
import org.jrecruiter.service.impl.JobServiceImpl;
import org.mockito.Mockito;
import org.springframework.test.util.ReflectionTestUtils;
/**
* Unit Test of the JobService class
*
* @author Gunnar Hillert
*/
public class JobServiceUnitTest extends TestCase {
public void testDeleteJobForIdTest() throws Exception {
JobServiceImpl jobService = new JobServiceImpl();
final JobDao jobDao = Mockito.mock(JobDao.class);
final JobCountPerDayDao jobCountPerDayDao = Mockito.mock(JobCountPerDayDao.class);
ReflectionTestUtils.setField(jobService, "jobDao", jobDao, JobDao.class);
ReflectionTestUtils.setField(jobService, "jobCountPerDayDao", jobCountPerDayDao, JobCountPerDayDao.class);
jobDao.remove(1L);
JobCountPerDay jobCountPerDay = new JobCountPerDay();
Mockito.when(jobCountPerDayDao.getByDate((Date)Mockito.anyObject())).thenReturn(jobCountPerDay);
Mockito.when(jobDao.getJobsCount()).thenReturn(10L);
Mockito.when(jobCountPerDayDao.save(jobCountPerDay)).thenReturn(jobCountPerDay);
final Job job = new Job();
job.setId(1L);
jobService.deleteJobForId(job.getId());
}
public void testGetJobs() throws Exception {
List<Job> jobs = new ArrayList<Job>();
for (long i=1; i<=10; i++) {
jobs.add(this.getJob(i));
}
JobServiceImpl jobService = new JobServiceImpl();
JobDao jobDao = Mockito.mock(JobDao.class);
ReflectionTestUtils.setField(jobService, "jobDao", jobDao, JobDao.class);
Mockito.when(jobDao.getAllJobs()).thenReturn(jobs);
List<Job> jobsFromDb = jobService.getJobs();
assertNotNull(jobsFromDb);
assertTrue(jobsFromDb.size() == 10);
}
public void testGetIndustries() throws Exception {
List<Job> jobs = new ArrayList<Job>();
for (long i=1; i<=10; i++) {
jobs.add(this.getJob(i));
}
JobServiceImpl jobService = new JobServiceImpl();
JobDao jobDao = Mockito.mock(JobDao.class);
ReflectionTestUtils.setField(jobService, "jobDao", jobDao, JobDao.class);
Mockito.when(jobDao.getAllJobs()).thenReturn(jobs);
List<Job> jobsFromDb = jobService.getJobs();
assertNotNull(jobsFromDb);
assertTrue(jobsFromDb.size() == 10);
}
public void testGetRegions() throws Exception {
List<Region> regions = new ArrayList<Region>();
for (long i=1; i<=10; i++) {
regions.add(new Region(i, "Test_" + i));
}
JobServiceImpl jobService = new JobServiceImpl();
RegionDao regionDao = Mockito.mock(RegionDao.class);
ReflectionTestUtils.setField(jobService, "regionDao", regionDao, RegionDao.class);
Mockito.when(regionDao.getAllRegionsOrdered()).thenReturn(regions);
List<Region> regionsromDb = jobService.getRegions();
assertNotNull(regionsromDb);
assertTrue(regionsromDb.size() == 10);
}
public void testGetJobsForPagination() throws Exception {
final List<Job> jobs = new ArrayList<Job>();
for (long i=1; i<=10; i++) {
jobs.add(this.getJob(i));
}
final JobServiceImpl jobService = new JobServiceImpl();
final JobDao jobDao = Mockito.mock(JobDao.class);
ReflectionTestUtils.setField(jobService, "jobDao", jobDao, JobDao.class);
Mockito.when(jobDao.getJobs(5, 1, null, null)).thenReturn(jobs);
final List<Job> jobsFromDb = jobService.getJobs(5, 1, null, null);
assertNotNull(jobsFromDb);
assertTrue(jobsFromDb.size() == 10);
}
public void testGetJobsCountTest() throws Exception {
final JobServiceImpl jobService = new JobServiceImpl();
final JobDao jobDao = Mockito.mock(JobDao.class);
ReflectionTestUtils.setField(jobService, "jobDao", jobDao, JobDao.class);
Mockito.when(jobDao.getJobsCount()).thenReturn(10L);
final Long jobsCounted = jobService.getJobsCount();
assertEquals(Long.valueOf(10), jobsCounted);
}
public void testGetJRecruiterSettings() throws Exception {
final JobServiceImpl jobService = new JobServiceImpl();
List<Configuration>settings = new ArrayList<Configuration>();
for (long i=1; i<=10; i++) {
Configuration configuration = new Configuration("configuration_" + i);
settings.add(configuration);
}
final ConfigurationDao configurationDao = Mockito.mock(ConfigurationDao.class);
Mockito.when(configurationDao.getAll()).thenReturn(settings);
ReflectionTestUtils.setField(jobService, "configurationDao", configurationDao, ConfigurationDao.class);
List<Configuration>settings2 = jobService.getJRecruiterSettings();
assertNotNull(settings2);
assertTrue(settings2.size() == 10);
}
public void testGetJRecruiterSetting() throws Exception {
final JobServiceImpl jobService = new JobServiceImpl();
Configuration configuration = new Configuration();
final ConfigurationDao configurationDao = Mockito.mock(ConfigurationDao.class);
Mockito.when(configurationDao.get("key")).thenReturn(configuration);
ReflectionTestUtils.setField(jobService, "configurationDao", configurationDao, ConfigurationDao.class);
Configuration configuration2 = jobService.getJRecruiterSetting("key");
assertNotNull(configuration2);
}
public void testSaveJRecruiterSetting() throws Exception {
final JobServiceImpl jobService = new JobServiceImpl();
Configuration configuration = new Configuration();
final ConfigurationDao configurationDao = Mockito.mock(ConfigurationDao.class);
Mockito.when(configurationDao.save(configuration)).thenReturn(configuration);
ReflectionTestUtils.setField(jobService, "configurationDao", configurationDao, ConfigurationDao.class);
jobService.saveJRecruiterSetting(configuration);
}
public void testGetUsersJobsTestAsAdminUser() throws Exception {
final User user = this.getUser();
user.getUserToRoles().add(new UserToRole(1L, new Role(1L, Constants.Roles.ADMIN.name()), user));
final JobServiceImpl jobService = new JobServiceImpl();
final JobDao jobDao = Mockito.mock(JobDao.class);
ReflectionTestUtils.setField(jobService, "jobDao", jobDao, JobDao.class);
final UserDao userDao = Mockito.mock(UserDao.class);
ReflectionTestUtils.setField(jobService, "userDao", userDao, UserDao.class);
Mockito.when(userDao.getUser("demo44")).thenReturn(user);
final List<Job>adminJobs = new ArrayList<Job>();
for (long i=1; i<=10; i++) {
Job job = new Job(i);
adminJobs.add(job);
}
Mockito.when(jobDao.getAllJobs()).thenReturn(adminJobs);
final List<Job>jobsFromService = jobService.getUsersJobs("demo44");
assertTrue(jobsFromService.size() == 10);
}
public void testGetUsersJobsAsNormalUser() throws Exception {
final User user = this.getUser();
user.getUserToRoles().add(new UserToRole(1L, new Role(1L, Constants.Roles.MANAGER.name()), user));
final JobServiceImpl jobService = new JobServiceImpl();
final JobDao jobDao = Mockito.mock(JobDao.class);
ReflectionTestUtils.setField(jobService, "jobDao", jobDao, JobDao.class);
final UserDao userDao = Mockito.mock(UserDao.class);
ReflectionTestUtils.setField(jobService, "userDao", userDao, UserDao.class);
Mockito.when(userDao.getUser("demo44")).thenReturn(user);
final List<Job>userJobs = new ArrayList<Job>();
for (long i=1; i<=5; i++) {
Job job = new Job(i);
userJobs.add(job);
}
Mockito.when(jobDao.getAllUserJobs("demo44")).thenReturn(userJobs);
final List<Job>jobsFromService = jobService.getUsersJobs("demo44");
assertTrue(jobsFromService.size() == 5);
}
public void testGetUsersJobsForStatistics() throws Exception {
final User user = this.getUser();
user.getUserToRoles().add(new UserToRole(1L, new Role(1L, Constants.Roles.MANAGER.name()), user));
final JobServiceImpl jobService = new JobServiceImpl();
final JobDao jobDao = Mockito.mock(JobDao.class);
ReflectionTestUtils.setField(jobService, "jobDao", jobDao, JobDao.class);
final UserDao userDao = Mockito.mock(UserDao.class);
ReflectionTestUtils.setField(jobService, "userDao", userDao, UserDao.class);
Mockito.when(userDao.getUser("demo44")).thenReturn(user);
final List<Job>jobs = new ArrayList<Job>();
for (long i=1; i<=5; i++) {
Job job = new Job(i);
jobs.add(job);
}
Mockito.when(jobDao.getAllUserJobsForStatistics(user.getId())).thenReturn(jobs);
final List<Job>jobs2 = jobService.getUsersJobsForStatistics("demo44");
assertNotNull(jobs2);
assertTrue(jobs2.size() == 5);
}
public void testAddJob() throws Exception {
final JobServiceImpl jobService = new JobServiceImpl();
Job job = this.getJob(1L);
final JobDao jobDao = Mockito.mock(JobDao.class);
final JobCountPerDayDao jobCountPerDayDao = Mockito.mock(JobCountPerDayDao.class);
Mockito.when(jobDao.save(job)).thenReturn(job);
JobCountPerDay jobCountPerDay = new JobCountPerDay();
Mockito.when(jobCountPerDayDao.getByDate((Date)Mockito.anyObject())).thenReturn(jobCountPerDay);
Mockito.when(jobDao.getJobsCount()).thenReturn(10L);
Mockito.when(jobCountPerDayDao.save(jobCountPerDay)).thenReturn(jobCountPerDay);
ReflectionTestUtils.setField(jobService, "jobDao", jobDao, JobDao.class);
ReflectionTestUtils.setField(jobService, "jobCountPerDayDao", jobCountPerDayDao, JobCountPerDayDao.class);
jobService.addJob(job);
}
// public void testGetJobForId() throws Exception {
//
// final JobServiceImpl jobService = new JobServiceImpl();
//
// Job job = this.getJob(1L);
//
// final JobDao jobDao = Mockito.mock(JobDao.class);
// Mockito.when(jobDao.save(job)).thenReturn(job);
// ReflectionTestUtils.setField(jobService, "jobDao", jobDao, JobDao.class);
//
//
//
// Mockito.replay(jobDao);
//
// jobService.addJob(job);
//
// }
// public void testUpdateJobTest() throws Exception {
// final JobServiceImpl jobService = new JobServiceImpl();
//
// final Job job = this.getJob(1L);
//
// final JobDao jobDao = Mockito.mock(JobDao.class);
// final JobCountPerDayDao jobCountPerDayDao = Mockito.mock(JobCountPerDayDao.class);
// final NotificationService notificationService = Mockito.mock(NotificationService.class);
// final ServerSettings serverSettings = Mockito.mock(ServerSettings.class);
//
// final ApiKeysHolder apiKeysHolder = Mockito.mock(ApiKeysHolder.class);
//
// Mockito.when(apiKeysHolder.getBitlyUsername()).thenReturn("bitly");
// Mockito.when(apiKeysHolder.getBitlyPassword()).thenReturn("bitly");
//
// Mockito.when(jobDao.save(job)).thenReturn(job);
//
// JobCountPerDay jobCountPerDay = new JobCountPerDay();
//
// Mockito.when(jobCountPerDayDao.getByDate((Date)Mockito.anyObject())).thenReturn(jobCountPerDay);
//
// Mockito.when(jobDao.getJobsCount()).thenReturn(10L);
//
// Mockito.when(jobCountPerDayDao.save(jobCountPerDay)).thenReturn(jobCountPerDay);
//
// Mockito.when(serverSettings.getServerAddress()).thenReturn("test");
//
// ReflectionTestUtils.setField(jobService, "jobDao", jobDao, JobDao.class);
// ReflectionTestUtils.setField(jobService, "notificationService", notificationService, NotificationService.class);
// ReflectionTestUtils.setField(jobService, "serverSettings", serverSettings, ServerSettings.class);
// ReflectionTestUtils.setField(jobService, "apiKeysHolder", apiKeysHolder, ApiKeysHolder.class);
//
// Mockito.when(jobService.shortenUrl(Mockito.anyString())).thenReturn((new URI("http://www.google.com")));
//
// notificationService.sendTweetToTwitter((String)Mockito.anyObject());
//
// jobService.updateJob(job);
//
// }
public void testUpdateJobStatistic() throws Exception {
final JobServiceImpl jobService = new JobServiceImpl();
final Statistic statistic = new Statistic();
statistic.setJob(this.getJob(1L));
statistic.setId(1L);
final StatisticDao statisticDao = Mockito.mock(StatisticDao.class);
Mockito.when(statisticDao.save(statistic)).thenReturn(statistic);
ReflectionTestUtils.setField(jobService, "statisticDao", statisticDao, StatisticDao.class);
jobService.updateJobStatistic(statistic);
}
public void testUpdateJobStatistic2() throws Exception {
final JobServiceImpl jobService = new JobServiceImpl();
final Statistic statistic = new Statistic();
statistic.setJob(this.getJob(1L));
final StatisticDao statisticDao = Mockito.mock(StatisticDao.class);
Mockito.when(statisticDao.save(statistic)).thenReturn(statistic);
ReflectionTestUtils.setField(jobService, "statisticDao", statisticDao, StatisticDao.class);
jobService.updateJobStatistic(statistic);
}
//~~~~~Helper methods~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
private Job getJob(Long jobId) {
Job job = new Job(jobId);
job.setBusinessAddress1("businessAddress1");
job.setBusinessAddress2("businessAddress2");
job.setBusinessCity("businessCity");
job.setBusinessEmail("businessEmail");
job.setRegionOther("businessLocation");
job.setBusinessName("businessName");
job.setBusinessPhone("businessPhone");
job.setBusinessState("businessState");
job.setBusinessZip("businessZip");
job.setDescription("description");
job.setJobRestrictions("jobRestrictions");
job.setJobTitle("jobTitle");
job.setLatitude(BigDecimal.ONE);
job.setLongitude(BigDecimal.ZERO);
job.setOfferedBy(OfferedBy.RECRUITER);
job.setRegistrationDate(new Date());
job.setSalary("10000");
job.setStatus(JobStatus.ACTIVE);
job.setUpdateDate(new Date());
job.setWebsite("www.google.com");
return job;
}
private User getUser() {
User user = new User();
user.setUsername("demo44");
user.setEmail("demo@demo.com");
user.setFirstName("Demo First Name");
user.setLastName("Demo Last Name");
user.setPassword("demo");
user.setPhone("123456");
user.setRegistrationDate(new Date());
return user;
}
}