From 412541b30cadf0569055220a7fee0f72af1744da Mon Sep 17 00:00:00 2001 From: Yurii Dubinka Date: Fri, 18 Sep 2020 21:29:59 +0300 Subject: [PATCH] #217: ensure that jira ticket has an attachment, LL accuracy.rb extension --- lib/lazylead/system/jira.rb | 4 ++ lib/lazylead/task/accuracy/attachment.rb | 44 ++++++++++++++++ .../lazylead/task/accuracy/attachment_test.rb | 50 +++++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 lib/lazylead/task/accuracy/attachment.rb create mode 100644 test/lazylead/task/accuracy/attachment_test.rb diff --git a/lib/lazylead/system/jira.rb b/lib/lazylead/system/jira.rb index 2a96d5f..3e9c355 100644 --- a/lib/lazylead/system/jira.rb +++ b/lib/lazylead/system/jira.rb @@ -230,6 +230,10 @@ def post(markdown) def remote_links @issue.remotelink.all end + + def attachments + @issue.attachments + end end # The jira issue comments diff --git a/lib/lazylead/task/accuracy/attachment.rb b/lib/lazylead/task/accuracy/attachment.rb new file mode 100644 index 0000000..6cac143 --- /dev/null +++ b/lib/lazylead/task/accuracy/attachment.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +# The MIT License +# +# Copyright (c) 2019-2020 Yurii Dubinka +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom +# the Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +# OR OTHER DEALINGS IN THE SOFTWARE. + +require_relative "requirement" + +module Lazylead + # Check that ticket has an attachment. + class Attachment < Lazylead::Requirement + def initialize(desc, score, field) + super(desc, score, field) + end + + def passed(issue) + issue.attachments.any?(&method(:matching)) + end + + # Check a single attachment from ticket. + # Potential extension point for custom verification logic. + def matching(attachment) + !attachment.nil? + end + end +end diff --git a/test/lazylead/task/accuracy/attachment_test.rb b/test/lazylead/task/accuracy/attachment_test.rb new file mode 100644 index 0000000..9851d81 --- /dev/null +++ b/test/lazylead/task/accuracy/attachment_test.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +# The MIT License +# +# Copyright (c) 2019-2020 Yurii Dubinka +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom +# the Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +# OR OTHER DEALINGS IN THE SOFTWARE. + +require_relative "../../../test" +require_relative "../../../../lib/lazylead/log" +require_relative "../../../../lib/lazylead/system/jira" +require_relative "../../../../lib/lazylead/task/accuracy/attachment" + +module Lazylead + class AttachmentTest < Lazylead::Test + class Txt < Attachment + def initialize + super "", 0, "" + end + + def matching(attach) + "ConfigServerLogWithException.txt".eql? attach.attrs["filename"] + end + end + + test "attachment is present" do + assert Txt.new.passed( + NoAuthJira.new("https://jira.spring.io") + .issues("key=XD-3761", fields: ["attachment"]) + .first + ) + end + end +end