mirror of https://github.com/interlegis/sigi.git
Marcio Mazza
10 years ago
6 changed files with 453 additions and 412 deletions
@ -0,0 +1,2 @@ |
|||||
|
[pytest] |
||||
|
DJANGO_SETTINGS_MODULE=sigi.settings.test |
@ -0,0 +1,8 @@ |
|||||
|
# py.test precisa deste arquivo para que o projeto seja instalado no virtualenv com: |
||||
|
# "pip install -e ." |
||||
|
# vide http://pytest-django.readthedocs.org/en/latest/faq.html#i-see-an-error-saying-could-not-import-myproject-settings |
||||
|
# |
||||
|
from distutils.core import setup |
||||
|
|
||||
|
|
||||
|
setup(name='sigi', version='2.x') |
@ -0,0 +1,166 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
import pytest |
||||
|
|
||||
|
from smart_if import Or, And, Equals, Greater, GreaterOrEqual, In, IfParser |
||||
|
|
||||
|
|
||||
|
class TestVar(object): |
||||
|
|
||||
|
""" |
||||
|
A basic self-resolvable object similar to a Django template variable. Used |
||||
|
to assist with tests. |
||||
|
""" |
||||
|
|
||||
|
def __init__(self, value): |
||||
|
self.value = value |
||||
|
|
||||
|
def resolve(self, context): |
||||
|
return self.value |
||||
|
|
||||
|
|
||||
|
class TestIfParser(IfParser): |
||||
|
|
||||
|
def create_var(self, value): |
||||
|
return TestVar(value) |
||||
|
|
||||
|
|
||||
|
class ValueHolder(object): |
||||
|
pass |
||||
|
|
||||
|
VALORES = ValueHolder() |
||||
|
VALORES.true = TestVar(True) |
||||
|
VALORES.false = TestVar(False) |
||||
|
VALORES.high = TestVar(9000) |
||||
|
VALORES.low = TestVar(1) |
||||
|
|
||||
|
|
||||
|
def assertCalc(calc, context=None): |
||||
|
""" |
||||
|
Test a calculation is True, also checking the inverse "negate" case. |
||||
|
""" |
||||
|
context = context or {} |
||||
|
assert calc.resolve(context) |
||||
|
calc.negate = not calc.negate |
||||
|
assert not calc.resolve(context) |
||||
|
|
||||
|
|
||||
|
def assertCalcFalse(calc, context=None): |
||||
|
""" |
||||
|
Test a calculation is False, also checking the inverse "negate" case. |
||||
|
""" |
||||
|
context = context or {} |
||||
|
assert not calc.resolve(context) |
||||
|
calc.negate = not calc.negate |
||||
|
assert calc.resolve(context) |
||||
|
|
||||
|
|
||||
|
def test_or(): |
||||
|
assertCalc(Or(VALORES.true)) |
||||
|
assertCalcFalse(Or(VALORES.false)) |
||||
|
assertCalc(Or(VALORES.true, VALORES.true)) |
||||
|
assertCalc(Or(VALORES.true, VALORES.false)) |
||||
|
assertCalc(Or(VALORES.false, VALORES.true)) |
||||
|
assertCalcFalse(Or(VALORES.false, VALORES.false)) |
||||
|
|
||||
|
|
||||
|
def test_and(): |
||||
|
assertCalc(And(VALORES.true, VALORES.true)) |
||||
|
assertCalcFalse(And(VALORES.true, VALORES.false)) |
||||
|
assertCalcFalse(And(VALORES.false, VALORES.true)) |
||||
|
assertCalcFalse(And(VALORES.false, VALORES.false)) |
||||
|
|
||||
|
|
||||
|
def test_equals(): |
||||
|
assertCalc(Equals(VALORES.low, VALORES.low)) |
||||
|
assertCalcFalse(Equals(VALORES.low, VALORES.high)) |
||||
|
|
||||
|
|
||||
|
def test_greater(): |
||||
|
assertCalc(Greater(VALORES.high, VALORES.low)) |
||||
|
assertCalcFalse(Greater(VALORES.low, VALORES.low)) |
||||
|
assertCalcFalse(Greater(VALORES.low, VALORES.high)) |
||||
|
|
||||
|
|
||||
|
def test_greater_or_equal(): |
||||
|
assertCalc(GreaterOrEqual(VALORES.high, VALORES.low)) |
||||
|
assertCalc(GreaterOrEqual(VALORES.low, VALORES.low)) |
||||
|
assertCalcFalse(GreaterOrEqual(VALORES.low, VALORES.high)) |
||||
|
|
||||
|
|
||||
|
def test_in(): |
||||
|
list_ = TestVar([1, 2, 3]) |
||||
|
invalid_list = TestVar(None) |
||||
|
assertCalc(In(VALORES.low, list_)) |
||||
|
assertCalcFalse(In(VALORES.low, invalid_list)) |
||||
|
|
||||
|
|
||||
|
def test_parse_bits(): |
||||
|
var = TestIfParser([True]).parse() |
||||
|
assert var.resolve({}) |
||||
|
var = TestIfParser([False]).parse() |
||||
|
assert not var.resolve({}) |
||||
|
|
||||
|
var = TestIfParser([False, 'or', True]).parse() |
||||
|
assert var.resolve({}) |
||||
|
|
||||
|
var = TestIfParser([False, 'and', True]).parse() |
||||
|
assert not var.resolve({}) |
||||
|
|
||||
|
var = TestIfParser(['not', False, 'and', 'not', False]).parse() |
||||
|
assert var.resolve({}) |
||||
|
|
||||
|
var = TestIfParser(['not', 'not', True]).parse() |
||||
|
assert var.resolve({}) |
||||
|
|
||||
|
var = TestIfParser([1, '=', 1]).parse() |
||||
|
assert var.resolve({}) |
||||
|
|
||||
|
var = TestIfParser([1, 'not', '=', 1]).parse() |
||||
|
assert not var.resolve({}) |
||||
|
|
||||
|
var = TestIfParser([1, 'not', 'not', '=', 1]).parse() |
||||
|
assert var.resolve({}) |
||||
|
|
||||
|
var = TestIfParser([1, '!=', 1]).parse() |
||||
|
assert not var.resolve({}) |
||||
|
|
||||
|
var = TestIfParser([3, '>', 2]).parse() |
||||
|
assert var.resolve({}) |
||||
|
|
||||
|
var = TestIfParser([1, '<', 2]).parse() |
||||
|
assert var.resolve({}) |
||||
|
|
||||
|
var = TestIfParser([2, 'not', 'in', [2, 3]]).parse() |
||||
|
assert not var.resolve({}) |
||||
|
|
||||
|
var = TestIfParser([1, 'or', 1, '=', 2]).parse() |
||||
|
assert var.resolve({}) |
||||
|
|
||||
|
|
||||
|
def test_boolean(): |
||||
|
var = TestIfParser([True, 'and', True, 'and', True]).parse() |
||||
|
assert var.resolve({}) |
||||
|
var = TestIfParser([False, 'or', False, 'or', True]).parse() |
||||
|
assert var.resolve({}) |
||||
|
var = TestIfParser([True, 'and', False, 'or', True]).parse() |
||||
|
assert var.resolve({}) |
||||
|
var = TestIfParser([False, 'or', True, 'and', True]).parse() |
||||
|
assert var.resolve({}) |
||||
|
|
||||
|
var = TestIfParser([True, 'and', True, 'and', False]).parse() |
||||
|
assert not var.resolve({}) |
||||
|
var = TestIfParser([False, 'or', False, 'or', False]).parse() |
||||
|
assert not var.resolve({}) |
||||
|
var = TestIfParser([False, 'or', True, 'and', False]).parse() |
||||
|
assert not var.resolve({}) |
||||
|
var = TestIfParser([False, 'and', True, 'or', False]).parse() |
||||
|
assert not var.resolve({}) |
||||
|
|
||||
|
|
||||
|
def test_invalid(): |
||||
|
pytest.raises(ValueError, TestIfParser(['not']).parse) |
||||
|
pytest.raises(ValueError, TestIfParser(['==']).parse) |
||||
|
pytest.raises(ValueError, TestIfParser([1, 'in']).parse) |
||||
|
pytest.raises(ValueError, TestIfParser([1, '>', 'in']).parse) |
||||
|
pytest.raises(ValueError, TestIfParser([1, '==', 'not', 'not']).parse) |
||||
|
pytest.raises(ValueError, TestIfParser([1, 2]).parse) |
@ -0,0 +1,16 @@ |
|||||
|
from base import * |
||||
|
|
||||
|
|
||||
|
# SECURITY WARNING: keep the secret key used in production secret! |
||||
|
SECRET_KEY = '0$ip1fb5xtq%a=)-k_4r^(#jn0t^@+*^kihkxkozg-mip7+w3+' |
||||
|
|
||||
|
DATABASES = { |
||||
|
'default': { |
||||
|
'ENGINE': 'django.db.backends.postgresql_psycopg2', |
||||
|
'NAME': 'sigi_test', |
||||
|
'USER': 'sigi', |
||||
|
'PASSWORD': 'sigi', |
||||
|
'HOST': 'localhost', |
||||
|
'PORT': '5432', |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue