package com.plannaplan.services; 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.MethodMode; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import static org.junit.Assert.assertTrue; import java.io.InputStream; import java.lang.reflect.Field; import java.sql.Date; import java.util.Map; import java.util.Optional; import java.util.concurrent.ScheduledFuture; import com.plannaplan.TestApplication; import com.plannaplan.entities.AppConfig; import com.plannaplan.entities.Groups; import com.plannaplan.models.ConfigData; import com.plannaplan.models.TourData; import com.plannaplan.repositories.AppConfigRepository; import org.junit.Test; import org.junit.runner.RunWith; @RunWith(SpringRunner.class) @SpringBootTest @ContextConfiguration public class ConfiguratorServiceTest { private final static String BEFORE_UPDATE_FILE = "ZajeciaBeforeUpdate.xlsx"; private final static String AFTER_UPDATE_FILE = "ZajeciaAfterUpdate.xlsx"; @Autowired private ConfiguratorService configuratorService; @Autowired private CourseService courseService; @Autowired private GroupService groupService; @Autowired private LecturerService lecturerService; @Autowired private AppConfigRepository appConfigRepo; @Autowired private EventService eventService; @Test public void shouldImportDataToDataBase() { final InputStream inputStream = getClass().getClassLoader() .getResourceAsStream(TestApplication.TEST_CONFIG_FILE); final ConfigData data = new ConfigData( new TourData(new Date(System.currentTimeMillis()), new Date(System.currentTimeMillis() + 86400000)), new TourData(new Date(System.currentTimeMillis() + 86400000), new Date(System.currentTimeMillis() + 2 * 86400000)), inputStream); this.configuratorService.config(data); int courses_ammount = this.courseService.getCoursesAmmount(); int groups_ammount = this.groupService.getGroupsAmmount(); int lecturers_ammount = this.lecturerService.getLecturersAmmount(); assertTrue(courses_ammount > 0 && groups_ammount > 0 && lecturers_ammount > 0); } @Test @DirtiesContext(methodMode = MethodMode.BEFORE_METHOD) public void shouldUpdatePreviousImport() { final InputStream inputStream = getClass().getClassLoader() .getResourceAsStream(ConfiguratorServiceTest.BEFORE_UPDATE_FILE); this.configuratorService.importCoursesStream(inputStream); int groups_ammount = this.groupService.getGroupsAmmount(); assertTrue(groups_ammount == 2); final InputStream inputStream2 = getClass().getClassLoader() .getResourceAsStream(ConfiguratorServiceTest.AFTER_UPDATE_FILE); this.configuratorService.importCoursesStream(inputStream2); int groups_ammount2 = this.groupService.getGroupsAmmount(); Optional newGroup = this.groupService.find(456458, 3); Optional updateGroup = this.groupService.find(456457, 2); assertTrue(groups_ammount2 == 3); assertTrue(newGroup.isPresent()); assertTrue(updateGroup.get().getLecturer().getSurname().equals("Murawski")); assertTrue(updateGroup.get().getLecturer().getName().equals("Roman")); assertTrue(updateGroup.get().getLecturer().getTitle().equals("prof. dr hab.")); } @Test public void shouldRetrunNewestConfig() throws InterruptedException { final Date dateToCheck = new Date(System.currentTimeMillis()); this.appConfigRepo.save(new AppConfig(new TourData(null, null), new TourData(null, null))); Thread.sleep(2000); this.appConfigRepo.save(new AppConfig(new TourData(dateToCheck, null), new TourData(null, null))); AppConfig response = this.configuratorService.getCurrentConfig(); assertTrue(response.getFirstTourStart() != null); } @Test @DirtiesContext(methodMode = MethodMode.BEFORE_METHOD) public void shlouldScheduleTaskWhenSetTourDate() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { final InputStream inputStream = getClass().getClassLoader() .getResourceAsStream(TestApplication.TEST_CONFIG_FILE); final ConfigData data = new ConfigData( new TourData(new Date(System.currentTimeMillis()), new Date(System.currentTimeMillis() + 86400000)), new TourData(new Date(System.currentTimeMillis() + 86400000), new Date(System.currentTimeMillis() + 2 * 86400000)), inputStream); this.configuratorService.config(data); final Field reader = EventService.class.getDeclaredField("jobsMap"); reader.setAccessible(true); @SuppressWarnings("unchecked") final Map> map = (Map>) reader.get(this.eventService); assertTrue(map.size() == 2); assertTrue(map.get(EventService.FIRST_TOUR_SCHEDULE).isDone() == false); assertTrue(map.get(EventService.SECOND_TOUR_SCHEDULE).isDone() == false); } }