From 997a33a8c4776ddccb94c7e5ac6149e1510db442 Mon Sep 17 00:00:00 2001 From: haris_delalic Date: Thu, 5 Feb 2026 13:33:59 +0100 Subject: [PATCH 1/2] Fix NoMethodError in JobWebhook when error is nil --- lib/mindee/parsing/v2/job_webhook.rb | 4 +- spec/v2/parsing/job_webhook_spec.rb | 77 ++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 spec/v2/parsing/job_webhook_spec.rb diff --git a/lib/mindee/parsing/v2/job_webhook.rb b/lib/mindee/parsing/v2/job_webhook.rb index 4dd83185..94de33ad 100644 --- a/lib/mindee/parsing/v2/job_webhook.rb +++ b/lib/mindee/parsing/v2/job_webhook.rb @@ -23,7 +23,9 @@ def initialize(server_response) @id = server_response['id'] @created_at = parse_date(server_response['created_at']) @status = server_response['status'] - @error = ErrorResponse.new(server_response['error']) if server_response.key?('error') + unless server_response['error'].nil? || server_response['error'].empty? + @error = ErrorResponse.new(server_response['error']) + end end # RST display. diff --git a/spec/v2/parsing/job_webhook_spec.rb b/spec/v2/parsing/job_webhook_spec.rb new file mode 100644 index 00000000..d064c5a3 --- /dev/null +++ b/spec/v2/parsing/job_webhook_spec.rb @@ -0,0 +1,77 @@ +# frozen_string_literal: true + +require 'mindee' + +RSpec.describe Mindee::Parsing::V2::JobWebhook do + describe '#initialize' do + context 'when error key is present but value is nil' do + it 'does not raise an error and sets @error to nil' do + server_response = { + 'id' => '12345678-1234-1234-1234-123456789012', + 'status' => 'Processing', + 'error' => nil + } + + webhook = described_class.new(server_response) + + expect(webhook.id).to eq('12345678-1234-1234-1234-123456789012') + expect(webhook.status).to eq('Processing') + expect(webhook.error).to be_nil + end + end + + context 'when error key is present with empty hash' do + it 'does not raise an error and sets @error to nil' do + server_response = { + 'id' => '12345678-1234-1234-1234-123456789012', + 'status' => 'Processing', + 'error' => {} + } + + webhook = described_class.new(server_response) + + expect(webhook.id).to eq('12345678-1234-1234-1234-123456789012') + expect(webhook.status).to eq('Processing') + expect(webhook.error).to be_nil + end + end + + context 'when error key is absent' do + it 'does not raise an error and sets @error to nil' do + server_response = { + 'id' => '12345678-1234-1234-1234-123456789012', + 'status' => 'Processing' + } + + webhook = described_class.new(server_response) + + expect(webhook.id).to eq('12345678-1234-1234-1234-123456789012') + expect(webhook.status).to eq('Processing') + expect(webhook.error).to be_nil + end + end + + context 'when error key is present with valid error data' do + it 'creates an ErrorResponse object' do + server_response = { + 'id' => '12345678-1234-1234-1234-123456789012', + 'status' => 'Failed', + 'error' => { + 'status' => 500, + 'detail' => 'Internal server error', + 'title' => 'Server Error', + 'code' => 'INTERNAL_ERROR' + } + } + + webhook = described_class.new(server_response) + + expect(webhook.id).to eq('12345678-1234-1234-1234-123456789012') + expect(webhook.status).to eq('Failed') + expect(webhook.error).to be_a(Mindee::Parsing::V2::ErrorResponse) + expect(webhook.error.status).to eq(500) + expect(webhook.error.detail).to eq('Internal server error') + end + end + end +end \ No newline at end of file From e6b7ae7cf698013badffca8a7832341bb891b87f Mon Sep 17 00:00:00 2001 From: haris_delalic Date: Thu, 5 Feb 2026 15:27:23 +0100 Subject: [PATCH 2/2] make changes accoriding to PR comments --- lib/mindee/parsing/v2/job_webhook.rb | 4 +--- sig/mindee/parsing/v2/job_webhook.rbs | 2 +- spec/v2/parsing/job_webhook_spec.rb | 26 +++++--------------------- 3 files changed, 7 insertions(+), 25 deletions(-) diff --git a/lib/mindee/parsing/v2/job_webhook.rb b/lib/mindee/parsing/v2/job_webhook.rb index 94de33ad..ac291a0b 100644 --- a/lib/mindee/parsing/v2/job_webhook.rb +++ b/lib/mindee/parsing/v2/job_webhook.rb @@ -23,9 +23,7 @@ def initialize(server_response) @id = server_response['id'] @created_at = parse_date(server_response['created_at']) @status = server_response['status'] - unless server_response['error'].nil? || server_response['error'].empty? - @error = ErrorResponse.new(server_response['error']) - end + @error = ErrorResponse.new(server_response['error']) unless server_response['error'].nil? end # RST display. diff --git a/sig/mindee/parsing/v2/job_webhook.rbs b/sig/mindee/parsing/v2/job_webhook.rbs index e2869ad9..5d9ea920 100644 --- a/sig/mindee/parsing/v2/job_webhook.rbs +++ b/sig/mindee/parsing/v2/job_webhook.rbs @@ -4,7 +4,7 @@ module Mindee module V2 class JobWebhook attr_reader created_at: DateTime? - attr_reader error: ErrorResponse + attr_reader error: ErrorResponse? attr_reader id: String attr_reader status: String diff --git a/spec/v2/parsing/job_webhook_spec.rb b/spec/v2/parsing/job_webhook_spec.rb index d064c5a3..bf046760 100644 --- a/spec/v2/parsing/job_webhook_spec.rb +++ b/spec/v2/parsing/job_webhook_spec.rb @@ -9,23 +9,7 @@ server_response = { 'id' => '12345678-1234-1234-1234-123456789012', 'status' => 'Processing', - 'error' => nil - } - - webhook = described_class.new(server_response) - - expect(webhook.id).to eq('12345678-1234-1234-1234-123456789012') - expect(webhook.status).to eq('Processing') - expect(webhook.error).to be_nil - end - end - - context 'when error key is present with empty hash' do - it 'does not raise an error and sets @error to nil' do - server_response = { - 'id' => '12345678-1234-1234-1234-123456789012', - 'status' => 'Processing', - 'error' => {} + 'error' => nil, } webhook = described_class.new(server_response) @@ -40,7 +24,7 @@ it 'does not raise an error and sets @error to nil' do server_response = { 'id' => '12345678-1234-1234-1234-123456789012', - 'status' => 'Processing' + 'status' => 'Processing', } webhook = described_class.new(server_response) @@ -60,8 +44,8 @@ 'status' => 500, 'detail' => 'Internal server error', 'title' => 'Server Error', - 'code' => 'INTERNAL_ERROR' - } + 'code' => 'INTERNAL_ERROR', + }, } webhook = described_class.new(server_response) @@ -74,4 +58,4 @@ end end end -end \ No newline at end of file +end