File: package_spec.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (63 lines) | stat: -rw-r--r-- 2,991 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# frozen_string_literal: true

require 'spec_helper'

RSpec.describe Packages::Generic::Package, type: :model, feature_category: :package_registry do
  describe 'validations' do
    describe '#name' do
      it { is_expected.to allow_value('123').for(:name) }
      it { is_expected.to allow_value('foo').for(:name) }
      it { is_expected.to allow_value('foo.bar.baz-2.0-20190901.47283-1').for(:name) }
      it { is_expected.not_to allow_value('../../foo').for(:name) }
      it { is_expected.not_to allow_value('..\..\foo').for(:name) }
      it { is_expected.not_to allow_value('%2f%2e%2e%2f%2essh%2fauthorized_keys').for(:name) }
      it { is_expected.not_to allow_value('$foo/bar').for(:name) }
      it { is_expected.not_to allow_value('my file name').for(:name) }
      it { is_expected.not_to allow_value('!!().for(:name)().for(:name)').for(:name) }
    end

    describe '#version' do
      it { is_expected.to validate_presence_of(:version) }
      it { is_expected.to allow_value('1.2.3').for(:version) }
      it { is_expected.to allow_value('1.3.350').for(:version) }
      it { is_expected.to allow_value('1.3.350-20201230123456').for(:version) }
      it { is_expected.to allow_value('1.2.3-rc1').for(:version) }
      it { is_expected.to allow_value('1.2.3g').for(:version) }
      it { is_expected.to allow_value('1.2').for(:version) }
      it { is_expected.to allow_value('1.2.bananas').for(:version) }
      it { is_expected.to allow_value('v1.2.4-build').for(:version) }
      it { is_expected.to allow_value('d50d836eb3de6177ce6c7a5482f27f9c2c84b672').for(:version) }
      it { is_expected.to allow_value('this_is_a_string_only').for(:version) }
      it { is_expected.not_to allow_value('..1.2.3').for(:version) }
      it { is_expected.not_to allow_value('  1.2.3').for(:version) }
      it { is_expected.not_to allow_value("1.2.3  \r\t").for(:version) }
      it { is_expected.not_to allow_value("\r\t 1.2.3").for(:version) }
      it { is_expected.not_to allow_value('1.2.3-4/../../').for(:version) }
      it { is_expected.not_to allow_value('1.2.3-4%2e%2e%').for(:version) }
      it { is_expected.not_to allow_value('../../../../../1.2.3').for(:version) }
      it { is_expected.not_to allow_value('%2e%2e%2f1.2.3').for(:version) }
      it { is_expected.not_to allow_value('').for(:version) }
      it { is_expected.not_to allow_value(nil).for(:version) }
    end
  end

  describe '#publish_creation_event' do
    let_it_be(:project) { create(:project) }

    let(:version) { '-' }

    subject(:create_package) { described_class.create!(project: project, name: 'incoming', version: version) }

    it 'publishes an event' do
      expect { create_package }
        .to publish_event(::Packages::PackageCreatedEvent)
              .with({
                project_id: project.id,
                id: kind_of(Numeric),
                name: 'incoming',
                version: '-',
                package_type: 'generic'
              })
    end
  end
end