require "test_helper" class UnfurlLinksControllerTest < ActionDispatch::IntegrationTest setup do sign_in :david end test "create" do stub_successful_request post unfurl_link_url, params: { url: "https://www.example.com" } assert_response :success json_response = JSON.parse(response.body) assert_equal "Hey!", json_response["title"] assert_equal "https://example.com", json_response["url"] assert_equal "https://example.com/image.png", json_response["image"] assert_equal "desc..", json_response["description"] end test "create with missing opengraph meta tags" do WebMock.stub_request(:get, "https://www.example.com/").to_return(status: 200, body: "", headers: {}) post unfurl_link_url, params: { url: "https://www.example.com" } assert_response :no_content end test "create with a missing URL" do assert_raise ActionController::ParameterMissing do post unfurl_link_url, params: { url: "" } assert_response :bad_request end end test "create for twitter.com" do stub_successful_request url: "https://fxtwitter.com/dhh/status/834146806594433025" post unfurl_link_url, params: { url: "https://twitter.com/dhh/status/834146806594433025" } assert_response :success assert_equal "Hey!", JSON.parse(response.body)["title"] end test "create for x.com" do stub_successful_request url: "https://fxtwitter.com/dhh/status/834146806594433025" post unfurl_link_url, params: { url: "https://x.com/dhh/status/834146806594433025" } assert_response :success assert_equal "Hey!", JSON.parse(response.body)["title"] end private def stub_successful_request(url: "https://www.example.com/") WebMock.stub_request(:get, url).to_return( status: 200, body: "", headers: { content_type: "text/html" } ) WebMock.stub_request(:head, "https://example.com/image.png").to_return( status: 200, headers: { content_type: "image/png" } ) end end