From e64e9f085383a050dce7e084b4b0f2f5367659c7 Mon Sep 17 00:00:00 2001
From: Edward Loveall <edward@edwardloveall.com>
Date: Sun, 8 Aug 2021 16:37:56 -0400
Subject: [PATCH] Use href from iframe media response

Turns out, href exists in the mediaResponse query. I can use that
instead of fetching that separately.
---
 spec/classes/iframe_media_resolver_spec.cr | 27 ----------------------
 spec/classes/paragraph_converter_spec.cr   |  9 +-------
 spec/support/fake_medium_client.cr         |  9 --------
 src/classes/iframe_media_resolver.cr       | 13 -----------
 src/classes/paragraph_converter.cr         |  4 +---
 src/clients/medium_client.cr               |  9 +-------
 src/models/media_response.cr               | 17 --------------
 src/models/post_response.cr                |  2 +-
 8 files changed, 4 insertions(+), 86 deletions(-)
 delete mode 100644 spec/classes/iframe_media_resolver_spec.cr
 delete mode 100644 spec/support/fake_medium_client.cr
 delete mode 100644 src/classes/iframe_media_resolver.cr
 delete mode 100644 src/models/media_response.cr

diff --git a/spec/classes/iframe_media_resolver_spec.cr b/spec/classes/iframe_media_resolver_spec.cr
deleted file mode 100644
index ed167a8..0000000
--- a/spec/classes/iframe_media_resolver_spec.cr
+++ /dev/null
@@ -1,27 +0,0 @@
-require "../spec_helper"
-
-include Nodes
-
-describe IFrameMediaResolver do
-  around_each do |example|
-    original_client = IFrameMediaResolver.http_client
-    IFrameMediaResolver.http_client = FakeMediumClient
-    example.run
-    IFrameMediaResolver.http_client = original_client
-  end
-
-  it "returns a url of the embedded page" do
-    iframe = PostResponse::IFrame.from_json <<-JSON
-      {
-        "mediaResource": {
-          "id": "d4515fff7ecd02786e75fc8997c94bbf"
-        }
-      }
-    JSON
-    resolver = IFrameMediaResolver.new(iframe: iframe)
-
-    result = resolver.fetch_href
-
-    result.should eq("https://example.com")
-  end
-end
diff --git a/spec/classes/paragraph_converter_spec.cr b/spec/classes/paragraph_converter_spec.cr
index 4eda931..45ea604 100644
--- a/spec/classes/paragraph_converter_spec.cr
+++ b/spec/classes/paragraph_converter_spec.cr
@@ -3,13 +3,6 @@ require "../spec_helper"
 include Nodes
 
 describe ParagraphConverter do
-  around_each do |example|
-    original_client = IFrameMediaResolver.http_client
-    IFrameMediaResolver.http_client = FakeMediumClient
-    example.run
-    IFrameMediaResolver.http_client = original_client
-  end
-
   it "converts a simple structure with no markups" do
     paragraphs = Array(PostResponse::Paragraph).from_json <<-JSON
       [
@@ -289,7 +282,7 @@ describe ParagraphConverter do
           "href": null,
           "iframe": {
             "mediaResource": {
-              "id": "7c6231d165bf9fc1853f259a7b55bd14"
+              "href": "https://example.com"
             }
           },
           "layout": null,
diff --git a/spec/support/fake_medium_client.cr b/spec/support/fake_medium_client.cr
deleted file mode 100644
index 9ae65e2..0000000
--- a/spec/support/fake_medium_client.cr
+++ /dev/null
@@ -1,9 +0,0 @@
-class FakeMediumClient < MediumClient
-  def self.media_data(media_id : String) : MediaResponse::Root
-    MediaResponse::Root.from_json(
-      <<-JSON
-        {"payload": {"value": {"href": "https://example.com"}}}
-      JSON
-    )
-  end
-end
diff --git a/src/classes/iframe_media_resolver.cr b/src/classes/iframe_media_resolver.cr
deleted file mode 100644
index 06d6e61..0000000
--- a/src/classes/iframe_media_resolver.cr
+++ /dev/null
@@ -1,13 +0,0 @@
-class IFrameMediaResolver
-  class_property http_client : MediumClient.class = MediumClient
-
-  getter iframe
-
-  def initialize(@iframe : PostResponse::IFrame)
-  end
-
-  def fetch_href
-    response = @@http_client.media_data(iframe.mediaResource.id)
-    response.payload.value.href
-  end
-end
diff --git a/src/classes/paragraph_converter.cr b/src/classes/paragraph_converter.cr
index 52001f9..8c6d7f9 100644
--- a/src/classes/paragraph_converter.cr
+++ b/src/classes/paragraph_converter.cr
@@ -21,9 +21,7 @@ class ParagraphConverter
       when PostResponse::ParagraphType::IFRAME
         paragraph = paragraphs.shift
         if iframe = paragraph.iframe
-          resolver = IFrameMediaResolver.new(iframe: iframe)
-          href = resolver.fetch_href
-          node = IFrame.new(href: href)
+          node = IFrame.new(href: iframe.mediaResource.href)
         else
           node = Empty.new
         end
diff --git a/src/clients/medium_client.cr b/src/clients/medium_client.cr
index 10d567e..0a7b07d 100644
--- a/src/clients/medium_client.cr
+++ b/src/clients/medium_client.cr
@@ -7,13 +7,6 @@ class MediumClient
     PostResponse::Root.from_json(response.body)
   end
 
-  def self.media_data(media_id : String) : MediaResponse::Root
-    client = HTTP::Client.new("medium.com", tls: true)
-    response = client.get("/media/#{media_id}", headers: headers)
-    body = response.body.sub(JSON_HIJACK_STRING, nil)
-    MediaResponse::Root.from_json(body)
-  end
-
   private def self.headers : HTTP::Headers
     HTTP::Headers{
       "Accept"       => "application/json",
@@ -46,7 +39,7 @@ class MediumClient
                 href
                 iframe {
                   mediaResource {
-                    id
+                    href
                   }
                 }
                 metadata {
diff --git a/src/models/media_response.cr b/src/models/media_response.cr
deleted file mode 100644
index 16d6749..0000000
--- a/src/models/media_response.cr
+++ /dev/null
@@ -1,17 +0,0 @@
-class MediaResponse
-  class Base
-    include JSON::Serializable
-  end
-
-  class Root < Base
-    property payload : Payload
-  end
-
-  class Payload < Base
-    property value : Value
-  end
-
-  class Value < Base
-    property href : String
-  end
-end
diff --git a/src/models/post_response.cr b/src/models/post_response.cr
index 31bf0ae..d006ebd 100644
--- a/src/models/post_response.cr
+++ b/src/models/post_response.cr
@@ -78,7 +78,7 @@ class PostResponse
   end
 
   class MediaResource < Base
-    property id : String
+    property href : String
   end
 
   class Metadata < Base