def testUserRestoreWithCase(self): file_path = os.path.join(os.path.dirname(__file__), "data", "create_short.xml") with open(file_path, "rb") as f: xml_data = f.read() # implicit length assertion _, _, [newcase] = submit_form_locally(xml_data, domain=self.project.name) expected_case_block = """ <case> <case_id>asdf</case_id> <date_modified>2010-06-29T13:42:50.000000Z</date_modified> <create> <case_type_id>test_case_type</case_type_id> <user_id>foo</user_id> <case_name>test case name</case_name> <external_id>someexternal</external_id> </create> </case>""" check_xml_line_by_line(self, expected_case_block, xml.get_case_xml(newcase, [case_const.CASE_ACTION_CREATE, case_const.CASE_ACTION_UPDATE])) # check v2 expected_v2_case_block = """ <case case_id="asdf" date_modified="2010-06-29T13:42:50.000000Z" user_id="foo" xmlns="http://commcarehq.org/case/transaction/v2" > <create> <case_type>test_case_type</case_type> <case_name>test case name</case_name> <owner_id>foo</owner_id> </create> <update> <external_id>someexternal</external_id> </update> </case>""" check_xml_line_by_line( self, expected_v2_case_block, xml.get_case_xml( newcase, [case_const.CASE_ACTION_CREATE, case_const.CASE_ACTION_UPDATE], version="2.0", ), ) restore_payload = generate_restore_payload( project=self.project, user=dummy_user(), items=True, ) sync_log_id = SyncLog.view( "phone/sync_logs_by_user", include_docs=True, reduce=False, ).one().get_id check_xml_line_by_line( self, dummy_restore_xml(sync_log_id, expected_case_block, items=4), restore_payload )
def testUserRestoreWithCase(self): file_path = os.path.join(os.path.dirname(__file__), "data", "create_short.xml") with open(file_path, "rb") as f: xml_data = f.read() FormProcessorInterface.submit_form_locally(xml_data, self.domain) expected_case_block = """ <case case_id="asdf" date_modified="2010-06-29T13:42:50.000000Z" user_id="foo" xmlns="http://commcarehq.org/case/transaction/v2"> <create> <case_type>test_case_type</case_type> <case_name>test case name</case_name> <owner_id>foo</owner_id> </create> <update> <external_id>someexternal</external_id> </update> </case>""" restore_payload = generate_restore_payload( project=Domain(name=self.domain), user=dummy_user(), items=True, version=V3 ) sync_log_id = SyncLog.view( "phone/sync_logs_by_user", include_docs=True, reduce=False, ).one().get_id check_xml_line_by_line( self, dummy_restore_xml(sync_log_id, expected_case_block, items=4), restore_payload )
def testSyncToken(self): """ Tests sync token / sync mode support """ file_path = os.path.join(os.path.dirname(__file__), "data", "create_short.xml") with open(file_path, "rb") as f: xml_data = f.read() form = post_xform_to_couch(xml_data) process_cases(sender="testharness", xform=form) time.sleep(1) restore_payload = generate_restore_payload(dummy_user()) # implicit length assertion [sync_log] = SyncLog.view("phone/sync_logs_by_user", include_docs=True, reduce=False).all() check_xml_line_by_line(self, dummy_restore_xml(sync_log.get_id, const.CREATE_SHORT), restore_payload) time.sleep(1) sync_restore_payload = generate_restore_payload(dummy_user(), sync_log.get_id) [latest_log] = [log for log in \ SyncLog.view("phone/sync_logs_by_user", include_docs=True, reduce=False).all() \ if log.get_id != sync_log.get_id] # should no longer have a case block in the restore XML check_xml_line_by_line(self, dummy_restore_xml(latest_log.get_id), sync_restore_payload) # apply an update time.sleep(1) file_path = os.path.join(os.path.dirname(__file__), "data", "update_short.xml") with open(file_path, "rb") as f: xml_data = f.read() form = post_xform_to_couch(xml_data) process_cases(sender="testharness", xform=form) time.sleep(1) sync_restore_payload = generate_restore_payload(dummy_user(), latest_log.get_id) [even_latest_log] = [log for log in \ SyncLog.view("phone/sync_logs_by_user", include_docs=True, reduce=False).all() \ if log.get_id != sync_log.get_id and log.get_id != latest_log.get_id] # case block should come back check_xml_line_by_line(self, dummy_restore_xml(even_latest_log.get_id, const.UPDATE_SHORT), sync_restore_payload)
def test_user_restore(self): self.assertEqual(0, self._get_synclog_count()) restore_payload = deprecated_generate_restore_payload( self.project, self.restore_user, items=True) sync_log = self._get_the_first_synclog() check_xml_line_by_line( self, dummy_restore_xml(sync_log.get_id, items=3, user=self.restore_user), restore_payload, )
def test_user_restore(self): self.assertEqual(0, self._get_synclog_count()) restore_payload = deprecated_generate_restore_payload( self.project, self.restore_user, items=True) sync_log = self._get_the_first_synclog() check_xml_line_by_line( self, dummy_restore_xml(sync_log.get_id, items=3, user=self.restore_user), restore_payload, )
def test_extract_restore_id_basic(self): restore_id = uuid.uuid4().hex fd, path = tempfile.mkstemp() restore_payload = dummy_restore_xml(restore_id).strip() with os.fdopen(fd, "wb") as f: f.write(restore_payload) with open(path, "r") as f: extracted, position = extract_synclog_id_from_filelike_payload(f) self.assertEqual(restore_id, extracted) self.assertEqual(restore_payload.index(restore_id), position) # also make sure we reset the file pointer self.assertEqual("<OpenRosaResponse", f.read(17))
def test_extract_restore_id_basic(self): restore_id = uuid.uuid4().hex fd, path = tempfile.mkstemp() restore_payload = dummy_restore_xml(restore_id).strip() with os.fdopen(fd, 'wb') as f: f.write(restore_payload) with open(path, 'r') as f: extracted, position = extract_synclog_id_from_filelike_payload(f) self.assertEqual(restore_id, extracted) self.assertEqual(restore_payload.index(restore_id), position) # also make sure we reset the file pointer self.assertEqual('<OpenRosaResponse', f.read(17))
def testUserRestoreWithCase(self): file_path = os.path.join(os.path.dirname(__file__), "data", "create_short.xml") with open(file_path, "rb") as f: xml_data = f.read() form = post_xform_to_couch(xml_data) process_cases(sender="testharness", xform=form) user = dummy_user() # implicit length assertion [newcase] = CommCareCase.view("case/by_user", reduce=False, include_docs=True).all() self.assertEqual(1, len(user.get_case_updates(None).actual_cases_to_sync)) expected_case_block = """ <case> <case_id>asdf</case_id> <date_modified>2010-06-29</date_modified> <create> <case_type_id>test_case_type</case_type_id> <user_id>foo</user_id> <case_name>test case name</case_name> <external_id>someexternal</external_id> </create> </case>""" check_xml_line_by_line(self, expected_case_block, xml.get_case_xml(newcase, [case_const.CASE_ACTION_CREATE, case_const.CASE_ACTION_UPDATE])) # check v2 expected_v2_case_block = """ <case case_id="asdf" date_modified="2010-06-29" user_id="foo" xmlns="http://commcarehq.org/case/transaction/v2" > <create> <case_type>test_case_type</case_type> <case_name>test case name</case_name> <owner_id>foo</owner_id> </create> <update> <external_id>someexternal</external_id> </update> </case>""" check_xml_line_by_line(self, expected_v2_case_block, xml.get_case_xml\ (newcase, [case_const.CASE_ACTION_CREATE, case_const.CASE_ACTION_UPDATE], version="2.0")) restore_payload = generate_restore_payload(dummy_user()) # implicit length assertion [sync_log] = SyncLog.view("phone/sync_logs_by_user", include_docs=True, reduce=False).all() check_xml_line_by_line(self, dummy_restore_xml(sync_log.get_id, expected_case_block), restore_payload)
def testUserRestore(self): self.assertEqual(0, SyncLog.view( "phone/sync_logs_by_user", include_docs=True, reduce=False, ).count()) restore_payload = generate_restore_payload(self.project, dummy_user(), items=True) sync_log = SyncLog.view( "phone/sync_logs_by_user", include_docs=True, reduce=False, ).one() check_xml_line_by_line( self, dummy_restore_xml(sync_log.get_id, items=3), restore_payload, )
def test_copy_payload(self): sync_log = SimplifiedSyncLog(case_ids_on_phone=set(['case-1', 'case-2'])) sync_log.save() payload = dummy_restore_xml(sync_log._id).strip() fd, path = tempfile.mkstemp() with os.fdopen(fd, 'wb') as f: f.write(payload) with open(path, 'r') as f: updated_fileref = copy_payload_and_synclog_and_get_new_file(f) updated_payload = updated_fileref.file.read() updated_id = synclog_id_from_restore_payload(updated_payload) self.assertNotEqual(sync_log._id, updated_id) self.assertTrue(_restore_id_block(updated_id) in updated_payload) self.assertFalse(sync_log._id in updated_payload) updated_log = get_properly_wrapped_sync_log(updated_id) self.assertEqual(updated_log.case_ids_on_phone, sync_log.case_ids_on_phone)
def test_replace_synclog_id(self): initial_id = uuid.uuid4().hex fd, path = tempfile.mkstemp() restore_payload = dummy_restore_xml(initial_id).strip() self.assertTrue(_restore_id_block(initial_id) in restore_payload) with os.fdopen(fd, "wb") as f: f.write(restore_payload) new_id = uuid.uuid4().hex with open(path, "r") as f: position = restore_payload.index(initial_id) file_reference = replace_sync_log_id_in_filelike_payload(f, initial_id, new_id, position) updated_payload = file_reference.file.read() self.assertTrue(_restore_id_block(new_id) in updated_payload) self.assertFalse(initial_id in updated_payload) self.assertEqual(restore_payload, updated_payload.replace(new_id, initial_id)) self.assertEqual(updated_payload, restore_payload.replace(initial_id, new_id))
def test_replace_synclog_id(self): initial_id = uuid.uuid4().hex fd, path = tempfile.mkstemp() restore_payload = dummy_restore_xml(initial_id).strip() self.assertTrue(_restore_id_block(initial_id) in restore_payload) with os.fdopen(fd, 'wb') as f: f.write(restore_payload) new_id = uuid.uuid4().hex with open(path, 'r') as f: position = restore_payload.index(initial_id) file_reference = replace_sync_log_id_in_filelike_payload(f, initial_id, new_id, position) updated_payload = file_reference.file.read() self.assertTrue(_restore_id_block(new_id) in updated_payload) self.assertFalse(initial_id in updated_payload) self.assertEqual(restore_payload, updated_payload.replace(new_id, initial_id)) self.assertEqual(updated_payload, restore_payload.replace(initial_id, new_id))
def test_copy_payload(self): sync_log = SimplifiedSyncLog(case_ids_on_phone=set(["case-1", "case-2"])) sync_log.save() payload = dummy_restore_xml(sync_log._id).strip() fd, path = tempfile.mkstemp() with os.fdopen(fd, "wb") as f: f.write(payload) with open(path, "r") as f: updated_fileref = copy_payload_and_synclog_and_get_new_file(f) updated_payload = updated_fileref.file.read() updated_id = synclog_id_from_restore_payload(updated_payload) self.assertNotEqual(sync_log._id, updated_id) self.assertTrue(_restore_id_block(updated_id) in updated_payload) self.assertFalse(sync_log._id in updated_payload) updated_log = get_properly_wrapped_sync_log(updated_id) self.assertEqual(updated_log.case_ids_on_phone, sync_log.case_ids_on_phone)
def testUserRestoreWithCase(self): file_path = os.path.join(os.path.dirname(__file__), "data", "create_short.xml") with open(file_path, "rb") as f: xml_data = f.read() form = post_xform_to_couch(xml_data, domain=self.domain) process_cases(form) expected_case_block = """ <case case_id="asdf" date_modified="2010-06-29T13:42:50.000000Z" user_id="foo" xmlns="http://commcarehq.org/case/transaction/v2"> <create> <case_type>test_case_type</case_type> <case_name>test case name</case_name> <owner_id>foo</owner_id> </create> <update> <external_id>someexternal</external_id> </update> </case>""" restore_payload = generate_restore_payload( project=Domain(name=self.domain), user=dummy_user(), items=True, version=V3 ) sync_log_id = SyncLog.view( "phone/sync_logs_by_user", include_docs=True, reduce=False, ).one().get_id check_xml_line_by_line( self, dummy_restore_xml(sync_log_id, expected_case_block, items=4), restore_payload )
def testUserRestoreWithCase(self): xml_data = self.get_xml('create_short').decode('utf-8') xml_data = xml_data.format(user_id=self.restore_user.user_id) # implicit length assertion result = submit_form_locally(xml_data, domain=self.project.name) expected_case_block = """ <case> <case_id>asdf</case_id> <date_modified>2010-06-29T13:42:50.000000Z</date_modified> <create> <case_type_id>test_case_type</case_type_id> <user_id>{user_id}</user_id> <case_name>test case name</case_name> <external_id>someexternal</external_id> </create> <update> <date_opened>2010-06-29</date_opened> </update> </case>""".format(user_id=self.restore_user.user_id) check_xml_line_by_line( self, expected_case_block, xml.get_case_xml( result.case, [case_const.CASE_ACTION_CREATE, case_const.CASE_ACTION_UPDATE] ) ) # check v2 expected_v2_case_block = """ <case case_id="asdf" date_modified="2010-06-29T13:42:50.000000Z" user_id="{user_id}" xmlns="http://commcarehq.org/case/transaction/v2" > <create> <case_type>test_case_type</case_type> <case_name>test case name</case_name> <owner_id>{user_id}</owner_id> </create> <update> <external_id>someexternal</external_id> <date_opened>2010-06-29</date_opened> </update> </case>""".format(user_id=self.restore_user.user_id) check_xml_line_by_line( self, expected_v2_case_block, xml.get_case_xml( result.case, [case_const.CASE_ACTION_CREATE, case_const.CASE_ACTION_UPDATE], version="2.0", ), ) restore_payload = deprecated_generate_restore_payload( project=self.project, user=self.restore_user, items=True, ) sync_log_id = self._get_the_first_synclog().get_id check_xml_line_by_line( self, dummy_restore_xml(sync_log_id, expected_case_block, items=4, user=self.restore_user), restore_payload )
def _test_sync_token(self, items): """ Tests sync token / sync mode support """ file_path = os.path.join(os.path.dirname(__file__), "data", "create_short.xml") with open(file_path, "rb") as f: xml_data = f.read() form = post_xform_to_couch(xml_data, domain=self.project.name) process_cases(form) time.sleep(1) restore_payload = generate_restore_payload(self.project, dummy_user(), items=items) sync_log_id = SyncLog.view( "phone/sync_logs_by_user", include_docs=True, reduce=False ).one().get_id expected_restore_payload = dummy_restore_xml( sync_log_id, const.CREATE_SHORT, items=4 if items else None, ) check_xml_line_by_line(self, expected_restore_payload, restore_payload) time.sleep(1) sync_restore_payload = generate_restore_payload( project=self.project, user=dummy_user(), restore_id=sync_log_id, items=items, ) all_sync_logs = SyncLog.view( "phone/sync_logs_by_user", include_docs=True, reduce=False, ).all() [latest_log] = [log for log in all_sync_logs if log.get_id != sync_log_id] # should no longer have a case block in the restore XML check_xml_line_by_line( self, dummy_restore_xml(latest_log.get_id, items=3 if items else None), sync_restore_payload, ) # apply an update time.sleep(1) file_path = os.path.join(os.path.dirname(__file__), "data", "update_short.xml") with open(file_path, "rb") as f: xml_data = f.read() form = post_xform_to_couch(xml_data, domain=self.project.name) process_cases(form) time.sleep(1) sync_restore_payload = generate_restore_payload( self.project, user=dummy_user(), restore_id=latest_log.get_id, items=items, ) all_sync_logs = SyncLog.view( "phone/sync_logs_by_user", include_docs=True, reduce=False, ).all() [even_latest_log] = [log for log in all_sync_logs if log.get_id != sync_log_id and log.get_id != latest_log.get_id] # case block should come back expected_sync_restore_payload = dummy_restore_xml( even_latest_log.get_id, const.UPDATE_SHORT, items=4 if items else None, ) check_xml_line_by_line(self, expected_sync_restore_payload, sync_restore_payload)
def testUserRestoreWithCase(self): file_path = os.path.join(os.path.dirname(__file__), "data", "create_short.xml") with open(file_path, "rb") as f: xml_data = f.read() form = post_xform_to_couch(xml_data, domain=self.project.name) # implicit length assertion [newcase] = process_cases(form) user = dummy_user() self.assertEqual(1, len(list( BatchedCaseSyncOperation(RestoreState(self.project, user, RestoreParams())).get_all_case_updates() ))) expected_case_block = """ <case> <case_id>asdf</case_id> <date_modified>2010-06-29T13:42:50.000000Z</date_modified> <create> <case_type_id>test_case_type</case_type_id> <user_id>foo</user_id> <case_name>test case name</case_name> <external_id>someexternal</external_id> </create> </case>""" check_xml_line_by_line(self, expected_case_block, xml.get_case_xml(newcase, [case_const.CASE_ACTION_CREATE, case_const.CASE_ACTION_UPDATE])) # check v2 expected_v2_case_block = """ <case case_id="asdf" date_modified="2010-06-29T13:42:50.000000Z" user_id="foo" xmlns="http://commcarehq.org/case/transaction/v2" > <create> <case_type>test_case_type</case_type> <case_name>test case name</case_name> <owner_id>foo</owner_id> </create> <update> <external_id>someexternal</external_id> </update> </case>""" check_xml_line_by_line( self, expected_v2_case_block, xml.get_case_xml( newcase, [case_const.CASE_ACTION_CREATE, case_const.CASE_ACTION_UPDATE], version="2.0", ), ) restore_payload = generate_restore_payload( project=self.project, user=dummy_user(), items=True, ) sync_log_id = SyncLog.view( "phone/sync_logs_by_user", include_docs=True, reduce=False, ).one().get_id check_xml_line_by_line( self, dummy_restore_xml(sync_log_id, expected_case_block, items=4), restore_payload )
def _test_sync_token(self, items): """ Tests sync token / sync mode support """ xml_data = self.get_xml('create_short') xml_data = xml_data.format(user_id=self.restore_user.user_id) submit_form_locally(xml_data, domain=self.project.name) restore_payload = generate_restore_payload(self.project, self.restore_user, items=items) sync_log_id = SyncLog.view("phone/sync_logs_by_user", include_docs=True, reduce=False).one().get_id expected_restore_payload = dummy_restore_xml( sync_log_id, const.CREATE_SHORT.format(user_id=self.restore_user.user_id), items=4 if items else None, user=self.restore_user, ) check_xml_line_by_line(self, expected_restore_payload, restore_payload) sync_restore_payload = generate_restore_payload( project=self.project, user=self.restore_user, restore_id=sync_log_id, items=items, ) all_sync_logs = SyncLog.view( "phone/sync_logs_by_user", include_docs=True, reduce=False, ).all() [latest_log ] = [log for log in all_sync_logs if log.get_id != sync_log_id] # should no longer have a case block in the restore XML check_xml_line_by_line( self, dummy_restore_xml( latest_log.get_id, items=3 if items else None, user=self.restore_user, ), sync_restore_payload, ) # apply an update xml_data = self.get_xml('update_short') xml_data = xml_data.format(user_id=self.restore_user.user_id) submit_form_locally(xml_data, domain=self.project.name) sync_restore_payload = generate_restore_payload( self.project, user=self.restore_user, restore_id=latest_log.get_id, items=items, ) all_sync_logs = SyncLog.view( "phone/sync_logs_by_user", include_docs=True, reduce=False, ).all() [even_latest_log] = [ log for log in all_sync_logs if log.get_id != sync_log_id and log.get_id != latest_log.get_id ] # case block should come back expected_sync_restore_payload = dummy_restore_xml( even_latest_log.get_id, const.UPDATE_SHORT.format(user_id=self.restore_user.user_id), items=4 if items else None, user=self.restore_user) check_xml_line_by_line(self, expected_sync_restore_payload, sync_restore_payload)
def testUserRestoreWithCase(self): xml_data = self.get_xml('create_short') xml_data = xml_data.format(user_id=self.restore_user.user_id) # implicit length assertion _, _, [newcase] = submit_form_locally(xml_data, domain=self.project.name) expected_case_block = """ <case> <case_id>asdf</case_id> <date_modified>2010-06-29T13:42:50.000000Z</date_modified> <create> <case_type_id>test_case_type</case_type_id> <user_id>{user_id}</user_id> <case_name>test case name</case_name> <external_id>someexternal</external_id> </create> <update> <date_opened>2010-06-29</date_opened> </update> </case>""".format(user_id=self.restore_user.user_id) check_xml_line_by_line( self, expected_case_block, xml.get_case_xml( newcase, [case_const.CASE_ACTION_CREATE, case_const.CASE_ACTION_UPDATE ])) # check v2 expected_v2_case_block = """ <case case_id="asdf" date_modified="2010-06-29T13:42:50.000000Z" user_id="{user_id}" xmlns="http://commcarehq.org/case/transaction/v2" > <create> <case_type>test_case_type</case_type> <case_name>test case name</case_name> <owner_id>{user_id}</owner_id> </create> <update> <external_id>someexternal</external_id> <date_opened>2010-06-29</date_opened> </update> </case>""".format(user_id=self.restore_user.user_id) check_xml_line_by_line( self, expected_v2_case_block, xml.get_case_xml( newcase, [case_const.CASE_ACTION_CREATE, case_const.CASE_ACTION_UPDATE], version="2.0", ), ) restore_payload = generate_restore_payload( project=self.project, user=self.restore_user, items=True, ) sync_log_id = SyncLog.view( "phone/sync_logs_by_user", include_docs=True, reduce=False, ).one().get_id check_xml_line_by_line( self, dummy_restore_xml(sync_log_id, expected_case_block, items=4, user=self.restore_user), restore_payload)
), ) restore_payload = deprecated_generate_restore_payload( project=self.project, user=self.restore_user, items=True, ) sync_log_id = SyncLog.view( "phone/sync_logs_by_user", include_docs=True, reduce=False, ).one().get_id check_xml_line_by_line( self, dummy_restore_xml(sync_log_id, expected_case_block, items=4, user=self.restore_user), restore_payload ) def testSyncTokenWithItems(self): self._test_sync_token(items=True) def testSyncTokenWithoutItems(self): self._test_sync_token(items=False) def _test_sync_token(self, items): """ Tests sync token / sync mode support """ xml_data = self.get_xml('create_short') xml_data = xml_data.format(user_id=self.restore_user.user_id)
def _test_sync_token(self, items): """ Tests sync token / sync mode support """ def get_all_syncslogs(): return [ properly_wrap_sync_log(log.doc) for log in SyncLogSQL.objects.all() ] xml_data = self.get_xml('create_short').decode('utf-8') xml_data = xml_data.format(user_id=self.restore_user.user_id) submit_form_locally(xml_data, domain=self.project.name) restore_payload = deprecated_generate_restore_payload( self.project, self.restore_user, items=items) sync_log_id = SyncLogSQL.objects.filter( user_id=self.restore_user.user_id).order_by( 'date').last().synclog_id.hex expected_restore_payload = dummy_restore_xml( sync_log_id, const.CREATE_SHORT.format(user_id=self.restore_user.user_id), items=4 if items else None, user=self.restore_user, ) check_xml_line_by_line(self, expected_restore_payload, restore_payload) sync_restore_payload = deprecated_generate_restore_payload( project=self.project, user=self.restore_user, restore_id=sync_log_id, items=items, ) all_sync_logs = get_all_syncslogs() [latest_log ] = [log for log in all_sync_logs if log.get_id != sync_log_id] # should no longer have a case block in the restore XML check_xml_line_by_line( self, dummy_restore_xml( latest_log.get_id, items=3 if items else None, user=self.restore_user, ), sync_restore_payload, ) # apply an update xml_data = self.get_xml('update_short').decode('utf-8') xml_data = xml_data.format(user_id=self.restore_user.user_id) submit_form_locally(xml_data, domain=self.project.name) sync_restore_payload = deprecated_generate_restore_payload( self.project, user=self.restore_user, restore_id=latest_log.get_id, items=items, ) all_sync_logs = get_all_syncslogs() [even_latest_log] = [ log for log in all_sync_logs if log.get_id != sync_log_id and log.get_id != latest_log.get_id ] # case block should come back expected_sync_restore_payload = dummy_restore_xml( even_latest_log.get_id, const.UPDATE_SHORT.format(user_id=self.restore_user.user_id), items=4 if items else None, user=self.restore_user) check_xml_line_by_line(self, expected_sync_restore_payload, sync_restore_payload)
def _test_sync_token(self, items): """ Tests sync token / sync mode support """ def get_all_syncslogs(): return [properly_wrap_sync_log(log.doc) for log in SyncLogSQL.objects.all()] xml_data = self.get_xml('create_short').decode('utf-8') xml_data = xml_data.format(user_id=self.restore_user.user_id) submit_form_locally(xml_data, domain=self.project.name) restore_payload = deprecated_generate_restore_payload( self.project, self.restore_user, items=items) sync_log_id = get_last_synclog_for_user(self.restore_user.user_id).get_id expected_restore_payload = dummy_restore_xml( sync_log_id, const.CREATE_SHORT.format(user_id=self.restore_user.user_id), items=4 if items else None, user=self.restore_user, ) check_xml_line_by_line(self, expected_restore_payload, restore_payload) sync_restore_payload = deprecated_generate_restore_payload( project=self.project, user=self.restore_user, restore_id=sync_log_id, items=items, ) all_sync_logs = get_all_syncslogs() [latest_log] = [log for log in all_sync_logs if log.get_id != sync_log_id] # should no longer have a case block in the restore XML check_xml_line_by_line( self, dummy_restore_xml( latest_log.get_id, items=3 if items else None, user=self.restore_user, ), sync_restore_payload, ) # apply an update xml_data = self.get_xml('update_short').decode('utf-8') xml_data = xml_data.format(user_id=self.restore_user.user_id) submit_form_locally(xml_data, domain=self.project.name) sync_restore_payload = deprecated_generate_restore_payload( self.project, user=self.restore_user, restore_id=latest_log.get_id, items=items, ) all_sync_logs = get_all_syncslogs() [even_latest_log] = [log for log in all_sync_logs if log.get_id != sync_log_id and log.get_id != latest_log.get_id] # case block should come back expected_sync_restore_payload = dummy_restore_xml( even_latest_log.get_id, const.UPDATE_SHORT.format(user_id=self.restore_user.user_id), items=4 if items else None, user=self.restore_user ) check_xml_line_by_line(self, expected_sync_restore_payload, sync_restore_payload)
def testUserRestore(self): self.assertEqual(0, len(SyncLog.view("phone/sync_logs_by_user", include_docs=True, reduce=False).all())) restore_payload = generate_restore_payload(dummy_user()) # implicit length assertion [sync_log] = SyncLog.view("phone/sync_logs_by_user", include_docs=True, reduce=False).all() check_xml_line_by_line(self, dummy_restore_xml(sync_log.get_id), restore_payload)