Commit 22914612 authored by Dheeraj Joshi's avatar Dheeraj Joshi Committed by Paul Slaughter

Update DAST profile summary to hide empty values

This is to improve UX by removing empty values to
be shown in profile summary card

Changelog: changed
EE: true
parent 11f4c756
<script>
import { SCAN_TYPE_LABEL } from 'ee/security_configuration/dast_profiles/dast_scanner_profiles/constants';
import ProfileSelectorSummaryCell from './summary_cell.vue';
import SummaryCell from './summary_cell.vue';
export default {
name: 'DastScannerProfileSummary',
components: {
ProfileSelectorSummaryCell,
SummaryCell,
},
props: {
profile: {
......@@ -23,30 +23,25 @@ export default {
</script>
<template>
<div>
<div class="row">
<profile-selector-summary-cell
<summary-cell
:class="{ 'gl-text-red-500': hasConflict }"
:label="s__('DastProfiles|Scan mode')"
:value="$options.SCAN_TYPE_LABEL[profile.scanType]"
/>
</div>
<div class="row">
<profile-selector-summary-cell
<summary-cell
:label="s__('DastProfiles|Spider timeout')"
:value="n__('%d minute', '%d minutes', profile.spiderTimeout || 0)"
/>
<profile-selector-summary-cell
<summary-cell
:label="s__('DastProfiles|Target timeout')"
:value="n__('%d second', '%d seconds', profile.targetTimeout || 0)"
/>
</div>
<div class="row">
<profile-selector-summary-cell
<summary-cell
:label="s__('DastProfiles|AJAX spider')"
:value="profile.useAjaxSpider ? __('On') : __('Off')"
/>
<profile-selector-summary-cell
<summary-cell
:label="s__('DastProfiles|Debug messages')"
:value="
profile.showDebugMessages
......@@ -55,5 +50,4 @@ export default {
"
/>
</div>
</div>
</template>
......@@ -5,12 +5,12 @@ import {
} from 'ee/security_configuration/dast_profiles/dast_site_profiles/constants';
import { DAST_SITE_VALIDATION_STATUS } from 'ee/security_configuration/dast_site_validation/constants';
import { s__ } from '~/locale';
import ProfileSelectorSummaryCell from './summary_cell.vue';
import SummaryCell from './summary_cell.vue';
export default {
name: 'DastSiteProfileSummary',
components: {
ProfileSelectorSummaryCell,
SummaryCell,
},
props: {
profile: {
......@@ -39,6 +39,7 @@ export default {
? s__('DastProfiles|Excluded paths')
: s__('DastProfiles|Excluded URLs'),
requestHeaders: s__('DastProfiles|Request headers'),
validationStatus: s__('DastProfiles|Validation status'),
};
},
hasExcludedUrls() {
......@@ -66,47 +67,25 @@ export default {
</script>
<template>
<div>
<div class="row">
<profile-selector-summary-cell
<summary-cell
:class="{ 'gl-text-red-500': hasConflict }"
:label="i18n.targetUrl"
:value="profile.targetUrl"
/>
<profile-selector-summary-cell :label="i18n.targetType" :value="targetTypeValue" />
</div>
<summary-cell :label="i18n.targetType" :value="targetTypeValue" />
<template v-if="profile.auth.enabled">
<div class="row">
<profile-selector-summary-cell :label="i18n.authUrl" :value="profile.auth.url" />
</div>
<div class="row">
<profile-selector-summary-cell :label="i18n.username" :value="profile.auth.username" />
<profile-selector-summary-cell :label="i18n.password" value="••••••••" />
</div>
<div class="row">
<profile-selector-summary-cell
:label="i18n.usernameField"
:value="profile.auth.usernameField"
/>
<profile-selector-summary-cell
:label="i18n.passwordField"
:value="profile.auth.passwordField"
/>
</div>
<summary-cell :label="i18n.authUrl" :value="profile.auth.url" />
<summary-cell :label="i18n.username" :value="profile.auth.username" />
<summary-cell :label="i18n.password" value="••••••••" />
<summary-cell :label="i18n.usernameField" :value="profile.auth.usernameField" />
<summary-cell :label="i18n.passwordField" :value="profile.auth.passwordField" />
</template>
<div class="row">
<profile-selector-summary-cell :label="i18n.excludedUrls" :value="displayExcludedUrls" />
<profile-selector-summary-cell
<summary-cell :label="i18n.excludedUrls" :value="displayExcludedUrls" />
<summary-cell
:label="i18n.requestHeaders"
:value="profile.requestHeaders ? __('[Redacted]') : undefined"
/>
</div>
<div class="row">
<profile-selector-summary-cell
:label="s__('DastProfiles|Validation status')"
:value="isProfileValidated"
/>
</div>
<summary-cell :label="i18n.validationStatus" :value="isProfileValidated" />
</div>
</template>
<script>
import { __ } from '~/locale';
export default {
name: 'OnDemandScansProfileSummaryCell',
props: {
......@@ -11,14 +9,14 @@ export default {
value: {
type: String,
required: false,
default: __('None'),
default: null,
},
},
};
</script>
<template>
<div class="col-md-6">
<div v-if="value" class="col-md-6">
<div class="row gl-my-2">
<div class="col-md-4">{{ label }}:</div>
<div class="col-md-8">
......
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`DastScannerProfileSummary renders properly 1`] = `
<div>
<div
<div
class="row"
>
<profile-selector-summary-cell-stub
>
<summary-cell-stub
class=""
label="Scan mode"
value="Passive"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Spider timeout"
value="5 minutes"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Target timeout"
value="10 seconds"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="AJAX spider"
value="Off"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Debug messages"
value="Hide debug messages"
/>
</div>
</div>
`;
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`DastSiteProfileSummary renders properly profile 0 1`] = `
<div>
<div
<div
class="row"
>
<profile-selector-summary-cell-stub
>
<summary-cell-stub
class=""
label="Target URL"
value="http://pending.test"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Site type"
value="Website"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Authentication URL"
value="http://pending.test/sign-in"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Username"
value="validation-pending@example.com"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Password"
value="••••••••"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Username form field"
value="session[username]"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Password form field"
value="session[password]"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Excluded URLs"
value="http://pending.test/sign-out,http://pending.test/hidden"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Request headers"
value="None"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Validation status"
value="Not Validated"
/>
</div>
</div>
`;
exports[`DastSiteProfileSummary renders properly profile 1 1`] = `
<div>
<div
<div
class="row"
>
<profile-selector-summary-cell-stub
>
<summary-cell-stub
class=""
label="Target URL"
value="http://inprogress.test"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Site type"
value="Website"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Authentication URL"
value="http://inprogress.test/sign-in"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Username"
value="validation-in-progress@example.com"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Password"
value="••••••••"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Username form field"
value="session[username]"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Password form field"
value="session[password]"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Excluded URLs"
value="http://inprogress.test/sign-out,http://inprogress.test/hidden"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Request headers"
value="None"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Validation status"
value="Not Validated"
/>
</div>
</div>
`;
exports[`DastSiteProfileSummary renders properly profile 2 1`] = `
<div>
<div
<div
class="row"
>
<profile-selector-summary-cell-stub
>
<summary-cell-stub
class=""
label="Target URL"
value="http://passed.test"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Site type"
value="Website"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Authentication URL"
value="http://passed.test/sign-in"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Username"
value="validation-passed@example.com"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Password"
value="••••••••"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Username form field"
value="session[username]"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Password form field"
value="session[password]"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Excluded URLs"
value="http://passed.test/sign-out,http://passed.test/hidden"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Request headers"
value="None"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Validation status"
value="Validated"
/>
</div>
</div>
`;
exports[`DastSiteProfileSummary renders properly profile 3 1`] = `
<div>
<div
<div
class="row"
>
<profile-selector-summary-cell-stub
>
<summary-cell-stub
class=""
label="Target URL"
value="http://failed.test"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Site type"
value="Website"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Authentication URL"
value="http://failed.test/sign-in"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Username"
value="validation-failed@example.com"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Password"
value="••••••••"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Username form field"
value="session[username]"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Password form field"
value="session[password]"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Excluded URLs"
value="http://failed.test/sign-out,http://failed.test/hidden"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Request headers"
value="None"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Validation status"
value="Not Validated"
/>
</div>
</div>
`;
exports[`DastSiteProfileSummary renders properly profile 4 1`] = `
<div>
<div
<div
class="row"
>
<profile-selector-summary-cell-stub
>
<summary-cell-stub
class=""
label="Target URL"
value="http://none.test"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Site type"
value="Website"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Authentication URL"
value="http://none.test/sign-in"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Username"
value="non-validated@example.com"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Password"
value="••••••••"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Username form field"
value="session[username]"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Password form field"
value="session[password]"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Excluded URLs"
value="http://none.test/sign-out,http://none.test/hidden"
/>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Request headers"
value="None"
/>
</div>
<div
class="row"
>
<profile-selector-summary-cell-stub
<summary-cell-stub
label="Validation status"
value="Not Validated"
/>
</div>
</div>
`;
import { shallowMount } from '@vue/test-utils';
import OnDemandScansProfileSummaryCell from 'ee/on_demand_scans_form/components/profile_selector/summary_cell.vue';
import { extendedWrapper } from 'helpers/vue_test_utils_helper';
describe('OnDemandScansProfileSummaryCell', () => {
let wrapper;
const createFullComponent = (propsData) => {
wrapper = extendedWrapper(
shallowMount(OnDemandScansProfileSummaryCell, {
wrapper = shallowMount(OnDemandScansProfileSummaryCell, {
propsData,
}),
);
});
};
const findValue = () => wrapper.findByTestId('summary-value');
afterEach(() => {
wrapper.destroy();
});
......@@ -28,12 +23,12 @@ describe('OnDemandScansProfileSummaryCell', () => {
expect(wrapper.element).toMatchSnapshot();
});
it('renders default when value prop is undefined', () => {
it('renders nothing when value prop is undefined', () => {
createFullComponent({
label: 'Row Label',
value: undefined,
});
expect(findValue().text()).toContain('None');
expect(wrapper.html()).toBe('');
});
});
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment