def test_aunit_program(self):
        connection = Connection([
            Response(status_code=200,
                     text=AUNIT_NO_TEST_RESULTS_XML,
                     headers={})
        ])

        with patch('sap.cli.aunit.print') as mock_print:
            sap.cli.aunit.run(
                connection,
                SimpleNamespace(type='program',
                                name='yprogram',
                                output='human'))

        self.assertEqual(len(connection.execs), 1)
        self.assertIn('programs/programs/yprogram', connection.execs[0].body)
        self.assert_print_no_test_classes(mock_print)
Ejemplo n.º 2
0
    def test_adt_wb_activate_object_fail(self):
        adt_object = self.create_fake_object(FIXTURES_EXP_FULL_ADT_URI,
                                             FIXTURES_EXP_OBJECT_NAME)
        adt_object.connection = Connection([
            Response(status_code=200,
                     text=FIXTURES_EXP_ERROR_RESPONSE,
                     headers={})
        ])

        with self.assertRaises(SAPCliError) as caught:
            sap.adt.wb.activate(adt_object)

        self.assert_single_request(adt_object)
        self.assertEqual(
            str(caught.exception),
            f'Could not activate the object {FIXTURES_EXP_OBJECT_NAME}: {FIXTURES_EXP_ERROR_RESPONSE}'
        )
Ejemplo n.º 3
0
    def test_create_with_config_update_instance(self):
        self.conn.set_responses(
            Response.with_json(status_code=201,
                               json={'repository': self.repo_server_data}))

        repo = sap.rest.gcts.Repository(self.conn,
                                        self.repo_name,
                                        data={
                                            'config': [{
                                                'key': 'first_key',
                                                'value': 'first_value'
                                            }, {
                                                'key': 'third_key',
                                                'value': 'third_value'
                                            }]
                                        })

        repo.create(self.repo_url,
                    self.repo_vsid,
                    config={
                        'second_key': 'second_value',
                        'third_key': 'fourth_value'
                    })

        repo_request = dict(self.repo_request)
        repo_request['data']['config'] = [
            {
                'key': 'first_key',
                'value': 'first_value'
            },
            {
                'key': 'third_key',
                'value': 'fourth_value'
            },
            {
                'key': 'second_key',
                'value': 'second_value'
            },
        ]

        self.maxDiff = None
        self.assertEqual(len(self.conn.execs), 1)
        self.conn.execs[0].assertEqual(Request.post_json(
            uri=f'repository', body=repo_request, accept='application/json'),
                                       self,
                                       json_body=True)
Ejemplo n.º 4
0
    def test_get_config_no_config_ok(self):
        self.conn.set_responses(
            Response.with_json(status_code=200,
                               json={'result': self.repo_server_data}))

        repo = sap.rest.gcts.Repository(self.conn, self.repo_name)

        # This will fetch repo data from the server
        value = repo.get_config('VCS_CONNECTION')
        self.assertEqual(value, 'SSL')

        # The second request does not causes an HTTP request
        value = repo.get_config('VCS_CONNECTION')
        self.assertEqual(value, 'SSL')

        self.assertEqual(len(self.conn.execs), 1)
        self.conn.execs[0].assertEqual(
            Request.get_json(uri=f'repository/{self.repo_name}'), self)
    def test_adt_program_fetch(self):
        conn = Connection([
            Response(text=GET_EXECUTABLE_PROGRAM_ADT_XML,
                     status_code=200,
                     headers={})
        ])
        program = sap.adt.Program(conn, 'ZHELLO_WORLD')
        program.fetch()

        self.assertEqual(program.name, 'ZHELLO_WORLD')
        self.assertEqual(program.active, 'active')
        self.assertEqual(program.program_type, '1')
        self.assertEqual(program.master_language, 'EN')
        self.assertEqual(program.description, 'Say hello!')
        self.assertEqual(program.logical_database.reference.name, 'D$S')
        self.assertEqual(program.fix_point_arithmetic, True)
        self.assertEqual(program.case_sensitive, True)
        self.assertEqual(program.application_database, 'S')
Ejemplo n.º 6
0
    def test_log_ok(self):
        exp_commits = [{'id': '123'}]

        self.conn.set_responses(
            Response.with_json(status_code=200, json={'commits': exp_commits}))

        repo = sap.rest.gcts.Repository(self.conn,
                                        self.repo_name,
                                        data=self.repo_server_data)
        act_commits = repo.log()

        self.assertIsNotNone(repo._data)
        self.assertEqual(act_commits, exp_commits)

        self.assertEqual(len(self.conn.execs), 1)
        self.conn.execs[0].assertEqual(
            Request.get_json(uri=f'repository/{self.repo_name}/getCommit'),
            self)
Ejemplo n.º 7
0
    def test_adt_wb_activate_children(self):
        adt_object = self.create_fake_object(
            '/sap/bc/adt/oo/classes/cl_hello_world', 'cl_hello_world', [
                Response(
                    status_code=200,
                    text=INACTIVE_OBJECTS_XML,
                    headers={
                        'Content-Type':
                        'application/vnd.sap.adt.inactivectsobjects.v1+xml'
                    }), EMPTY_RESPONSE_OK
            ])

        sap.adt.wb.activate(adt_object)

        conn = adt_object.connection

        self.assertEqual(conn.mock_methods(),
                         [('POST', '/sap/bc/adt/activation')] * 2)

        self.assertEqual(sorted(conn.execs[0].headers),
                         ['Accept', 'Content-Type'])
        self.assertEqual(conn.execs[0].headers['Accept'], 'application/xml')
        self.assertEqual(conn.execs[0].headers['Content-Type'],
                         'application/xml')

        self.assertEqual(sorted(conn.execs[0].params),
                         ['method', 'preauditRequested'])
        self.assertEqual(conn.execs[0].params['method'], 'activate')
        self.assertEqual(conn.execs[0].params['preauditRequested'], 'true')

        self.assertEqual(sorted(conn.execs[1].headers),
                         ['Accept', 'Content-Type'])
        self.assertEqual(conn.execs[1].headers['Accept'], 'application/xml')
        self.assertEqual(conn.execs[1].headers['Content-Type'],
                         'application/xml')

        self.assertEqual(sorted(conn.execs[1].params),
                         ['method', 'preauditRequested'])
        self.assertEqual(conn.execs[1].params['method'], 'activate')
        self.assertEqual(conn.execs[1].params['preauditRequested'], 'false')

        self.maxDiff = None
        self.assertEqual(conn.execs[0].body, PREAUDIT_ACTIVATION_XML)
        self.assertEqual(conn.execs[1].body, ACTIVATION_REFERENCES_XML)
Ejemplo n.º 8
0
    def test_adt_ddl_read(self):
        conn = Connection([Response(text=FIXTURE_CDS_CODE,
                                 status_code=200,
                                 headers={'Content-Type': 'text/plain; charset=utf-8'})])

        ddl = sap.adt.DataDefinition(conn, name='MyUsers')
        code = ddl.text

        self.assertEqual(conn.mock_methods(), [('GET', '/sap/bc/adt/ddic/ddl/sources/myusers/source/main')])

        get_request = conn.execs[0]
        self.assertEqual(sorted(get_request.headers), ['Accept'])
        self.assertEqual(get_request.headers['Accept'], 'text/plain')

        self.assertIsNone(get_request.params)
        self.assertIsNone(get_request.body)

        self.maxDiff = None
        self.assertEqual(code, FIXTURE_CDS_CODE)
Ejemplo n.º 9
0
    def test_workbench_list_transport(self):
        connection = Connection([Response(SHORTENED_WORKBENCH_XML, 200, {})],
                                user='******')

        with patch('sys.stdout', new_callable=StringIO) as fake_output:
            sap.cli.cts.print_list(
                connection,
                SimpleNamespace(type='transport',
                                recursive=0,
                                owner=None,
                                number=None))

        self.assertEqual([(request.adt_uri, request.params['user'])
                          for request in connection.execs],
                         [('/sap/bc/adt/cts/transportrequests', 'ANZEIGER')])

        self.assertEqual(
            fake_output.getvalue(),
            f'{TRANSPORT_NUMBER} D FILAK Transport Description\n')
Ejemplo n.º 10
0
    def test_simple_clone_without_params_create_exists(self):
        log_builder = LogBuilder()
        log_builder.log_error(
            make_gcts_log_error(
                '20200923111743: Error action CREATE_REPOSITORY Repository already exists'
            ))
        log_builder.log_exception('Cannot create', 'EEXIST').get_contents()
        messages = log_builder.get_contents()

        self.conn.set_responses(
            [Response.with_json(status_code=500, json=messages)])

        with self.assertRaises(
                sap.rest.gcts.GCTSRepoAlreadyExistsError) as caught:
            sap.rest.gcts.simple_clone(self.conn, self.repo_url,
                                       self.repo_name)

        self.assertEqual(str(caught.exception),
                         'gCTS exception: Cannot create')
Ejemplo n.º 11
0
    def test_create_task(self):
        self.connection.set_responses(
            Response(status_code=201, text=TASK_CREATE_OK_RESPONSE))

        self.task_1._number = None
        self.task_1._transport = self.transport.number
        self.task_1.create()
        self.maxDiff = None

        self.assertEqual(len(self.connection.execs), 1)
        self.connection.execs[0].assertEqual(Request.post_text(
            uri=
            f'/sap/bc/adt/cts/transportrequests/{self.task_1.transport}/tasks',
            accept='application/vnd.sap.adt.transportorganizer.v1+xml',
            body=f'''<?xml version="1.0" encoding="ASCII"?>
<tm:root xmlns:tm="http://www.sap.com/cts/adt/tm" tm:number="{self.task_1.transport}" tm:targetuser="******" tm:useraction="newtask"/>
'''),
                                             asserter=self)
        self.assertEqual(self.task_1.number, TASK_NUMBER)
Ejemplo n.º 12
0
    def test_create_with_role_and_type(self):
        self.conn.set_responses(
            Response.with_json(status_code=201,
                               json={'repository': self.repo_server_data}))

        repo = sap.rest.gcts.Repository(self.conn, self.repo_name)

        repo.create(self.repo_url, self.repo_vsid, role='TARGET', typ='GIT')

        repo_request = dict(self.repo_request)
        repo_request['data']['role'] = 'TARGET'
        repo_request['data']['type'] = 'GIT'

        self.maxDiff = None
        self.assertEqual(len(self.conn.execs), 1)
        self.conn.execs[0].assertEqual(Request.post_json(
            uri=f'repository', body=repo_request, accept='application/json'),
                                       self,
                                       json_body=True)
Ejemplo n.º 13
0
    def test_adt_class_fetch(self):
        conn = Connection([
            Response(
                text=GET_INTERFACE_ADT_XML,
                status_code=200,
                headers={
                    'Content-Type':
                    'application/vnd.sap.adt.oo.interfaces.v2+xml; charset=utf-8'
                })
        ])

        intf = sap.adt.Interface(conn, 'ZIF_HELLO_WORLD')
        intf.fetch()

        self.assertEqual(intf.name, 'ZIF_HELLO_WORLD')
        self.assertEqual(intf.active, 'active')
        self.assertEqual(intf.master_language, 'EN')
        self.assertEqual(intf.description, 'You cannot stop me!')
        self.assertEqual(intf.modeled, False)
Ejemplo n.º 14
0
    def test_fmod_chattr_rfc(self):
        connection = Connection([
            Response(
                text=GET_FUNCTION_MODULE_ADT_XML,
                status_code=200,
                headers={
                    'Content-Type':
                    'application/vnd.sap.adt.functions.fmodules.v2+xml; charset=utf-8'
                }), LOCK_RESPONSE_OK, EMPTY_RESPONSE_OK, EMPTY_RESPONSE_OK
        ])

        args = fm_parse_args('chattr', 'ZFG_HELLO_WORLD', 'Z_FN_HELLO_WORLD',
                             '-t', 'rfc')
        args.execute(connection, args)

        self.assertEqual([
            (e.method, e.adt_uri) for e in connection.execs
        ], [(
            'GET',
            '/sap/bc/adt/functions/groups/zfg_hello_world/fmodules/z_fn_hello_world'
        ),
            ('POST',
             '/sap/bc/adt/functions/groups/zfg_hello_world/fmodules/z_fn_hello_world'
             ),
            ('PUT',
             '/sap/bc/adt/functions/groups/zfg_hello_world/fmodules/z_fn_hello_world'
             ),
            ('POST',
             '/sap/bc/adt/functions/groups/zfg_hello_world/fmodules/z_fn_hello_world'
             )])

        put_req = connection.execs[2]

        self.assertEqual(sorted(put_req.headers.keys()), ['Content-Type'])
        self.assertEqual(put_req.headers['Content-Type'],
                         'application/vnd.sap.adt.functions.fmodules.v2+xml')

        self.assertEqual(sorted(put_req.params.keys()), ['lockHandle'])
        self.assertEqual(put_req.params['lockHandle'], 'win')

        self.maxDiff = None
        self.assertEqual(put_req.body, PUT_FUNCITON_MODULE_ADT_XML)
Ejemplo n.º 15
0
    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')
Ejemplo n.º 16
0
    def test_fetch_transport(self):
        self.connection.set_responses(
            Response(status_code=200, text=SHORTENED_TRANSPORT_XML))

        transport = sap.adt.cts.WorkbenchTransport([], self.connection,
                                                   TRANSPORT_NUMBER)
        transport.fetch()

        self.assertEqual(transport.description, 'Transport Description')
        self.assertEqual(transport.owner, 'FILAK')
        self.assertEqual(transport._status, 'D')
        self.assertEqual(transport.target, 'CTS_TARGET')

        self.assertEqual(len(transport.tasks), 1)
        task = transport.tasks[0]
        self.assertEqual(task.description, 'Task Description')
        self.assertEqual(task.owner, 'FILAK')
        self.assertEqual(task._status, 'D')

        self.assertIsNone(task.target)
Ejemplo n.º 17
0
    def test_create_transport(self):
        self.connection.set_responses(
            Response(status_code=201, text=TRANSPORT_CREATE_OK_RESPONSE))

        self.transport._number = None
        self.transport.create()
        self.maxDiff = None
        self.assertEqual(self.connection.execs, [
            Request.post_text(
                uri='/sap/bc/adt/cts/transportrequests',
                accept='application/vnd.sap.adt.transportorganizer.v1+xml',
                body=f'''<?xml version="1.0" encoding="UTF-8"?>
<tm:root xmlns:tm="http://www.sap.com/cts/adt/tm" tm:useraction="newrequest">
  <tm:request tm:desc="{self.transport.description}" tm:type="K" tm:target="{self.transport.target}" tm:cts_project="">
    <tm:task tm:owner="{self.transport.owner}"/>
  </tm:request>
</tm:root>
''')
        ])
        self.assertEqual(self.transport.number, TRANSPORT_NUMBER)
Ejemplo n.º 18
0
    def test_fetch_profiles(self):
        conn = Connection(
            [Response(status_code=200, text=ADT_XML_PROFILES_TABLE)])

        profiles = sap.adt.atc.fetch_profiles(conn)

        self.assertEqual(
            profiles, {
                'PROFILE1': {
                    'changed': '20080415161735',
                    'changed_by': 'CHGUSER1',
                    'created': '20010309180000',
                    'created_by': 'CREUSER1'
                },
                'PROFILE2': {
                    'changed': '00000000000000',
                    'changed_by': '',
                    'created': '20010328100000',
                    'created_by': 'CREUSER2'
                }
            })
Ejemplo n.º 19
0
    def test_stat_existing(self):

        conn = Connection(
            [Response(status_code=200, headers={}, text=GET_PACKAGE_ADT_XML)])

        args = parse_args('stat', '$IAMTHEKING')

        exit_code = args.execute(conn, args)
        self.assertEqual(exit_code, sap.cli.core.EXIT_CODE_OK)

        self.assertEqual(len(conn.execs), 1)

        self.assertConsoleContents(
            self.console,
            stdout='''Name                   :$IAMTHEKING
Active                 :active
Application Component  :-
Software Component     :LOCAL
Transport Layer        :
Package Type           :development
''')
Ejemplo n.º 20
0
    def test_adt_package_fetch(self):
        conn = Connection([
            Response(
                text=GET_PACKAGE_ADT_XML,
                status_code=200,
                headers={
                    'Content-Type':
                    'application/vnd.sap.adt.packages.v1+xml; charset=utf-8'
                })
        ])

        package = sap.adt.Package(conn, '$IAMTHEKING')
        package.fetch()

        self.assertEqual(len(conn.execs), 1)

        self.assertEqual(conn.mock_methods(),
                         [('GET', '/sap/bc/adt/packages/%24iamtheking')])

        self.maxDiff = None
        self.assertEqual(package.description, 'This is a package')
Ejemplo n.º 21
0
    def do_check_release(self, factory):
        """Check it correctly builds the URL with parameters and returns
           the expected data.
        """

        connection = Connection([Response(TASK_RELEASE_OK_RESPONSE, 200, {})])

        wbr = factory(connection, TASK_NUMBER)
        resp = wbr.release()

        self.assertEqual(connection.execs, [
            Request(
                'POST',
                f'/sap/bc/adt/cts/transportrequests/{TASK_NUMBER}/newreleasejobs',
                {
                    'Accept':
                    'application/vnd.sap.adt.transportorganizer.v1+xml'
                }, None, None)
        ])

        self.assertEqual(resp, TASK_RELEASE_OK_RESPONSE)
Ejemplo n.º 22
0
    def test_create_with_config_instance_none(self):
        self.conn.set_responses(
            Response.with_json(status_code=201,
                               json={'repository': self.repo_server_data}))

        repo = sap.rest.gcts.Repository(self.conn, self.repo_name)
        repo.create(self.repo_url,
                    self.repo_vsid,
                    config={'THE_KEY': 'THE_VALUE'})

        repo_request = dict(self.repo_request)
        repo_request['data']['config'] = [{
            'key': 'THE_KEY',
            'value': 'THE_VALUE'
        }]

        self.assertEqual(len(self.conn.execs), 1)
        self.conn.execs[0].assertEqual(Request.post_json(
            uri=f'repository', body=repo_request, accept='application/json'),
                                       self,
                                       json_body=True)
    def test_adt_include_fetch(self):
        conn = Connection([
            Response(text=GET_INCLUDE_PROGRAM_ADT_XML,
                     status_code=200,
                     headers={})
        ])
        include = sap.adt.Include(conn, 'ZHELLO_INCLUDE')
        include.fetch()

        self.assertEqual(
            conn.mock_methods(),
            [('GET', '/sap/bc/adt/programs/includes/zhello_include')])

        get_request = conn.execs[0]
        self.assertIsNone(get_request.params)
        self.assertIsNone(get_request.headers)

        self.assertEqual(include.name, 'ZHELLO_INCLUDE')
        self.assertEqual(include.active, 'inactive')
        self.assertEqual(include.master_language, 'EN')
        self.assertEqual(include.description, 'Hello include!')
        self.assertEqual(include.fix_point_arithmetic, False)
Ejemplo n.º 24
0
    def test_checkout_ok(self):
        self.conn.set_responses(
            Response.with_json(
                status_code=200,
                json={'result': {
                    'fromCommit': '123',
                    'toCommit': '456'
                }}))

        repo = sap.rest.gcts.Repository(self.conn,
                                        self.repo_name,
                                        data=self.repo_server_data)
        repo.checkout('the_other_branch')

        self.assertIsNone(repo._data)

        self.assertEqual(len(self.conn.execs), 1)
        self.conn.execs[0].assertEqual(
            Request.get(
                adt_uri=
                f'repository/{self.repo_name}/branches/the_branch/switch',
                params={'branch': 'the_other_branch'}), self)
Ejemplo n.º 25
0
    def test_fech_reporters_ok(self):
        connection = Connection([
            Response(status_code=200,
                     headers={
                         'Content-Type':
                         'application/vnd.sap.adt.reporters+xml'
                     },
                     text=ADT_XML_CHECK_REPORTERS)
        ])

        result = sap.adt.checks.fetch_reporters(connection)

        self.assertIsInstance(result, list)
        self.assertEqual(3, len(result))

        self.assertEqual(result[0].name, 'abapCheckRun')
        self.assertEqual(result[1].name, 'abapPackageCheck')
        self.assertEqual(result[2].name, 'tableStatusCheck')

        self.assertEqual(result[0].supported_types, ['WDYN*', 'CLAS*', 'WGRP'])
        self.assertEqual(result[1].supported_types, ['PROG*', 'INTF*', 'HTTP'])
        self.assertEqual(result[2].supported_types, ['TABL/DT'])
Ejemplo n.º 26
0
    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')
Ejemplo n.º 27
0
    def test_simple_fetch_ok(self):
        REPO_ONE_ID = 0
        repo_one = dict(self.repo_server_data)
        repo_one['name'] = repo_one['rid'] = 'one'

        REPO_TWO_ID = 1
        repo_two = dict(self.repo_server_data)
        repo_two['name'] = repo_two['rid'] = 'two'

        self.conn.set_responses(
            Response.with_json(status_code=200,
                               json={'result': [repo_one, repo_two]}))

        repos = sap.rest.gcts.simple_fetch_repos(self.conn)

        self.assertEqual(len(repos), 2)
        self.assertEqual(repos[REPO_ONE_ID].name, 'one')
        self.assertEqual(repos[REPO_TWO_ID].name, 'two')

        self.assertEqual(len(self.conn.execs), 1)
        self.conn.execs[0].assertEqual(Request.get_json(uri=f'repository'),
                                       self)
Ejemplo n.º 28
0
    def test_adt_wb_activation_warnings(self):
        adt_object = self.create_fake_object(
            '/sap/bc/adt/oo/classes/cl_hello_world', 'cl_hello_world', [
                Response(
                    status_code=200, text=ACTIVATION_WARNING_XML, headers={})
            ])

        results = sap.adt.wb.activate(adt_object)

        self.assertTrue(results.generated)
        self.assertTrue(results.has_warnings)
        self.assertFalse(results.has_errors)

        messages = results.messages

        self.assertEqual(len(messages), 2)

        self.assertEqual(messages[0].typ, 'W')
        self.assertEqual(messages[0].short_text, 'Message 1')
        self.assertEqual(messages[0].force_supported, 'true')

        self.assertEqual(messages[1].typ, 'W')
        self.assertEqual(messages[1].short_text, 'Warning 2')
        self.assertEqual(messages[1].force_supported, 'true')
Ejemplo n.º 29
0
    def test_fetch_task(self):
        self.connection.set_responses(
            Response(status_code=200, text=SHORTENED_TASK_XML))

        task = sap.adt.cts.WorkbenchTask(None, [], self.connection,
                                         TASK_NUMBER)
        task.fetch()

        self.assertEqual(task.transport, TRANSPORT_NUMBER)
        self.assertEqual(task.description, 'Task Description')
        self.assertEqual(task.owner, 'FILAK')
        self.assertEqual(task.objects, [
            WorkbenchABAPObject(
                pgmid='LIMU',
                type='FUNC',
                name='TR_REQ_CHECK_OBJECTS_AND_KEYS',
                wbtype='FUGR/FF',
                description='Prüfe Objekte und Schlüssel in einem Auftrag',
                locked=True,
                position='000001')
        ])
        self.assertEqual(task._status, 'D')

        self.assertIsNone(task.target)
Ejemplo n.º 30
0
import sap.adt
from sap.adt.objects import xmlns_adtcore_ancestor
from sap.adt.annotations import xml_element, XmlElementKind

from mock import Response

OBJECT_METADATA = sap.adt.ADTCoreData(language='EN', master_language='EN', master_system='NPL', responsible='FILAK')

EMPTY_RESPONSE_OK = Response(text='', status_code=200, headers={})

LOCK_RESPONSE_OK = Response(text='<sap><LOCK_HANDLE>win</LOCK_HANDLE></sap>',
                            status_code=200,
                            headers={'Content-Type': 'dataname=com.sap.adt.lock.Result'})

DEFINITIONS_READ_RESPONSE_OK = Response(text='* definitions',
                                         status_code=200,
                                         headers={'Content-Type': 'text/plain; charset=utf-8'})

IMPLEMENTATIONS_READ_RESPONSE_OK = Response(text='* implementations',
                                         status_code=200,
                                         headers={'Content-Type': 'text/plain; charset=utf-8'})

TEST_CLASSES_READ_RESPONSE_OK = Response(text='* test classes',
                                         status_code=200,
                                         headers={'Content-Type': 'text/plain; charset=utf-8'})

TASK_NUMBER='1A2B3C4D5E'
TRANSPORT_NUMBER='E5D4C3B2A1'

TASK_RELEASE_OK_RESPONSE = f'''<?xml version="1.0" encoding="UTF-8"?>
<tm:root xmlns:tm="http://www.sap.com/cts/adt/tm" tm:useraction="newreleasejobs" tm:releasetimestamp="20190212191502 " tm:number="{TASK_NUMBER}">