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)
示例#3
0
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
示例#4
0
 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)])
示例#5
0
 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')
示例#7
0
 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}
示例#8
0
 def _data_types(self):
     return {dt.tag: dt for dt in get_fixture_data_types(self.domain)}
示例#9
0
 def test_fixtures_created(self):
     data_types = get_fixture_data_types(DOMAIN)
     self.assertEqual(len(data_types), 6)
示例#10
0
 def by_domain(cls, domain):
     from corehq.apps.fixtures.dbaccessors import get_fixture_data_types
     return get_fixture_data_types(domain)
示例#11
0
    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()
                         ]))