예제 #1
0
def load_file(file_name, session, field_names):
    data_path = os.path.join(os.path.dirname(__file__), 'data', file_name)

    table_name = file_name.replace('.csv', '').title().replace('_', '')

    table = ContinuanceTable(name=table_name)

    with open(data_path, newline='') as csvfile:
        table_rows = csv.reader(csvfile)
        for row in table_rows:
            if row[0] != 'Maximum':
                fields = {}

                if row[0] != 'Unlimited':
                    if row[0] == '0':
                        table.membership = row[1]
                    fields = {}
                    for index, value in enumerate(field_names):
                        fields[value] = row[index]
                    table.add_value(session, **fields)
                else:
                    table.avg_cost = row[2]
                    for index, value in enumerate(field_names):
                        fields[value] = row[index]
                    fields['maximum'] = av.MAX_VALUE
                    table.add_value(session, **fields)

        session.add(table)
        session.commit()
 def test_add_value(self):
     self.test_continuance_table = ContinuanceTable(name='Test', membership=1000, avg_cost=1000)
     self.test_continuance_table.add_value(self.session, maximum=0, membership=1000, maxed_value=0)
     table = self.session.query(ContinuanceTable).filter(ContinuanceTable.name == 'Test').one()
     assert self.session.query(ContinuanceTableRow).filter(ContinuanceTableRow.continuance_table_id == table.id,
                                                         ContinuanceTableRow.maximum == 0).count() == 1, \
         'Value was not added'
def check_set_tier_separate(test_tier_array):
    test_health_plan = create_plan(test_tier_array[0], separate=True)

    calc._set_metal_tier(test_health_plan)
    integrated_table = ContinuanceTable.find(session, test_tier_array[1] + "Integrated")
    medical_table = ContinuanceTable.find(session, test_tier_array[1] + "Medical")
    assert (
        calc._integrated_table == integrated_table
    ), "Integrated Table is not correct for tier {0}, actual {1} expected {2}".format(
        test_tier_array[0], calc._integrated_table, integrated_table
    )
    assert (
        calc._medical_table == medical_table
    ), "Medical Table is not correct for tier {0}, actual {1} expected {2}".format(
        test_tier_array[0], calc._integrated_table, medical_table
    )
    def _set_metal_tier(self, healthplan):
        if healthplan.tier == Tier.na or healthplan.tier == None:
            tier_name = 'Platinum'
        else:
            tier_name = healthplan.tier.name.capitalize()

        self.__separate = (healthplan.medical_deductible != None)

        self._integrated_table = ContinuanceTable.find(self.__session, tier_name + 'Integrated')
        if self.__separate:
            self._medical_table = ContinuanceTable.find(self.__session, tier_name + 'Medical')
            self._drug_table = ContinuanceTable.find(self.__session, tier_name + 'Drug')
        else:
            self._medical_table = self._integrated_table
            self._drug_table = self._integrated_table
        self._determine_total_cost()
def check_set_tier_separate(test_tier_array):
    test_health_plan = create_plan(test_tier_array[0], separate=True)

    calc._set_metal_tier(test_health_plan)
    integrated_table = ContinuanceTable.find(session,
                                             test_tier_array[1] + 'Integrated')
    medical_table = ContinuanceTable.find(session,
                                          test_tier_array[1] + 'Medical')
    assert calc._integrated_table == integrated_table, \
        "Integrated Table is not correct for tier {0}, actual {1} expected {2}".format(test_tier_array[0],
                                                                                       calc._integrated_table,
                                                                                       integrated_table)
    assert calc._medical_table == medical_table, \
        "Medical Table is not correct for tier {0}, actual {1} expected {2}".format(test_tier_array[0],
                                                                                   calc._integrated_table,
                                                                                   medical_table)
 def test_find(self):
     test_table1 = ContinuanceTable(name='Test1', membership=1000, avg_cost=1000)
     test_table2 = ContinuanceTable(name='Test2', membership=1500, avg_cost=100)
     self.session.add(test_table1)
     self.session.add(test_table2)
     self.session.commit()
     found_table = ContinuanceTable.find(self.session, "Test1")
     assert found_table.id == test_table1.id, 'Table was not found'
예제 #7
0
def load_file(file_name, session, field_names):
    data_path = os.path.join(os.path.dirname(__file__), "data", file_name)

    table_name = file_name.replace(".csv", "").title().replace("_", "")

    table = ContinuanceTable(name=table_name)

    with open(data_path, newline="") as csvfile:
        table_rows = csv.reader(csvfile)
        for row in table_rows:
            if row[0] != "Maximum":
                fields = {}

                if row[0] != "Unlimited":
                    if row[0] == "0":
                        table.membership = row[1]
                    fields = {}
                    for index, value in enumerate(field_names):
                        fields[value] = row[index]
                    table.add_value(session, **fields)
                else:
                    table.avg_cost = row[2]
                    for index, value in enumerate(field_names):
                        fields[value] = row[index]
                    fields["maximum"] = av.MAX_VALUE
                    table.add_value(session, **fields)

        session.add(table)
        session.commit()
    def _set_metal_tier(self, healthplan):
        if healthplan.tier == Tier.na or healthplan.tier == None:
            tier_name = 'Platinum'
        else:
            tier_name = healthplan.tier.name.capitalize()

        self.__separate = (healthplan.medical_deductible != None)

        self._integrated_table = ContinuanceTable.find(
            self.__session, tier_name + 'Integrated')
        if self.__separate:
            self._medical_table = ContinuanceTable.find(
                self.__session, tier_name + 'Medical')
            self._drug_table = ContinuanceTable.find(self.__session,
                                                     tier_name + 'Drug')
        else:
            self._medical_table = self._integrated_table
            self._drug_table = self._integrated_table
        self._determine_total_cost()
 def test_slice_values_preventive(self):
     self.test_continuance_table = ContinuanceTable(name='Test', membership=1000, avg_cost=1000)
     self.test_continuance_table.add_value(self.session, maximum=0, membership=1000, maxed_value=0,
                                           preventive_care_value=0)
     self.test_continuance_table.add_value(self.session, maximum=500, membership=500, maxed_value=450,
                                           preventive_care_value=50)
     self.test_continuance_table.add_value(self.session, maximum=1000, membership=250, maxed_value=750,
                                           preventive_care_value=75)
     test_values = [[500, None, [50]], [600, None, [55]], [1000, 500, [25]], [1000, 600, [20]], [600, 500, [5]]]
     for value in test_values:
         self.check_continuance_value(value, ['preventive_care_value'])
 def test_slice_values_multiple_columns(self):
     self.test_continuance_table = ContinuanceTable(name='Test', membership=1000, avg_cost=1000)
     self.test_continuance_table.add_value(self.session, maximum=0, membership=1000, maxed_value=0, generic_value=0,
                                           preferred_value=0, non_preferred_value=0, specialty_value=0)
     self.test_continuance_table.add_value(self.session, maximum=500, membership=500, maxed_value=450,
                                           generic_value=15, preferred_value=5, non_preferred_value=3,
                                           specialty_value=0.1)
     self.test_continuance_table.add_value(self.session, maximum=1000, membership=1000, maxed_value=750,
                                           generic_value=25, preferred_value=7, non_preferred_value=5,
                                           specialty_value=5)
     test_values = [[500, None, [15, 5, 3, 0.1]],
                    [600, None, [17, 5.4, 3.4, 1.08]],
                    [1000, 500, [10, 2, 2, 4.9]],
                    [1000, 600, [8, 1.6, 1.6, 3.92]],
                    [600, 500, [2, .4, .4, .98]]]
     for value in test_values:
         self.check_continuance_value(value, ['generic_value', 'preferred_value', 'non_preferred_value',
                                      'specialty_value'])
class TestContinuanceTable(BaseDataTest):

    def setUp(self):
        super(TestContinuanceTable, self).setUp()
        Base.metadata.create_all(self.engine)

    def tearDown(self):
        Base.metadata.drop_all(self.engine)

    def check_continuance_value(self, test_values, columns=None):
        if test_values[1] is None:
            if columns is None:
                slice_value = self.test_continuance_table.slice(self.session,
                                                                test_values[0])
            else:
                slice_value = (self.test_continuance_table.
                               slice(self.session,
                                     test_values[0],
                                     columns=columns))
        else:
            if columns is None:
                slice_value = self.test_continuance_table.slice(self.session,
                                                                test_values[0],
                                                                test_values[1])
            else:
                slice_value = (self.test_continuance_table.
                               slice(self.session,
                                     test_values[0],
                                     test_values[1],
                                     columns=columns))

        for test, expected in zip(slice_value, test_values[2]):
            assert_almost_equal(test,
                                expected,
                                2,
                                "Slice with value is not correct. Actual {0} "
                                "should be {1}".format(test, expected))

    def check_inverse(self, test_values):
        inverse = self.test_continuance_table.inverse(self.session,
                                                      test_values[0])
        assert_almost_equal(inverse,
                            test_values[1],
                            2,
                            "Inverse is not correct. Should be {0} is {1}".
                            format(test_values[1], inverse))

    def create_basic_table(self):
        self.test_continuance_table = ContinuanceTable(name='Test', membership=1000, avg_cost=1000)
        self.test_continuance_table.add_value(self.session, maximum=0, membership=1000, maxed_value=0)
        self.test_continuance_table.add_value(self.session, maximum=500, membership=500, maxed_value=450)
        self.test_continuance_table.add_value(self.session, maximum=1000, membership=250, maxed_value=750)

    # Class methods
    def test_find(self):
        test_table1 = ContinuanceTable(name='Test1', membership=1000, avg_cost=1000)
        test_table2 = ContinuanceTable(name='Test2', membership=1500, avg_cost=100)
        self.session.add(test_table1)
        self.session.add(test_table2)
        self.session.commit()
        found_table = ContinuanceTable.find(self.session, "Test1")
        assert found_table.id == test_table1.id, 'Table was not found'

    # Private methods
    def test_repr(self):
        test_table = ContinuanceTable(name='Test1')
        self.session.add(test_table)
        self.session.commit()
        assert repr(test_table) == "<ContinuanceTable id={0}, name={1}>".format(test_table.id, test_table.name), \
            "Test representation not correct, actual representation {0}".format(test_table)

    # Instance methods
    def test_add_value(self):
        self.test_continuance_table = ContinuanceTable(name='Test', membership=1000, avg_cost=1000)
        self.test_continuance_table.add_value(self.session, maximum=0, membership=1000, maxed_value=0)
        table = self.session.query(ContinuanceTable).filter(ContinuanceTable.name == 'Test').one()
        assert self.session.query(ContinuanceTableRow).filter(ContinuanceTableRow.continuance_table_id == table.id,
                                                            ContinuanceTableRow.maximum == 0).count() == 1, \
            'Value was not added'

    def test_inverse(self):
        self.create_basic_table()
        test_inverses = [[450, 500], [510, 600]]
        for inverse in test_inverses:
            self.check_inverse(inverse)

    def test_slice_values_high(self):
        self.create_basic_table()
        test_values = [[500, None, [450]], [600, None, [510]]]
        for value in test_values:
            self.check_continuance_value(value)

    def test_slice_values_high_and_low(self):
        self.create_basic_table()
        test_values = [[1000, 500, [300]], [1000, 600, [240]], [600, 500, [60]]]
        for value in test_values:
            self.check_continuance_value(value)

    def test_slice_values_preventive(self):
        self.test_continuance_table = ContinuanceTable(name='Test', membership=1000, avg_cost=1000)
        self.test_continuance_table.add_value(self.session, maximum=0, membership=1000, maxed_value=0,
                                              preventive_care_value=0)
        self.test_continuance_table.add_value(self.session, maximum=500, membership=500, maxed_value=450,
                                              preventive_care_value=50)
        self.test_continuance_table.add_value(self.session, maximum=1000, membership=250, maxed_value=750,
                                              preventive_care_value=75)
        test_values = [[500, None, [50]], [600, None, [55]], [1000, 500, [25]], [1000, 600, [20]], [600, 500, [5]]]
        for value in test_values:
            self.check_continuance_value(value, ['preventive_care_value'])

    def test_slice_values_multiple_columns(self):
        self.test_continuance_table = ContinuanceTable(name='Test', membership=1000, avg_cost=1000)
        self.test_continuance_table.add_value(self.session, maximum=0, membership=1000, maxed_value=0, generic_value=0,
                                              preferred_value=0, non_preferred_value=0, specialty_value=0)
        self.test_continuance_table.add_value(self.session, maximum=500, membership=500, maxed_value=450,
                                              generic_value=15, preferred_value=5, non_preferred_value=3,
                                              specialty_value=0.1)
        self.test_continuance_table.add_value(self.session, maximum=1000, membership=1000, maxed_value=750,
                                              generic_value=25, preferred_value=7, non_preferred_value=5,
                                              specialty_value=5)
        test_values = [[500, None, [15, 5, 3, 0.1]],
                       [600, None, [17, 5.4, 3.4, 1.08]],
                       [1000, 500, [10, 2, 2, 4.9]],
                       [1000, 600, [8, 1.6, 1.6, 3.92]],
                       [600, 500, [2, .4, .4, .98]]]
        for value in test_values:
            self.check_continuance_value(value, ['generic_value', 'preferred_value', 'non_preferred_value',
                                         'specialty_value'])
 def create_basic_table(self):
     self.test_continuance_table = ContinuanceTable(name='Test', membership=1000, avg_cost=1000)
     self.test_continuance_table.add_value(self.session, maximum=0, membership=1000, maxed_value=0)
     self.test_continuance_table.add_value(self.session, maximum=500, membership=500, maxed_value=450)
     self.test_continuance_table.add_value(self.session, maximum=1000, membership=250, maxed_value=750)