Added more tests
This commit is contained in:
parent
764a4863a2
commit
912f288f67
7 changed files with 183 additions and 7 deletions
|
|
@ -175,7 +175,7 @@ class TextField(PhangoField):
|
||||||
class HTMLField(TextField):
|
class HTMLField(TextField):
|
||||||
"""Class used for html fields
|
"""Class used for html fields
|
||||||
|
|
||||||
Class used for html fields, use TEXT sql type for the this field because is children of TextField.
|
Class used for html fields, use TEXT sql type for the this field because is children of TextField. In this method self.escape is used for convert " to "
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, name, required=False):
|
def __init__(self, name, required=False):
|
||||||
|
|
@ -204,7 +204,14 @@ class HTMLField(TextField):
|
||||||
if tag.name not in self.trusted_tags:
|
if tag.name not in self.trusted_tags:
|
||||||
tag.hidden=True
|
tag.hidden=True
|
||||||
|
|
||||||
return soup.renderContents().decode('utf-8')
|
value=soup.renderContents().decode('utf-8')
|
||||||
|
|
||||||
|
if self.escape:
|
||||||
|
|
||||||
|
return value.replace('"', '"')
|
||||||
|
else:
|
||||||
|
|
||||||
|
return value
|
||||||
|
|
||||||
|
|
||||||
class ForeignKeyField(IntegerField):
|
class ForeignKeyField(IntegerField):
|
||||||
|
|
@ -217,7 +224,7 @@ class ForeignKeyField(IntegerField):
|
||||||
"""
|
"""
|
||||||
Args:
|
Args:
|
||||||
name (str): Name of field
|
name (str): Name of field
|
||||||
related_table(str): The table related with this foreign key
|
related_table(WebModel): The table-model related with this foreign key
|
||||||
size (int): The size of the new field in database. By default 11.
|
size (int): The size of the new field in database. By default 11.
|
||||||
required (bool): Boolean for define if field is required or not
|
required (bool): Boolean for define if field is required or not
|
||||||
identifier_field (str): The Id field name from related table
|
identifier_field (str): The Id field name from related table
|
||||||
|
|
@ -297,6 +304,7 @@ class BooleanField(IntegerField):
|
||||||
if value<0 or value>1:
|
if value<0 or value>1:
|
||||||
self.txt_error=self.default_error
|
self.txt_error=self.default_error
|
||||||
self.error=True
|
self.error=True
|
||||||
|
value=0
|
||||||
|
|
||||||
except:
|
except:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,10 +37,17 @@ class ArrayField(PhangoField):
|
||||||
self.error=True
|
self.error=True
|
||||||
self.txt_error='Sorry, the json array is invalid'
|
self.txt_error='Sorry, the json array is invalid'
|
||||||
|
|
||||||
|
error=0
|
||||||
|
|
||||||
if type(self.field_type).__name__!='ArrayField':
|
if type(self.field_type).__name__!='ArrayField':
|
||||||
for k,v in enumerate(value):
|
for k,v in enumerate(value):
|
||||||
|
|
||||||
value[k]=self.field_type.check(v)
|
value[k]=self.field_type.check(v)
|
||||||
|
if self.field_type.error:
|
||||||
|
error+=1
|
||||||
|
|
||||||
|
if error>0:
|
||||||
|
self.error=True
|
||||||
|
|
||||||
final_value=json.dumps(value)
|
final_value=json.dumps(value)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,9 @@
|
||||||
from paramecio2.libraries.db.corefields import IntegerField
|
from paramecio2.libraries.db.corefields import IntegerField
|
||||||
from paramecio2.libraries.db.extraforms.colorform import ColorForm
|
try:
|
||||||
|
from paramecio2.libraries.db.extraforms.colorform import ColorForm
|
||||||
|
except:
|
||||||
|
class ColorForm:
|
||||||
|
pass
|
||||||
|
|
||||||
class ColorField(IntegerField):
|
class ColorField(IntegerField):
|
||||||
"""Simple field for save colors in hexadecimal format."""
|
"""Simple field for save colors in hexadecimal format."""
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,11 @@
|
||||||
from paramecio2.libraries.db.corefields import PhangoField
|
from paramecio2.libraries.db.corefields import PhangoField
|
||||||
from paramecio2.libraries import datetime
|
from paramecio2.libraries import datetime
|
||||||
from paramecio2.libraries.db.extraforms.dateform import DateForm
|
try:
|
||||||
|
from paramecio2.libraries.db.extraforms.dateform import DateForm
|
||||||
|
except:
|
||||||
|
|
||||||
|
class DateForm:
|
||||||
|
pass
|
||||||
|
|
||||||
class DateField(PhangoField):
|
class DateField(PhangoField):
|
||||||
"""Field for use and save dates in YYYYMMDDHHSS format"""
|
"""Field for use and save dates in YYYYMMDDHHSS format"""
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
from paramecio2.libraries.db.corefields import PhangoField
|
from paramecio2.libraries.db.corefields import PhangoField
|
||||||
from paramecio2.libraries import datetime
|
from paramecio2.libraries import datetime
|
||||||
from paramecio2.libraries.db.extraforms.dateform import DateForm
|
try:
|
||||||
|
from paramecio2.libraries.db.extraforms.dateform import DateForm
|
||||||
|
except:
|
||||||
|
class DateForm:
|
||||||
|
pass
|
||||||
|
|
||||||
class DateTimeField(PhangoField):
|
class DateTimeField(PhangoField):
|
||||||
"""Field for use and save dates in MySQL date format"""
|
"""Field for use and save dates in MySQL date format"""
|
||||||
|
|
|
||||||
|
|
@ -36,13 +36,18 @@ class DictField(PhangoField):
|
||||||
value={}
|
value={}
|
||||||
self.error=True
|
self.error=True
|
||||||
self.txt_error=self.error_default
|
self.txt_error=self.error_default
|
||||||
|
error=0
|
||||||
for k,v in value.items():
|
for k,v in value.items():
|
||||||
|
|
||||||
value[k]=self.field_type.check(v)
|
value[k]=self.field_type.check(v)
|
||||||
|
if self.field_type.error:
|
||||||
|
error+=1
|
||||||
|
|
||||||
final_value=json.dumps(value)
|
final_value=json.dumps(value)
|
||||||
|
|
||||||
|
if error>0:
|
||||||
|
self.error=True
|
||||||
|
|
||||||
#final_value=WebModel.escape_sql(final_value)
|
#final_value=WebModel.escape_sql(final_value)
|
||||||
|
|
||||||
return final_value
|
return final_value
|
||||||
|
|
|
||||||
143
paramecio2/tests/fields_test.py
Normal file
143
paramecio2/tests/fields_test.py
Normal file
|
|
@ -0,0 +1,143 @@
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
sys.path.insert(0, os.path.realpath(os.path.dirname(__file__))+'/../../')
|
||||||
|
|
||||||
|
#from settings import config
|
||||||
|
from paramecio2.libraries.db.webmodel import PhangoField, WebModel
|
||||||
|
from paramecio2.libraries.db import corefields
|
||||||
|
from paramecio2.libraries.db.extrafields.arrayfield import ArrayField
|
||||||
|
from paramecio2.libraries.db.extrafields.colorfield import ColorField
|
||||||
|
from paramecio2.libraries.db.extrafields.datefield import DateField
|
||||||
|
from paramecio2.libraries.db.extrafields.datetimefield import DateTimeField
|
||||||
|
from paramecio2.libraries.db.extrafields.dictfield import DictField
|
||||||
|
from paramecio2.libraries import datetime
|
||||||
|
|
||||||
|
class ExampleModel(WebModel):
|
||||||
|
|
||||||
|
def __init__(self, connection=None):
|
||||||
|
|
||||||
|
super().__init__(connection)
|
||||||
|
|
||||||
|
# I can change other fields here, how the name.
|
||||||
|
|
||||||
|
self.register(corefields.CharField('title'))
|
||||||
|
self.register(corefields.CharField('content'))
|
||||||
|
|
||||||
|
|
||||||
|
def test_test_phangofield():
|
||||||
|
|
||||||
|
field=PhangoField('default', 255)
|
||||||
|
|
||||||
|
assert field.check(' "<trial>" ')=='"<trial>"'
|
||||||
|
|
||||||
|
def test_test_integerfield():
|
||||||
|
|
||||||
|
field=corefields.IntegerField('int')
|
||||||
|
|
||||||
|
assert field.check("25")=='25'
|
||||||
|
|
||||||
|
assert field.check("25j")=='0'
|
||||||
|
|
||||||
|
field.check("25j")
|
||||||
|
|
||||||
|
assert field.error==True
|
||||||
|
|
||||||
|
def test_test_floadfield():
|
||||||
|
|
||||||
|
field=corefields.FloatField('int')
|
||||||
|
|
||||||
|
assert field.check('1,5')=='1.5'
|
||||||
|
|
||||||
|
assert field.check('1.5456')=='1.5456'
|
||||||
|
|
||||||
|
assert field.check('1.5456tet')=='0'
|
||||||
|
|
||||||
|
def test_test_htmlfield():
|
||||||
|
|
||||||
|
field=corefields.HTMLField('html')
|
||||||
|
|
||||||
|
assert field.check('<p>"trial"</p><script></script>')=='"trial"'
|
||||||
|
|
||||||
|
field.escape=True
|
||||||
|
|
||||||
|
assert field.check('<p>"trial"</p><script></script>')=='"trial"'
|
||||||
|
|
||||||
|
field.trusted_tags=['p']
|
||||||
|
|
||||||
|
assert field.check('<p>"trial"</p><script></script>')=='<p>"trial"</p>'
|
||||||
|
|
||||||
|
#field.
|
||||||
|
def test_test_foreignkeyfield():
|
||||||
|
|
||||||
|
field=corefields.ForeignKeyField('foreign', ExampleModel())
|
||||||
|
|
||||||
|
assert field.check('dsd')=='NULL'
|
||||||
|
|
||||||
|
def test_test_booleanfield():
|
||||||
|
|
||||||
|
field=corefields.BooleanField('bool')
|
||||||
|
|
||||||
|
assert field.check('25')=='0'
|
||||||
|
|
||||||
|
assert field.error==True
|
||||||
|
|
||||||
|
|
||||||
|
def test_test_arrayfield():
|
||||||
|
|
||||||
|
field=ArrayField('array', corefields.IntegerField('item'))
|
||||||
|
|
||||||
|
assert field.check([1, 2, 3])=='["1", "2", "3"]'
|
||||||
|
|
||||||
|
assert field.check([1, 2, '3t'])=='["1", "2", "0"]'
|
||||||
|
|
||||||
|
assert field.error==True
|
||||||
|
|
||||||
|
def test_test_colorfield():
|
||||||
|
|
||||||
|
field=ColorField('color')
|
||||||
|
|
||||||
|
assert field.check('#ff12f5')==0xff12f5
|
||||||
|
|
||||||
|
assert field.check('#ff12f54')==0
|
||||||
|
|
||||||
|
assert field.get_hex_color(0xaf42f5)=='#af42f5'
|
||||||
|
|
||||||
|
def test_test_datefield():
|
||||||
|
|
||||||
|
datetime.timezone='Europe/Madrid'
|
||||||
|
|
||||||
|
datetime.set_timezone()
|
||||||
|
|
||||||
|
field=DateField('date')
|
||||||
|
|
||||||
|
field.utc=False
|
||||||
|
|
||||||
|
assert field.check('20201234121011')==''
|
||||||
|
|
||||||
|
assert field.check('20201230121011')=='20201230121011'
|
||||||
|
|
||||||
|
def test_test_datetimefield():
|
||||||
|
|
||||||
|
datetime.timezone='Europe/Madrid'
|
||||||
|
|
||||||
|
datetime.set_timezone()
|
||||||
|
|
||||||
|
field=DateTimeField('date')
|
||||||
|
|
||||||
|
field.utc=False
|
||||||
|
|
||||||
|
assert field.check('20201230121011')=='2020-12-30 12:10:11'
|
||||||
|
|
||||||
|
assert field.check('20201290121011')==''
|
||||||
|
|
||||||
|
def test_test_dictfield():
|
||||||
|
|
||||||
|
field=DictField('dict', corefields.IntegerField('item'))
|
||||||
|
|
||||||
|
assert field.check({'come': '5'})=='{"come": "5"}'
|
||||||
|
|
||||||
|
assert field.check({'come': '5t'})=='{"come": "0"}'
|
||||||
|
|
||||||
|
assert field.error==True
|
||||||
Loading…
Add table
Add a link
Reference in a new issue