Consider that a GH exists only if both `ref`, and `sha` exist

parent 4e5de3e6
...@@ -4,7 +4,7 @@ module Gitlab ...@@ -4,7 +4,7 @@ module Gitlab
delegate :repo, :sha, :ref, to: :raw_data delegate :repo, :sha, :ref, to: :raw_data
def exists? def exists?
project.repository.branch_exists?(ref) branch_exists? && commit_exists?
end end
def name def name
...@@ -15,11 +15,15 @@ module Gitlab ...@@ -15,11 +15,15 @@ module Gitlab
repo.present? repo.present?
end end
def valid? private
repo.present?
def branch_exists?
project.repository.branch_exists?(ref)
end end
private def commit_exists?
project.repository.commit(sha).present?
end
def short_id def short_id
sha.to_s[0..7] sha.to_s[0..7]
......
...@@ -2,17 +2,18 @@ require 'spec_helper' ...@@ -2,17 +2,18 @@ require 'spec_helper'
describe Gitlab::GithubImport::BranchFormatter, lib: true do describe Gitlab::GithubImport::BranchFormatter, lib: true do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:commit) { create(:commit, project: project) }
let(:repo) { double } let(:repo) { double }
let(:raw) do let(:raw) do
{ {
ref: 'feature', ref: 'feature',
repo: repo, repo: repo,
sha: '2e5d3239642f9161dcbbc4b70a211a68e5e45e2b' sha: commit.id
} }
end end
describe '#exists?' do describe '#exists?' do
it 'returns true when branch exists' do it 'returns true when both branch, and commit exists' do
branch = described_class.new(project, double(raw)) branch = described_class.new(project, double(raw))
expect(branch.exists?).to eq true expect(branch.exists?).to eq true
...@@ -23,6 +24,12 @@ describe Gitlab::GithubImport::BranchFormatter, lib: true do ...@@ -23,6 +24,12 @@ describe Gitlab::GithubImport::BranchFormatter, lib: true do
expect(branch.exists?).to eq false expect(branch.exists?).to eq false
end end
it 'returns false when commit does not exist' do
branch = described_class.new(project, double(raw.merge(sha: '2e5d3239642f9161dcbbc4b70a211a68e5e45e2b')))
expect(branch.exists?).to eq false
end
end end
describe '#name' do describe '#name' do
...@@ -33,7 +40,7 @@ describe Gitlab::GithubImport::BranchFormatter, lib: true do ...@@ -33,7 +40,7 @@ describe Gitlab::GithubImport::BranchFormatter, lib: true do
end end
it 'returns formatted ref when branch does not exist' do it 'returns formatted ref when branch does not exist' do
branch = described_class.new(project, double(raw.merge(ref: 'removed-branch'))) branch = described_class.new(project, double(raw.merge(ref: 'removed-branch', sha: '2e5d3239642f9161dcbbc4b70a211a68e5e45e2b')))
expect(branch.name).to eq 'removed-branch-2e5d3239' expect(branch.name).to eq 'removed-branch-2e5d3239'
end end
...@@ -51,18 +58,18 @@ describe Gitlab::GithubImport::BranchFormatter, lib: true do ...@@ -51,18 +58,18 @@ describe Gitlab::GithubImport::BranchFormatter, lib: true do
it 'returns raw sha' do it 'returns raw sha' do
branch = described_class.new(project, double(raw)) branch = described_class.new(project, double(raw))
expect(branch.sha).to eq '2e5d3239642f9161dcbbc4b70a211a68e5e45e2b' expect(branch.sha).to eq commit.id
end end
end end
describe '#valid?' do describe '#valid?' do
it 'returns true when repository exists' do it 'returns true when raw repo is present' do
branch = described_class.new(project, double(raw)) branch = described_class.new(project, double(raw))
expect(branch.valid?).to eq true expect(branch.valid?).to eq true
end end
it 'returns false when repository does not exist' do it 'returns false when raw repo is blank' do
branch = described_class.new(project, double(raw.merge(repo: nil))) branch = described_class.new(project, double(raw.merge(repo: nil)))
expect(branch.valid?).to eq false expect(branch.valid?).to eq false
......
...@@ -2,11 +2,13 @@ require 'spec_helper' ...@@ -2,11 +2,13 @@ require 'spec_helper'
describe Gitlab::GithubImport::PullRequestFormatter, lib: true do describe Gitlab::GithubImport::PullRequestFormatter, lib: true do
let(:project) { create(:project) } let(:project) { create(:project) }
let(:source_sha) { create(:commit, project: project).id }
let(:target_sha) { create(:commit, project: project, git_commit: RepoHelpers.another_sample_commit).id }
let(:repository) { double(id: 1, fork: false) } let(:repository) { double(id: 1, fork: false) }
let(:source_repo) { repository } let(:source_repo) { repository }
let(:source_branch) { double(ref: 'feature', repo: source_repo, sha: '2e5d3239642f9161dcbbc4b70a211a68e5e45e2b') } let(:source_branch) { double(ref: 'feature', repo: source_repo, sha: source_sha) }
let(:target_repo) { repository } let(:target_repo) { repository }
let(:target_branch) { double(ref: 'master', repo: target_repo, sha: '8ffb3c15a5475e59ae909384297fede4badcb4c7') } let(:target_branch) { double(ref: 'master', repo: target_repo, sha: target_sha) }
let(:octocat) { double(id: 123456, login: 'octocat') } let(:octocat) { double(id: 123456, login: 'octocat') }
let(:created_at) { DateTime.strptime('2011-01-26T19:01:12Z') } let(:created_at) { DateTime.strptime('2011-01-26T19:01:12Z') }
let(:updated_at) { DateTime.strptime('2011-01-27T19:01:12Z') } let(:updated_at) { DateTime.strptime('2011-01-27T19:01:12Z') }
...@@ -41,10 +43,10 @@ describe Gitlab::GithubImport::PullRequestFormatter, lib: true do ...@@ -41,10 +43,10 @@ describe Gitlab::GithubImport::PullRequestFormatter, lib: true do
description: "*Created by: octocat*\n\nPlease pull these awesome changes", description: "*Created by: octocat*\n\nPlease pull these awesome changes",
source_project: project, source_project: project,
source_branch: 'feature', source_branch: 'feature',
head_source_sha: '2e5d3239642f9161dcbbc4b70a211a68e5e45e2b', head_source_sha: source_sha,
target_project: project, target_project: project,
target_branch: 'master', target_branch: 'master',
base_target_sha: '8ffb3c15a5475e59ae909384297fede4badcb4c7', base_target_sha: target_sha,
state: 'opened', state: 'opened',
milestone: nil, milestone: nil,
author_id: project.creator_id, author_id: project.creator_id,
...@@ -68,10 +70,10 @@ describe Gitlab::GithubImport::PullRequestFormatter, lib: true do ...@@ -68,10 +70,10 @@ describe Gitlab::GithubImport::PullRequestFormatter, lib: true do
description: "*Created by: octocat*\n\nPlease pull these awesome changes", description: "*Created by: octocat*\n\nPlease pull these awesome changes",
source_project: project, source_project: project,
source_branch: 'feature', source_branch: 'feature',
head_source_sha: '2e5d3239642f9161dcbbc4b70a211a68e5e45e2b', head_source_sha: source_sha,
target_project: project, target_project: project,
target_branch: 'master', target_branch: 'master',
base_target_sha: '8ffb3c15a5475e59ae909384297fede4badcb4c7', base_target_sha: target_sha,
state: 'closed', state: 'closed',
milestone: nil, milestone: nil,
author_id: project.creator_id, author_id: project.creator_id,
...@@ -95,10 +97,10 @@ describe Gitlab::GithubImport::PullRequestFormatter, lib: true do ...@@ -95,10 +97,10 @@ describe Gitlab::GithubImport::PullRequestFormatter, lib: true do
description: "*Created by: octocat*\n\nPlease pull these awesome changes", description: "*Created by: octocat*\n\nPlease pull these awesome changes",
source_project: project, source_project: project,
source_branch: 'feature', source_branch: 'feature',
head_source_sha: '2e5d3239642f9161dcbbc4b70a211a68e5e45e2b', head_source_sha: source_sha,
target_project: project, target_project: project,
target_branch: 'master', target_branch: 'master',
base_target_sha: '8ffb3c15a5475e59ae909384297fede4badcb4c7', base_target_sha: target_sha,
state: 'merged', state: 'merged',
milestone: nil, milestone: nil,
author_id: project.creator_id, author_id: project.creator_id,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment