package de.axone.web;
import static de.axone.test.Assertions.*;
import static org.testng.Assert.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Optional;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import de.axone.file.Crusher;
@Test( groups="tools.picturebuilder" )
public class PictureBuilderTest {
// ../Tools because cwd is different depending on how the test is run
Path home = Paths.get( "../Tools/src/test/resources/cache" );
public void buildPictures() throws Exception {
PictureBuilderBuilder b = PictureBuilderBuilder.instance( home )
.watermark( "watermark/test.png" )
;
PictureBuilderNG builder = b.builder( "test001", 0 );
Path p = assertOptional( builder.get( 100 ) )
.as( "pic 100" )
.isNotNull()
.isPresent()
.get()
;
assertPath( p )
.startsWith( home.resolve( "testpng/t/test001/100/test001.jpg" ) )
;
}
public void hashNames() {
assertEquals( PictureBuilderBuilderImpl.hashName( "12345", 1 ), "1" );
assertEquals( PictureBuilderBuilderImpl.hashName( "02345", 1 ), "2" );
assertEquals( PictureBuilderBuilderImpl.hashName( "00005", 1 ), "5" );
assertEquals( PictureBuilderBuilderImpl.hashName( "00000", 1 ), "0" );
assertEquals( PictureBuilderBuilderImpl.hashName( "12345", 2 ), "12" );
assertEquals( PictureBuilderBuilderImpl.hashName( "02345", 2 ), "23" );
assertEquals( PictureBuilderBuilderImpl.hashName( "00005", 2 ), "05" );
assertEquals( PictureBuilderBuilderImpl.hashName( "00000", 2 ), "00" );
assertEquals( PictureBuilderBuilderImpl.hashName( "12345", 5 ), "12345" );
assertEquals( PictureBuilderBuilderImpl.hashName( "12345", 6 ), "12345" );
}
public void mainFile() throws Exception {
Path tmp = Files.createTempDirectory( "emt" );
Path maindir = tmp.resolve( "main" );
Path hashdir = maindir.resolve( "1/12345" );
Path jpg12345 = hashdir.resolve( "12345.jpg" );
Path jpg12345_1 = hashdir.resolve( "12345_1.jpg" );
while( !hashdir.toFile().mkdirs() ) Thread.sleep( 10 );
while( !jpg12345.toFile().createNewFile() ) Thread.sleep( 10 );
while( !jpg12345_1.toFile().createNewFile() ) Thread.sleep( 10 );
Optional<Path> p;
p = PictureBuilderBuilderImpl.findFile( maindir, "1", "12345", 0 );
assertTrue( p.isPresent() );
assertEquals( p.get(), jpg12345 );
p = PictureBuilderBuilderImpl.findFile( maindir, "1", "12345", 1 );
assertTrue( p.isPresent() );
assertEquals( p.get(), jpg12345_1 );
p = PictureBuilderBuilderImpl.findFile( maindir, "1", "12345", 2 );
assertFalse( p.isPresent() );
Crusher.crushDir( tmp );
}
@BeforeClass
public void checkDependencies() {
// check everything is there as needed now
assertPath( home.resolve( "main/t/test001" ) ).isDirectory()
.resolve( "test001.jpg" ).isFile()
;
assertPath( home.resolve( "watermark" ) )
.isDirectory()
.resolve( "test.png" )
.isFile()
;
}
@BeforeClass
@AfterClass
public void cleanup() throws Exception {
// remove files from old run
Crusher.crushDirIfExists( home.resolve( "plain" ) );
Crusher.crushDirIfExists( home.resolve( "testpng" ) );
}
public void realRun() throws Exception {
PictureBuilderBuilder pbb = PictureBuilderBuilder.instance( home );
PictureBuilderNG builder = pbb.builder( "test001", 0 );
assertTrue( builder.exists() );
assertEquals( builder.fileCount(), 10 );
Optional<Path> scaledImage = builder.get( 100 );
assertOptional( scaledImage ).isPresent();
assertPath( scaledImage.get() )
.startsWith( home.resolve( "plain/t/test001/100/test001.jpg" ) )
;
assertPath( home )
.resolve( "plain" ).isDirectory()
.resolve( "t" ).isDirectory()
.resolve( "test001" ).isDirectory()
.resolve( "100" ).isDirectory()
.find( "test001\\.jpg.*" ).isFile()
;
assertPath( home )
.resolve( "plain/t/test001/1000" ).isDirectory()
.find( "test001\\.jpg.*" ).isFile()
;
// Now with watermark:
pbb = pbb.watermark( "watermark/test.png" );
builder = pbb.builder( "test001", 0 );
scaledImage = builder.get( 100 );
Path test001_testpng100 = assertPath( home.resolve( "testpng/t/test001/100" ) )
.find( "test001\\.jpg.*" )
.andReturn()
;
assertOptional( scaledImage ).isPresent();
assertPath( scaledImage.get() )
.isEqualTo( test001_testpng100 )
;
}
}