package de.axone.cache.ng;
import static de.axone.cache.ng.CacheNGAssert.*;
import static de.axone.cache.ng.CacheNGTestHelpers.*;
import static org.assertj.core.api.Assertions.*;
import static org.testng.Assert.*;
import java.util.Arrays;
import java.util.List;
import org.testng.annotations.Test;
import de.axone.cache.ng.CacheNGTestHelpers.Aid;
import de.axone.cache.ng.CacheNGTestHelpers.RN;
import de.axone.cache.ng.CacheNGTestHelpers.TArticle;
import de.axone.cache.ng.CacheNGTestHelpers.Tid;
import de.axone.cache.ng.CacheNGTest_ArticleForId.TestAccessor_ArticleForAid;
@Test(groups="cacheng.helper" )
public class CacheNGTest_Implementations {
static final Tid T123 = tid( "123" ),
T234 = tid( "234" ),
T345 = tid( "345" ),
T456 = tid( "456" ),
T999 = tid( "999" );
static final Aid A12345 = aid( "+12345:123:234" ),
A12346 = aid( "+12346:234:345" ),
A12347 = aid( "+12347:345:456" ),
A_FAIL = aid( "-12345:123:234" )
;
static final TArticle TART12345 = TArticle.build( A12345 ),
TART12346 = TArticle.build( A12346 ),
TART12347 = TArticle.build( A12347 );
int i=123;
public void identifiableEqualsHashCodeEctWorking() {
Aid aid = aid( "123" ),
aid2 = aid( ""+i ),
aid3 = aid( "999" );
Tid tid = tid( "123" );
assertThat( aid )
.isEqualTo( aid2 )
.isNotEqualTo( aid3 )
.isNotEqualTo( tid );
;
assertThat( Arrays.asList( aid, aid2 ) )
.isEqualTo( Arrays.asList( aid, aid ) )
.isNotEqualTo( Arrays.asList( aid, tid ) )
;
}
public void buildTArticleUsingBuilder(){
TArticle tart = TArticle.build( A12345 );
assertThat( tart.getIdentifier() )
.isEqualTo( aid( "12345" ) )
;
assertThat( tart.getTreeIdentifiers() )
.contains( T123, T234 )
.hasSize( 2 )
;
assertThat( tart )
.is( havingIdentifier( aid( "12345" ) ) )
.isNot( havingIdentifier( aid( "00001" ) ) )
.is( havingTid( T123 ) )
.is( havingTid( T234 ) )
.isNot( havingTid( T999 ) )
;
}
public void buildArticleUsingAccessor() {
TestAccessor_ArticleForAid acc = new TestAccessor_ArticleForAid();
TArticle tart = acc.fetch( A12345 );
assertThat( tart )
.is( havingIdentifier( aid( "12345" ) ) )
.is( havingTid( T123 ) )
.is( havingTid( T234 ) )
;
}
public void useUnion(){
List<TArticle> list1 = Arrays.asList( TART12345, TART12346 ),
list2 = Arrays.asList( TART12346, TART12347 );
List<TArticle> union = union( list1, list2 );
List<TArticle> expected = Arrays.asList( TART12345, TART12346, TART12347 );
assertThat( union ).isEqualTo( expected );
}
public void storeAndRetrievArticleFromTestMap() {
CacheNGTest_ArticleListForTid.TestMapTidToArticle data = new CacheNGTest_ArticleListForTid.TestMapTidToArticle();
assertThat( data ).isEmpty();
data.addArticle( TART12345 );
assertThat( data ).hasSize( 2 )
.containsKey( T123 )
.containsKey( T234 )
.containsValue( Arrays.asList( TART12345 ) )
;
assertThat( data.get( T123 ) ).containsOnly( TART12345 );
assertThat( data.get( T234 ) ).containsOnly( TART12345 );
data.addArticle( TART12346 );
assertThat( data ).hasSize( 3 )
.containsKey( T123 )
.containsKey( T234 )
.containsKey( T345 )
.containsValue( Arrays.asList( TART12345 ) )
.containsValue( Arrays.asList( TART12346 ) )
;
assertThat( data.get( T123 ) ).containsOnly( TART12345 );
assertThat( data.get( T234 ) ).contains( TART12345, TART12346 );
assertThat( data.get( T345 ) ).containsOnly( TART12346 );
}
public void accessorFailsToFetchArticleWithMinus() {
TestAccessor_ArticleForAid acc = new TestAccessor_ArticleForAid();
TArticle tart = acc.fetch( A_FAIL );
assertNull( tart );
}
public void storeAndRestoreFromTestCache() {
CacheNG.Cache<Aid,TArticle> client = new CacheHashMap<>( RN.AID_ARTICLE );
TArticle tart = TArticle.build( A12345 );
assertThat( client ).hasNotCached( aid( "12345" ) );
client.put( tart.getIdentifier(), tart );
assertThat( client ).hasCached( aid( "12345" ) );
TArticle restored = client.fetch( aid( "12345" ) );
assertThat( restored ).isEqualTo( tart );
client.invalidate( aid( "12345" ) );
assertThat( client ).hasNotCached( aid( "12345" ) );
TArticle removed = client.fetch( aid( "12345" ) );
assertNull( removed );
}
public void buildByTestAutoCache() {
CacheNG.AutomaticClient<Aid, TArticle> auto =
new AutomaticClientImpl<>( new CacheHashMap<>( RN.AID_ARTICLE ) );
TestAccessor_ArticleForAid accessor = new TestAccessor_ArticleForAid();
assertThat( auto ).hasNotCached( A12345 )
.lookingInBackend().hasNotCached( A12345 );
TArticle art = auto.fetch( A12345, accessor );
assertThat( auto ).hasCached( A12345 )
.lookingInBackend().hasCached( A12345 );
assertThat( art ).is( havingIdentifier( aid( "12345" ) ) )
.is( havingTid( T123 ) )
.is( havingTid( T234 ) )
;
assertThat( auto ).hasNotCached( A_FAIL )
.lookingInBackend().hasNotCached( A_FAIL );
TArticle failed = auto.fetch( A_FAIL, accessor );
assertThat( failed ).isNull();
assertThat( auto ).hasCached( A_FAIL )
.lookingInBackend().hasCached( A_FAIL );
}
public void buildByListAccessor(){
TArticle a12345 = TArticle.build( A12345 );
TArticle a12346 = TArticle.build( A12346 );
CacheNGTest_ArticleListForTid.TestMapTidToArticle data = new CacheNGTest_ArticleListForTid.TestMapTidToArticle();
data.addArticle( a12345 );
data.addArticle( a12346 );
CacheNGTest_ArticleListForTid.TestAccessor_ArticleForTid acc = new CacheNGTest_ArticleListForTid.TestAccessor_ArticleForTid( data );
assertThat( acc.fetch( T123 ) ).hasSize( 1 ).isNotNull();
assertThat( acc.fetch( T234 ) ).hasSize( 2 ).isNotNull();
assertThat( acc.fetch( T345 ) ).hasSize( 1 ).isNotNull();
CacheNG.AutomaticClient<Tid, List<TArticle>> auto =
new AutomaticClientImpl<>( new CacheHashMap<>( RN.TID_LARTICLE ) );
assertThat( auto ).hasNotCached( T123 )
.lookingInBackend().hasNotCached( T123 );
assertThat( auto.fetch( T123, acc ) )
.contains( a12345 )
.hasSize( 1 )
;
assertThat( auto ).hasCached( T123 )
.lookingInBackend().hasCached( T123 );
assertThat( auto ).hasNotCached( T234 )
.lookingInBackend().hasNotCached( T234 );
assertThat( auto.fetch( T234, acc ) )
.contains( a12345 )
.contains( a12346 )
.hasSize( 2 )
;
assertThat( auto ).hasCached( T234 )
.lookingInBackend().hasCached( T234 );
assertThat( auto ).hasNotCached( T345 )
.lookingInBackend().hasNotCached( T345 );
assertThat( auto.fetch( T345, acc ) )
.contains( a12346 )
.hasSize( 1 )
;
assertThat( auto ).hasCached( T345 )
.lookingInBackend().hasCached( T345 );
}
}