Added more tests

This commit is contained in:
Antonio de la Rosa 2022-05-07 19:01:48 +02:00
parent 764a4863a2
commit 912f288f67
7 changed files with 183 additions and 7 deletions

View file

@ -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:

View file

@ -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)

View file

@ -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."""

View file

@ -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"""

View file

@ -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"""

View file

@ -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

View 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>" ')=='&quot;&lt;trial&gt;&quot;'
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>')=='&quot;trial&quot;'
field.trusted_tags=['p']
assert field.check('<p>"trial"</p><script></script>')=='<p>&quot;trial&quot;</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