56 lines
2.1 KiB
Ruby
56 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
|