Commit 0d572c06 authored by Walmyr Lima e Silva Filho's avatar Walmyr Lima e Silva Filho

Merge branch 'qa-e2e-secure-dismiss-vuln' into 'master'

Add E2E test to dismiss vulnerability

Closes gitlab-org/quality/testcases#134

See merge request gitlab-org/gitlab!19898
parents 7bb490f0 e755ba70
...@@ -65,6 +65,7 @@ export default { ...@@ -65,6 +65,7 @@ export default {
:disabled="disabled" :disabled="disabled"
:title="s__('vulnerability|Add comment & dismiss')" :title="s__('vulnerability|Add comment & dismiss')"
variant="close" variant="close"
data-qa-selector="dismiss_with_comment_button"
class="js-dismiss-with-comment " class="js-dismiss-with-comment "
@click="$emit('openDismissalCommentBox')" @click="$emit('openDismissalCommentBox')"
> >
......
...@@ -57,6 +57,7 @@ export default { ...@@ -57,6 +57,7 @@ export default {
<dismissal-comment-box <dismissal-comment-box
v-if="isActive" v-if="isActive"
v-model="localComment" v-model="localComment"
data-qa-selector="dismiss_comment_field"
:dismissal-comment="dismissalComment" :dismissal-comment="dismissalComment"
:error-message="errorMessage" :error-message="errorMessage"
:placeholder="$options.PLACEHOLDER" :placeholder="$options.PLACEHOLDER"
......
...@@ -73,6 +73,7 @@ export default { ...@@ -73,6 +73,7 @@ export default {
:loading="isDismissingVulnerability" :loading="isDismissingVulnerability"
:disabled="isDismissingVulnerability" :disabled="isDismissingVulnerability"
:label="submitLabel" :label="submitLabel"
data-qa-selector="add_and_dismiss_button"
class="js-loading-button" class="js-loading-button"
container-class="btn btn-close" container-class="btn btn-close"
@click="handleSubmit" @click="handleSubmit"
......
...@@ -57,7 +57,7 @@ export default { ...@@ -57,7 +57,7 @@ export default {
<div class="circle-icon-container" :class="iconStyle"> <div class="circle-icon-container" :class="iconStyle">
<icon :size="16" :name="iconName" /> <icon :size="16" :name="iconName" />
</div> </div>
<div class="ml-3"> <div class="ml-3" data-qa-selector="event_item_content">
<div class="note-header-info pb-0"> <div class="note-header-info pb-0">
<a <a
:href="author.path" :href="author.path"
......
...@@ -199,6 +199,7 @@ export default { ...@@ -199,6 +199,7 @@ export default {
id="modal-mrwidget-security-issue" id="modal-mrwidget-security-issue"
:header-title-text="modal.title" :header-title-text="modal.title"
:class="{ 'modal-hide-footer': !shouldRenderFooterSection }" :class="{ 'modal-hide-footer': !shouldRenderFooterSection }"
data-qa-selector="vulnerability_modal_content"
class="modal-security-report-dast" class="modal-security-report-dast"
> >
<slot> <slot>
......
...@@ -59,9 +59,29 @@ module QA ...@@ -59,9 +59,29 @@ module QA
element :approvals_summary_content element :approvals_summary_content
end end
view 'ee/app/assets/javascripts/vue_shared/security_reports/components/modal.vue' do
element :vulnerability_modal_content
end
view 'ee/app/assets/javascripts/vue_shared/security_reports/components/event_item.vue' do
element :event_item_content
end
view 'ee/app/assets/javascripts/vue_shared/security_reports/components/modal_footer.vue' do view 'ee/app/assets/javascripts/vue_shared/security_reports/components/modal_footer.vue' do
element :resolve_split_button element :resolve_split_button
end end
view 'ee/app/assets/javascripts/vue_shared/security_reports/components/dismiss_button.vue' do
element :dismiss_with_comment_button
end
view 'ee/app/assets/javascripts/vue_shared/security_reports/components/dismissal_comment_box_toggle.vue' do
element :dismiss_comment_field
end
view 'ee/app/assets/javascripts/vue_shared/security_reports/components/dismissal_comment_modal_footer.vue' do
element :add_and_dismiss_button
end
end end
end end
...@@ -140,7 +160,7 @@ module QA ...@@ -140,7 +160,7 @@ module QA
def expand_vulnerability_report def expand_vulnerability_report
within_element :vulnerability_report_grouped do within_element :vulnerability_report_grouped do
click_element :expand_report_button click_element :expand_report_button unless has_content? 'Collapse'
end end
end end
...@@ -150,6 +170,18 @@ module QA ...@@ -150,6 +170,18 @@ module QA
end end
end end
def dismiss_vulnerability_with_reason(name, reason)
expand_vulnerability_report
click_vulnerability(name)
click_element :dismiss_with_comment_button
find_element(:dismiss_comment_field).fill_in with: reason
click_element :add_and_dismiss_button
wait(reload: false) do
has_no_element?(:vulnerability_modal_content)
end
end
def resolve_vulnerability_with_mr(name) def resolve_vulnerability_with_mr(name)
expand_vulnerability_report expand_vulnerability_report
click_vulnerability(name) click_vulnerability(name)
...@@ -191,6 +223,18 @@ module QA ...@@ -191,6 +223,18 @@ module QA
find_element(:dast_scan_report).has_content?(/DAST detected #{expected}( new)? vulnerabilit/) find_element(:dast_scan_report).has_content?(/DAST detected #{expected}( new)? vulnerabilit/)
end end
def has_opened_dismissed_vulnerability?(reason = nil)
within_element(:vulnerability_modal_content) do
dismissal_found = has_element?(:event_item_content, text: /Dismissed on pipeline #\d+/)
if dismissal_found && reason
dismissal_found = has_element?(:event_item_content, text: reason)
end
dismissal_found
end
end
def num_approvals_required def num_approvals_required
approvals_content.match(/Requires (\d+) more approvals/)[1].to_i approvals_content.match(/Requires (\d+) more approvals/)[1].to_i
end end
......
...@@ -9,6 +9,7 @@ module QA ...@@ -9,6 +9,7 @@ module QA
let(:dependency_scan_vuln_count) { 4 } let(:dependency_scan_vuln_count) { 4 }
let(:container_scan_vuln_count) { 8 } let(:container_scan_vuln_count) { 8 }
let(:dast_vuln_count) { 4 } let(:dast_vuln_count) { 4 }
let(:vuln_name) { "Authentication bypass via incorrect DOM traversal and canonicalization in saml2-js" }
after do after do
Service::DockerRun::GitlabRunner.new(@executor).remove! Service::DockerRun::GitlabRunner.new(@executor).remove!
...@@ -80,9 +81,20 @@ module QA ...@@ -80,9 +81,20 @@ module QA
end end
end end
it 'can dismiss a vulnerability with a reason' do
dismiss_reason = "Vulnerability not applicable"
Page::MergeRequest::Show.perform do |merge_request|
vuln_name = "Authentication bypass via incorrect DOM traversal and canonicalization in saml2-js"
expect(merge_request).to have_vulnerability_report(timeout: 60)
merge_request.dismiss_vulnerability_with_reason(vuln_name, dismiss_reason)
merge_request.click_vulnerability(vuln_name)
expect(merge_request).to have_opened_dismissed_vulnerability(dismiss_reason)
end
end
it 'can create an auto-remediation MR' do it 'can create an auto-remediation MR' do
Page::MergeRequest::Show.perform do |mergerequest| Page::MergeRequest::Show.perform do |mergerequest|
vuln_name = "Authentication bypass via incorrect DOM traversal and canonicalization in saml2-js"
expect(mergerequest).to have_vulnerability_report(timeout: 60) expect(mergerequest).to have_vulnerability_report(timeout: 60)
# Context changes as resolve method created new MR # Context changes as resolve method created new MR
mergerequest.resolve_vulnerability_with_mr vuln_name mergerequest.resolve_vulnerability_with_mr vuln_name
......
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