@ -3,8 +3,9 @@ import logging
logger = logging . getLogger ( __name__ )
from unittest import TestCase
from senpy . api import parse_params , API_PARAMS , NIF_PARAMS , WEB_PARAMS
from senpy . models import Error
from senpy . api import ( boolean , parse_params , get_extra_params , parse_extra_params ,
API_PARAMS , NIF_PARAMS , WEB_PARAMS )
from senpy . models import Error , Plugin
class APITest ( TestCase ) :
@ -89,3 +90,157 @@ class APITest(TestCase):
assert " Dummy " in p [ ' algorithm ' ]
assert ' input ' in p
assert p [ ' input ' ] == ' Aloha my friend '
def test_parse_extra_params ( self ) :
''' The API should parse user parameters and return them in a format that plugins can use '''
plugins = [
Plugin ( {
' name ' : ' plugin1 ' ,
' extra_params ' : {
# Incompatible parameter
' param0 ' : {
' aliases ' : [ ' p1 ' , ' parameter1 ' ] ,
' options ' : [ ' option1 ' , ' option2 ' ] ,
' default ' : ' option1 ' ,
' required ' : True
} ,
' param1 ' : {
' aliases ' : [ ' p1 ' , ' parameter1 ' ] ,
' options ' : [ ' en ' , ' es ' ] ,
' default ' : ' en ' ,
' required ' : False
} ,
' param2 ' : {
' aliases ' : [ ' p2 ' , ' parameter2 ' ] ,
' required ' : False ,
' options ' : [ ' value2_1 ' , ' value2_2 ' , ' value3_3 ' ]
}
}
} ) , Plugin ( {
' name ' : ' plugin2 ' ,
' extra_params ' : {
' param0 ' : {
' aliases ' : [ ' parameter1 ' ] ,
' options ' : [ ' new option ' , ' new option2 ' ] ,
' default ' : ' new option ' ,
' required ' : False
} ,
' param1 ' : {
' aliases ' : [ ' myparam1 ' , ' p1 ' ] ,
' options ' : [ ' en ' , ' de ' , ' auto ' ] ,
' default ' : ' de ' ,
' required ' : True
} ,
' param3 ' : {
' aliases ' : [ ' p3 ' , ' parameter3 ' ] ,
' options ' : boolean ,
' default ' : True
}
}
} )
]
call = {
' param1 ' : ' en ' ,
' 0.param0 ' : ' option1 ' ,
' 0.param1 ' : ' en ' ,
' param2 ' : ' value2_1 ' ,
' param0 ' : ' new option ' ,
' 1.param1 ' : ' de ' ,
' param3 ' : False ,
}
expected = [
{
' param0 ' : ' option1 ' ,
' param1 ' : ' en ' ,
' param2 ' : ' value2_1 ' ,
} , {
' param0 ' : ' new option ' ,
' param1 ' : ' de ' ,
' param3 ' : False ,
}
]
p = parse_extra_params ( call , plugins )
for i , arg in enumerate ( expected ) :
for k , v in arg . items ( ) :
assert p [ i ] [ k ] == v
def test_get_extra_params ( self ) :
''' The API should return the list of valid parameters for a set of plugins '''
plugins = [
Plugin ( {
' name ' : ' plugin1 ' ,
' extra_params ' : {
# Incompatible parameter
' param0 ' : {
' aliases ' : [ ' p1 ' , ' parameter1 ' ] ,
' options ' : [ ' option1 ' , ' option2 ' ] ,
' default ' : ' option1 ' ,
' required ' : True
} ,
' param1 ' : {
' aliases ' : [ ' p1 ' , ' parameter1 ' ] ,
' options ' : [ ' en ' , ' es ' ] ,
' default ' : ' en ' ,
' required ' : False
} ,
' param2 ' : {
' aliases ' : [ ' p2 ' , ' parameter2 ' ] ,
' required ' : False ,
' options ' : [ ' value2_1 ' , ' value2_2 ' , ' value3_3 ' ]
}
}
} ) , Plugin ( {
' name ' : ' plugin2 ' ,
' extra_params ' : {
' param0 ' : {
' aliases ' : [ ' parameter1 ' ] ,
' options ' : [ ' new option ' , ' new option2 ' ] ,
' default ' : ' new option ' ,
' required ' : False
} ,
' param1 ' : {
' aliases ' : [ ' myparam1 ' , ' p1 ' ] ,
' options ' : [ ' en ' , ' de ' , ' auto ' ] ,
' default ' : ' de ' ,
' required ' : True
} ,
' param3 ' : {
' aliases ' : [ ' p3 ' , ' parameter3 ' ] ,
' options ' : boolean ,
' default ' : True
}
}
} )
]
expected = {
# Each plugin's parameters
' 0.param0 ' : plugins [ 0 ] [ ' extra_params ' ] [ ' param0 ' ] ,
' 0.param1 ' : plugins [ 0 ] [ ' extra_params ' ] [ ' param1 ' ] ,
' 0.param2 ' : plugins [ 0 ] [ ' extra_params ' ] [ ' param2 ' ] ,
' 1.param0 ' : plugins [ 1 ] [ ' extra_params ' ] [ ' param0 ' ] ,
' 1.param1 ' : plugins [ 1 ] [ ' extra_params ' ] [ ' param1 ' ] ,
' 1.param3 ' : plugins [ 1 ] [ ' extra_params ' ] [ ' param3 ' ] ,
# Non-overlapping parameters
' param2 ' : plugins [ 0 ] [ ' extra_params ' ] [ ' param2 ' ] ,
' param3 ' : plugins [ 1 ] [ ' extra_params ' ] [ ' param3 ' ] ,
# Intersection of overlapping parameters
' param1 ' : {
' aliases ' : [ ' p1 ' ] ,
' options ' : [ ' en ' ] ,
' default ' : None ,
' required ' : True
}
}
result = get_extra_params ( plugins )
for ik , iv in expected . items ( ) :
assert ik in result
for jk , jv in iv . items ( ) :
assert jk in result [ ik ]
assert expected [ ik ] [ jk ] == result [ ik ] [ jk ]