Skip to content

Commit

Permalink
Merge pull request #20216 from yrudman/provide-message-when-tag-assig…
Browse files Browse the repository at this point in the history
…nment-failed

Provide message when tag assignment failed
  • Loading branch information
gtanzillo authored Jun 17, 2020
2 parents e69f19f + d9df6b4 commit 7cebd4e
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 5 deletions.
15 changes: 10 additions & 5 deletions app/models/classification.rb
Original file line number Diff line number Diff line change
Expand Up @@ -98,11 +98,16 @@ def ns
# rubocop:disable Style/NumericPredicate

def self.classify(obj, category_name, entry_name, is_request = true)
cat = Classification.lookup_by_name(category_name, obj.region_id)
unless cat.nil?
ent = cat.find_entry_by_name(entry_name, obj.region_id)
ent.assign_entry_to(obj, is_request) unless ent.nil? || obj.is_tagged_with?(ent.to_tag, :ns => "none")
end
cat = Classification.find_by_name(category_name, obj.region_id)
return " - FAILED. Tag category '#{category_name}' not found in region #{obj.region_id}" if cat.nil?

ent = cat.find_entry_by_name(entry_name, obj.region_id)
return " - FAILED. Tag name '#{entry_name}' not found in region #{obj.region_id}" if ent.nil?

return " - FAILED. Object already tagged with tag namespace set to 'none'" if obj.is_tagged_with?(ent.to_tag, :ns => "none")

ent.assign_entry_to(obj, is_request)
" - SUCCESS."
end

def self.unclassify(obj, category_name, entry_name, is_request = true)
Expand Down
29 changes: 29 additions & 0 deletions spec/models/classification_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,35 @@
FactoryBot.create(:classification_tag, :name => "multi_entry_2", :parent => parent)
end

describe ".classify" do
let(:entry) { "test_entry" }
let(:category) { "test_category" }
before { @vm = FactoryBot.create(:vm) }

it "returns detailed message if tag category not found" do
category = "Hello, World"
msg = Classification.classify(@vm, category, entry)
expect(msg).to include("Tag category '#{category}' not found in region #{@vm.region_id}")
end

it "returns detailed message message if tag entry not found" do
entry = "Hello, World"
msg = Classification.classify(@vm, category, entry)
expect(msg).to include("Tag name '#{entry}' not found in region #{@vm.region_id}")
end

it "returns detailed message message if object already tagged with tag namespace set to 'none'" do
allow(@vm).to receive(:is_tagged_with?)
allow(@vm).to receive(:is_tagged_with?).with("/managed/test_category/test_entry", :ns => "none").and_return(true)
msg = Classification.classify(@vm, category, entry)
expect(msg).to include("Object already tagged with tag namespace set to 'none'")
end

it "assign tag entry to object if tag category and tag name exist and returns 'SUCCESS'" do
expect(Classification.classify(@vm, category, entry)).to include("SUCCESS")
end
end

context "#destroy" do
it "a category deletes all entries" do
cat = Classification.lookup_by_name("test_category")
Expand Down

0 comments on commit 7cebd4e

Please sign in to comment.