Example #1
0
 def test_recursive_indexes(self):
     c = CommCareCase(
         _id='infinite-recursion',
         name='infinite_recursion',
         type='bug',
         indices=[CommCareCaseIndex(identifier='self', referenced_type='bug', referenced_id='infinite-recursion')],
     )
     c.save()
     # this call used to fail with infinite recursion
     hierarchy = get_case_hierarchy(c, {})
     self.assertEqual(1, len(hierarchy['case_list']))
Example #2
0
    def test_recursive_indexes(self):
        factory = CaseFactory()
        [case] = factory.create_or_update_case(CaseStructure(
            case_id='infinite-recursion',
            attrs={'case_type': 'bug'},
            indices=[CaseIndex(CaseStructure(case_id='infinite-recursion'), related_type='bug')],
            walk_related=False
        ))

        # this call used to fail with infinite recursion
        hierarchy = get_case_hierarchy(case, {})
        self.assertEqual(1, len(hierarchy['case_list']))
Example #3
0
    def test_complex_index(self):
        cp = CommCareCase(
            _id='parent',
            name='parent',
            type='parent',
        )
        cp.save()

        # cases processed according to ID order so ensure that this case is
        # processed after the task case by making its ID sort after task ID
        cc = CommCareCase(
            _id='z_goal',
            name='goal',
            type='goal',
            indices=[
                CommCareCaseIndex(identifier='parent',
                                  referenced_type='parent',
                                  referenced_id='parent')
            ],
        )
        cc.save()

        cc = CommCareCase(
            _id='task1',
            name='task1',
            type='task',
            indices=[
                CommCareCaseIndex(identifier='goal',
                                  referenced_type='goal',
                                  referenced_id='z_goal'),
                CommCareCaseIndex(identifier='parent',
                                  referenced_type='parent',
                                  referenced_id='parent')
            ],
        )
        cc.save()

        # with 'ignore_relationship_types' if a case got processed along the ignored relationship first
        # then it got marked as 'seen' and would be not be processed again when it came to the correct relationship
        type_info = {
            'task': {
                'ignore_relationship_types': ['parent']
            },
        }

        hierarchy = get_case_hierarchy(cp, type_info)
        self.assertEqual(3, len(hierarchy['case_list']))
        self.assertEqual(1, len(hierarchy['child_cases']))
        self.assertEqual(2, len(hierarchy['child_cases'][0]['case_list']))
        self.assertEqual(1, len(hierarchy['child_cases'][0]['child_cases']))
Example #4
0
 def test_recursive_indexes(self):
     c = FormProcessorInterface.create_case_from_generic(GenericCommCareCase(
         id='infinite-recursion',
         name='infinite_recursion',
         type='bug',
         indices=[GenericCommCareCaseIndex(
             identifier='self',
             referenced_type='bug',
             referenced_id='infinite-recursion'
         )],
     ))
     # this call used to fail with infinite recursion
     hierarchy = get_case_hierarchy(c, {})
     self.assertEqual(1, len(hierarchy['case_list']))
Example #5
0
 def test_recursive_indexes(self):
     c = CommCareCase(
         _id='infinite-recursion',
         name='infinite_recursion',
         type='bug',
         indices=[
             CommCareCaseIndex(identifier='self',
                               referenced_type='bug',
                               referenced_id='infinite-recursion')
         ],
     )
     c.save()
     # this call used to fail with infinite recursion
     hierarchy = get_case_hierarchy(c, {})
     self.assertEqual(1, len(hierarchy['case_list']))
Example #6
0
    def test_normal_index(self):
        factory = CaseFactory()
        [cp] = factory.create_or_update_case(
            CaseStructure(case_id='parent', attrs={'case_type': 'parent'})
        )

        factory.create_or_update_case(CaseStructure(
            case_id='child',
            attrs={'case_type': 'child'},
            indices=[CaseIndex(CaseStructure(case_id='parent'), related_type='parent')],
            walk_related=False
        ))

        hierarchy = get_case_hierarchy(cp, {})
        self.assertEqual(2, len(hierarchy['case_list']))
        self.assertEqual(1, len(hierarchy['child_cases']))
Example #7
0
    def test_normal_index(self):
        factory = CaseFactory()
        [cp] = factory.create_or_update_case(
            CaseStructure(case_id='parent', attrs={'case_type': 'parent'}))

        factory.create_or_update_case(
            CaseStructure(case_id='child',
                          attrs={'case_type': 'child'},
                          indices=[
                              CaseIndex(CaseStructure(case_id='parent'),
                                        related_type='parent')
                          ],
                          walk_related=False))

        hierarchy = get_case_hierarchy(cp, {})
        self.assertEqual(2, len(hierarchy['case_list']))
        self.assertEqual(1, len(hierarchy['child_cases']))
Example #8
0
    def test_normal_index(self):
        cp = CommCareCase(
            _id='parent',
            name='parent',
            type='parent',
        )
        cp.save()

        cc = CommCareCase(
            _id='child',
            name='child',
            type='child',
            indices=[CommCareCaseIndex(identifier='parent', referenced_type='parent', referenced_id='parent')],
        )
        cc.save()

        hierarchy = get_case_hierarchy(cp, {})
        self.assertEqual(2, len(hierarchy['case_list']))
        self.assertEqual(1, len(hierarchy['child_cases']))
Example #9
0
    def test_complex_index(self):
        factory = CaseFactory()
        cp = factory.create_or_update_case(
            CaseStructure(case_id='parent', attrs={'case_type': 'parent'}))[0]

        # cases processed according to ID order so ensure that this case is
        # processed after the task case by making its ID sort after task ID
        factory.create_or_update_case(
            CaseStructure(case_id='z_goal',
                          attrs={'case_type': 'goal'},
                          indices=[
                              CaseIndex(CaseStructure(case_id='parent'),
                                        related_type='parent')
                          ],
                          walk_related=False))

        factory.create_or_update_case(
            CaseStructure(
                case_id='task1',
                attrs={'case_type': 'task'},
                indices=[
                    CaseIndex(CaseStructure(case_id='z_goal'),
                              related_type='goal',
                              identifier='goal'),
                    CaseIndex(CaseStructure(case_id='parent'),
                              related_type='parent')
                ],
                walk_related=False,
            ))

        # with 'ignore_relationship_types' if a case got processed along the ignored relationship first
        # then it got marked as 'seen' and would be not be processed again when it came to the correct relationship
        type_info = {
            'task': {
                'ignore_relationship_types': ['parent']
            },
        }

        hierarchy = get_case_hierarchy(cp, type_info)
        self.assertEqual(3, len(hierarchy['case_list']))
        self.assertEqual(1, len(hierarchy['child_cases']))
        self.assertEqual(2, len(hierarchy['child_cases'][0]['case_list']))
        self.assertEqual(1, len(hierarchy['child_cases'][0]['child_cases']))
Example #10
0
    def test_complex_index(self):
        cp = CommCareCase(
            _id='parent',
            name='parent',
            type='parent',
        )
        cp.save()

        # cases processed according to ID order so ensure that this case is
        # processed after the task case by making its ID sort after task ID
        cc = CommCareCase(
            _id='z_goal',
            name='goal',
            type='goal',
            indices=[CommCareCaseIndex(identifier='parent', referenced_type='parent', referenced_id='parent')],
        )
        cc.save()

        cc = CommCareCase(
            _id='task1',
            name='task1',
            type='task',
            indices=[
                CommCareCaseIndex(identifier='goal', referenced_type='goal', referenced_id='z_goal'),
                CommCareCaseIndex(identifier='parent', referenced_type='parent', referenced_id='parent')
            ],
        )
        cc.save()

        # with 'ignore_relationship_types' if a case got processed along the ignored relationship first
        # then it got marked as 'seen' and would be not be processed again when it came to the correct relationship
        type_info = {
            'task': {
                'ignore_relationship_types': ['parent']
            },
        }

        hierarchy = get_case_hierarchy(cp, type_info)
        self.assertEqual(3, len(hierarchy['case_list']))
        self.assertEqual(1, len(hierarchy['child_cases']))
        self.assertEqual(2, len(hierarchy['child_cases'][0]['case_list']))
        self.assertEqual(1, len(hierarchy['child_cases'][0]['child_cases']))
Example #11
0
    def test_normal_index(self):
        cp = FormProcessorInterface.create_case_from_generic(GenericCommCareCase(
            id='parent',
            name='parent',
            type='parent',
        ))

        FormProcessorInterface.create_case_from_generic(GenericCommCareCase(
            id='child',
            name='child',
            type='child',
            indices=[GenericCommCareCaseIndex(
                identifier='parent',
                referenced_type='parent',
                referenced_id='parent'
            )],
        ))

        hierarchy = get_case_hierarchy(cp, {})
        self.assertEqual(2, len(hierarchy['case_list']))
        self.assertEqual(1, len(hierarchy['child_cases']))
Example #12
0
    def test_normal_index(self):
        cp = CommCareCase(
            _id='parent',
            name='parent',
            type='parent',
        )
        cp.save()

        cc = CommCareCase(
            _id='child',
            name='child',
            type='child',
            indices=[
                CommCareCaseIndex(identifier='parent',
                                  referenced_type='parent',
                                  referenced_id='parent')
            ],
        )
        cc.save()

        hierarchy = get_case_hierarchy(cp, {})
        self.assertEqual(2, len(hierarchy['case_list']))
        self.assertEqual(1, len(hierarchy['child_cases']))
Example #13
0
    def test_complex_index(self):
        factory = CaseFactory()
        cp = factory.create_or_update_case(CaseStructure(case_id='parent', attrs={'case_type': 'parent'}))[0]

        # cases processed according to ID order so ensure that this case is
        # processed after the task case by making its ID sort after task ID
        factory.create_or_update_case(CaseStructure(
            case_id='z_goal',
            attrs={'case_type': 'goal'},
            indices=[CaseIndex(CaseStructure(case_id='parent'), related_type='parent')],
            walk_related=False
        ))

        factory.create_or_update_case(CaseStructure(
            case_id='task1',
            attrs={'case_type': 'task'},
            indices=[
                CaseIndex(CaseStructure(case_id='z_goal'), related_type='goal', identifier='goal'),
                CaseIndex(CaseStructure(case_id='parent'), related_type='parent')
            ],
            walk_related=False,
        ))

        # with 'ignore_relationship_types' if a case got processed along the ignored relationship first
        # then it got marked as 'seen' and would be not be processed again when it came to the correct relationship
        type_info = {
            'task': {
                'ignore_relationship_types': ['parent']
            },
        }

        hierarchy = get_case_hierarchy(cp, type_info)
        self.assertEqual(3, len(hierarchy['case_list']))
        self.assertEqual(1, len(hierarchy['child_cases']))
        self.assertEqual(2, len(hierarchy['child_cases'][0]['case_list']))
        self.assertEqual(1, len(hierarchy['child_cases'][0]['child_cases']))
Example #14
0
    def test_extension_index(self):
        factory = CaseFactory()
        [case] = factory.create_or_update_case(
            CaseStructure(case_id="standard_case", attrs={'case_type': "standard_type"})
        )

        factory.create_or_update_case(
            CaseStructure(
                case_id="extension_case",
                attrs={'case_type': "extension_type"},
                indices=[
                    CaseIndex(
                        CaseStructure(case_id="standard_case"),
                        related_type='standard_type',
                        relationship=CASE_INDEX_EXTENSION
                    )
                ],
                walk_related=False
            )
        )

        hierarchy = get_case_hierarchy(case, {})
        self.assertEqual(2, len(hierarchy['case_list']))
        self.assertEqual(1, len(hierarchy['child_cases']))