def test_activate_objects_with_ignored_error(self): connection = MagicMock() args = self.parse_args('activate', '--ignore-errors', 'myname', 'anothername') message_builder = MessageBuilder() response_iter = iter([(message_builder.build_results_without_messages(), None), (message_builder.build_results_with_errors(), None)]) with patch('sap.adt.wb.try_activate') as fake_activate, \ patch_get_print_console_with_buffer() as fake_console: fake_activate.side_effect = lambda x: next(response_iter) exit_code = args.execute(connection, args) self.assertEqual(exit_code, 1) self.assertEqual(fake_console.return_value.std_output.getvalue(), f'''Activating 2 objects: * myname (1/2) * anothername (2/2) {message_builder.error_message[1]}Activation has finished Warnings: 0 Errors: 1 Inactive objects: FAKE anothername ''')
def test_write_object_text_name_from_files_activate(self, fake_activate): connection = MagicMock() args = self.parse_args('write', '-', 'z_one.abap', 'z_one.incl.abap', 'z_two.abap', '--corrnr', '123456', '--activate') fake_activate.return_value = (sap.adt.wb.CheckResults(), None) with patch('sap.cli.object.open', mock_open(read_data='source code')) as fake_open, \ patch_get_print_console_with_buffer() as fake_console: args.execute(connection, args) self.assertEqual(fake_activate.call_args_list, [ call(self.group.new_object_mock), call(self.group.new_object_mock) ]) self.assertEqual( fake_console.return_value.std_output.getvalue(), '''Writing: * str(z_one) * str(z_one) * str(z_two) Activating 2 objects: * z_one (1/2) * z_two (2/2) Activation has finished Warnings: 0 Errors: 0 ''')
def test_activate_objects(self): connection = MagicMock() args = self.parse_args('activate', 'myname', 'anothername') with patch('sap.adt.wb.try_activate') as fake_activate, \ patch_get_print_console_with_buffer() as fake_console: fake_activate.return_value = (sap.adt.wb.CheckResults(), None) exit_code = args.execute(connection, args) self.assertEqual(exit_code, 0) self.assertEqual(fake_activate.call_args_list, [call(self.group.new_object_mock), call(self.group.new_object_mock)]) self.assertEqual(self.group.instace_mock.call_args_list, [call(connection, 'myname', args, metadata=None), call(connection, 'anothername', args, metadata=None)]) self.assertEqual(fake_console.return_value.std_output.getvalue(), '''Activating 2 objects: * myname (1/2) * anothername (2/2) Activation has finished Warnings: 0 Errors: 0 ''')
def test_handle_results_with_errors_no_continue(self): with self.assertRaises(sap.cli.wb.StopObjectActivation) as caught, \ patch_get_print_console_with_buffer() as fake_console: self.worker.handle_results( 'CL_NO_MESSAGES', self.activated_object, self.message_builder.build_results_with_errors(), self.stats) self.assert_error_message_output(fake_console) self.assert_error_stats(caught.exception.stats)
def test_handle_message(self): message, lines = self.message_builder.build_warning() with patch_get_print_console_with_buffer() as fake_console: self.worker.handle_message(message) self.assertEqual(fake_console.return_value.err_output.getvalue(), '') self.assertEqual(fake_console.return_value.std_output.getvalue(), lines)
def test_handle_results_with_warnings(self): with patch_get_print_console_with_buffer() as fake_console: stats = self.worker.handle_results( 'CL_NO_MESSAGES', self.activated_object, self.message_builder.build_results_with_warnings(), self.stats) self.assert_warning_message_output(fake_console) self.assert_warning_stats(self.stats) self.assertEqual(self.stats.errors, 0)
def test_handle_results_with_errors_continue(self): self.worker.continue_on_errors = True with patch_get_print_console_with_buffer() as fake_console: stats = self.worker.handle_results( 'CL_NO_MESSAGES', self.activated_object, self.message_builder.build_results_with_errors(), self.stats) self.assert_error_message_output(fake_console) self.assert_error_stats(self.stats)
def test_handle_results_without_messages(self): with patch_get_print_console_with_buffer() as fake_console: self.worker.handle_results( 'CL_NO_MESSAGES', self.activated_object, self.message_builder.build_results_without_messages(), self.stats) self.assertEqual(fake_console.return_value.err_output.getvalue(), '') self.assertEqual(fake_console.return_value.std_output.getvalue(), '') self.assert_ok_stats(self.stats)
def test_begin(self): cases = [(None, 'Activating:\n'), (1, 'Activating:\n'), (2, 'Activating 2 objects:\n')] for no, case in enumerate(cases): with patch_get_print_console_with_buffer() as fake_console: self.worker.begin(case[0]) self.assertEqual(fake_console.return_value.err_output.getvalue(), '', f'Case {no}') self.assertEqual(fake_console.return_value.std_output.getvalue(), case[1], f'Case {no}')
def test_handle_results_with_warnings_and_stop(self): self.worker.warnings_as_errors = True with self.assertRaises(sap.cli.wb.StopObjectActivation) as caught, \ patch_get_print_console_with_buffer() as fake_console: self.worker.handle_results( 'CL_NO_MESSAGES', self.activated_object, self.message_builder.build_results_with_warnings(), self.stats) self.assert_warning_message_output(fake_console) self.assert_warning_stats(caught.exception.stats) self.assertEqual(caught.exception.stats.errors, 1)
def test_start_object(self): cases = [('CL_NONE', 1, None, '* CL_NONE\n'), ('CL_ONE', 1, 1, '* CL_ONE\n'), ('CL_TWO', 1, 2, '* CL_TWO (1/2)\n')] for no, case in enumerate(cases): with patch_get_print_console_with_buffer() as fake_console: self.worker.start_object(case[0], case[1], case[2]) self.assertEqual(fake_console.return_value.err_output.getvalue(), '', f'Case {no}') self.assertEqual(fake_console.return_value.std_output.getvalue(), case[3], f'Case {no}')
def test_activate_sequentially(self): with patch('sap.adt.wb.try_activate') as fake_try_activate, \ patch_get_print_console_with_buffer() as fake_console: fake_try_activate.return_value = ( self.message_builder.build_results_without_messages(), None) items = (itm for itm in [('mock_obj_name', self.activated_object)]) stats = self.worker.activate_sequentially(items, count=2) self.assertEqual(fake_console.return_value.err_output.getvalue(), '') self.assertEqual(fake_console.return_value.std_output.getvalue(), '''Activating 2 objects: * mock_obj_name (1/2) ''') self.assert_ok_stats(stats)
def test_cli_ddl_activate_defaults(self, fake_ddl, fake_activate): instances = [] def add_instance(conn, name): ddl = Mock() ddl.name = name instances.append(ddl) return ddl fake_ddl.side_effect = add_instance fake_conn = Mock() fake_activate.return_value = (sap.adt.wb.CheckResults(), None) args = parse_args(['activate', 'myusers', 'mygroups']) with patch_get_print_console_with_buffer() as fake_get_console: args.execute(fake_conn, args) self.assertEqual( fake_ddl.mock_calls, [call(fake_conn, 'myusers'), call(fake_conn, 'mygroups')]) self.assertEqual(instances[0].name, 'myusers') self.assertEqual(instances[1].name, 'mygroups') self.assertEqual( fake_activate.mock_calls, [call(instances[0]), call(instances[1])]) self.assertEqual(fake_get_console.return_value.err_output.getvalue(), '') self.assertEqual( fake_get_console.return_value.std_output.getvalue(), '''Activating 2 objects: * myusers (1/2) * mygroups (2/2) Activation has finished Warnings: 0 Errors: 0 ''')
def test_inactiveobjects_list(self, fake_fetch): conn = Mock() ioc_list_builder = IOCObjectListBuilder() ioc_class = ioc_list_builder.add_class('CL_PARENT_CLASS') ioc_class_method = ioc_list_builder.add_class_method(ioc_class, 'RUN') ioc_list_builder.add_class('CL_ANOTHER_CLASS') child_of_child = sap.adt.wb.IOCEntry() child_of_child.object = sap.adt.wb.IOCEntryData() child_of_child.object.reference.name = 'FAKE' child_of_child.object.reference.typ = 'SAPCLI/PYTEST' child_of_child.object.reference.parent_uri = ioc_class_method.object.uri ioc_list_builder.objects.entries.append(child_of_child) # BEGIN: malicious re-add already added objects # needed to test all statements of the function inactiveobjects_list ioc_list_builder.objects.entries.append(ioc_class) ioc_list_builder.objects.entries.append(ioc_class_method) # END fake_fetch.return_value = ioc_list_builder.objects args = INACTIVEOBJECTS_PARSER.parse('list') std_output = StringIO() err_output = StringIO() with patch_get_print_console_with_buffer() as fake_get_console: args.execute(conn, args) self.assertEqual("", fake_get_console.return_value.err_output.getvalue()) self.assertEqual( fake_get_console.return_value.std_output.getvalue(), """CL_PARENT_CLASS (CLAS/OC) + CL_PARENT_CLASS===RUN (CLAS/OC/M) CL_ANOTHER_CLASS (CLAS/OC) FAKE (SAPCLI/PYTEST) """)