diff --git a/lib/adamantium/webmention_request_parser.rb b/lib/adamantium/webmention_request_parser.rb index 3b7bf68..c9f3afb 100644 --- a/lib/adamantium/webmention_request_parser.rb +++ b/lib/adamantium/webmention_request_parser.rb @@ -5,18 +5,20 @@ module Adamantium include Dry::Monads[:result] def call(params:) - case params[:"wm-property"] + wm_params = params.fetch(:post, params) + + case wm_params[:"wm-property"] when "in-reply-to" Success[:reply, { type: "reply", - author_name: params[:author][:name], - author_photo: params[:author][:photo], - author_url: params[:author][:url], - published_at: params[:published], - content_html: params[:content][:html], - content_text: params[:content][:text], - source_url: params[:url], - target_url: params[:"in-reply-to"] + author_name: wm_params[:author][:name], + author_photo: wm_params[:author][:photo], + author_url: wm_params[:author][:url], + published_at: wm_params[:published], + content_html: wm_params[:content][:html], + content_text: wm_params[:content][:text], + source_url: wm_params[:url], + target_url: wm_params[:"in-reply-to"] }] when "like-of" Failure(:not_implemented) diff --git a/spec/adamantium/webmention_request_parser_spec.rb b/spec/adamantium/webmention_request_parser_spec.rb index 703f8f4..58986a8 100644 --- a/spec/adamantium/webmention_request_parser_spec.rb +++ b/spec/adamantium/webmention_request_parser_spec.rb @@ -29,9 +29,38 @@ RSpec.describe Adamantium::WebmentionRequestParser do }' } + let(:webmention_io_json) { + '{ + "post": { + "type":"entry", + "author": { + "type":"card", + "name":"nitza", + "photo":"https://webmention.io/avatar/micro.blog/2aa75068b73fe7777faf37c7933486a6acd5d158fcdf769064c0472ecd55f120.jpg", + "url":"https://micro.blog/nitza" + }, + "url":"https://micro.blog/nitza/28127218", + "published":"2023-12-20T22:28:40+00:00", + "wm-received":"2023-12-20T22:28:42Z", + "wm-id":1756646, + "wm-source":"https://micro.blog/nitza/28127218", + "wm-target":"https://dnitza.com/post/b9d5bfca-4f51-463c-a63c-7b2e1b8a5ad9", + "wm-protocol":"webmention", + "content":{ + "html": "
@example hah! I thought the same thing — but this is the most affordable thing that Teenage Engineering makes 😅
", + "text": "@example hah! I thought the same thing — but this is the most affordable thing that Teenage Engineering makes 😅" + }, + "in-reply-to":"https://dnitza.com/post/b9d5bfca-4f51-463c-a63c-7b2e1b8a5ad9", + "wm-property":"in-reply-to", + "wm-private":false + } + }' + } + context "reply" do it "parses a reply" do expect(subject.call(params: JSON.parse(reply_json, symbolize_names: true))).to be_success + expect(subject.call(params: JSON.parse(webmention_io_json, symbolize_names: true))).to be_success end it "fails to parses a reply" do