Skip to content

Commit

Permalink
Update NATS::Msg#respond_with_error
Browse files Browse the repository at this point in the history
  • Loading branch information
vankiru committed Jan 27, 2025
1 parent b07f307 commit f263b42
Show file tree
Hide file tree
Showing 2 changed files with 122 additions and 7 deletions.
29 changes: 22 additions & 7 deletions lib/nats/io/msg.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,29 @@ def respond(data = "")
def respond_with_error(error)
message = dup

message.header = {
"Nats-Service-Error" => error.message,
"Nats-Service-Error-Code" => 500
}

message.subject = reply
message.reply = nil
message.data = nil
message.reply = ""
message.data = ""

case error
when Exception
message.header = {
"Nats-Service-Error" => error.message,
"Nats-Service-Error-Code" => 500
}
when Hash
message.header = {
"Nats-Service-Error" => error[:description],
"Nats-Service-Error-Code" => error[:code]
}

message.data = error[:data]
else
message.header = {
"Nats-Service-Error" => error.to_s,
"Nats-Service-Error-Code" => 500
}
end

respond_msg(message)
end
Expand Down
100 changes: 100 additions & 0 deletions spec/msg_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
# frozen_string_literal: true

RSpec.describe NATS::Msg do
subject { described_class.new(options) }

let(:options) do
{
subject: "foo",
reply: "bar",
data: "foo.bar",
header: {},
nc: nil,
sub: nil
}
end

describe "#respond_with_error" do
let(:respond_with_error) { subject.respond_with_error(error) }

before do
allow(subject).to receive(:respond_msg)
end

let(:respond) do
{
subject: "bar",
header: {
"Nats-Service-Error" => "error",
"Nats-Service-Error-Code" => 500
},
reply: "",
data: ""
}
end

context "when argument is a string" do
let(:error) { "error" }

it "responds with service error message" do
respond_with_error

expect(subject).to have_received(:respond_msg).with have_attributes(respond)
end
end

context "when argument is a hash" do
let(:error) { { code: 503, description: "error", data: "data" } }

let(:respond) do
{
subject: "bar",
header: {
"Nats-Service-Error" => "error",
"Nats-Service-Error-Code" => 503
},
reply: "",
data: "data"
}
end

it "responds with service error message" do
respond_with_error

expect(subject).to have_received(:respond_msg).with have_attributes(respond)
end
end

context "when argument is an error" do
let(:error) { StandardError.new("error") }

it "responds with service error message" do
respond_with_error

expect(subject).to have_received(:respond_msg).with have_attributes(respond)
end
end

context "when argument is a random object" do
let(:error) { [1, 2, 3] }

let(:respond) do
{
subject: "bar",
header: {
"Nats-Service-Error" => "[1, 2, 3]",
"Nats-Service-Error-Code" => 500
},
reply: "",
data: ""
}
end

it "responds with argument " do
respond_with_error

expect(subject).to have_received(:respond_msg).with have_attributes(respond)
end
end
end
end

0 comments on commit f263b42

Please sign in to comment.