def test_WebInspectScan_webinspect_git_clone_failure_type_error(
        scan_mock, scan_overrides_mock, wi_config_mock, config_mock, os_mock,
        log_mock):
    # Given
    overrides = _setup_overrides()
    scan_object = WebInspectScan(overrides)
    config_mock.side_effect = TypeError

    # When
    scan_object._webinspect_git_clone()

    # Expect
    assert log_mock.call_count == 1
def test_WebInspectScan_webinspect_git_clone_failure_attribute_error(
        scan_mock, scan_overrides_mock, wi_config_mock, config_mock, os_mock,
        os_path_exists_mock, log_mock):
    # Given
    overrides = _setup_overrides()
    scan_object = WebInspectScan(overrides)
    os_path_exists_mock.side_effect = AttributeError

    # When
    with pytest.raises(AttributeError):
        scan_object._webinspect_git_clone()

    # Expect
    assert log_mock.call_count == 1
def test_WebInspectScan_webinspect_git_clone_not_default_with_valid_git_dir_success(
        scan_mock, scan_overrides_mock, wi_config_mock, config_mock, os_mock,
        log_mock, check_output_mock):
    # Given
    overrides = _setup_overrides()
    scan_object = WebInspectScan(overrides)
    # Kinda weird, have to set it like this since we mock scan overrides.
    scan_object.scan_overrides.settings = 'NotDefault'

    # When
    scan_object._webinspect_git_clone()

    # Expect
    assert log_mock.call_count == 1
    assert check_output_mock.call_count == 3
def test_WebinspectScan_init_success(scan_mock, scan_override_mock, wi_config_mock, config_git_mock):
    # Given
    overrides = _setup_overrides()  # empty dictionary

    # When
    scan_object = WebInspectScan(overrides)

    # Expect
    assert config_git_mock.call_count == 1
    assert wi_config_mock.call_count == 1
    assert scan_mock.call_count == 1
def test_WebInspectScan_webinspect_git_clone_default_success(scan_mock, scan_overrides_mock, wi_config_mock, config_mock,
                                                     os_mock, log_mock):
    # Given
    overrides = _setup_overrides()

    # When
    scan_object = WebInspectScan(overrides)

    # Expect
    assert log_mock.call_count == 1
    assert config_mock.call_count == 1
def test_WebInspectScan_webinspect_git_clone_not_default_with_valid_git_dir_success(scan_mock, scan_overrides_mock, wi_config_mock, config_mock,
                                                     os_mock, log_mock, check_output_mock):
    # Given
    overrides = _setup_overrides(expected_settings='NotDefault')

    # When
    scan_object = WebInspectScan(overrides)

    # Expect
    assert log_mock.call_count == 1
    assert check_output_mock.call_count == 3
def test_WebInspectScan_scan_failure_http_error(scan_override_mock, wi_config_mock, auth_mock, git_clone_mock,
                                                      upload_settings_policies_mock, _scan_mock, api_create_scan_mock,
                                                      log_error_mock):
    # Given
    overrides = _setup_overrides()
    auth_mock.return_value.authenticate.return_value = ("expected_username", "expected_password")
    _scan_mock.side_effect = requests.HTTPError

    # When
    with pytest.raises(SystemExit):
        scan = WebInspectScan(overrides)

    # Expect
    assert log_error_mock.call_count == 1
def test_WebInspectScan_scan_complete_success(scan_mock, scan_override_mock, wi_config_mock, config_git_mock,
                                              get_status_mock, export_mock):
    # Given
    overrides = _setup_overrides()
    scan_object = WebInspectScan(overrides)
    scan_object._set_api(None, None)
    scan_object.scan_id = "test_guid"
    get_status_mock.return_value = 'complete'

    # When
    scan_object._scan()

    # Expect
    assert export_mock.call_count == 2
def test_WebInspectScan_scan_success(scan_override_mock, wi_config_mock, auth_mock, git_clone_mock,
                                     upload_settings_policies_mock, _scan_mock, api_create_scan_mock, xml_parsing_mock):
    # Given
    overrides = _setup_overrides()
    auth_mock.return_value.authenticate.return_value = ("expected_username", "expected_password")


    # When
    scan = WebInspectScan(overrides)

    # Expect
    assert api_create_scan_mock.call_count == 1
    assert _scan_mock.call_count == 1
    assert upload_settings_policies_mock.call_count == 1
    assert git_clone_mock.call_count == 1
    assert xml_parsing_mock.call_count == 1
def test_WebInspectScan_scan_bad_state_failure(scan_mock, scan_override_mock, wi_config_mock, config_git_mock,
                                              get_status_mock, log_mock):
    # Given
    overrides = _setup_overrides()
    scan_object = WebInspectScan(overrides)
    scan_object._set_api(None, None)
    scan_object.scan_id = "test_guid"
    get_status_mock.return_value = 'SomeRandomState'  # any non: Running, NotRunning, Complete state

    # When
    with pytest.raises(SystemExit):
        scan_object._scan()

    # Expect
    assert log_mock.call_count == 1
def test_WebInspectScan_scan_failure_none_type_scan_status(scan_mock, scan_override_mock, wi_config_mock, config_git_mock,
                                              get_status_mock, log_mock):
    # Given
    overrides = _setup_overrides()
    scan_object = WebInspectScan(overrides)
    scan_object._set_api(None, None)
    scan_object.scan_id = "test_guid"
    get_status_mock.return_value = None  # Sometimes we got a None response - we want to exit on that(?)

    # When
    with pytest.raises(SystemExit):
        scan_object._scan()

    # Expect
    assert log_mock.call_count == 1
def test_WebInspectScan_exit_gracefully_success(scan_mock, scan_override_mock, wi_config_mock, config_git_mock,
                                                       stop_scan_mock):
    # Given
    overrides = _setup_overrides()

    scan_object = WebInspectScan(overrides)
    scan_object._set_api(None, None)
    scan_object.scan_id = "scan_guid"  # this gets set when a scan is created - we're not creating a scan here.

    # When
    with pytest.raises(SystemExit):
        scan_object._exit_scan_gracefully("scan_guid")

    # Expect
    assert stop_scan_mock.call_count == 1
Beispiel #13
0
def webinspect_scan(**kwargs):
    # handle deprecated click option warnings
    if kwargs['upload_policy']:
        Logger.app.critical(
            "--upload_policy is a deprecated option because of underuse, if you believe there is a "
            "valid use for this please make a github issue")

    if kwargs['upload_webmacros']:
        Logger.app.critical(
            "--upload_webmacros is a deprecated option because of underuse, if you believe there is a "
            "valid use for this please make a github issue")

    if kwargs['upload_settings']:
        Logger.app.critical(
            "--upload_settings is a deprecated option because of underuse, if you believe there is a "
            "valid use for this please make a github issue")

    WebInspectScan(kwargs.copy())
def test_WebInspectScan_stop_scan_success(scan_mock, scan_override_mock, wi_config_mock, config_git_mock,
                                                       stop_scan_mock):
    # Given
    overrides = _setup_overrides()

    scan_object = WebInspectScan(overrides)
    scan_object._set_api(None, None)

    # When
    scan_object._stop_scan("scan_guid")

    # Expect
    assert stop_scan_mock.call_count == 1
def test_WebInspectScan_scan_not_running_failure(scan_mock, scan_override_mock,
                                                 wi_config_mock,
                                                 config_git_mock,
                                                 get_status_mock,
                                                 stop_scan_mock):
    # Given
    overrides = _setup_overrides()
    scan_object = WebInspectScan(overrides)
    scan_object._set_api(None, None)
    scan_object.scan_id = "test_guid"
    get_status_mock.return_value = 'notrunning'

    # When
    with pytest.raises(SystemExit):
        scan_object._scan()

    # Expect
    assert stop_scan_mock.call_count == 1
def test_xml_parsing_success(scan_mock, scan_overrides_mock, wi_config_mock, config_mock, write_to_console_mock,
                             write_to_json_mock, element_tree_mock, get_time_mock):
    # Given
    overrides = _setup_overrides()
    scan_object = WebInspectScan(overrides)
    scan_object.scan_overrides.settings = 'litecart'
    scan_object.scan_id = "test_scan_id"
    scan_object.scan_overrides.scan_name = "test_scan_name"
    filename = "test.xml"
    scan_object.start_time = '2013-02-01 10:10:08'
    get_time_mock.side_effect = ['2013-02-01 10:11:08']

    #When
    scan_object.xml_parsing(filename)

    #Expect
    assert scan_mock.call_count == 1
    assert write_to_console_mock.call_count == 1
    assert write_to_json_mock.call_count == 1
    write_to_json_mock.assert_called_once_with('test.xml', 'test_scan_name', 'test_scan_id', '2013-02-01 10:10:08', '2013-02-01 10:11:08')
    write_to_console_mock.assert_called_once_with("test_scan_name")
def test_WebInspectScan_upload_settings_and_policies_success(scan_mock, scan_override_mock, wi_config_mock,
                                                             config_git_mock, verify_scan_mock, upload_settings_mock,
                                                             upload_webmacros_mock, upload_policy_mock):
    # Given
    overrides = _setup_overrides(expected_upload_settings="settings.xml", expected_upload_webmacro="upload.macro",
                                 expected_upload_policy="test policy?")

    scan_object = WebInspectScan(overrides)
    # below was done to logically isolate this test - which was harder to do than I thought.
    #   since self.webinspect_api isn't declared in the init and we have mocked the function that creates
    #   it, we have to set the api.
    scan_object._set_api(None, None)
    scan_object.webinspect_api.setting_overrides.webinspect_upload_policy = True
    scan_object.webinspect_api.setting_overrides.scan_policy = None
    # When
    scan_object._upload_settings_and_policies()

    # Expect
    assert verify_scan_mock.call_count == 1
    assert upload_settings_mock.call_count == 1
    assert upload_webmacros_mock.call_count == 1
    assert upload_policy_mock.call_count == 1