57 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| # frozen_string_literal: true
 | |
| require 'spec_helper'
 | |
| 
 | |
| RSpec.describe Packages::DependencyLink, type: :model do
 | |
|   describe 'relationships' do
 | |
|     it { is_expected.to belong_to(:package).inverse_of(:dependency_links) }
 | |
|     it { is_expected.to belong_to(:dependency).inverse_of(:dependency_links) }
 | |
|     it { is_expected.to have_one(:nuget_metadatum).inverse_of(:dependency_link) }
 | |
|   end
 | |
| 
 | |
|   describe 'validations' do
 | |
|     subject { create(:packages_dependency_link) }
 | |
| 
 | |
|     it { is_expected.to validate_presence_of(:package) }
 | |
|     it { is_expected.to validate_presence_of(:dependency) }
 | |
| 
 | |
|     context 'package_id and package_dependency_id uniqueness for dependency_type' do
 | |
|       it 'is not valid' do
 | |
|         exisiting_link = subject
 | |
|         link = build(
 | |
|           :packages_dependency_link,
 | |
|           package: exisiting_link.package,
 | |
|           dependency: exisiting_link.dependency,
 | |
|           dependency_type: exisiting_link.dependency_type
 | |
|         )
 | |
| 
 | |
|         expect(link).not_to be_valid
 | |
|         expect(link.errors.to_a).to include("Dependency type has already been taken")
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   context 'with multiple links' do
 | |
|     let_it_be(:link1) { create(:packages_dependency_link) }
 | |
|     let_it_be(:link2) { create(:packages_dependency_link, dependency: link1.dependency, dependency_type: :devDependencies) }
 | |
|     let_it_be(:link3) { create(:packages_dependency_link, dependency: link1.dependency, dependency_type: :bundleDependencies) }
 | |
| 
 | |
|     subject { described_class }
 | |
| 
 | |
|     describe '.with_dependency_type' do
 | |
|       it 'returns links of the given type' do
 | |
|         expect(subject.with_dependency_type(:bundleDependencies)).to eq([link3])
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     describe '.for_package' do
 | |
|       let_it_be(:link1) { create(:packages_dependency_link) }
 | |
|       let_it_be(:link2) { create(:packages_dependency_link, dependency: link1.dependency, dependency_type: :devDependencies) }
 | |
|       let_it_be(:link3) { create(:packages_dependency_link, dependency: link1.dependency, dependency_type: :bundleDependencies) }
 | |
| 
 | |
|       it 'returns the link for the given package' do
 | |
|         expect(subject.for_package(link1.package)).to eq([link1])
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |