def test_push(self): connection = Connection( [LOCK_RESPONSE_OK, EMPTY_RESPONSE_OK, EMPTY_RESPONSE_OK]) victory = DummyADTObject(connection=connection, name='SOFTWARE_ENGINEER') with victory.open_editor() as editor: editor.push() self.assertEqual( connection.mock_methods(), [('POST', '/sap/bc/adt/awesome/success/software_engineer'), ('PUT', '/sap/bc/adt/awesome/success/software_engineer'), ('POST', '/sap/bc/adt/awesome/success/software_engineer')]) request = connection.execs[1] self.assertEqual(sorted(request.headers.keys()), ['Content-Type']) self.assertEqual(request.headers['Content-Type'], 'application/vnd.sap.super.cool.txt+xml') self.assertEqual(sorted(request.params.keys()), ['lockHandle']) self.assertEqual(request.params['lockHandle'], 'win') self.maxDiff = None self.assertEqual( request.body, '''<?xml version="1.0" encoding="UTF-8"?> <win:dummies xmlns:win="http://www.example.com/never/lose" xmlns:adtcore="http://www.sap.com/adt/core" adtcore:type="DUMMY/S" adtcore:description="adt fixtures dummy object" adtcore:name="SOFTWARE_ENGINEER"> <adtcore:packageRef/> </win:dummies>''')
def test_properties(self): victory = DummyADTObject() with self.assertRaises(SAPCliError) as cm: victory.name = 'somethingelse' self.assertEqual(str(cm.exception), 'Deserializing wrong object: noobject != somethingelse')
def test_unlock_not_locked(self): victory = DummyADTObject() try: victory.unlock() except SAPCliError as ex: self.assertEquals(str(ex), f'Object {victory.uri}: not locked')
def test_create_v0_priority(self): conn = Connection(collections={'/sap/bc/adt/awesome/success': ['application/vnd.sap.super.cool.txt+xml', 'application/vnd.sap.super.cool.txt.v2+xml']}) victory = DummyADTObject(connection=conn) victory.create() self.assertEqual(conn.execs[0][2], {'Content-Type': 'application/vnd.sap.super.cool.txt+xml; charset=utf-8'})
def test_create_ok_wihout_corrnr(self): connection = Connection([EMPTY_RESPONSE_OK]) victory = DummyADTObject(connection=connection, name='creator') victory.create() self.assertEqual(len(connection.execs), 1) self.assertEqual(connection.execs[0].method, 'POST') self.assertEqual(connection.execs[0].adt_uri, '/sap/bc/adt/awesome/success') self.assertEqual( connection.execs[0].headers['Content-Type'], 'application/vnd.sap.super.cool.txt+xml; charset=utf-8') self.assertEqual(sorted(connection.execs[0].headers.keys()), ['Content-Type']) self.assertIsNone(connection.execs[0].params) self.maxDiff = None self.assertEqual( connection.execs[0].body.decode('utf-8'), '''<?xml version="1.0" encoding="UTF-8"?> <win:dummies xmlns:win="http://www.example.com/never/lose" xmlns:adtcore="http://www.sap.com/adt/core" adtcore:type="DUMMY/S" adtcore:description="adt fixtures dummy object" adtcore:name="creator"> <adtcore:packageRef/> </win:dummies>''')
def test_lock_modify_ok(self): connection = Connection([LOCK_RESPONSE_OK, LOCK_RESPONSE_OK]) victory = DummyADTObject(connection=connection) handle = victory.lock() self.assertEquals(handle, 'win') self.assertEqual([(e.method, e.adt_uri) for e in connection.execs], [('POST', '/sap/bc/adt/awesome/success/noobject')]) lock_request = connection.execs[0] self.assertEqual(sorted(lock_request.params.keys()), ['_action', 'accessMode']) self.assertEqual(lock_request.params['_action'], 'LOCK') self.assertEqual(lock_request.params['accessMode'], 'MODIFY') self.assertEqual(sorted(lock_request.headers.keys()), ['Accept', 'X-sap-adt-sessiontype']) self.assertEqual(lock_request.headers['X-sap-adt-sessiontype'], 'stateful') self.assertEqual( lock_request.headers['Accept'], 'application/vnd.sap.as+xml;charset=UTF-8;dataname=com.sap.adt.lock.result;q=0.8, application/vnd.sap.as+xml;charset=UTF-8;dataname=com.sap.adt.lock.result2;q=0.9' ) handle = victory.lock() self.assertEquals(handle, 'win')
def test_activate(self): connection = Connection([EMPTY_RESPONSE_OK]) victory = DummyADTObject(connection=connection, name='activator') victory.activate() self.assertEqual(len(connection.execs), 1) self.assertEqual(connection.execs[0].method, 'POST') self.assertEqual(connection.execs[0].adt_uri, '/sap/bc/adt/activation') self.assertEqual(connection.execs[0].headers['Accept'], 'application/xml') self.assertEqual(connection.execs[0].headers['Content-Type'], 'application/xml') self.assertEqual(sorted(connection.execs[0].headers.keys()), ['Accept', 'Content-Type']) self.assertEqual(connection.execs[0].params['method'], 'activate') self.assertEqual(connection.execs[0].params['preauditRequested'], 'true') self.assertEqual(sorted(connection.execs[0].params.keys()), ['method', 'preauditRequested']) self.maxDiff = None self.assertEqual( connection.execs[0].body, '''<?xml version="1.0" encoding="UTF-8"?> <adtcore:objectReferences xmlns:adtcore="http://www.sap.com/adt/core"> <adtcore:objectReference adtcore:uri="/sap/bc/adt/awesome/success/activator" adtcore:name="ACTIVATOR"/> </adtcore:objectReferences>''')
def test_open_editor_with_lock_and_corrnr(self): connection = Connection([EMPTY_RESPONSE_OK]) victory = DummyADTObject(connection=connection, name='editor_no_lock') with victory.open_editor(corrnr='123456', lock_handle='clock') as editor: self.assertEqual(editor.lock_handle, 'clock') self.assertEqual(editor.corrnr, '123456')
def test_create_mime_not_found(self): conn = Connection(collections={'/sap/bc/adt/awesome/success': ['application/something.else+xml']}) victory = DummyADTObject(connection=conn) with self.assertRaises(sap.errors.SAPCliError) as caught: victory.create() self.assertEqual(str(caught.exception), 'Not supported mimes: application/something.else+xml not in application/vnd.sap.super.cool.txt+xml;application/vnd.sap.super.cool.txt.v2+xml')
def test_create_ok_wih_corrnr(self): connection = Connection([EMPTY_RESPONSE_OK]) victory = DummyADTObject(connection=connection, name='creator') victory.create(corrnr='NPL000008') self.assertEqual(connection.execs[0].params['corrNr'], 'NPL000008') self.assertEqual(sorted(connection.execs[0].params.keys()), ['corrNr'])
def test_open_editor_default(self): connection = Connection([LOCK_RESPONSE_OK, EMPTY_RESPONSE_OK]) victory = DummyADTObject(connection=connection, name='editor_test') with victory.open_editor() as editor: self.assertEqual(editor.uri, 'awesome/success/editor_test') self.assertEqual(editor.mimetype, 'application/vnd.sap.super.cool.txt+xml') self.assertEqual(editor.connection, connection) self.assertEqual(editor.lock_handle, 'win') self.assertIsNone(editor.corrnr)
def test_activate_fails(self): connection = Connection([Response(ACTIVATE_RESPONSE_FAILED, 200, {})]) victory = DummyADTObject(connection=connection, name='activator') with self.assertRaises(SAPCliError) as cm: victory.activate() self.maxDiff = None self.assertEqual( str(cm.exception), f'Could not activate the object activator: {ACTIVATE_RESPONSE_FAILED}' )
def test_create_v2(self): conn = Connection(collections={'/sap/bc/adt/awesome/success': ['application/vnd.sap.super.cool.txt.v2+xml']}) victory = DummyADTObject(connection=conn) victory.create() self.assertEqual(conn.execs[0][2], {'Content-Type': 'application/vnd.sap.super.cool.txt.v2+xml; charset=utf-8'}) self.maxDiff = None self.assertEqual(conn.execs[0].body.decode('utf-8'), '''<?xml version="1.0" encoding="UTF-8"?> <win:dummies xmlns:win="http://www.example.com/never/lose" xmlns:adtcore="http://www.sap.com/adt/core" adtcore:type="DUMMY/S" adtcore:description="adt fixtures dummy object" adtcore:name="noobject"> <adtcore:packageRef/> <elemv2>version2</elemv2> </win:dummies>''' )
def test_fetch(self): connection = Connection([Response(text=GET_DUMMY_OBJECT_ADT_XML, status_code=200, headers={})]) victory = DummyADTObject(connection=connection, name='SOFTWARE_ENGINEER') victory.fetch() self.assertEqual(connection.mock_methods(), [('GET', '/sap/bc/adt/awesome/success/software_engineer')]) self.assertEqual(victory.description, 'You cannot stop me!') self.assertEqual(victory.language, 'CZ') self.assertEqual(victory.name, 'SOFTWARE_ENGINEER') self.assertEqual(victory.master_language, 'EN') self.assertEqual(victory.master_system, 'NPL') self.assertEqual(victory.responsible, 'DEVELOPER') self.assertEqual(victory.active, 'active') self.assertEqual(victory.reference.name, 'UNIVERSE')
def test_text_mixed_endings(self): connection = Connection([Response(status_code=200, text='first\nsecond\r\nthird\r\n') ]) victory = DummyADTObject(connection=connection, name='SOFTWARE_ENGINEER') self.assertEqual(victory.text, 'first\nsecond\nthird\n')
def test_run_configuration_with_coverage(self): connection = Connection() victory = DummyADTObject(connection=connection) tested_objects = ADTObjectSets() tested_objects.include_object(victory) runner = sap.adt.aunit.AUnit(connection) response = runner.execute(tested_objects, activate_coverage=True) self.maxDiff = None self.assertEqual( connection.execs[0].body, '''<?xml version="1.0" encoding="UTF-8"?> <aunit:runConfiguration xmlns:aunit="http://www.sap.com/adt/aunit"> <external> <coverage active="true"/> </external> <options> <uriType value="semantic"/> <testDeterminationStrategy sameProgram="true" assignedTests="false" appendAssignedTestsPreview="true"/> <testRiskLevels harmless="true" dangerous="true" critical="true"/> <testDurations short="true" medium="true" long="true"/> <withNavigationUri enabled="false"/> </options> <adtcore:objectSets xmlns:adtcore="http://www.sap.com/adt/core"> <objectSet kind="inclusive"> <adtcore:objectReferences> <adtcore:objectReference adtcore:uri="/sap/bc/adt/awesome/success/noobject" adtcore:name="NOOBJECT"/> </adtcore:objectReferences> </objectSet> </adtcore:objectSets> </aunit:runConfiguration>''')
def test_query_default(self): connection = Connection() victory = DummyADTObject(connection=connection) tested_objects = ADTObjectSets() tested_objects.include_object(victory) coverage_identifier = 'FOOBAR' runner = sap.adt.acoverage.ACoverage(connection) response = runner.execute(coverage_identifier, tested_objects) self.assertEqual( connection.execs[0].body, '''<?xml version="1.0" encoding="UTF-8"?> <cov:query xmlns:cov="http://www.sap.com/adt/cov"> <adtcore:objectSets xmlns:adtcore="http://www.sap.com/adt/core"> <objectSet kind="inclusive"> <adtcore:objectReferences> <adtcore:objectReference adtcore:uri="/sap/bc/adt/awesome/success/noobject" adtcore:name="NOOBJECT"/> </adtcore:objectReferences> </objectSet> </adtcore:objectSets> </cov:query>''') self.assertEqual( connection.execs[0].adt_uri, '/sap/bc/adt/runtime/traces/coverage/measurements/FOOBAR')
def test_unlock_ok(self): connection = Connection([LOCK_RESPONSE_OK, None]) victory = DummyADTObject(connection=connection) handle = victory.lock() victory.unlock(handle) self.assertEqual( [(e.method, e.adt_uri) for e in connection.execs], 2 * [('POST', '/sap/bc/adt/awesome/success/noobject')]) unlock_request = connection.execs[1] self.assertEqual(sorted(unlock_request.params.keys()), ['_action', 'lockHandle']) self.assertEqual(unlock_request.params['_action'], 'UNLOCK') self.assertEqual(unlock_request.params['lockHandle'], 'win') self.assertEqual(sorted(unlock_request.headers.keys()), ['X-sap-adt-sessiontype']) self.assertEqual(unlock_request.headers['X-sap-adt-sessiontype'], 'stateful')
def test_unlock_not_locked(self): connection = Connection([LOCK_RESPONSE_OK, None]) victory = DummyADTObject(connection=connection) try: victory.unlock('NOTLOCKED') except SAPCliError as ex: self.assertEquals(str(ex), f'Object {victory.uri}: not locked') self.assertEqual([(e.method, e.adt_uri) for e in connection.execs], [('POST', '/sap/bc/adt/awesome/success/noobject')]) unlock_request = connection.execs[0] self.assertEqual(sorted(unlock_request.params.keys()), ['_action', 'lockHandle']) self.assertEqual(unlock_request.params['_action'], 'UNLOCK') self.assertEqual(unlock_request.params['lockHandle'], 'NOTLOCKED')
def test_lock_modify_invalid(self): response = Response(text='invalid', status_code=200, headers={'Content-Type': 'text/plain'}) connection = Connection([response, response]) victory = DummyADTObject(connection=connection) try: victory.lock() self.assertFail('Exception was expected') except SAPCliError as ex: self.assertEquals( str(ex), f'Object {victory.uri}: lock response does not have lock result\ninvalid' ) try: victory.lock() self.assertFail('Exception was expected') except SAPCliError as ex: self.assertEquals( str(ex), f'Object {victory.uri}: lock response does not have lock result\ninvalid' )
def test_lock_modify_ok(self): connection = Connection([LOCK_RESPONSE_OK]) victory = DummyADTObject(connection=connection) victory.lock() self.assertEquals(victory._lock, 'win') self.assertEqual([(e.method, e.adt_uri) for e in connection.execs], [('POST', '/sap/bc/adt/awesome/success/noobject')]) lock_request = connection.execs[0] self.assertEqual(sorted(lock_request.params.keys()), ['_action', 'accessMode']) self.assertEqual(lock_request.params['_action'], 'LOCK') self.assertEqual(lock_request.params['accessMode'], 'MODIFY') self.assertEqual(sorted(lock_request.headers.keys()), ['Accept', 'X-sap-adt-sessiontype']) self.assertEqual(lock_request.headers['X-sap-adt-sessiontype'], 'stateful') self.assertEqual( lock_request.headers['Accept'], 'application/vnd.sap.as+xml;charset=UTF-8;dataname=com.sap.adt.lock.result;q=0.8, application/vnd.sap.as+xml;charset=UTF-8;dataname=com.sap.adt.lock.result2;q=0.9' ) try: victory.lock() self.assertFail('Exception was expected') except SAPCliError as ex: self.assertEquals(str(ex), f'Object {victory.uri}: already locked')
def test_build_tested_object_uri(self): victory = DummyADTObject() victory_uri = sap.adt.AUnit.build_tested_object_uri( connection, victory) self.assertEquals(victory_uri, '/sap/bc/adt/awesome/success/noobject')
def test_str(self): victory = DummyADTObject(name='objname') self.assertEquals(str(victory), 'DUMMY/S objname')
def test_uri(self): victory = DummyADTObject() self.assertEquals(victory.uri, 'awesome/success/noobject')
def test_text_single_line(self): connection = Connection([Response(status_code=200, text='content')]) victory = DummyADTObject(connection=connection, name='SOFTWARE_ENGINEER') self.assertEqual(victory.text, 'content')