diff --git a/lib/temporal/connection/converter/payload/proto_json.rb b/lib/temporal/connection/converter/payload/proto_json.rb index cdbc36f9..dda3a5f2 100644 --- a/lib/temporal/connection/converter/payload/proto_json.rb +++ b/lib/temporal/connection/converter/payload/proto_json.rb @@ -15,7 +15,7 @@ def from_payload(payload) # TODO: Add error handling. message_type = payload.metadata['messageType'] descriptor = Google::Protobuf::DescriptorPool.generated_pool.lookup(message_type) - descriptor.msgclass.decode_json(payload.data) + descriptor.msgclass.decode_json(payload.data, ignore_unknown_fields: true) end def to_payload(data) diff --git a/spec/unit/lib/temporal/connection/converter/payload/proto_json_spec.rb b/spec/unit/lib/temporal/connection/converter/payload/proto_json_spec.rb index 589c921f..ac293670 100644 --- a/spec/unit/lib/temporal/connection/converter/payload/proto_json_spec.rb +++ b/spec/unit/lib/temporal/connection/converter/payload/proto_json_spec.rb @@ -29,4 +29,18 @@ expect(subject.to_payload(input)).to be nil end + + describe ".from_payload" do + it "ignores unknown fields" do + payload = Temporalio::Api::Common::V1::Payload.new( + metadata: { + 'encoding' => described_class::ENCODING, + 'messageType' => Temporalio::Api::Common::V1::Payload.descriptor.name, + }, + data: { 'unknown' => 'field' }.to_json.b, + ) + + expect(subject.from_payload(payload)).to be_instance_of(Temporalio::Api::Common::V1::Payload) + end + end end