diff options
author | Shinya Maeda <shinya@gitlab.com> | 2019-01-02 09:01:15 +0300 |
---|---|---|
committer | Shinya Maeda <shinya@gitlab.com> | 2019-01-04 16:17:02 +0300 |
commit | f5f52da885f331b9860c2cc1fe1847fd10ca9385 (patch) | |
tree | 6ad5e46438ca6f05e98e3caa0318f332eb7437d9 /spec/models/releases | |
parent | 8a75453ea0553b712963161e79177513e17ca376 (diff) |
Add spec for Releases::Source and Link models
Releases::Source and Releases::Link are covered by tests
Diffstat (limited to 'spec/models/releases')
-rw-r--r-- | spec/models/releases/link_spec.rb | 68 | ||||
-rw-r--r-- | spec/models/releases/source_spec.rb | 39 |
2 files changed, 107 insertions, 0 deletions
diff --git a/spec/models/releases/link_spec.rb b/spec/models/releases/link_spec.rb new file mode 100644 index 00000000000..0f9ac7ec76a --- /dev/null +++ b/spec/models/releases/link_spec.rb @@ -0,0 +1,68 @@ +require 'rails_helper' + +RSpec.describe Releases::Link do + let(:release) { create(:release, project: project) } + let(:project) { create(:project) } + + describe 'associations' do + it { is_expected.to belong_to(:release) } + end + + describe 'validation' do + it { is_expected.to validate_presence_of(:url) } + it { is_expected.to validate_presence_of(:name) } + + context 'when url is invalid' do + let(:link) { build(:release_link, url: 'hoge') } + + it 'will be invalid' do + expect(link).to be_invalid + end + end + + context 'when duplicate name is added to a release' do + let!(:link) { create(:release_link, name: 'alpha', release: release) } + + it 'raises an error' do + expect do + create(:release_link, name: 'alpha', release: release) + end.to raise_error(ActiveRecord::RecordInvalid) + end + end + end + + describe '.sorted' do + subject { described_class.sorted } + + let!(:link_1) { create(:release_link, name: 'alpha', release: release, created_at: 1.day.ago) } + let!(:link_2) { create(:release_link, name: 'beta', release: release, created_at: 2.days.ago) } + + it 'returns a list of links by created_at order' do + is_expected.to eq([link_1, link_2]) + end + end + + describe '#internal?' do + subject { link.internal? } + + let(:link) { build(:release_link, release: release, url: url) } + let(:url) { "#{project.web_url}/-/jobs/140463678/artifacts/download" } + + it { is_expected.to be_truthy } + + context 'when link does not include project web url' do + let(:url) { 'https://google.com/-/jobs/140463678/artifacts/download' } + + it { is_expected.to be_falsy } + end + end + + describe '#external?' do + subject { link.external? } + + let(:link) { build(:release_link, release: release, url: url) } + let(:url) { 'https://google.com/-/jobs/140463678/artifacts/download' } + + it { is_expected.to be_truthy } + end +end diff --git a/spec/models/releases/source_spec.rb b/spec/models/releases/source_spec.rb new file mode 100644 index 00000000000..526ee8eafc9 --- /dev/null +++ b/spec/models/releases/source_spec.rb @@ -0,0 +1,39 @@ +require 'rails_helper' + +RSpec.describe Releases::Source do + set(:project) { create(:project, :repository, name: 'finance-cal') } + let(:tag_name) { 'v1.0' } + + describe '.all' do + subject { described_class.all(project, tag_name) } + + it 'returns all formats of sources' do + expect(subject.map(&:format)) + .to match_array(described_class::FORMATS) + end + end + + describe '#url' do + subject { source.url } + + let(:source) do + described_class.new(project: project, tag_name: tag_name, format: format) + end + + let(:format) { 'zip' } + + it 'returns zip archived source url' do + is_expected + .to eq("#{project.web_url}/-/archive/v1.0/finance-cal-v1.0.zip") + end + + context 'when ref is directory structure' do + let(:tag_name) { 'beta/v1.0' } + + it 'converts slash to dash' do + is_expected + .to eq("#{project.web_url}/-/archive/beta/v1.0/finance-cal-beta-v1.0.zip") + end + end + end +end |