Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Getting "undefined method presence for "Not Found":String" error when issue is not found #432

Open
tory-kk opened this issue Apr 10, 2024 · 5 comments
Assignees
Labels
Duplicate Duplicates another issue

Comments

@tory-kk
Copy link

tory-kk commented Apr 10, 2024

Hello,
I am getting the following error when the issue is not found:

/home/user/bundler/ruby/3.2.0/gems/jira-ruby-2.3.0/lib/jira/http_error.rb:11:in `initialize': undefined method `presence' for "Not Found":String (NoMethodError)

      @message = response.try(:message).presence || response.try(:body)
                                       ^^^^^^^^^
Did you mean?  presence_in
        from /home/user/Projects/Ruby-test/announce/jira_client.rb:13:in `exception'
        from /home/user/Projects/Ruby-test/announce/jira_client.rb:13:in `raise'
        from /home/user/Projects/Ruby-test/announce/jira_client.rb:13:in `request'
        from /home/user/bundler/ruby/3.2.0/gems/jira-ruby-2.3.0/lib/jira/client.rb:306:in `request'
        from /home/user/bundler/ruby/3.2.0/gems/jira-ruby-2.3.0/lib/jira/client.rb:279:in `get'
        from /home/user/bundler/ruby/3.2.0/gems/jira-ruby-2.3.0/lib/jira/resource/issue.rb:95:in `fetch'
        from /home/user/bundler/ruby/3.2.0/gems/jira-ruby-2.3.0/lib/jira/base.rb:107:in `find'
        from /home/user/bundler/ruby/3.2.0/gems/jira-ruby-2.3.0/lib/jira/base_factory.rb:31:in `block (2 levels) in delegate_to_target_class'
        from /home/user/Projects/Ruby-test/announce/jira_client.rb:54:in `get_issue'

Jira-ruby version: 2.3.0.
Enabled http_debug and added logs:

get: /rest/api/2/issue/ABC-123?fields=summary%2Cstatus%2Cissuetype - []
RESPONSE: #<Net::HTTPNotFound:0x00007f603b8f3ac0>

Please advise on how it could be fixed.

UPD: Jira JSON response:

{"errorMessages":["Issue does not exist or you do not have permission to see it."],"errors":{}}
@purp
Copy link

purp commented Apr 10, 2024

It's failing because Net:HTTP can't open the URL and get a response.

I got this error when the config options :site and :context_path options weren't set well. Getting those set correctly solved it for me.

@dimas
Copy link

dimas commented Apr 11, 2024

Point of the report is that library should be prepared for this case probably and not crash with NoMethodError...

      @message = response.try(:message).try(:presence) || response.try(:body)

instead of

      @message = response.try(:message).presence || response.try(:body)

seem to do the trick...

@tory-kk
Copy link
Author

tory-kk commented Apr 11, 2024

RESPONSE: #Net::HTTPNotFound:0x00007f603b8f3ac0

The response was successfully received and it was NotFound.
The thing is that Jira returned HTTP status 404 and HTML page in the body (Content-Type text/html), so HTTPError construction failed.

UPD:
Managed to get a JSON response, and it has the following format:

{"errorMessages":["Issue does not exist or you do not have permission to see it."],"errors":{}}

So the issue is not related to :site and :context_path configuration and can be triggered by trying to load non-existent ticket.

@bobbrodie
Copy link
Member

bobbrodie commented Apr 26, 2024

@tory-kk when using the latest version from my master branch, I'm seeing the intended behavior. Version 3.0.0 should be released shortly (I'm talking to a teammate tomorrow to approve some of my PRs so I don't self-approve).

The most recent PR that touched on this specific issue is #435.

Note: Loading active_support/core_ext/object modifies to_json output, so I have a PR to address the tests for the referenced PR.

My Gemfile:

source 'https://rubygems.org'

gem 'jira-ruby', git: 'https://github.com/sumoheavy/jira-ruby', branch: 'master'

If you check out lib/jira/request_client.rb, you'll see how this is handled:

...
# Returns the response if the request was successful (HTTP::2xx) and
# raises a JIRA::HTTPError if it was not successful, with the response
# attached.

def request(*args)
  response = make_request(*args)
  raise HTTPError, response unless response.is_a?(Net::HTTPSuccess)
  response
end
...

And here's my response when requesting an issue that doesn't exist:

/Users/robert/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/bundler/gems/jira-ruby-2e6de8ebb573/lib/jira/request_client.rb:13:in `request': Not Found (JIRA::HTTPError)
	from /Users/robert/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/bundler/gems/jira-ruby-2e6de8ebb573/lib/jira/client.rb:306:in `request'
	from /Users/robert/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/bundler/gems/jira-ruby-2e6de8ebb573/lib/jira/client.rb:279:in `get'
	from /Users/robert/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/bundler/gems/jira-ruby-2e6de8ebb573/lib/jira/resource/issue.rb:95:in `fetch'
	from /Users/robert/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/bundler/gems/jira-ruby-2e6de8ebb573/lib/jira/base.rb:107:in `find'
	from /Users/robert/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/bundler/gems/jira-ruby-2e6de8ebb573/lib/jira/base_factory.rb:31:in `block (2 levels) in delegate_to_target_class'
	from jira.rb:27:in `<main>'

When I request an issue that doesn't exist, I am receiving an HTTPError as expected. If you inspect the HTTPError with something like this:

begin
  client.Issue.find('NOEXIST-2')
rescue => e
  puts JSON.parse(e.response.body.inspect)
end

Then you'll see what you're looking for:

{"errorMessages":["Issue does not exist or you do not have permission to see it."],"errors":{}}

I think it will be OK to flag this as a duplicate for now, but wanted to run this by you before closing, since it should be working in the upcoming version :)

Thanks!

UPDATE 2024-04-27
I've come across multiple folks in the issues that have asked about HTTPError so I've enabled the wiki and added a page about it: https://github.com/sumoheavy/jira-ruby/wiki/Handling-HTTPError.

@bobbrodie bobbrodie added the Duplicate Duplicates another issue label Apr 26, 2024
@bobbrodie bobbrodie self-assigned this Apr 27, 2024
@keegangroth
Copy link

For anyone else who finds this before it's released, I was able to work around this by using the require from the previously linked #435 after I required this gem. Like so:

require 'jira-ruby'
require 'active_support/core_ext/object'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Duplicate Duplicates another issue
Projects
None yet
Development

No branches or pull requests

5 participants