package com.twasyl.slideshowfx.utils.time;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.attribute.FileTime;
import java.time.Instant;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import static org.junit.Assert.*;
/**
* @author Thierry Wasylczenko
* @since SlideshowFX
*/
public class DateTimeUtilsTest {
private static final File TEMP_DIRECTORY = new File(System.getProperty("java.io.tmpdir"));
private static final String TEMP_FILE_PREFIX = "test-sfx-";
private static final File file_10_daysOld= new File(TEMP_DIRECTORY, TEMP_FILE_PREFIX + "01");
private static final File file_15_daysOld = new File(TEMP_DIRECTORY, TEMP_FILE_PREFIX + "02");
private static final File file_10_daysMoreRecent = new File(TEMP_DIRECTORY, TEMP_FILE_PREFIX + "03");
private static final File file_15_daysMoreRecent = new File(TEMP_DIRECTORY, TEMP_FILE_PREFIX + "04");
@BeforeClass
public static void setUp() throws IOException {
final TimeUnit daysUnit = TimeUnit.DAYS;
final Instant now = Instant.now();
file_10_daysOld.mkdir();
Files.setLastModifiedTime(file_10_daysOld.toPath(), FileTime.from(now.minusSeconds(daysUnit.toSeconds(10))));
file_15_daysOld.mkdir();
Files.setLastModifiedTime(file_15_daysOld.toPath(), FileTime.from(now.minusSeconds(daysUnit.toSeconds(30))));
file_10_daysMoreRecent.mkdir();
Files.setLastModifiedTime(file_10_daysMoreRecent.toPath(), FileTime.from(now.plusSeconds(daysUnit.toSeconds(10))));
file_15_daysMoreRecent.mkdir();
Files.setLastModifiedTime(file_15_daysMoreRecent.toPath(), FileTime.from(now.plusSeconds(daysUnit.toSeconds(15))));
}
@AfterClass
public static void tearDown() {
file_10_daysOld.delete();
file_15_daysOld.delete();
file_10_daysMoreRecent.delete();
file_15_daysMoreRecent.delete();
}
@Test
public void testFilesToDeleteOlderThan15Days() {
final List<File> filesToDelete = Arrays.stream(TEMP_DIRECTORY.listFiles())
.filter(file -> file.getName().startsWith(TEMP_FILE_PREFIX))
.filter(DateTimeUtils.getFilterForFilesOlderThanGivenDays(15))
.collect(Collectors.toList());
assertNotNull(filesToDelete);
assertFalse(filesToDelete.isEmpty());
assertEquals(1, filesToDelete.size());
assertEquals(file_15_daysOld, filesToDelete.get(0));
}
@Test
public void testFilesToDeleteOlderThan10Days() throws IOException {
final List<File> filesToDelete = Arrays.stream(TEMP_DIRECTORY.listFiles())
.filter(file -> file.getName().startsWith(TEMP_FILE_PREFIX))
.filter(DateTimeUtils.getFilterForFilesOlderThanGivenDays(10))
.sorted(DateTimeUtils::sortByFileTime)
.collect(Collectors.toList());
assertNotNull(filesToDelete);
assertFalse(filesToDelete.isEmpty());
assertEquals(2, filesToDelete.size());
assertEquals(file_15_daysOld, filesToDelete.get(0));
assertEquals(file_10_daysOld, filesToDelete.get(1));
}
}