Exemple #1
0
    def test_calc_operators(self):
        employee_spec = self.schema.specs['employee']
        employee_spec.fields["salary"] = Field("salary", "int")
        employee_spec.fields["tax"] = Field("tax", "int")

        employee_id_1 = self.schema.insert_resource('employee', {'name': 'ned', 'salary': 10, 'tax': 2}, 'employees')

        tree = parse("self.salary + self.tax", employee_spec)
        self.assertEquals(12, tree.calculate(employee_id_1))

        tree = parse("self.salary - self.tax", employee_spec)
        self.assertEquals(8, tree.calculate(employee_id_1))

        tree = parse("self.salary * self.tax", employee_spec)
        self.assertEquals(20, tree.calculate(employee_id_1))

        tree = parse("self.salary / self.tax", employee_spec)
        self.assertEquals(5, tree.calculate(employee_id_1))

        tree = parse("self.salary < self.tax", employee_spec)
        self.assertTrue(False is tree.calculate(employee_id_1))

        tree = parse("self.salary > self.tax", employee_spec)
        self.assertTrue(True is tree.calculate(employee_id_1))

        tree = parse("self.salary = self.tax", employee_spec)
        self.assertTrue(False is tree.calculate(employee_id_1))

        tree = parse("self.salary <= self.tax", employee_spec)
        self.assertTrue(False is tree.calculate(employee_id_1))

        tree = parse("self.salary >= self.tax", employee_spec)
        self.assertTrue(True is tree.calculate(employee_id_1))
Exemple #2
0
    def test_function_within_a_function(self):
        employee_spec = self.schema.specs['employee']
        employee_spec.fields["salary"] = Field("salary", "float")
        employee_spec.fields["tax"] = Field("tax", "float")

        employee_id_1 = self.schema.insert_resource('employee', {'name': 'ned', 'salary': 10.12345}, 'employees')

        tree = parse("round(round(self.salary, 4), 3)", employee_spec)
        self.assertEquals(10.123, tree.calculate(employee_id_1))
Exemple #3
0
    def test_function_call_param_list_multiple_calcs(self):
        employee_spec = self.schema.specs['employee']
        employee_spec.fields["salary"] = Field("salary", "float")
        employee_spec.fields["tax"] = Field("tax", "float")

        employee_id_1 = self.schema.insert_resource('employee', {'name': 'ned', 'salary': 10.6, 'tax': 2.4}, 'employees')

        tree = parse("round(self.salary) + round(self.tax)", employee_spec)
        self.assertEquals(13, tree.calculate(employee_id_1))
Exemple #4
0
    def test_switch_field_refs(self):
        employee_spec = self.schema.specs['employee']
        employee_spec.fields["upper_salary"] = Field("salary", "float")
        employee_spec.fields["lower_salary"] = Field("salary", "float")
        employee_spec.fields["salary_range"] = Field("salary_range", "str")

        employee_id_1 = self.schema.insert_resource('employee', {'name': 'ned', 'salary_range': 'upper', 'upper_salary': 50000, 'lower_salary': 40000}, 'employees')
        employee_id_2 = self.schema.insert_resource('employee', {'name': 'bob', 'salary_range': 'lower', 'upper_salary': 30000, 'lower_salary': 20000}, 'employees')

        tree = parse("self.salary_range -> ('upper': self.upper_salary, 'lower': self.lower_salary)", employee_spec)
        self.assertEquals(50000, tree.calculate(employee_id_1))
        self.assertEquals(20000, tree.calculate(employee_id_2))
Exemple #5
0
    def test_ternary_resource_plus_const(self):
        employee_spec = self.schema.specs['employee']
        employee_spec.fields["salary"] = Field("salary", "float")
        employee_spec.fields["tax"] = Field("tax", "float")

        employee_id_1 = self.schema.insert_resource('employee', {'name': 'ned', 'salary': 10.6, 'tax': 2.4}, 'employees')

        tree = parse("self.salary > 10 -> 11 : self.salary", employee_spec)
        self.assertEquals(11, tree.calculate(employee_id_1))

        tree = parse("self.salary < 10 -> self.tax: 12", employee_spec)
        self.assertEquals(12, tree.calculate(employee_id_1))
Exemple #6
0
    def test_ternary_condition_rhs(self):
        employee_spec = self.schema.specs['employee']
        employee_spec.fields["salary"] = Field("salary", "float")
        employee_spec.fields["tax"] = Field("tax", "float")

        employee_id_1 = self.schema.insert_resource('employee', {'name': 'ned', 'salary': 10.6, 'tax': 2.4}, 'employees')

        tree = parse("self.salary > self.tax -> 'greater' : 'wrong'", employee_spec)
        self.assertEquals('greater', tree.calculate(employee_id_1))

        tree = parse("self.salary < (self.tax + 10) -> 'less' : 'wrong'", employee_spec)
        self.assertEquals('less', tree.calculate(employee_id_1))
Exemple #7
0
    def test_ternary_condition(self):
        employee_spec = self.schema.specs['employee']
        employee_spec.fields["salary"] = Field("salary", "float")
        employee_spec.fields["tax"] = Field("tax", "float")

        employee_id_1 = self.schema.insert_resource('employee', {'name': 'ned', 'salary': 10.6, 'tax': 2.4}, 'employees')

        tree = parse("self.salary < 2 -> 5 : 10", employee_spec)
        self.assertEquals(10, tree.calculate(employee_id_1))

        tree = parse("self.salary > 10 -> 5 : 10", employee_spec)
        self.assertEquals(5, tree.calculate(employee_id_1))

        tree = parse("(self.salary + 5) > 15 -> 5 : 10", employee_spec)
        self.assertEquals(5, tree.calculate(employee_id_1))
Exemple #8
0
    def test_calc_datetime_comparison(self):
        employee_spec = self.schema.specs['employee']
        division_spec = self.schema.specs['division']

        employee_spec.fields["created"] = Field("created", "datetime")
        division_spec.fields["cutoff"] = Field("cutoff", "datetime")

        division_id_1 = self.schema.insert_resource('division', {'name': 'sales', 'cutoff': "2021-12-12"}, 'divisions')

        employee_id_1 = self.schema.insert_resource('employee', {'name': 'ned', 'created': "2021-12-01", "division": division_id_1}, 'employees')
        employee_id_2 = self.schema.insert_resource('employee', {'name': 'bob', 'created': "2021-12-14", "division": division_id_1}, 'employees')
        employee_id_3 = self.schema.insert_resource('employee', {'name': 'bil', 'created': "2021-12-24", "division": division_id_1}, 'employees')

        tree = parse("self.link_employee_division[created>self.cutoff]", division_spec)

        calculated = tree.calculate(division_id_1)
        self.assertEqual(['bob', 'bil'], [e['name'] for e in calculated])
Exemple #9
0
    def test_switch_basic(self):
        employee_spec = self.schema.specs['employee']
        employee_spec.fields["salary_range"] = Field("salary_range", "str")

        employee_id_1 = self.schema.insert_resource('employee', {'name': 'ned', 'salary_range': 'upper'}, 'employees')
        employee_id_2 = self.schema.insert_resource('employee', {'name': 'bob', 'salary_range': 'lower'}, 'employees')

        tree = parse("self.salary_range -> ('upper': 20.0)", employee_spec)
        self.assertEquals(20.0, tree.calculate(employee_id_1))
        self.assertEquals(None, tree.calculate(employee_id_2))
Exemple #10
0
    def test_calc_nones(self):
        employee_spec = self.schema.specs['employee']
        employee_spec.fields["salary"] = Field("salary", "int")
        employee_spec.fields["tax"] = Field("tax", "int")

        employee_id_1 = self.schema.insert_resource('employee', {'name': 'ned', 'salary': 10, 'tax': None}, 'employees')

        tree = parse("self.salary + self.tax", employee_spec)
        self.assertEquals(10, tree.calculate(employee_id_1))

        tree = parse("self.salary - self.tax", employee_spec)
        self.assertEquals(10, tree.calculate(employee_id_1))

        tree = parse("self.salary * self.tax", employee_spec)
        self.assertEquals(None, tree.calculate(employee_id_1))

        # Going with None instead of NaN for now
        tree = parse("self.salary / self.tax", employee_spec)
        self.assertEquals(None, tree.calculate(employee_id_1))
Exemple #11
0
    def test_extra_math(self):
        employee_spec = self.schema.specs['employee']
        employee_spec.fields["salary"] = Field("salary", "float")

        employee_id_1 = self.schema.insert_resource('employee', {'name': 'ned', 'salary': 20.1234}, 'employees')
        self.schema.insert_resource('employee', {'name': 'ned', 'salary': 10.5678}, 'employees')
        self.schema.insert_resource('employee', {'name': 'bil', 'salary': 30.7777}, 'employees')

        tree = parse("round(sum(employees.salary), 2) + round(max(employees.salary))", employee_spec)
        self.assertEquals(92.47, tree.calculate(employee_id_1))


        tree = parse("round(sum(employees[name='ned'].salary), 2) + round(max(employees.salary))", employee_spec)
        self.assertEquals(61.69, tree.calculate(employee_id_1))

        tree = parse("round(sum(employees[name='ned'].salary), 2) + round(max(employees[name='ned'].salary))", employee_spec)
        self.assertEquals(50.69, tree.calculate(employee_id_1))
Exemple #12
0
    def test_math_functions(self):
        employee_spec = self.schema.specs['employee']
        employee_spec.fields["salary"] = Field("salary", "float")

        employee_id_1 = self.schema.insert_resource('employee', {'name': 'ned', 'salary': 20}, 'employees')
        self.schema.insert_resource('employee', {'name': 'bob', 'salary': 10}, 'employees')
        self.schema.insert_resource('employee', {'name': 'bil', 'salary': 30}, 'employees')

        # max
        tree = parse("max(employees.salary)", employee_spec)
        self.assertEquals(30, tree.calculate(employee_id_1))

        # min
        tree = parse("min(employees.salary)", employee_spec)
        self.assertEquals(10, tree.calculate(employee_id_1))

        # avg
        tree = parse("average(employees.salary)", employee_spec)
        self.assertEquals(20, tree.calculate(employee_id_1))

        # sum
        tree = parse("sum(employees.salary)", employee_spec)
        self.assertEquals(60, tree.calculate(employee_id_1))
Exemple #13
0
    def test_calc_datetime(self):
        employee_spec = self.schema.specs['employee']
        division_spec = self.schema.specs['division']

        employee_spec.fields["created"] = Field("created", "datetime")

        employee_id_1 = self.schema.insert_resource('employee', {'name': 'ned', 'created': "2021-12-01"}, 'employees')
        employee_id_2 = self.schema.insert_resource('employee', {'name': 'bob', 'created': "2021-12-01"}, 'employees')
        employee_id_3 = self.schema.insert_resource('employee', {'name': 'bil', 'created': "2021-12-01"}, 'employees')

        tree = parse("self.created - days(2)", employee_spec)

        calculated = tree.calculate(employee_id_1)
        self.assertEqual(datetime(2021, 11, 29), calculated)

        tree = parse("self.created - hours(2)", employee_spec)

        calculated = tree.calculate(employee_id_1)
        self.assertEqual(datetime(2021, 11, 30, 22), calculated)

        tree = parse("self.created - minutes(2)", employee_spec)

        calculated = tree.calculate(employee_id_1)
        self.assertEqual(datetime(2021, 11, 30, 23, 58), calculated)