151 lines
4.3 KiB
Ruby
151 lines
4.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
RSpec.describe Onebox::Engine::GithubPullRequestOnebox do
|
|
let(:gh_link) { "https://github.com/discourse/discourse/pull/1253/" }
|
|
let(:api_uri) { "https://api.github.com/repos/discourse/discourse/pulls/1253" }
|
|
let(:response) { onebox_response(described_class.onebox_name) }
|
|
|
|
before { stub_request(:get, api_uri).to_return(status: 200, body: response) }
|
|
|
|
include_context "with engines" do
|
|
let(:link) { gh_link }
|
|
end
|
|
it_behaves_like "an engine"
|
|
|
|
describe "#to_html" do
|
|
it "includes pull request author" do
|
|
expect(html).to include("jamesaanderson")
|
|
end
|
|
|
|
it "includes repository name" do
|
|
expect(html).to include("discourse")
|
|
end
|
|
|
|
it "includes commit author gravatar" do
|
|
expect(html).to include("b3e9977094ce189bbb493cf7f9adea21")
|
|
end
|
|
|
|
it "includes commit time and date" do
|
|
expect(html).to include("02:05AM - 26 Jul 13")
|
|
end
|
|
|
|
it "includes number of commits" do
|
|
expect(html).to include("1")
|
|
end
|
|
|
|
it "includes number of files changed" do
|
|
expect(html).to include("4")
|
|
end
|
|
|
|
it "includes number of additions" do
|
|
expect(html).to include("19")
|
|
end
|
|
|
|
it "includes number of deletions" do
|
|
expect(html).to include("5")
|
|
end
|
|
|
|
it "includes the body without comments" do
|
|
expect(html).to include("http://meta.discourse.org/t/audio-html5-tag/8168")
|
|
expect(html).not_to include("test comment")
|
|
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(:response) do
|
|
resp = MultiJson.load(onebox_response(described_class.onebox_name))
|
|
resp["base"]["repo"]["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
|
|
end
|
|
|
|
context "with commit links" do
|
|
let(:gh_link) do
|
|
"https://github.com/discourse/discourse/pull/1253/commits/d7d3be1130c665cc7fab9f05dbf32335229137a6"
|
|
end
|
|
let(:pr_commit_url) do
|
|
"https://api.github.com/repos/discourse/discourse/commits/d7d3be1130c665cc7fab9f05dbf32335229137a6"
|
|
end
|
|
|
|
before do
|
|
stub_request(:get, pr_commit_url).to_return(
|
|
status: 200,
|
|
body: onebox_response(described_class.onebox_name + "_commit"),
|
|
)
|
|
end
|
|
|
|
it "includes commit name" do
|
|
doc = Nokogiri.HTML5(html)
|
|
expect(doc.css("h4").text.strip).to eq("Add audio onebox")
|
|
expect(doc.css(".github-body-container").text).to include(
|
|
"http://meta.discourse.org/t/audio-html5-tag/8168",
|
|
)
|
|
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, pr_commit_url).with(
|
|
headers: {
|
|
"Authorization" => "Bearer github_pat_1234",
|
|
},
|
|
)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "with comment links" do
|
|
let(:gh_link) { "https://github.com/discourse/discourse/pull/1253/#issuecomment-21597425" }
|
|
let(:comment_api_url) do
|
|
"https://api.github.com/repos/discourse/discourse/issues/comments/21597425"
|
|
end
|
|
|
|
before do
|
|
stub_request(:get, comment_api_url).to_return(
|
|
status: 200,
|
|
body: onebox_response(described_class.onebox_name + "_comment"),
|
|
)
|
|
end
|
|
|
|
it "includes comment" do
|
|
expect(html).to include("You've signed the CLA")
|
|
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, api_uri).with(
|
|
headers: {
|
|
"Authorization" => "Bearer github_pat_1234",
|
|
},
|
|
)
|
|
end
|
|
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, api_uri).with(
|
|
headers: {
|
|
"Authorization" => "Bearer github_pat_1234",
|
|
},
|
|
)
|
|
end
|
|
end
|
|
end
|