Esempio n. 1
0
    def test_update_case(self):
        case_id = uuid.uuid4().hex
        opened_on = datetime.utcnow()
        _submit_case_block(
            True, case_id, user_id='user1', owner_id='owner1', case_type='demo',
            case_name='create_case', date_modified=opened_on, update={
                'dynamic': '123'
            }
        )

        modified_on = datetime.utcnow()
        _submit_case_block(
            False, case_id, user_id='user2', owner_id='owner2',
            case_name='update_case', date_modified=modified_on, date_opened=opened_on, update={
                'dynamic': '1234'
            }
        )

        case = self.casedb.get_case(case_id)
        self.assertEqual(case.owner_id, 'owner2')
        self.assertEqual(case.name, 'update_case')
        self.assertEqual(coerce_to_datetime(case.opened_on), coerce_to_datetime(opened_on))
        self.assertEqual(case.opened_by, 'user1')
        self.assertEqual(case.modified_on, modified_on)
        self.assertEqual(case.modified_by, 'user2')
        self.assertTrue(case.server_modified_on > modified_on)
        self.assertFalse(case.closed)
        self.assertIsNone(case.closed_on)
        self.assertEqual(case.dynamic_case_properties()['dynamic'], '1234')
Esempio n. 2
0
    def test_update_case(self):
        case_id = uuid.uuid4().hex
        opened_on = datetime.utcnow()
        _submit_case_block(True,
                           case_id,
                           user_id='user1',
                           owner_id='owner1',
                           case_type='demo',
                           case_name='create_case',
                           date_modified=opened_on,
                           update={'dynamic': '123'})

        modified_on = datetime.utcnow()
        _submit_case_block(False,
                           case_id,
                           user_id='user2',
                           owner_id='owner2',
                           case_name='update_case',
                           date_modified=modified_on,
                           date_opened=opened_on,
                           update={'dynamic': '1234'})

        case = self.casedb.get_case(case_id)
        self.assertEqual(case.owner_id, 'owner2')
        self.assertEqual(case.name, 'update_case')
        self.assertEqual(coerce_to_datetime(case.opened_on),
                         coerce_to_datetime(opened_on))
        self.assertEqual(case.opened_by, 'user1')
        self.assertEqual(case.modified_on, modified_on)
        self.assertEqual(case.modified_by, 'user2')
        self.assertTrue(case.server_modified_on > modified_on)
        self.assertFalse(case.closed)
        self.assertIsNone(case.closed_on)
        self.assertEqual(case.dynamic_case_properties()['dynamic'], '1234')
Esempio n. 3
0
    def testCreateThenUpdateInSeparateForms(self):
        # recycle our previous test's form
        xform1, original_case = bootstrap_case_from_xml(self, "create_update.xml")
        self.assertEqual(original_case.type, "test_case_type")
        self.assertEqual(original_case.name, "test case name")
        # we don't need to bother checking all the properties because this is
        # the exact same workflow as above.
        
        xform2, case = bootstrap_case_from_xml(self, "update.xml", original_case.case_id)
        # fetch the case from the DB to ensure it is property wrapped
        case = CaseAccessors().get_case(case.case_id)
        self.assertEqual(False, case.closed)

        if getattr(settings, 'TESTS_SHOULD_USE_SQL_BACKEND', False):
            self._check_transactions(case, [xform1, xform2])
            self.assertTrue(case.transactions[0].is_case_create)
        else:
            self.assertEqual(3, len(case.actions))
            new_update_action = case.actions[2]
            self.assertEqual(const.CASE_ACTION_UPDATE, new_update_action.action_type)
            self.assertEqual("http://openrosa.org/case/test/update", new_update_action.xform_xmlns)
            self.assertEqual("", new_update_action.xform_name)
            # updated prop
            self.assertEqual("abcd", new_update_action.updated_unknown_properties["someprop"])
            # new prop
            self.assertEqual("efgh", new_update_action.updated_unknown_properties["somenewprop"])

            # update original case fields
            self.assertEqual("a_new_type", new_update_action.updated_known_properties["type"])
            self.assertEqual("a new name", new_update_action.updated_known_properties["name"])
            self.assertEqual(UPDATE_DATE, new_update_action.updated_known_properties["opened_on"])

        # some properties didn't change
        self.assertEqual("123", str(case.dynamic_case_properties()['someotherprop']))

        # but some should have
        self.assertEqual("abcd", case.dynamic_case_properties()["someprop"])

        # and there are new ones
        self.assertEqual("efgh", case.dynamic_case_properties()["somenewprop"])

        # we also changed everything originally in the case
        self.assertEqual("a_new_type", case.type)
        self.assertEqual("a new name", case.name)
        self.assertEqual(coerce_to_datetime(UPDATE_DATE), coerce_to_datetime(case.opened_on))

        # case should have a new modified date
        self.assertEqual(MODIFY_DATE, case.modified_on)
Esempio n. 4
0
    def testCreateThenUpdateInSeparateForms(self):
        # recycle our previous test's form
        xform1, original_case = bootstrap_case_from_xml(self, "create_update.xml")
        self.assertEqual(original_case.type, "test_case_type")
        self.assertEqual(original_case.name, "test case name")
        # we don't need to bother checking all the properties because this is
        # the exact same workflow as above.
        
        xform2, case = bootstrap_case_from_xml(self, "update.xml", original_case.case_id)
        # fetch the case from the DB to ensure it is property wrapped
        case = CaseAccessors().get_case(case.case_id)
        self.assertEqual(False, case.closed)

        if getattr(settings, 'TESTS_SHOULD_USE_SQL_BACKEND', False):
            self._check_transactions(case, [xform1, xform2])
            self.assertTrue(case.transactions[0].is_case_create)
        else:
            self.assertEqual(3, len(case.actions))
            new_update_action = case.actions[2]
            self.assertEqual(const.CASE_ACTION_UPDATE, new_update_action.action_type)
            self.assertEqual("http://openrosa.org/case/test/update", new_update_action.xform_xmlns)
            self.assertEqual("", new_update_action.xform_name)
            # updated prop
            self.assertEqual("abcd", new_update_action.updated_unknown_properties["someprop"])
            # new prop
            self.assertEqual("efgh", new_update_action.updated_unknown_properties["somenewprop"])

            # update original case fields
            self.assertEqual("a_new_type", new_update_action.updated_known_properties["type"])
            self.assertEqual("a new name", new_update_action.updated_known_properties["name"])
            self.assertEqual(UPDATE_DATE, new_update_action.updated_known_properties["opened_on"])

        # some properties didn't change
        self.assertEqual("123", str(case.dynamic_case_properties()['someotherprop']))

        # but some should have
        self.assertEqual("abcd", case.dynamic_case_properties()["someprop"])

        # and there are new ones
        self.assertEqual("efgh", case.dynamic_case_properties()["somenewprop"])

        # we also changed everything originally in the case
        self.assertEqual("a_new_type", case.type)
        self.assertEqual("a new name", case.name)
        self.assertEqual(coerce_to_datetime(UPDATE_DATE), coerce_to_datetime(case.opened_on))

        # case should have a new modified date
        self.assertEqual(MODIFY_DATE, case.modified_on)