2018-11-10 22:07:41 +01:00
package org.telegram.abilitybots.api.bot ;
2019-07-08 21:22:51 +02:00
import org.junit.jupiter.api.AfterEach ;
import org.junit.jupiter.api.BeforeEach ;
import org.junit.jupiter.api.Test ;
2018-11-10 22:07:41 +01:00
import org.telegram.abilitybots.api.objects.Ability ;
2019-01-03 04:46:09 +01:00
import org.telegram.abilitybots.api.util.AbilityExtension ;
import java.io.IOException ;
2018-11-10 22:07:41 +01:00
2019-07-08 21:22:51 +02:00
import static org.junit.jupiter.api.Assertions.assertTrue ;
2019-01-03 04:46:09 +01:00
import static org.telegram.abilitybots.api.db.MapDBContext.offlineInstance ;
import static org.telegram.abilitybots.api.objects.Locality.ALL ;
import static org.telegram.abilitybots.api.objects.Privacy.PUBLIC ;
2018-11-10 22:07:41 +01:00
2019-07-08 21:22:51 +02:00
class ExtensionTest {
2018-11-10 22:07:41 +01:00
private ExtensionUsingBot bot ;
2019-07-08 21:22:51 +02:00
@BeforeEach
void setUp ( ) {
2018-11-10 22:07:41 +01:00
bot = new ExtensionUsingBot ( ) ;
2020-10-05 16:59:39 +02:00
bot . onRegister ( ) ;
2018-11-10 22:07:41 +01:00
}
2019-07-08 21:22:51 +02:00
@AfterEach
void tearDown ( ) throws IOException {
2019-01-03 04:46:09 +01:00
bot . db . clear ( ) ;
bot . db . close ( ) ;
}
2019-07-08 21:22:51 +02:00
@Test
void methodReturningAbilities ( ) {
assertTrue ( hasAbilityNamed ( " direct " ) , " Failed to find Ability in directly declared in root extension/bot " ) ;
assertTrue ( hasAbilityNamed ( " returningSuperClass0abc " ) , " Failed to find Ability in directly declared in extension returned by method returning the AbilityExtension class " ) ;
assertTrue ( hasAbilityNamed ( " returningSubClass0abc " ) , " Failed to find Ability in directly declared in extension returned by method returning the AbilityExtension subclass " ) ;
2020-10-08 16:11:45 +02:00
assertTrue ( hasAbilityNamed ( " addedInConstructor0abc " ) , " Failed to find Ability in directly declared in extension added in the constructor " ) ;
2019-07-08 21:22:51 +02:00
}
2018-11-10 22:07:41 +01:00
private boolean hasAbilityNamed ( String name ) {
return bot . abilities ( ) . values ( ) . stream ( ) . map ( Ability : : name ) . anyMatch ( name : : equals ) ;
}
2019-01-03 04:46:09 +01:00
public static class ExtensionUsingBot extends AbilityBot {
2019-07-08 21:22:51 +02:00
ExtensionUsingBot ( ) {
2019-01-03 04:46:09 +01:00
super ( " " , " " , offlineInstance ( " testing " ) ) ;
2020-10-08 16:11:45 +02:00
addExtension ( new AbilityBotExtension ( " addedInConstructor " ) ) ;
2019-01-03 04:46:09 +01:00
}
2018-11-10 22:07:41 +01:00
2019-01-03 04:46:09 +01:00
@Override
public int creatorId ( ) {
return 0 ;
}
public AbilityBotExtension methodReturningExtensionSubClass ( ) {
return new AbilityBotExtension ( " returningSubClass " ) ;
}
public AbilityExtension methodReturningExtensionSuperClass ( ) {
return new AbilityBotExtension ( " returningSuperClass " ) ;
}
public Ability methodReturningAbility ( ) {
return Ability . builder ( )
. name ( " direct " )
. info ( " Test ability " )
. locality ( ALL )
. privacy ( PUBLIC )
. action ( messageContext - > {
} )
. build ( ) ;
}
}
public static class AbilityBotExtension implements AbilityExtension {
private String name ;
2019-07-08 21:22:51 +02:00
AbilityBotExtension ( String name ) {
2019-01-03 04:46:09 +01:00
this . name = name ;
}
public Ability abc ( ) {
return Ability . builder ( )
. name ( name + " 0abc " )
. info ( " Test ability " )
. locality ( ALL )
. privacy ( PUBLIC )
. action ( ctx - > {
} )
. build ( ) ;
}
}
}