154 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| require 'spec_helper'
 | |
| 
 | |
| describe Gitlab::GithubImport::PullRequest, lib: true do
 | |
|   let(:project) { create(:project) }
 | |
|   let(:source_branch) { OpenStruct.new(ref: 'feature') }
 | |
|   let(:target_branch) { OpenStruct.new(ref: 'master') }
 | |
|   let(:octocat) { OpenStruct.new(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
 | |
|     {
 | |
|       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,
 | |
|       merged_at: nil
 | |
|     }
 | |
|   end
 | |
| 
 | |
|   subject(:pull_request) { described_class.new(project, raw_data)}
 | |
| 
 | |
|   describe '#attributes' do
 | |
|     context 'when pull request is open' do
 | |
|       let(:raw_data) { OpenStruct.new(base_data.merge(state: 'open')) }
 | |
| 
 | |
|       it 'returns formatted attributes' do
 | |
|         expected = {
 | |
|           title: 'New feature',
 | |
|           description: "*Created by: octocat*\n\nPlease pull these awesome changes",
 | |
|           source_project: project,
 | |
|           source_branch: 'feature',
 | |
|           target_project: project,
 | |
|           target_branch: 'master',
 | |
|           state: 'opened',
 | |
|           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') }
 | |
|       let(:raw_data) { OpenStruct.new(base_data.merge(state: 'closed', closed_at: closed_at)) }
 | |
| 
 | |
|       it 'returns formatted attributes' do
 | |
|         expected = {
 | |
|           title: 'New feature',
 | |
|           description: "*Created by: octocat*\n\nPlease pull these awesome changes",
 | |
|           source_project: project,
 | |
|           source_branch: 'feature',
 | |
|           target_project: project,
 | |
|           target_branch: 'master',
 | |
|           state: 'closed',
 | |
|           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') }
 | |
|       let(:raw_data) { OpenStruct.new(base_data.merge(state: 'closed', merged_at: merged_at)) }
 | |
| 
 | |
|       it 'returns formatted attributes' do
 | |
|         expected = {
 | |
|           title: 'New feature',
 | |
|           description: "*Created by: octocat*\n\nPlease pull these awesome changes",
 | |
|           source_project: project,
 | |
|           source_branch: 'feature',
 | |
|           target_project: project,
 | |
|           target_branch: 'master',
 | |
|           state: 'merged',
 | |
|           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
 | |
|       let(:raw_data) { OpenStruct.new(base_data.merge(assignee: octocat)) }
 | |
| 
 | |
|       it 'returns nil as assigned_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 assigned_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
 | |
|       let(:raw_data) { OpenStruct.new(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
 | |
|   end
 | |
| 
 | |
|   describe '#valid?' do
 | |
|     let(:invalid_branch) { OpenStruct.new(ref: 'invalid-branch') }
 | |
| 
 | |
|     context 'when source and target branches exists' do
 | |
|       let(:raw_data) { OpenStruct.new(base_data.merge(head: source_branch, base: target_branch)) }
 | |
| 
 | |
|       it 'returns true' do
 | |
|         expect(pull_request.valid?).to eq true
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     context 'when source branch doesn not exists' do
 | |
|       let(:raw_data) { OpenStruct.new(base_data.merge(head: invalid_branch, base: target_branch)) }
 | |
| 
 | |
|       it 'returns false' do
 | |
|         expect(pull_request.valid?).to eq false
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     context 'when target branch doesn not exists' do
 | |
|       let(:raw_data) { OpenStruct.new(base_data.merge(head: source_branch, base: invalid_branch)) }
 | |
| 
 | |
|       it 'returns false' do
 | |
|         expect(pull_request.valid?).to eq false
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |