def tearDownClass(cls): for data_type in get_fixture_data_types(cls.domain): delete_fixture_items_for_data_type(cls.domain, data_type._id) for data_type in get_fixture_data_types(cls.linked_domain): delete_fixture_items_for_data_type(cls.linked_domain, data_type._id) delete_all_fixture_data_types() super().tearDownClass()
def test_get_fixture_data_types(self): expected = [ data_type.to_json() for data_type in self.data_types if data_type.domain == self.domain ] actual = [o.to_json() for o in get_fixture_data_types(self.domain)] self.assertItemsEqual(actual, expected)
def get_data_types_by_tag(domain): # Not cached, because get_fixture_data_types() is already cached data_types_by_tag = {dt.tag: dt for dt in get_fixture_data_types(domain)} for data_type in REQUIRED_FIXTURE_DATA_TYPES: assert data_type in data_types_by_tag, \ f'Domain {domain!r} is missing required lookup table {data_type!r}' return data_types_by_tag
def assert_fixtures_created(self): # Note, this is actually quite slow - might want to drop data_types = get_fixture_data_types(self.domain) self.assertEqual(len(data_types), 4) self.assertItemsEqual( [(dt.tag, count_fixture_items(self.domain, dt._id)) for dt in data_types], [('recipes', 384), ('food_list', 1130), ('food_composition_table', 1042), ('conv_factors', 2995)])
def test_fixtures_created(self): # Note, this is actually quite slow - might want to drop data_types = get_fixture_data_types(DOMAIN) self.assertEqual(len(data_types), 5) self.assertItemsEqual([(dt.tag, count_fixture_items(DOMAIN, dt._id)) for dt in data_types], [('recipes', 384), ('food_list', 1130), ('food_composition_table', 1042), ('conv_factors', 2995), ('nutrients_lookup', 152)])
def test_update_global_only(self): other_table = FixtureDataType( domain=self.domain, tag='jellyfish', is_global=False, fields=[ FixtureTypeField(field_name="genus"), FixtureTypeField(field_name="species"), ], ) other_table.save() clear_fixture_quickcache(self.domain, get_fixture_data_types(self.domain)) clear_fixture_cache(self.domain) with self.assertRaises(UnsupportedActionError): update_fixture(self.domain_link, 'jellyfish')
def _get_fixtures_for_domain(self, domain): fixtures = get_fixture_data_types(domain) return {f.tag: f for f in fixtures if f.is_global}
def _data_types(self): return {dt.tag: dt for dt in get_fixture_data_types(self.domain)}
def test_fixtures_created(self): data_types = get_fixture_data_types(DOMAIN) self.assertEqual(len(data_types), 6)
def by_domain(cls, domain): from corehq.apps.fixtures.dbaccessors import get_fixture_data_types return get_fixture_data_types(domain)
def test_update_fixture(self): self.assertEqual([], get_fixture_data_types(self.linked_domain)) # Update linked domain update_fixture(self.domain_link, self.table.tag) # Linked domain should now have master domain's table and rows linked_types = get_fixture_data_types(self.linked_domain) self.assertEqual({'moons'}, {t.tag for t in linked_types}) self.assertEqual({self.linked_domain}, {t.domain for t in linked_types}) items = get_fixture_items_for_data_type(self.linked_domain, linked_types[0]._id) self.assertEqual({self.linked_domain}, {i.domain for i in items}) self.assertEqual({linked_types[0]._id}, {i.data_type_id for i in items}) self.assertEqual([ 'Callisto', 'Europa', 'Io', 'Jupiter', 'Jupiter', 'Jupiter', ], sorted([ i.fields[field_name].field_list[0].field_value for i in items for field_name in i.fields.keys() ])) # Master domain's table and rows should be untouched master_types = get_fixture_data_types(self.domain) self.assertEqual({'moons'}, {t.tag for t in master_types}) self.assertEqual({self.domain}, {t.domain for t in master_types}) master_items = get_fixture_items_for_data_type(self.domain, master_types[0]._id) self.assertEqual([ 'Callisto', 'Europa', 'Io', 'Jupiter', 'Jupiter', 'Jupiter', ], sorted([ i.fields[field_name].field_list[0].field_value for i in master_items for field_name in i.fields.keys() ])) # Update rows in master table and re-update linked domain master_items[-1].delete() # Callisto FixtureDataItem( domain=self.domain, data_type_id=self.table._id, fields={ 'name': FieldList( field_list=[FixtureItemField(field_value='Thalassa')]), 'planet': FieldList(field_list=[FixtureItemField( field_value='Neptune')]), }, ).save() FixtureDataItem( domain=self.domain, data_type_id=self.table._id, fields={ 'name': FieldList(field_list=[FixtureItemField(field_value='Naiad')]), 'planet': FieldList(field_list=[FixtureItemField( field_value='Neptune')]), }, ).save() clear_fixture_quickcache(self.domain, get_fixture_data_types(self.domain)) clear_fixture_cache(self.domain) update_fixture(self.domain_link, self.table.tag) # Linked domain should still have one table, with the new rows linked_types = get_fixture_data_types(self.linked_domain) self.assertEqual(1, len(linked_types)) self.assertEqual('moons', linked_types[0].tag) items = get_fixture_items_for_data_type(self.linked_domain, linked_types[0]._id) self.assertEqual(4, len(items)) self.assertEqual([ 'Europa', 'Io', 'Jupiter', 'Jupiter', 'Naiad', 'Neptune', 'Neptune', 'Thalassa', ], sorted([ i.fields[field_name].field_list[0].field_value for i in items for field_name in i.fields.keys() ]))