Files
discourse/spec/lib/onebox/engine/github_issue_onebox_spec.rb
Joffrey JAFFEUX d38acc5df1 DEV: discourse-emojis gem (#31408)
This commit moves most of emoji logic into the discourse-emojis gem:
https://github.com/discourse/discourse-emojis/

Most notably:
- images are now symlinked from the gem
- the gem provides path to the json files

Search aliases have also been made asynchronous and memoized. When you
will search for an emoji we will now load the aliases and store the list
for future use.

---------

Co-authored-by: David Taylor <david@taylorhq.com>
2025-03-03 13:09:08 +01:00

58 lines
1.9 KiB
Ruby

# frozen_string_literal: true
RSpec.describe Onebox::Engine::GithubIssueOnebox do
let(:issue_uri) { "https://api.github.com/repos/discourse/discourse/issues/1" }
let(:repo_uri) { "https://api.github.com/repos/discourse/discourse" }
let(:repo_response) { onebox_response("githubrepo") }
before do
stub_request(:get, issue_uri).to_return(
status: 200,
body: onebox_response("github_issue_onebox"),
)
stub_request(:get, repo_uri).to_return(status: 200, body: repo_response)
end
include_context "with engines" do
let(:link) { "https://github.com/discourse/discourse/issues/1" }
end
it_behaves_like "an engine"
describe "#to_html" do
it "sanitizes the input and transform the emoji into an img tag" do
sanitized_label =
"Test <img src=\"/images/emoji/twitter/+1.png?v=#{Emoji::EMOJI_VERSION}\" title=\"+1\" class=\"emoji\" alt=\"+1\" loading=\"lazy\" width=\"20\" height=\"20\">"
expect(html).to include(sanitized_label)
end
it "sets the data-github-private-repo attr to false" do
expect(html).to include("data-github-private-repo=\"false\"")
end
context "when the PR is in a private repo" do
let(:repo_response) do
resp = MultiJson.load(onebox_response("githubrepo"))
resp["private"] = true
MultiJson.dump(resp)
end
it "sets the data-github-private-repo attr to true" do
expect(html).to include("data-github-private-repo=\"true\"")
end
end
context "when github_onebox_access_token is configured" do
before { SiteSetting.github_onebox_access_tokens = "discourse|github_pat_1234" }
it "sends it as part of the request" do
html
expect(WebMock).to have_requested(:get, issue_uri).with(
headers: {
"Authorization" => "Bearer github_pat_1234",
},
)
end
end
end
end