debian-mirror-gitlab/spec/lib/gitlab/github_import/pull_request_formatter_spec.rb

242 lines
7.6 KiB
Ruby
Raw Normal View History

require 'spec_helper'
describe Gitlab::GithubImport::PullRequestFormatter, lib: true do
let(:project) { create(:project) }
2016-08-24 12:49:21 +05:30
let(:source_sha) { create(:commit, project: project).id }
let(:target_sha) { create(:commit, project: project, git_commit: RepoHelpers.another_sample_commit).id }
2016-06-02 11:05:42 +05:30
let(:repository) { double(id: 1, fork: false) }
2016-01-29 22:53:50 +05:30
let(:source_repo) { repository }
2016-08-24 12:49:21 +05:30
let(:source_branch) { double(ref: 'feature', repo: source_repo, sha: source_sha) }
2016-01-29 22:53:50 +05:30
let(:target_repo) { repository }
2016-08-24 12:49:21 +05:30
let(:target_branch) { double(ref: 'master', repo: target_repo, sha: target_sha) }
2016-09-13 17:45:13 +05:30
let(:removed_branch) { double(ref: 'removed-branch', repo: source_repo, sha: '2e5d3239642f9161dcbbc4b70a211a68e5e45e2b') }
2016-06-02 11:05:42 +05:30
let(:octocat) { double(id: 123456, login: 'octocat') }
let(:created_at) { DateTime.strptime('2011-01-26T19:01:12Z') }
let(:updated_at) { DateTime.strptime('2011-01-27T19:01:12Z') }
let(:base_data) do
{
number: 1347,
2016-06-02 11:05:42 +05:30
milestone: nil,
state: 'open',
title: 'New feature',
body: 'Please pull these awesome changes',
head: source_branch,
base: target_branch,
assignee: nil,
user: octocat,
created_at: created_at,
updated_at: updated_at,
closed_at: nil,
2016-09-13 17:45:13 +05:30
merged_at: nil,
url: 'https://api.github.com/repos/octocat/Hello-World/pulls/1347'
}
end
subject(:pull_request) { described_class.new(project, raw_data)}
describe '#attributes' do
context 'when pull request is open' do
2016-06-02 11:05:42 +05:30
let(:raw_data) { double(base_data.merge(state: 'open')) }
it 'returns formatted attributes' do
expected = {
2016-06-02 11:05:42 +05:30
iid: 1347,
title: 'New feature',
description: "*Created by: octocat*\n\nPlease pull these awesome changes",
source_project: project,
source_branch: 'feature',
2016-08-24 12:49:21 +05:30
source_branch_sha: source_sha,
target_project: project,
target_branch: 'master',
2016-08-24 12:49:21 +05:30
target_branch_sha: target_sha,
state: 'opened',
2016-06-02 11:05:42 +05:30
milestone: nil,
author_id: project.creator_id,
assignee_id: nil,
created_at: created_at,
updated_at: updated_at
}
expect(pull_request.attributes).to eq(expected)
end
end
context 'when pull request is closed' do
let(:closed_at) { DateTime.strptime('2011-01-28T19:01:12Z') }
2016-06-02 11:05:42 +05:30
let(:raw_data) { double(base_data.merge(state: 'closed', closed_at: closed_at)) }
it 'returns formatted attributes' do
expected = {
2016-06-02 11:05:42 +05:30
iid: 1347,
title: 'New feature',
description: "*Created by: octocat*\n\nPlease pull these awesome changes",
source_project: project,
source_branch: 'feature',
2016-08-24 12:49:21 +05:30
source_branch_sha: source_sha,
target_project: project,
target_branch: 'master',
2016-08-24 12:49:21 +05:30
target_branch_sha: target_sha,
state: 'closed',
2016-06-02 11:05:42 +05:30
milestone: nil,
author_id: project.creator_id,
assignee_id: nil,
created_at: created_at,
updated_at: closed_at
}
expect(pull_request.attributes).to eq(expected)
end
end
context 'when pull request is merged' do
let(:merged_at) { DateTime.strptime('2011-01-28T13:01:12Z') }
2016-06-02 11:05:42 +05:30
let(:raw_data) { double(base_data.merge(state: 'closed', merged_at: merged_at)) }
it 'returns formatted attributes' do
expected = {
2016-06-02 11:05:42 +05:30
iid: 1347,
title: 'New feature',
description: "*Created by: octocat*\n\nPlease pull these awesome changes",
source_project: project,
source_branch: 'feature',
2016-08-24 12:49:21 +05:30
source_branch_sha: source_sha,
target_project: project,
target_branch: 'master',
2016-08-24 12:49:21 +05:30
target_branch_sha: target_sha,
state: 'merged',
2016-06-02 11:05:42 +05:30
milestone: nil,
author_id: project.creator_id,
assignee_id: nil,
created_at: created_at,
updated_at: merged_at
}
expect(pull_request.attributes).to eq(expected)
end
end
context 'when it is assigned to someone' do
2016-06-02 11:05:42 +05:30
let(:raw_data) { double(base_data.merge(assignee: octocat)) }
it 'returns nil as assignee_id when is not a GitLab user' do
expect(pull_request.attributes.fetch(:assignee_id)).to be_nil
end
it 'returns GitLab user id as assignee_id when is a GitLab user' do
gl_user = create(:omniauth_user, extern_uid: octocat.id, provider: 'github')
expect(pull_request.attributes.fetch(:assignee_id)).to eq gl_user.id
end
end
context 'when author is a GitLab user' do
2016-06-02 11:05:42 +05:30
let(:raw_data) { double(base_data.merge(user: octocat)) }
it 'returns project#creator_id as author_id when is not a GitLab user' do
expect(pull_request.attributes.fetch(:author_id)).to eq project.creator_id
end
it 'returns GitLab user id as author_id when is a GitLab user' do
gl_user = create(:omniauth_user, extern_uid: octocat.id, provider: 'github')
expect(pull_request.attributes.fetch(:author_id)).to eq gl_user.id
end
end
2016-06-02 11:05:42 +05:30
context 'when it has a milestone' do
let(:milestone) { double(number: 45) }
let(:raw_data) { double(base_data.merge(milestone: milestone)) }
2016-01-29 22:53:50 +05:30
2016-06-02 11:05:42 +05:30
it 'returns nil when milestone does not exist' do
expect(pull_request.attributes.fetch(:milestone)).to be_nil
2016-01-29 22:53:50 +05:30
end
2016-06-02 11:05:42 +05:30
it 'returns milestone when it exists' do
milestone = create(:milestone, project: project, iid: 45)
2016-06-02 11:05:42 +05:30
expect(pull_request.attributes.fetch(:milestone)).to eq milestone
end
end
end
describe '#number' do
2016-06-02 11:05:42 +05:30
let(:raw_data) { double(base_data.merge(number: 1347)) }
it 'returns pull request number' do
expect(pull_request.number).to eq 1347
end
end
2016-09-13 17:45:13 +05:30
describe '#source_branch_name' do
context 'when source branch exists' do
let(:raw_data) { double(base_data) }
it 'returns branch ref' do
expect(pull_request.source_branch_name).to eq 'feature'
end
end
context 'when source branch does not exist' do
let(:raw_data) { double(base_data.merge(head: removed_branch)) }
it 'prefixes branch name with pull request number' do
expect(pull_request.source_branch_name).to eq 'pull/1347/removed-branch'
end
end
end
describe '#target_branch_name' do
context 'when source branch exists' do
let(:raw_data) { double(base_data) }
it 'returns branch ref' do
expect(pull_request.target_branch_name).to eq 'master'
end
end
context 'when target branch does not exist' do
let(:raw_data) { double(base_data.merge(base: removed_branch)) }
it 'prefixes branch name with pull request number' do
expect(pull_request.target_branch_name).to eq 'pull/1347/removed-branch'
end
end
end
describe '#valid?' do
2016-06-02 11:05:42 +05:30
context 'when source, and target repos are not a fork' do
let(:raw_data) { double(base_data) }
it 'returns true' do
expect(pull_request.valid?).to eq true
end
end
2016-06-02 11:05:42 +05:30
context 'when source repo is a fork' do
let(:source_repo) { double(id: 2) }
let(:raw_data) { double(base_data) }
2016-09-13 17:45:13 +05:30
it 'returns true' do
expect(pull_request.valid?).to eq true
end
end
2016-06-02 11:05:42 +05:30
context 'when target repo is a fork' do
let(:target_repo) { double(id: 2) }
let(:raw_data) { double(base_data) }
2016-09-13 17:45:13 +05:30
it 'returns true' do
expect(pull_request.valid?).to eq true
end
end
end
2016-09-13 17:45:13 +05:30
describe '#url' do
let(:raw_data) { double(base_data) }
it 'return raw url' do
expect(pull_request.url).to eq 'https://api.github.com/repos/octocat/Hello-World/pulls/1347'
end
end
end