Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
0bf1222
Separate test_countries fixtures and make them accessible to others t…
Jan 19, 2021
88adca2
Refactor test_simulation_builder fixtures
Jan 19, 2021
1cd22b7
Add new fixtures in conftest
Jan 19, 2021
542490f
Introduce simulator_builder fixture in test_simulations
Jan 19, 2021
47af3cf
Create single fixture
Jan 19, 2021
91b0735
Refactor test_formulas fixtures
Jan 19, 2021
ffc1d1c
flake8
benjello Jan 20, 2021
361941b
Add single fixture to test_calculate_output
Jan 20, 2021
f4aff8c
Add single fixture to test_entities
Jan 20, 2021
f5debc3
Add couple to conftest
Jan 20, 2021
65ac243
Add couple to dump_restore
Jan 20, 2021
31d53aa
Add couple to test_entities
Jan 20, 2021
cb48a5d
Add couple to test_simulation_builder
Jan 20, 2021
be404c0
Add simulation_single simulation_couple
Jan 20, 2021
81894f9
Fix undefined variables
Jan 20, 2021
eca7b51
Add single to test_calculate_ and fix fix F401
Jan 20, 2021
ccabe80
Add simulation_single_with_variables
Jan 20, 2021
de07a0d
Add simulation to conftest
Jan 20, 2021
2088980
Fix F401 on test_cycles
Jan 20, 2021
47dc01f
Add simulation_with_variables
Jan 20, 2021
1cdba50
Add conftest fixture at test_axes
Jan 21, 2021
d8b2a42
Remove unnecessary tax_benefit_system fixture in test_countries
Jan 21, 2021
d141e9c
Add make_simulation_from_yaml in test_entities
Jan 21, 2021
6cf2e17
Add make_simulation_from_entities in test_entities
Jan 21, 2021
a09bd59
Add case and ages_case fixtures in test_entities
Jan 21, 2021
35fe22c
Add period and year_period fixtures in test_entities
Jan 21, 2021
5c70aa5
Fix typo
Jan 21, 2021
1bae580
Fix flake8 errors
Jan 21, 2021
e4e8eda
Add make_simulation_from_yaml in test_axes
Jan 21, 2021
fb9089f
flake8
benjello Jan 22, 2021
af2af13
Add tax_benefit_system fixtures to test_extensions
Jan 22, 2021
9244c4e
Refactor fixtures in test_opt_out_cache
Jan 22, 2021
ab640b9
Refactor fixtures in test_parameters add tmp_path
Jan 22, 2021
bf03583
Refactor fixtures in test_reform
Jan 22, 2021
f77117b
Use simulations fixtures in test_simulation
Jan 22, 2021
a162adb
Refactor with the make_variable fixture
Jan 23, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
197 changes: 197 additions & 0 deletions tests/core/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
# -*- coding: utf-8 -*-

from pytest import fixture

from openfisca_country_template import CountryTaxBenefitSystem
from openfisca_country_template.entities import * # noqa analysis:ignore

from openfisca_core.simulation_builder import SimulationBuilder
from openfisca_core.tools.test_runner import yaml
from openfisca_core.variables import Variable
from openfisca_core.periods import ETERNITY
from openfisca_core.entities import Entity, GroupEntity
from openfisca_core.model_api import * # noqa analysis:ignore


# PERIODS

@fixture
def period():
return "2016-01"


# ENTITIES


class TestVariable(Variable):
definition_period = ETERNITY
value_type = float

def __init__(self, entity):
self.__class__.entity = entity
super().__init__()


@fixture
def persons():
class TestPersonEntity(Entity):
def get_variable(self, variable_name):
result = TestVariable(self)
result.name = variable_name
return result

def check_variable_defined_for_entity(self, variable_name):
return True

return TestPersonEntity("person", "persons", "", "")


@fixture
def group_entity():
class Household(GroupEntity):
def get_variable(self, variable_name):
result = TestVariable(self)
result.name = variable_name
return result

def check_variable_defined_for_entity(self, variable_name):
return True

roles = [{
'key': 'parent',
'plural': 'parents',
'max': 2
}, {
'key': 'child',
'plural': 'children'
}]

return Household("household", "households", "", "", roles)


@fixture
def single():
return {
"persons": {
"Alicia": {
"birth": {
"2017-01": None
},
"disposable_income": {
"2017-01": None
}
}
},
"households": {
"_": {
"parents": ["Alicia"]
}
}
}


@fixture
def couple():
return {
"persons": {
"Alicia": {
"birth": {
"ETERNITY": "1980-01-01"
},
"salary": {
"2017-01": 4000
},
"disposable_income": {
"2017-01": None
}
},
"Javier": {
"birth": {
"ETERNITY": "1984-01-01"
},
"salary": {
"2017-01": 2500
},
"disposable_income": {
"2017-01": None
}
}
},
"households": {
"_": {
"parents": ["Alicia", "Javier"],
"total_benefits": {
"2017-01": None
},
"total_taxes": {
"2017-01": None
}
}
}
}

# TAX BENEFIt SYSTEMS


@fixture
def tax_benefit_system():
return CountryTaxBenefitSystem()
Comment on lines +136 to +138
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
@fixture
def tax_benefit_system():
return CountryTaxBenefitSystem()
@fixture
def tax_benefit_system(scope = "module"):
return CountryTaxBenefitSystem()
@fixture
def isolated_tax_benefit_system():
return CountryTaxBenefitSystem()



# SIMULATIONS


@fixture
def simulation_builder():
return SimulationBuilder()


@fixture
def simulation(tax_benefit_system, simulation_builder):
return SimulationBuilder().build_default_simulation(tax_benefit_system)


@fixture
def make_simulation_from_entities(tax_benefit_system, simulation_builder):
def _make_simulation_from_entities(entities):
return simulation_builder.build_from_entities(tax_benefit_system, entities)
return _make_simulation_from_entities


@fixture
def make_simulation_from_tbs_and_variables(simulation_builder, period):
def _make_simulation_from_variables_and_tbs(tbs, variables):
simulation_builder.default_period = period
return simulation_builder.build_from_variables(tbs, variables)
return _make_simulation_from_variables_and_tbs


@fixture
def make_simulation_from_yaml(tax_benefit_system, simulation_builder):
def _make_simulation_from_yaml(simulation_yaml):
return simulation_builder.build_from_dict(tax_benefit_system, yaml.safe_load(simulation_yaml))
return _make_simulation_from_yaml


@fixture
def simulation_single(make_simulation_from_entities, single):
return make_simulation_from_entities(single)


@fixture
def simulation_couple(make_simulation_from_entities, couple):
return make_simulation_from_entities(couple)


# VARIABLES


@fixture
def make_variable():
def _make_variable(name, **new_methods_and_attrs):
methods_and_attrs = {}
default = dict(value_type = int, entity = Person, definition_period = MONTH)
methods_and_attrs.update(default)
methods_and_attrs.update(new_methods_and_attrs)
return type(name, (Variable, ), methods_and_attrs)
return _make_variable
10 changes: 4 additions & 6 deletions tests/core/parameter_validation/test_parameter_clone.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
# -*- coding: utf-8 -*-
from ..test_countries import tax_benefit_system

import os
from openfisca_core.parameters import ParameterNode
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
Expand All @@ -20,7 +18,7 @@ def test_clone():
assert id(clone.node1.param) != id(parameters.node1.param)


def test_clone_parameter():
def test_clone_parameter(tax_benefit_system):

param = tax_benefit_system.parameters.taxes.income_tax_rate
clone = param.clone()
Expand All @@ -32,7 +30,7 @@ def test_clone_parameter():
assert clone.values_list == param.values_list


def test_clone_parameter_node():
def test_clone_parameter_node(tax_benefit_system):
node = tax_benefit_system.parameters.taxes
clone = node.clone()

Expand All @@ -41,15 +39,15 @@ def test_clone_parameter_node():
assert clone.children['income_tax_rate'] is not node.children['income_tax_rate']


def test_clone_scale():
def test_clone_scale(tax_benefit_system):
scale = tax_benefit_system.parameters.taxes.social_security_contribution
clone = scale.clone()

assert clone.brackets[0] is not scale.brackets[0]
assert clone.brackets[0].rate is not scale.brackets[0].rate


def test_deep_edit():
def test_deep_edit(tax_benefit_system):
parameters = tax_benefit_system.parameters
clone = parameters.clone()

Expand Down
19 changes: 4 additions & 15 deletions tests/core/test_axes.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,5 @@
# -*- coding: utf-8 -*-
from pytest import fixture, approx

from openfisca_core.simulation_builder import SimulationBuilder
from .test_simulation_builder import * # noqa: F401


@fixture
def simulation_builder():
return SimulationBuilder()
from pytest import approx


def test_add_axis_on_persons(simulation_builder, persons):
Expand Down Expand Up @@ -134,9 +126,8 @@ def test_add_perpendicular_axes(simulation_builder, persons):
# Integration test


def test_simulation_with_axes(simulation_builder):
from .test_countries import tax_benefit_system
input_yaml = """
def test_simulation_with_axes(make_simulation_from_yaml):
simulation = make_simulation_from_yaml("""
persons:
Alicia: {salary: {2018-11: 0}}
Javier: {}
Expand All @@ -153,8 +144,6 @@ def test_simulation_with_axes(simulation_builder):
min: 0
max: 3000
period: 2018-11
"""
data = yaml.safe_load(input_yaml)
simulation = simulation_builder.build_from_dict(tax_benefit_system, data)
""")
assert simulation.get_array('salary', '2018-11') == approx([0, 0, 0, 0, 0, 0])
assert simulation.get_array('rent', '2018-11') == approx([0, 0, 3000, 0])
72 changes: 30 additions & 42 deletions tests/core/test_calculate_output.py
Original file line number Diff line number Diff line change
@@ -1,59 +1,47 @@
from openfisca_core.model_api import * # noqa analysis:ignore
from openfisca_core.simulation_builder import SimulationBuilder
from openfisca_core.tools import assert_near

from openfisca_country_template import CountryTaxBenefitSystem
from openfisca_country_template.entities import * # noqa analysis:ignore
from openfisca_country_template.situation_examples import single

from pytest import fixture, raises


@fixture
def simulation():
return SimulationBuilder().build_from_entities(tax_benefit_system, single)
from openfisca_core.tools import assert_near
from openfisca_core.simulations import calculate_output_add
from openfisca_core.simulations import calculate_output_divide
from openfisca_core.periods import YEAR


class simple_variable(Variable):
entity = Person
definition_period = MONTH
value_type = int
@fixture
def simple_variable(make_variable):
return make_variable('simple_variable')


class variable_with_calculate_output_add(Variable):
entity = Person
definition_period = MONTH
value_type = int
calculate_output = calculate_output_add
@fixture
def variable_with_calculate_output_add(make_variable):
return make_variable('variable_with_calculate_output_add', calculate_output = calculate_output_add)


class variable_with_calculate_output_divide(Variable):
entity = Person
definition_period = YEAR
value_type = int
calculate_output = calculate_output_divide
@fixture
def variable_with_calculate_output_divide(make_variable):
return make_variable('variable_with_calculate_output_divide',
definition_period = YEAR,
calculate_output = calculate_output_divide)


tax_benefit_system = CountryTaxBenefitSystem()
tax_benefit_system.add_variables(
simple_variable,
variable_with_calculate_output_add,
variable_with_calculate_output_divide
)
@fixture
def simulation_single_with_variables(simulation_builder, tax_benefit_system, single,
simple_variable, variable_with_calculate_output_add, variable_with_calculate_output_divide):
tax_benefit_system.add_variables(simple_variable, variable_with_calculate_output_add, variable_with_calculate_output_divide)
return simulation_builder.build_from_entities(tax_benefit_system, single)


def test_calculate_output_default(simulation):
def test_calculate_output_default(simulation_single_with_variables):
with raises(ValueError):
simulation.calculate_output('simple_variable', 2017)
simulation_single_with_variables.calculate_output('simple_variable', 2017)


def test_calculate_output_add(simulation):
simulation.set_input('variable_with_calculate_output_add', '2017-01', [10])
simulation.set_input('variable_with_calculate_output_add', '2017-05', [20])
simulation.set_input('variable_with_calculate_output_add', '2017-12', [70])
assert_near(simulation.calculate_output('variable_with_calculate_output_add', 2017), 100)
def test_calculate_output_add(simulation_single_with_variables):
simulation_single_with_variables.set_input('variable_with_calculate_output_add', '2017-01', [10])
simulation_single_with_variables.set_input('variable_with_calculate_output_add', '2017-05', [20])
simulation_single_with_variables.set_input('variable_with_calculate_output_add', '2017-12', [70])
assert_near(simulation_single_with_variables.calculate_output('variable_with_calculate_output_add', 2017), 100)


def test_calculate_output_divide(simulation):
simulation.set_input('variable_with_calculate_output_divide', 2017, [12000])
assert_near(simulation.calculate_output('variable_with_calculate_output_divide', '2017-06'), 1000)
def test_calculate_output_divide(simulation_single_with_variables):
simulation_single_with_variables.set_input('variable_with_calculate_output_divide', 2017, [12000])
assert_near(simulation_single_with_variables.calculate_output('variable_with_calculate_output_divide', '2017-06'), 1000)
Loading