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