Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/spec/lib
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib')
-rw-r--r--spec/lib/disable_email_interceptor_spec.rb26
-rw-r--r--spec/lib/extracts_path_spec.rb60
-rw-r--r--spec/lib/file_size_validator_spec.rb43
-rw-r--r--spec/lib/git_ref_validator_spec.rb20
-rw-r--r--spec/lib/gitlab/auth_spec.rb54
-rw-r--r--spec/lib/gitlab/backend/grack_auth_spec.rb196
-rw-r--r--spec/lib/gitlab/backend/rack_attack_helpers_spec.rb35
-rw-r--r--spec/lib/gitlab/backend/shell_spec.rb18
-rw-r--r--spec/lib/gitlab/bitbucket_import/client_spec.rb17
-rw-r--r--spec/lib/gitlab/bitbucket_import/project_creator_spec.rb26
-rw-r--r--spec/lib/gitlab/closing_issue_extractor_spec.rb176
-rw-r--r--spec/lib/gitlab/diff/file_spec.rb21
-rw-r--r--spec/lib/gitlab/diff/parser_spec.rb93
-rw-r--r--spec/lib/gitlab/git_access_spec.rb235
-rw-r--r--spec/lib/gitlab/git_access_wiki_spec.rb22
-rw-r--r--spec/lib/gitlab/github_import/client_spec.rb16
-rw-r--r--spec/lib/gitlab/github_import/project_creator_spec.rb28
-rw-r--r--spec/lib/gitlab/gitlab_import/client_spec.rb16
-rw-r--r--spec/lib/gitlab/gitlab_import/project_creator_spec.rb28
-rw-r--r--spec/lib/gitlab/gitlab_markdown_helper_spec.rb28
-rw-r--r--spec/lib/gitlab/gitorious_import/project_creator_spec.rb26
-rw-r--r--spec/lib/gitlab/google_code_import/client_spec.rb34
-rw-r--r--spec/lib/gitlab/google_code_import/project_creator_spec.rb27
-rw-r--r--spec/lib/gitlab/key_fingerprint_spec.rb12
-rw-r--r--spec/lib/gitlab/ldap/access_spec.rb55
-rw-r--r--spec/lib/gitlab/ldap/adapter_spec.rb31
-rw-r--r--spec/lib/gitlab/ldap/authentication_spec.rb53
-rw-r--r--spec/lib/gitlab/ldap/config_spec.rb20
-rw-r--r--spec/lib/gitlab/ldap/user_spec.rb106
-rw-r--r--spec/lib/gitlab/note_data_builder_spec.rb73
-rw-r--r--spec/lib/gitlab/o_auth/auth_hash_spec.rb55
-rw-r--r--spec/lib/gitlab/o_auth/user_spec.rb109
-rw-r--r--spec/lib/gitlab/popen_spec.rb45
-rw-r--r--spec/lib/gitlab/push_data_builder_spec.rb39
-rw-r--r--spec/lib/gitlab/reference_extractor_spec.rb156
-rw-r--r--spec/lib/gitlab/regex_spec.rb21
-rw-r--r--spec/lib/gitlab/satellite/action_spec.rb118
-rw-r--r--spec/lib/gitlab/satellite/merge_action_spec.rb104
-rw-r--r--spec/lib/gitlab/upgrader_spec.rb24
-rw-r--r--spec/lib/gitlab/url_builder_spec.rb77
-rw-r--r--spec/lib/gitlab/version_info_spec.rb69
-rw-r--r--spec/lib/repository_cache_spec.rb34
-rw-r--r--spec/lib/votes_spec.rb185
43 files changed, 0 insertions, 2631 deletions
diff --git a/spec/lib/disable_email_interceptor_spec.rb b/spec/lib/disable_email_interceptor_spec.rb
deleted file mode 100644
index 06d5450688b..00000000000
--- a/spec/lib/disable_email_interceptor_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-require 'spec_helper'
-
-describe DisableEmailInterceptor do
- before do
- ActionMailer::Base.register_interceptor(DisableEmailInterceptor)
- end
-
- it 'should not send emails' do
- allow(Gitlab.config.gitlab).to receive(:email_enabled).and_return(false)
- expect {
- deliver_mail
- }.not_to change(ActionMailer::Base.deliveries, :count)
- end
-
- after do
- # Removing interceptor from the list because unregister_interceptor is
- # implemented in later version of mail gem
- # See: https://github.com/mikel/mail/pull/705
- Mail.class_variable_set(:@@delivery_interceptors, [])
- end
-
- def deliver_mail
- key = create :personal_key
- Notify.new_ssh_key_email(key.id)
- end
-end
diff --git a/spec/lib/extracts_path_spec.rb b/spec/lib/extracts_path_spec.rb
deleted file mode 100644
index ac602eac154..00000000000
--- a/spec/lib/extracts_path_spec.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-require 'spec_helper'
-
-describe ExtractsPath do
- include ExtractsPath
-
- let(:project) { double('project') }
-
- before do
- @project = project
- project.stub(repository: double(ref_names: ['master', 'foo/bar/baz', 'v1.0.0', 'v2.0.0']))
- project.stub(path_with_namespace: 'gitlab/gitlab-ci')
- end
-
- describe '#extract_ref' do
- it "returns an empty pair when no @project is set" do
- @project = nil
- expect(extract_ref('master/CHANGELOG')).to eq(['', ''])
- end
-
- context "without a path" do
- it "extracts a valid branch" do
- expect(extract_ref('master')).to eq(['master', ''])
- end
-
- it "extracts a valid tag" do
- expect(extract_ref('v2.0.0')).to eq(['v2.0.0', ''])
- end
-
- it "extracts a valid commit ref without a path" do
- expect(extract_ref('f4b14494ef6abf3d144c28e4af0c20143383e062')).to eq(
- ['f4b14494ef6abf3d144c28e4af0c20143383e062', '']
- )
- end
-
- it "falls back to a primitive split for an invalid ref" do
- expect(extract_ref('stable')).to eq(['stable', ''])
- end
- end
-
- context "with a path" do
- it "extracts a valid branch" do
- expect(extract_ref('foo/bar/baz/CHANGELOG')).to eq(['foo/bar/baz', 'CHANGELOG'])
- end
-
- it "extracts a valid tag" do
- expect(extract_ref('v2.0.0/CHANGELOG')).to eq(['v2.0.0', 'CHANGELOG'])
- end
-
- it "extracts a valid commit SHA" do
- expect(extract_ref('f4b14494ef6abf3d144c28e4af0c20143383e062/CHANGELOG')).to eq(
- ['f4b14494ef6abf3d144c28e4af0c20143383e062', 'CHANGELOG']
- )
- end
-
- it "falls back to a primitive split for an invalid ref" do
- expect(extract_ref('stable/CHANGELOG')).to eq(['stable', 'CHANGELOG'])
- end
- end
- end
-end
diff --git a/spec/lib/file_size_validator_spec.rb b/spec/lib/file_size_validator_spec.rb
deleted file mode 100644
index 5c89c854714..00000000000
--- a/spec/lib/file_size_validator_spec.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-require 'spec_helper'
-
-describe 'Gitlab::FileSizeValidatorSpec' do
- let(:validator) { FileSizeValidator.new(options) }
- let(:attachment) { AttachmentUploader.new }
- let(:note) { create(:note) }
-
- describe 'options uses an integer' do
- let(:options) { { maximum: 10, attributes: { attachment: attachment } } }
-
- it 'attachment exceeds maximum limit' do
- allow(attachment).to receive(:size) { 100 }
- validator.validate_each(note, :attachment, attachment)
- expect(note.errors).to have_key(:attachment)
- end
-
- it 'attachment under maximum limit' do
- allow(attachment).to receive(:size) { 1 }
- validator.validate_each(note, :attachment, attachment)
- expect(note.errors).not_to have_key(:attachment)
- end
- end
-
- describe 'options uses a symbol' do
- let(:options) { { maximum: :test,
- attributes: { attachment: attachment } } }
- before do
- allow(note).to receive(:test) { 10 }
- end
-
- it 'attachment exceeds maximum limit' do
- allow(attachment).to receive(:size) { 100 }
- validator.validate_each(note, :attachment, attachment)
- expect(note.errors).to have_key(:attachment)
- end
-
- it 'attachment under maximum limit' do
- allow(attachment).to receive(:size) { 1 }
- validator.validate_each(note, :attachment, attachment)
- expect(note.errors).not_to have_key(:attachment)
- end
- end
-end
diff --git a/spec/lib/git_ref_validator_spec.rb b/spec/lib/git_ref_validator_spec.rb
deleted file mode 100644
index 4633b6f3934..00000000000
--- a/spec/lib/git_ref_validator_spec.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::GitRefValidator do
- it { expect(Gitlab::GitRefValidator.validate('feature/new')).to be_truthy }
- it { expect(Gitlab::GitRefValidator.validate('implement_@all')).to be_truthy }
- it { expect(Gitlab::GitRefValidator.validate('my_new_feature')).to be_truthy }
- it { expect(Gitlab::GitRefValidator.validate('#1')).to be_truthy }
- it { expect(Gitlab::GitRefValidator.validate('feature/~new/')).to be_falsey }
- it { expect(Gitlab::GitRefValidator.validate('feature/^new/')).to be_falsey }
- it { expect(Gitlab::GitRefValidator.validate('feature/:new/')).to be_falsey }
- it { expect(Gitlab::GitRefValidator.validate('feature/?new/')).to be_falsey }
- it { expect(Gitlab::GitRefValidator.validate('feature/*new/')).to be_falsey }
- it { expect(Gitlab::GitRefValidator.validate('feature/[new/')).to be_falsey }
- it { expect(Gitlab::GitRefValidator.validate('feature/new/')).to be_falsey }
- it { expect(Gitlab::GitRefValidator.validate('feature/new.')).to be_falsey }
- it { expect(Gitlab::GitRefValidator.validate('feature\@{')).to be_falsey }
- it { expect(Gitlab::GitRefValidator.validate('feature\new')).to be_falsey }
- it { expect(Gitlab::GitRefValidator.validate('feature//new')).to be_falsey }
- it { expect(Gitlab::GitRefValidator.validate('feature new')).to be_falsey }
-end
diff --git a/spec/lib/gitlab/auth_spec.rb b/spec/lib/gitlab/auth_spec.rb
deleted file mode 100644
index 95fc7e16a11..00000000000
--- a/spec/lib/gitlab/auth_spec.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::Auth do
- let(:gl_auth) { Gitlab::Auth.new }
-
- describe :find do
- let!(:user) do
- create(:user,
- username: username,
- password: password,
- password_confirmation: password)
- end
- let(:username) { 'John' } # username isn't lowercase, test this
- let(:password) { 'my-secret' }
-
- it "should find user by valid login/password" do
- expect( gl_auth.find(username, password) ).to eql user
- end
-
- it 'should find user by valid email/password with case-insensitive email' do
- expect(gl_auth.find(user.email.upcase, password)).to eql user
- end
-
- it 'should find user by valid username/password with case-insensitive username' do
- expect(gl_auth.find(username.upcase, password)).to eql user
- end
-
- it "should not find user with invalid password" do
- password = 'wrong'
- expect( gl_auth.find(username, password) ).to_not eql user
- end
-
- it "should not find user with invalid login" do
- user = 'wrong'
- expect( gl_auth.find(username, password) ).to_not eql user
- end
-
- context "with ldap enabled" do
- before { Gitlab::LDAP::Config.stub(enabled?: true) }
-
- it "tries to autheticate with db before ldap" do
- expect(Gitlab::LDAP::Authentication).not_to receive(:login)
-
- gl_auth.find(username, password)
- end
-
- it "uses ldap as fallback to for authentication" do
- expect(Gitlab::LDAP::Authentication).to receive(:login)
-
- gl_auth.find('ldap_user', 'password')
- end
- end
- end
-end
diff --git a/spec/lib/gitlab/backend/grack_auth_spec.rb b/spec/lib/gitlab/backend/grack_auth_spec.rb
deleted file mode 100644
index d0aad54f677..00000000000
--- a/spec/lib/gitlab/backend/grack_auth_spec.rb
+++ /dev/null
@@ -1,196 +0,0 @@
-require "spec_helper"
-
-describe Grack::Auth do
- let(:user) { create(:user) }
- let(:project) { create(:project) }
-
- let(:app) { lambda { |env| [200, {}, "Success!"] } }
- let!(:auth) { Grack::Auth.new(app) }
- let(:env) {
- {
- "rack.input" => "",
- "REQUEST_METHOD" => "GET",
- "QUERY_STRING" => "service=git-upload-pack"
- }
- }
- let(:status) { auth.call(env).first }
-
- describe "#call" do
- context "when the project doesn't exist" do
- before do
- env["PATH_INFO"] = "doesnt/exist.git"
- end
-
- context "when no authentication is provided" do
- it "responds with status 401" do
- expect(status).to eq(401)
- end
- end
-
- context "when username and password are provided" do
- context "when authentication fails" do
- before do
- env["HTTP_AUTHORIZATION"] = ActionController::HttpAuthentication::Basic.encode_credentials(user.username, "nope")
- end
-
- it "responds with status 401" do
- expect(status).to eq(401)
- end
- end
-
- context "when authentication succeeds" do
- before do
- env["HTTP_AUTHORIZATION"] = ActionController::HttpAuthentication::Basic.encode_credentials(user.username, user.password)
- end
-
- it "responds with status 404" do
- expect(status).to eq(404)
- end
- end
- end
- end
-
- context "when the project exists" do
- before do
- env["PATH_INFO"] = project.path_with_namespace + ".git"
- end
-
- context "when the project is public" do
- before do
- project.update_attribute(:visibility_level, Project::PUBLIC)
- end
-
- it "responds with status 200" do
- expect(status).to eq(200)
- end
- end
-
- context "when the project is private" do
- before do
- project.update_attribute(:visibility_level, Project::PRIVATE)
- end
-
- context "when no authentication is provided" do
- it "responds with status 401" do
- expect(status).to eq(401)
- end
- end
-
- context "when username and password are provided" do
- context "when authentication fails" do
- before do
- env["HTTP_AUTHORIZATION"] = ActionController::HttpAuthentication::Basic.encode_credentials(user.username, "nope")
- end
-
- it "responds with status 401" do
- expect(status).to eq(401)
- end
-
- context "when the user is IP banned" do
- before do
- expect(Rack::Attack::Allow2Ban).to receive(:filter).and_return(true)
- allow_any_instance_of(Rack::Request).to receive(:ip).and_return('1.2.3.4')
- end
-
- it "responds with status 401" do
- expect(status).to eq(401)
- end
- end
- end
-
- context "when authentication succeeds" do
- before do
- env["HTTP_AUTHORIZATION"] = ActionController::HttpAuthentication::Basic.encode_credentials(user.username, user.password)
- end
-
- context "when the user has access to the project" do
- before do
- project.team << [user, :master]
- end
-
- context "when the user is blocked" do
- before do
- user.block
- project.team << [user, :master]
- end
-
- it "responds with status 404" do
- expect(status).to eq(404)
- end
- end
-
- context "when the user isn't blocked" do
- before do
- expect(Rack::Attack::Allow2Ban).to receive(:reset)
- end
-
- it "responds with status 200" do
- expect(status).to eq(200)
- end
- end
-
- context "when blank password attempts follow a valid login" do
- let(:options) { Gitlab.config.rack_attack.git_basic_auth }
- let(:maxretry) { options[:maxretry] - 1 }
- let(:ip) { '1.2.3.4' }
-
- before do
- allow_any_instance_of(Rack::Request).to receive(:ip).and_return(ip)
- Rack::Attack::Allow2Ban.reset(ip, options)
- end
-
- after do
- Rack::Attack::Allow2Ban.reset(ip, options)
- end
-
- def attempt_login(include_password)
- password = include_password ? user.password : ""
- env["HTTP_AUTHORIZATION"] = ActionController::HttpAuthentication::Basic.encode_credentials(user.username, password)
- Grack::Auth.new(app)
- auth.call(env).first
- end
-
- it "repeated attempts followed by successful attempt" do
- for n in 0..maxretry do
- expect(attempt_login(false)).to eq(401)
- end
-
- expect(attempt_login(true)).to eq(200)
- expect(Rack::Attack::Allow2Ban.send(:banned?, ip)).to eq(nil)
-
- for n in 0..maxretry do
- expect(attempt_login(false)).to eq(401)
- end
- end
- end
- end
-
- context "when the user doesn't have access to the project" do
- it "responds with status 404" do
- expect(status).to eq(404)
- end
- end
- end
- end
-
- context "when a gitlab ci token is provided" do
- let(:token) { "123" }
-
- before do
- gitlab_ci_service = project.build_gitlab_ci_service
- gitlab_ci_service.active = true
- gitlab_ci_service.token = token
- gitlab_ci_service.project_url = "http://google.com"
- gitlab_ci_service.save
-
- env["HTTP_AUTHORIZATION"] = ActionController::HttpAuthentication::Basic.encode_credentials("gitlab-ci-token", token)
- end
-
- it "responds with status 200" do
- expect(status).to eq(200)
- end
- end
- end
- end
- end
-end
diff --git a/spec/lib/gitlab/backend/rack_attack_helpers_spec.rb b/spec/lib/gitlab/backend/rack_attack_helpers_spec.rb
deleted file mode 100644
index 2ac496fd669..00000000000
--- a/spec/lib/gitlab/backend/rack_attack_helpers_spec.rb
+++ /dev/null
@@ -1,35 +0,0 @@
-require "spec_helper"
-
-describe 'RackAttackHelpers' do
- describe 'reset' do
- let(:discriminator) { 'test-key'}
- let(:maxretry) { 5 }
- let(:period) { 1.minute }
- let(:options) { { findtime: period, bantime: 60, maxretry: maxretry } }
-
- def do_filter
- for i in 1..maxretry - 1 do
- status = Rack::Attack::Allow2Ban.filter(discriminator, options) { true }
- expect(status).to eq(false)
- end
- end
-
- def do_reset
- Rack::Attack::Allow2Ban.reset(discriminator, options)
- end
-
- before do
- do_reset
- end
-
- after do
- do_reset
- end
-
- it 'user is not banned after n - 1 retries' do
- do_filter
- do_reset
- do_filter
- end
- end
-end
diff --git a/spec/lib/gitlab/backend/shell_spec.rb b/spec/lib/gitlab/backend/shell_spec.rb
deleted file mode 100644
index 27279465c1a..00000000000
--- a/spec/lib/gitlab/backend/shell_spec.rb
+++ /dev/null
@@ -1,18 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::Shell do
- let(:project) { double('Project', id: 7, path: 'diaspora') }
- let(:gitlab_shell) { Gitlab::Shell.new }
-
- before do
- Project.stub(find: project)
- end
-
- it { is_expected.to respond_to :add_key }
- it { is_expected.to respond_to :remove_key }
- it { is_expected.to respond_to :add_repository }
- it { is_expected.to respond_to :remove_repository }
- it { is_expected.to respond_to :fork_repository }
-
- it { expect(gitlab_shell.url_to_repo('diaspora')).to eq(Gitlab.config.gitlab_shell.ssh_path_prefix + "diaspora.git") }
-end
diff --git a/spec/lib/gitlab/bitbucket_import/client_spec.rb b/spec/lib/gitlab/bitbucket_import/client_spec.rb
deleted file mode 100644
index dd450e9967b..00000000000
--- a/spec/lib/gitlab/bitbucket_import/client_spec.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::BitbucketImport::Client do
- let(:token) { '123456' }
- let(:secret) { 'secret' }
- let(:client) { Gitlab::BitbucketImport::Client.new(token, secret) }
-
- before do
- Gitlab.config.omniauth.providers << OpenStruct.new(app_id: "asd123", app_secret: "asd123", name: "bitbucket")
- end
-
- it 'all OAuth client options are symbols' do
- client.consumer.options.keys.each do |key|
- expect(key).to be_kind_of(Symbol)
- end
- end
-end
diff --git a/spec/lib/gitlab/bitbucket_import/project_creator_spec.rb b/spec/lib/gitlab/bitbucket_import/project_creator_spec.rb
deleted file mode 100644
index 0ec6a43f681..00000000000
--- a/spec/lib/gitlab/bitbucket_import/project_creator_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::BitbucketImport::ProjectCreator do
- let(:user) { create(:user, bitbucket_access_token: "asdffg", bitbucket_access_token_secret: "sekret") }
- let(:repo) { {
- name: 'Vim',
- slug: 'vim',
- is_private: true,
- owner: "asd"}.with_indifferent_access
- }
- let(:namespace){ create(:group, owner: user) }
-
- before do
- namespace.add_owner(user)
- end
-
- it 'creates project' do
- allow_any_instance_of(Project).to receive(:add_import_job)
-
- project_creator = Gitlab::BitbucketImport::ProjectCreator.new(repo, namespace, user)
- project = project_creator.execute
-
- expect(project.import_url).to eq("ssh://git@bitbucket.org/asd/vim.git")
- expect(project.visibility_level).to eq(Gitlab::VisibilityLevel::PRIVATE)
- end
-end
diff --git a/spec/lib/gitlab/closing_issue_extractor_spec.rb b/spec/lib/gitlab/closing_issue_extractor_spec.rb
deleted file mode 100644
index cb7b0fbb890..00000000000
--- a/spec/lib/gitlab/closing_issue_extractor_spec.rb
+++ /dev/null
@@ -1,176 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::ClosingIssueExtractor do
- let(:project) { create(:project) }
- let(:issue) { create(:issue, project: project) }
- let(:iid1) { issue.iid }
-
- subject { described_class.new(project, project.creator) }
-
- describe "#closed_by_message" do
- context 'with a single reference' do
- it do
- message = "Awesome commit (Closes ##{iid1})"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "Awesome commit (closes ##{iid1})"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "Closed ##{iid1}"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "closed ##{iid1}"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "Closing ##{iid1}"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "closing ##{iid1}"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "Close ##{iid1}"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "close ##{iid1}"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "Awesome commit (Fixes ##{iid1})"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "Awesome commit (fixes ##{iid1})"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "Fixed ##{iid1}"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "fixed ##{iid1}"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "Fixing ##{iid1}"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "fixing ##{iid1}"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "Fix ##{iid1}"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "fix ##{iid1}"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "Awesome commit (Resolves ##{iid1})"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "Awesome commit (resolves ##{iid1})"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "Resolved ##{iid1}"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "resolved ##{iid1}"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "Resolving ##{iid1}"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "resolving ##{iid1}"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "Resolve ##{iid1}"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
-
- it do
- message = "resolve ##{iid1}"
- expect(subject.closed_by_message(message)).to eq([issue])
- end
- end
-
- context 'with multiple references' do
- let(:other_issue) { create(:issue, project: project) }
- let(:third_issue) { create(:issue, project: project) }
- let(:iid2) { other_issue.iid }
- let(:iid3) { third_issue.iid }
-
- it 'fetches issues in single line message' do
- message = "Closes ##{iid1} and fix ##{iid2}"
-
- expect(subject.closed_by_message(message)).
- to eq([issue, other_issue])
- end
-
- it 'fetches comma-separated issues references in single line message' do
- message = "Closes ##{iid1}, closes ##{iid2}"
-
- expect(subject.closed_by_message(message)).
- to eq([issue, other_issue])
- end
-
- it 'fetches comma-separated issues numbers in single line message' do
- message = "Closes ##{iid1}, ##{iid2} and ##{iid3}"
-
- expect(subject.closed_by_message(message)).
- to eq([issue, other_issue, third_issue])
- end
-
- it 'fetches issues in multi-line message' do
- message = "Awesome commit (closes ##{iid1})\nAlso fixes ##{iid2}"
-
- expect(subject.closed_by_message(message)).
- to eq([issue, other_issue])
- end
-
- it 'fetches issues in hybrid message' do
- message = "Awesome commit (closes ##{iid1})\n"\
- "Also fixing issues ##{iid2}, ##{iid3} and #4"
-
- expect(subject.closed_by_message(message)).
- to eq([issue, other_issue, third_issue])
- end
- end
- end
-end
diff --git a/spec/lib/gitlab/diff/file_spec.rb b/spec/lib/gitlab/diff/file_spec.rb
deleted file mode 100644
index 40eb45e37ca..00000000000
--- a/spec/lib/gitlab/diff/file_spec.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::Diff::File do
- include RepoHelpers
-
- let(:project) { create(:project) }
- let(:commit) { project.repository.commit(sample_commit.id) }
- let(:diff) { commit.diffs.first }
- let(:diff_file) { Gitlab::Diff::File.new(diff) }
-
- describe :diff_lines do
- let(:diff_lines) { diff_file.diff_lines }
-
- it { expect(diff_lines.size).to eq(30) }
- it { expect(diff_lines.first).to be_kind_of(Gitlab::Diff::Line) }
- end
-
- describe :mode_changed? do
- it { expect(diff_file.mode_changed?).to be_falsey }
- end
-end
diff --git a/spec/lib/gitlab/diff/parser_spec.rb b/spec/lib/gitlab/diff/parser_spec.rb
deleted file mode 100644
index 918f6d0ead4..00000000000
--- a/spec/lib/gitlab/diff/parser_spec.rb
+++ /dev/null
@@ -1,93 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::Diff::Parser do
- include RepoHelpers
-
- let(:project) { create(:project) }
- let(:commit) { project.repository.commit(sample_commit.id) }
- let(:diff) { commit.diffs.first }
- let(:parser) { Gitlab::Diff::Parser.new }
-
- describe :parse do
- let(:diff) do
- <<eos
---- a/files/ruby/popen.rb
-+++ b/files/ruby/popen.rb
-@@ -6,12 +6,18 @@ module Popen
-
- def popen(cmd, path=nil)
- unless cmd.is_a?(Array)
-- raise "System commands must be given as an array of strings"
-+ raise RuntimeError, "System commands must be given as an array of strings"
- end
-
- path ||= Dir.pwd
-- vars = { "PWD" => path }
-- options = { chdir: path }
-+
-+ vars = {
-+ "PWD" => path
-+ }
-+
-+ options = {
-+ chdir: path
-+ }
-
- unless File.directory?(path)
- FileUtils.mkdir_p(path)
-@@ -19,6 +25,7 @@ module Popen
-
- @cmd_output = ""
- @cmd_status = 0
-+
- Open3.popen3(vars, *cmd, options) do |stdin, stdout, stderr, wait_thr|
- @cmd_output << stdout.read
- @cmd_output << stderr.read
-eos
- end
-
- before do
- @lines = parser.parse(diff.lines)
- end
-
- it { expect(@lines.size).to eq(30) }
-
- describe 'lines' do
- describe 'first line' do
- let(:line) { @lines.first }
-
- it { expect(line.type).to eq('match') }
- it { expect(line.old_pos).to eq(6) }
- it { expect(line.new_pos).to eq(6) }
- it { expect(line.text).to eq('@@ -6,12 +6,18 @@ module Popen') }
- end
-
- describe 'removal line' do
- let(:line) { @lines[10] }
-
- it { expect(line.type).to eq('old') }
- it { expect(line.old_pos).to eq(14) }
- it { expect(line.new_pos).to eq(13) }
- it { expect(line.text).to eq('- options = { chdir: path }') }
- end
-
- describe 'addition line' do
- let(:line) { @lines[16] }
-
- it { expect(line.type).to eq('new') }
- it { expect(line.old_pos).to eq(15) }
- it { expect(line.new_pos).to eq(18) }
- it { expect(line.text).to eq('+ options = {') }
- end
-
- describe 'unchanged line' do
- let(:line) { @lines.last }
-
- it { expect(line.type).to eq(nil) }
- it { expect(line.old_pos).to eq(24) }
- it { expect(line.new_pos).to eq(31) }
- it { expect(line.text).to eq(' @cmd_output &lt;&lt; stderr.read') }
- end
- end
- end
-end
diff --git a/spec/lib/gitlab/git_access_spec.rb b/spec/lib/gitlab/git_access_spec.rb
deleted file mode 100644
index 39be9d64644..00000000000
--- a/spec/lib/gitlab/git_access_spec.rb
+++ /dev/null
@@ -1,235 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::GitAccess do
- let(:access) { Gitlab::GitAccess.new(actor, project) }
- let(:project) { create(:project) }
- let(:user) { create(:user) }
- let(:actor) { user }
-
- describe 'can_push_to_branch?' do
- describe 'push to none protected branch' do
- it "returns true if user is a master" do
- project.team << [user, :master]
- expect(access.can_push_to_branch?("random_branch")).to be_truthy
- end
-
- it "returns true if user is a developer" do
- project.team << [user, :developer]
- expect(access.can_push_to_branch?("random_branch")).to be_truthy
- end
-
- it "returns false if user is a reporter" do
- project.team << [user, :reporter]
- expect(access.can_push_to_branch?("random_branch")).to be_falsey
- end
- end
-
- describe 'push to protected branch' do
- before do
- @branch = create :protected_branch, project: project
- end
-
- it "returns true if user is a master" do
- project.team << [user, :master]
- expect(access.can_push_to_branch?(@branch.name)).to be_truthy
- end
-
- it "returns false if user is a developer" do
- project.team << [user, :developer]
- expect(access.can_push_to_branch?(@branch.name)).to be_falsey
- end
-
- it "returns false if user is a reporter" do
- project.team << [user, :reporter]
- expect(access.can_push_to_branch?(@branch.name)).to be_falsey
- end
- end
-
- describe 'push to protected branch if allowed for developers' do
- before do
- @branch = create :protected_branch, project: project, developers_can_push: true
- end
-
- it "returns true if user is a master" do
- project.team << [user, :master]
- expect(access.can_push_to_branch?(@branch.name)).to be_truthy
- end
-
- it "returns true if user is a developer" do
- project.team << [user, :developer]
- expect(access.can_push_to_branch?(@branch.name)).to be_truthy
- end
-
- it "returns false if user is a reporter" do
- project.team << [user, :reporter]
- expect(access.can_push_to_branch?(@branch.name)).to be_falsey
- end
- end
-
- end
-
- describe 'download_access_check' do
- describe 'master permissions' do
- before { project.team << [user, :master] }
-
- context 'pull code' do
- subject { access.download_access_check }
-
- it { expect(subject.allowed?).to be_truthy }
- end
- end
-
- describe 'guest permissions' do
- before { project.team << [user, :guest] }
-
- context 'pull code' do
- subject { access.download_access_check }
-
- it { expect(subject.allowed?).to be_falsey }
- end
- end
-
- describe 'blocked user' do
- before do
- project.team << [user, :master]
- user.block
- end
-
- context 'pull code' do
- subject { access.download_access_check }
-
- it { expect(subject.allowed?).to be_falsey }
- end
- end
-
- describe 'without acccess to project' do
- context 'pull code' do
- subject { access.download_access_check }
-
- it { expect(subject.allowed?).to be_falsey }
- end
- end
-
- describe 'deploy key permissions' do
- let(:key) { create(:deploy_key) }
- let(:actor) { key }
-
- context 'pull code' do
- context 'allowed' do
- before { key.projects << project }
- subject { access.download_access_check }
-
- it { expect(subject.allowed?).to be_truthy }
- end
-
- context 'denied' do
- subject { access.download_access_check }
-
- it { expect(subject.allowed?).to be_falsey }
- end
- end
- end
- end
-
- describe 'push_access_check' do
- def protect_feature_branch
- create(:protected_branch, name: 'feature', project: project)
- end
-
- def changes
- {
- push_new_branch: "#{Gitlab::Git::BLANK_SHA} 570e7b2ab refs/heads/wow",
- push_master: '6f6d7e7ed 570e7b2ab refs/heads/master',
- push_protected_branch: '6f6d7e7ed 570e7b2ab refs/heads/feature',
- push_remove_protected_branch: "570e7b2ab #{Gitlab::Git::BLANK_SHA} "\
- 'refs/heads/feature',
- push_tag: '6f6d7e7ed 570e7b2ab refs/tags/v1.0.0',
- push_new_tag: "#{Gitlab::Git::BLANK_SHA} 570e7b2ab refs/tags/v7.8.9",
- push_all: ['6f6d7e7ed 570e7b2ab refs/heads/master', '6f6d7e7ed 570e7b2ab refs/heads/feature']
- }
- end
-
- def self.permissions_matrix
- {
- master: {
- push_new_branch: true,
- push_master: true,
- push_protected_branch: true,
- push_remove_protected_branch: false,
- push_tag: true,
- push_new_tag: true,
- push_all: true,
- },
-
- developer: {
- push_new_branch: true,
- push_master: true,
- push_protected_branch: false,
- push_remove_protected_branch: false,
- push_tag: false,
- push_new_tag: true,
- push_all: false,
- },
-
- reporter: {
- push_new_branch: false,
- push_master: false,
- push_protected_branch: false,
- push_remove_protected_branch: false,
- push_tag: false,
- push_new_tag: false,
- push_all: false,
- },
-
- guest: {
- push_new_branch: false,
- push_master: false,
- push_protected_branch: false,
- push_remove_protected_branch: false,
- push_tag: false,
- push_new_tag: false,
- push_all: false,
- }
- }
- end
-
- def self.updated_permissions_matrix
- updated_permissions_matrix = permissions_matrix.dup
- updated_permissions_matrix[:developer][:push_protected_branch] = true
- updated_permissions_matrix[:developer][:push_all] = true
- updated_permissions_matrix
- end
-
- permissions_matrix.keys.each do |role|
- describe "#{role} access" do
- before { protect_feature_branch }
- before { project.team << [user, role] }
-
- permissions_matrix[role].each do |action, allowed|
- context action do
- subject { access.push_access_check(changes[action]) }
-
- it { expect(subject.allowed?).to allowed ? be_truthy : be_falsey }
- end
- end
- end
- end
-
- context "with enabled developers push to protected branches " do
- updated_permissions_matrix.keys.each do |role|
- describe "#{role} access" do
- before { create(:protected_branch, name: 'feature', developers_can_push: true, project: project) }
- before { project.team << [user, role] }
-
- updated_permissions_matrix[role].each do |action, allowed|
- context action do
- subject { access.push_access_check(changes[action]) }
-
- it { expect(subject.allowed?).to allowed ? be_truthy : be_falsey }
- end
- end
- end
- end
- end
- end
-end
diff --git a/spec/lib/gitlab/git_access_wiki_spec.rb b/spec/lib/gitlab/git_access_wiki_spec.rb
deleted file mode 100644
index 4cb91094cb3..00000000000
--- a/spec/lib/gitlab/git_access_wiki_spec.rb
+++ /dev/null
@@ -1,22 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::GitAccessWiki do
- let(:access) { Gitlab::GitAccessWiki.new(user, project) }
- let(:project) { create(:project) }
- let(:user) { create(:user) }
-
- describe 'push_allowed?' do
- before do
- create(:protected_branch, name: 'master', project: project)
- project.team << [user, :developer]
- end
-
- subject { access.push_access_check(changes) }
-
- it { expect(subject.allowed?).to be_truthy }
- end
-
- def changes
- ['6f6d7e7ed 570e7b2ab refs/heads/master']
- end
-end
diff --git a/spec/lib/gitlab/github_import/client_spec.rb b/spec/lib/gitlab/github_import/client_spec.rb
deleted file mode 100644
index 26618120316..00000000000
--- a/spec/lib/gitlab/github_import/client_spec.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::GithubImport::Client do
- let(:token) { '123456' }
- let(:client) { Gitlab::GithubImport::Client.new(token) }
-
- before do
- Gitlab.config.omniauth.providers << OpenStruct.new(app_id: "asd123", app_secret: "asd123", name: "github")
- end
-
- it 'all OAuth2 client options are symbols' do
- client.client.options.keys.each do |key|
- expect(key).to be_kind_of(Symbol)
- end
- end
-end
diff --git a/spec/lib/gitlab/github_import/project_creator_spec.rb b/spec/lib/gitlab/github_import/project_creator_spec.rb
deleted file mode 100644
index 3bf52cb685e..00000000000
--- a/spec/lib/gitlab/github_import/project_creator_spec.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::GithubImport::ProjectCreator do
- let(:user) { create(:user, github_access_token: "asdffg") }
- let(:repo) { OpenStruct.new(
- login: 'vim',
- name: 'vim',
- private: true,
- full_name: 'asd/vim',
- clone_url: "https://gitlab.com/asd/vim.git",
- owner: OpenStruct.new(login: "john"))
- }
- let(:namespace){ create(:group, owner: user) }
-
- before do
- namespace.add_owner(user)
- end
-
- it 'creates project' do
- allow_any_instance_of(Project).to receive(:add_import_job)
-
- project_creator = Gitlab::GithubImport::ProjectCreator.new(repo, namespace, user)
- project = project_creator.execute
-
- expect(project.import_url).to eq("https://asdffg@gitlab.com/asd/vim.git")
- expect(project.visibility_level).to eq(Gitlab::VisibilityLevel::PRIVATE)
- end
-end
diff --git a/spec/lib/gitlab/gitlab_import/client_spec.rb b/spec/lib/gitlab/gitlab_import/client_spec.rb
deleted file mode 100644
index c511c515474..00000000000
--- a/spec/lib/gitlab/gitlab_import/client_spec.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::GitlabImport::Client do
- let(:token) { '123456' }
- let(:client) { Gitlab::GitlabImport::Client.new(token) }
-
- before do
- Gitlab.config.omniauth.providers << OpenStruct.new(app_id: "asd123", app_secret: "asd123", name: "gitlab")
- end
-
- it 'all OAuth2 client options are symbols' do
- client.client.options.keys.each do |key|
- expect(key).to be_kind_of(Symbol)
- end
- end
-end
diff --git a/spec/lib/gitlab/gitlab_import/project_creator_spec.rb b/spec/lib/gitlab/gitlab_import/project_creator_spec.rb
deleted file mode 100644
index 3cefe4ea8e2..00000000000
--- a/spec/lib/gitlab/gitlab_import/project_creator_spec.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::GitlabImport::ProjectCreator do
- let(:user) { create(:user, gitlab_access_token: "asdffg") }
- let(:repo) { {
- name: 'vim',
- path: 'vim',
- visibility_level: Gitlab::VisibilityLevel::PRIVATE,
- path_with_namespace: 'asd/vim',
- http_url_to_repo: "https://gitlab.com/asd/vim.git",
- owner: {name: "john"}}.with_indifferent_access
- }
- let(:namespace){ create(:group, owner: user) }
-
- before do
- namespace.add_owner(user)
- end
-
- it 'creates project' do
- allow_any_instance_of(Project).to receive(:add_import_job)
-
- project_creator = Gitlab::GitlabImport::ProjectCreator.new(repo, namespace, user)
- project = project_creator.execute
-
- expect(project.import_url).to eq("https://oauth2:asdffg@gitlab.com/asd/vim.git")
- expect(project.visibility_level).to eq(Gitlab::VisibilityLevel::PRIVATE)
- end
-end
diff --git a/spec/lib/gitlab/gitlab_markdown_helper_spec.rb b/spec/lib/gitlab/gitlab_markdown_helper_spec.rb
deleted file mode 100644
index ab613193f41..00000000000
--- a/spec/lib/gitlab/gitlab_markdown_helper_spec.rb
+++ /dev/null
@@ -1,28 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::MarkdownHelper do
- describe '#markup?' do
- %w(textile rdoc org creole wiki
- mediawiki rst adoc asciidoc asc).each do |type|
- it "returns true for #{type} files" do
- expect(Gitlab::MarkdownHelper.markup?("README.#{type}")).to be_truthy
- end
- end
-
- it 'returns false when given a non-markup filename' do
- expect(Gitlab::MarkdownHelper.markup?('README.rb')).not_to be_truthy
- end
- end
-
- describe '#gitlab_markdown?' do
- %w(mdown md markdown).each do |type|
- it "returns true for #{type} files" do
- expect(Gitlab::MarkdownHelper.gitlab_markdown?("README.#{type}")).to be_truthy
- end
- end
-
- it 'returns false when given a non-markdown filename' do
- expect(Gitlab::MarkdownHelper.gitlab_markdown?('README.rb')).not_to be_truthy
- end
- end
-end
diff --git a/spec/lib/gitlab/gitorious_import/project_creator_spec.rb b/spec/lib/gitlab/gitorious_import/project_creator_spec.rb
deleted file mode 100644
index c1125ca6357..00000000000
--- a/spec/lib/gitlab/gitorious_import/project_creator_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::GitoriousImport::ProjectCreator do
- let(:user) { create(:user) }
- let(:repo) { Gitlab::GitoriousImport::Repository.new('foo/bar-baz-qux') }
- let(:namespace){ create(:group, owner: user) }
-
- before do
- namespace.add_owner(user)
- end
-
- it 'creates project' do
- allow_any_instance_of(Project).to receive(:add_import_job)
-
- project_creator = Gitlab::GitoriousImport::ProjectCreator.new(repo, namespace, user)
- project = project_creator.execute
-
- expect(project.name).to eq("Bar Baz Qux")
- expect(project.path).to eq("bar-baz-qux")
- expect(project.namespace).to eq(namespace)
- expect(project.visibility_level).to eq(Gitlab::VisibilityLevel::PUBLIC)
- expect(project.import_type).to eq("gitorious")
- expect(project.import_source).to eq("foo/bar-baz-qux")
- expect(project.import_url).to eq("https://gitorious.org/foo/bar-baz-qux.git")
- end
-end
diff --git a/spec/lib/gitlab/google_code_import/client_spec.rb b/spec/lib/gitlab/google_code_import/client_spec.rb
deleted file mode 100644
index d2bf871daa8..00000000000
--- a/spec/lib/gitlab/google_code_import/client_spec.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-require "spec_helper"
-
-describe Gitlab::GoogleCodeImport::Client do
- let(:raw_data) { JSON.parse(File.read(Rails.root.join("spec/fixtures/GoogleCodeProjectHosting.json"))) }
- subject { described_class.new(raw_data) }
-
- describe "#valid?" do
- context "when the data is valid" do
- it "returns true" do
- expect(subject).to be_valid
- end
- end
-
- context "when the data is invalid" do
- let(:raw_data) { "No clue" }
-
- it "returns true" do
- expect(subject).to_not be_valid
- end
- end
- end
-
- describe "#repos" do
- it "returns only Git repositories" do
- expect(subject.repos.length).to eq(1)
- end
- end
-
- describe "#repo" do
- it "returns the referenced repository" do
- expect(subject.repo("tint2").name).to eq("tint2")
- end
- end
-end
diff --git a/spec/lib/gitlab/google_code_import/project_creator_spec.rb b/spec/lib/gitlab/google_code_import/project_creator_spec.rb
deleted file mode 100644
index 7a224538b8b..00000000000
--- a/spec/lib/gitlab/google_code_import/project_creator_spec.rb
+++ /dev/null
@@ -1,27 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::GoogleCodeImport::ProjectCreator do
- let(:user) { create(:user) }
- let(:repo) {
- Gitlab::GoogleCodeImport::Repository.new(
- "name" => 'vim',
- "summary" => 'VI Improved',
- "repositoryUrls" => [ "https://vim.googlecode.com/git/" ]
- )
- }
- let(:namespace){ create(:group, owner: user) }
-
- before do
- namespace.add_owner(user)
- end
-
- it 'creates project' do
- allow_any_instance_of(Project).to receive(:add_import_job)
-
- project_creator = Gitlab::GoogleCodeImport::ProjectCreator.new(repo, namespace, user)
- project = project_creator.execute
-
- expect(project.import_url).to eq("https://vim.googlecode.com/git/")
- expect(project.visibility_level).to eq(Gitlab::VisibilityLevel::PUBLIC)
- end
-end
diff --git a/spec/lib/gitlab/key_fingerprint_spec.rb b/spec/lib/gitlab/key_fingerprint_spec.rb
deleted file mode 100644
index 266eab6e793..00000000000
--- a/spec/lib/gitlab/key_fingerprint_spec.rb
+++ /dev/null
@@ -1,12 +0,0 @@
-require "spec_helper"
-
-describe Gitlab::KeyFingerprint do
- let(:key) { "ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt4596k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0=" }
- let(:fingerprint) { "3f:a2:ee:de:b5:de:53:c3:aa:2f:9c:45:24:4c:47:7b" }
-
- describe "#fingerprint" do
- it "generates the key's fingerprint" do
- expect(Gitlab::KeyFingerprint.new(key).fingerprint).to eq(fingerprint)
- end
- end
-end
diff --git a/spec/lib/gitlab/ldap/access_spec.rb b/spec/lib/gitlab/ldap/access_spec.rb
deleted file mode 100644
index 707a0521ab3..00000000000
--- a/spec/lib/gitlab/ldap/access_spec.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::LDAP::Access do
- let(:access) { Gitlab::LDAP::Access.new user }
- let(:user) { create(:omniauth_user) }
-
- describe :allowed? do
- subject { access.allowed? }
-
- context 'when the user cannot be found' do
- before { Gitlab::LDAP::Person.stub(find_by_dn: nil) }
-
- it { is_expected.to be_falsey }
- end
-
- context 'when the user is found' do
- before { Gitlab::LDAP::Person.stub(find_by_dn: :ldap_user) }
-
- context 'and the user is diabled via active directory' do
- before { Gitlab::LDAP::Person.stub(disabled_via_active_directory?: true) }
-
- it { is_expected.to be_falsey }
-
- it "should block user in GitLab" do
- access.allowed?
- user.should be_blocked
- end
- end
-
- context 'and has no disabled flag in active diretory' do
- before do
- user.block
-
- Gitlab::LDAP::Person.stub(disabled_via_active_directory?: false)
- end
-
- it { is_expected.to be_truthy }
-
- it "should unblock user in GitLab" do
- access.allowed?
- user.should_not be_blocked
- end
- end
-
- context 'without ActiveDirectory enabled' do
- before do
- Gitlab::LDAP::Config.stub(enabled?: true)
- Gitlab::LDAP::Config.any_instance.stub(active_directory: false)
- end
-
- it { is_expected.to be_truthy }
- end
- end
- end
-end
diff --git a/spec/lib/gitlab/ldap/adapter_spec.rb b/spec/lib/gitlab/ldap/adapter_spec.rb
deleted file mode 100644
index b609e4b38f2..00000000000
--- a/spec/lib/gitlab/ldap/adapter_spec.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::LDAP::Adapter do
- let(:adapter) { Gitlab::LDAP::Adapter.new 'ldapmain' }
-
- describe :dn_matches_filter? do
- let(:ldap) { double(:ldap) }
- subject { adapter.dn_matches_filter?(:dn, :filter) }
- before { adapter.stub(ldap: ldap) }
-
- context "when the search is successful" do
- context "and the result is non-empty" do
- before { ldap.stub(search: [:foo]) }
-
- it { is_expected.to be_truthy }
- end
-
- context "and the result is empty" do
- before { ldap.stub(search: []) }
-
- it { is_expected.to be_falsey }
- end
- end
-
- context "when the search encounters an error" do
- before { ldap.stub(search: nil, get_operation_result: double(code: 1, message: 'some error')) }
-
- it { is_expected.to be_falsey }
- end
- end
-end
diff --git a/spec/lib/gitlab/ldap/authentication_spec.rb b/spec/lib/gitlab/ldap/authentication_spec.rb
deleted file mode 100644
index 8afc2b21f46..00000000000
--- a/spec/lib/gitlab/ldap/authentication_spec.rb
+++ /dev/null
@@ -1,53 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::LDAP::Authentication do
- let(:klass) { Gitlab::LDAP::Authentication }
- let(:user) { create(:omniauth_user, extern_uid: dn) }
- let(:dn) { 'uid=john,ou=people,dc=example,dc=com' }
- let(:login) { 'john' }
- let(:password) { 'password' }
-
- describe :login do
- let(:adapter) { double :adapter }
- before do
- Gitlab::LDAP::Config.stub(enabled?: true)
- end
-
- it "finds the user if authentication is successful" do
- user
- # try only to fake the LDAP call
- klass.any_instance.stub(adapter: double(:adapter,
- bind_as: double(:ldap_user, dn: dn)
- ))
- expect(klass.login(login, password)).to be_truthy
- end
-
- it "is false if the user does not exist" do
- # try only to fake the LDAP call
- klass.any_instance.stub(adapter: double(:adapter,
- bind_as: double(:ldap_user, dn: dn)
- ))
- expect(klass.login(login, password)).to be_falsey
- end
-
- it "is false if authentication fails" do
- user
- # try only to fake the LDAP call
- klass.any_instance.stub(adapter: double(:adapter, bind_as: nil))
- expect(klass.login(login, password)).to be_falsey
- end
-
- it "fails if ldap is disabled" do
- Gitlab::LDAP::Config.stub(enabled?: false)
- expect(klass.login(login, password)).to be_falsey
- end
-
- it "fails if no login is supplied" do
- expect(klass.login('', password)).to be_falsey
- end
-
- it "fails if no password is supplied" do
- expect(klass.login(login, '')).to be_falsey
- end
- end
-end \ No newline at end of file
diff --git a/spec/lib/gitlab/ldap/config_spec.rb b/spec/lib/gitlab/ldap/config_spec.rb
deleted file mode 100644
index 00e9076c787..00000000000
--- a/spec/lib/gitlab/ldap/config_spec.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::LDAP::Config do
- let(:config) { Gitlab::LDAP::Config.new provider }
- let(:provider) { 'ldapmain' }
-
- describe '#initalize' do
- it 'requires a provider' do
- expect{ Gitlab::LDAP::Config.new }.to raise_error ArgumentError
- end
-
- it "works" do
- expect(config).to be_a described_class
- end
-
- it "raises an error if a unknow provider is used" do
- expect{ Gitlab::LDAP::Config.new 'unknown' }.to raise_error
- end
- end
-end
diff --git a/spec/lib/gitlab/ldap/user_spec.rb b/spec/lib/gitlab/ldap/user_spec.rb
deleted file mode 100644
index 42015c28c81..00000000000
--- a/spec/lib/gitlab/ldap/user_spec.rb
+++ /dev/null
@@ -1,106 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::LDAP::User do
- let(:ldap_user) { Gitlab::LDAP::User.new(auth_hash) }
- let(:gl_user) { ldap_user.gl_user }
- let(:info) do
- {
- name: 'John',
- email: 'john@example.com',
- nickname: 'john'
- }
- end
- let(:auth_hash) do
- double(uid: 'my-uid', provider: 'ldapmain', info: double(info))
- end
-
- describe :changed? do
- it "marks existing ldap user as changed" do
- existing_user = create(:omniauth_user, extern_uid: 'my-uid', provider: 'ldapmain')
- expect(ldap_user.changed?).to be_truthy
- end
-
- it "marks existing non-ldap user if the email matches as changed" do
- existing_user = create(:user, email: 'john@example.com')
- expect(ldap_user.changed?).to be_truthy
- end
-
- it "dont marks existing ldap user as changed" do
- existing_user = create(:omniauth_user, email: 'john@example.com', extern_uid: 'my-uid', provider: 'ldapmain')
- expect(ldap_user.changed?).to be_falsey
- end
- end
-
- describe :find_or_create do
- it "finds the user if already existing" do
- existing_user = create(:omniauth_user, extern_uid: 'my-uid', provider: 'ldapmain')
-
- expect{ ldap_user.save }.to_not change{ User.count }
- end
-
- it "connects to existing non-ldap user if the email matches" do
- existing_user = create(:omniauth_user, email: 'john@example.com', provider: "twitter")
- expect{ ldap_user.save }.to_not change{ User.count }
-
- existing_user.reload
- expect(existing_user.ldap_identity.extern_uid).to eql 'my-uid'
- expect(existing_user.ldap_identity.provider).to eql 'ldapmain'
- end
-
- it "creates a new user if not found" do
- expect{ ldap_user.save }.to change{ User.count }.by(1)
- end
- end
-
-
- describe 'blocking' do
- context 'signup' do
- context 'dont block on create' do
- before { Gitlab::LDAP::Config.any_instance.stub block_auto_created_users: false }
-
- it do
- ldap_user.save
- expect(gl_user).to be_valid
- expect(gl_user).not_to be_blocked
- end
- end
-
- context 'block on create' do
- before { Gitlab::LDAP::Config.any_instance.stub block_auto_created_users: true }
-
- it do
- ldap_user.save
- expect(gl_user).to be_valid
- expect(gl_user).to be_blocked
- end
- end
- end
-
- context 'sign-in' do
- before do
- ldap_user.save
- ldap_user.gl_user.activate
- end
-
- context 'dont block on create' do
- before { Gitlab::LDAP::Config.any_instance.stub block_auto_created_users: false }
-
- it do
- ldap_user.save
- expect(gl_user).to be_valid
- expect(gl_user).not_to be_blocked
- end
- end
-
- context 'block on create' do
- before { Gitlab::LDAP::Config.any_instance.stub block_auto_created_users: true }
-
- it do
- ldap_user.save
- expect(gl_user).to be_valid
- expect(gl_user).not_to be_blocked
- end
- end
- end
- end
-end
diff --git a/spec/lib/gitlab/note_data_builder_spec.rb b/spec/lib/gitlab/note_data_builder_spec.rb
deleted file mode 100644
index 448cd0c6880..00000000000
--- a/spec/lib/gitlab/note_data_builder_spec.rb
+++ /dev/null
@@ -1,73 +0,0 @@
-require 'spec_helper'
-
-describe 'Gitlab::NoteDataBuilder' do
- let(:project) { create(:project) }
- let(:user) { create(:user) }
- let(:data) { Gitlab::NoteDataBuilder.build(note, user) }
- let(:note_url) { Gitlab::UrlBuilder.new(:note).build(note.id) }
- let(:fixed_time) { Time.at(1425600000) } # Avoid time precision errors
-
- before(:each) do
- expect(data).to have_key(:object_attributes)
- expect(data[:object_attributes]).to have_key(:url)
- expect(data[:object_attributes][:url]).to eq(note_url)
- expect(data[:object_kind]).to eq('note')
- expect(data[:user]).to eq(user.hook_attrs)
- end
-
- describe 'When asking for a note on commit' do
- let(:note) { create(:note_on_commit) }
-
- it 'returns the note and commit-specific data' do
- expect(data).to have_key(:commit)
- end
- end
-
- describe 'When asking for a note on commit diff' do
- let(:note) { create(:note_on_commit_diff) }
-
- it 'returns the note and commit-specific data' do
- expect(data).to have_key(:commit)
- end
- end
-
- describe 'When asking for a note on issue' do
- let(:issue) { create(:issue, created_at: fixed_time, updated_at: fixed_time) }
- let(:note) { create(:note_on_issue, noteable_id: issue.id) }
-
- it 'returns the note and issue-specific data' do
- expect(data).to have_key(:issue)
- expect(data[:issue]).to eq(issue.hook_attrs)
- end
- end
-
- describe 'When asking for a note on merge request' do
- let(:merge_request) { create(:merge_request, created_at: fixed_time, updated_at: fixed_time) }
- let(:note) { create(:note_on_merge_request, noteable_id: merge_request.id) }
-
- it 'returns the note and merge request data' do
- expect(data).to have_key(:merge_request)
- expect(data[:merge_request]).to eq(merge_request.hook_attrs)
- end
- end
-
- describe 'When asking for a note on merge request diff' do
- let(:merge_request) { create(:merge_request, created_at: fixed_time, updated_at: fixed_time) }
- let(:note) { create(:note_on_merge_request_diff, noteable_id: merge_request.id) }
-
- it 'returns the note and merge request diff data' do
- expect(data).to have_key(:merge_request)
- expect(data[:merge_request]).to eq(merge_request.hook_attrs)
- end
- end
-
- describe 'When asking for a note on project snippet' do
- let!(:snippet) { create(:project_snippet, created_at: fixed_time, updated_at: fixed_time) }
- let!(:note) { create(:note_on_project_snippet, noteable_id: snippet.id) }
-
- it 'returns the note and project snippet data' do
- expect(data).to have_key(:snippet)
- expect(data[:snippet]).to eq(snippet.hook_attrs)
- end
- end
-end
diff --git a/spec/lib/gitlab/o_auth/auth_hash_spec.rb b/spec/lib/gitlab/o_auth/auth_hash_spec.rb
deleted file mode 100644
index 5eb77b492b2..00000000000
--- a/spec/lib/gitlab/o_auth/auth_hash_spec.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::OAuth::AuthHash do
- let(:auth_hash) do
- Gitlab::OAuth::AuthHash.new(double({
- provider: 'twitter',
- uid: uid,
- info: double(info_hash)
- }))
- end
- let(:uid) { 'my-uid' }
- let(:email) { 'my-email@example.com' }
- let(:nickname) { 'my-nickname' }
- let(:info_hash) {
- {
- email: email,
- nickname: nickname,
- name: 'John',
- first_name: "John",
- last_name: "Who"
- }
- }
-
- context "defaults" do
- it { expect(auth_hash.provider).to eql 'twitter' }
- it { expect(auth_hash.uid).to eql uid }
- it { expect(auth_hash.email).to eql email }
- it { expect(auth_hash.username).to eql nickname }
- it { expect(auth_hash.name).to eql "John" }
- it { expect(auth_hash.password).to_not be_empty }
- end
-
- context "email not provided" do
- before { info_hash.delete(:email) }
- it "generates a temp email" do
- expect( auth_hash.email).to start_with('temp-email-for-oauth')
- end
- end
-
- context "username not provided" do
- before { info_hash.delete(:nickname) }
-
- it "takes the first part of the email as username" do
- expect( auth_hash.username ).to eql "my-email"
- end
- end
-
- context "name not provided" do
- before { info_hash.delete(:name) }
-
- it "concats first and lastname as the name" do
- expect( auth_hash.name ).to eql "John Who"
- end
- end
-end \ No newline at end of file
diff --git a/spec/lib/gitlab/o_auth/user_spec.rb b/spec/lib/gitlab/o_auth/user_spec.rb
deleted file mode 100644
index 44cdd1e4fab..00000000000
--- a/spec/lib/gitlab/o_auth/user_spec.rb
+++ /dev/null
@@ -1,109 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::OAuth::User do
- let(:oauth_user) { Gitlab::OAuth::User.new(auth_hash) }
- let(:gl_user) { oauth_user.gl_user }
- let(:uid) { 'my-uid' }
- let(:provider) { 'my-provider' }
- let(:auth_hash) { double(uid: uid, provider: provider, info: double(info_hash)) }
- let(:info_hash) do
- {
- nickname: '-john+gitlab-ETC%.git@gmail.com',
- name: 'John',
- email: 'john@mail.com'
- }
- end
-
- describe :persisted? do
- let!(:existing_user) { create(:omniauth_user, extern_uid: 'my-uid', provider: 'my-provider') }
-
- it "finds an existing user based on uid and provider (facebook)" do
- auth = double(info: double(name: 'John'), uid: 'my-uid', provider: 'my-provider')
- expect( oauth_user.persisted? ).to be_truthy
- end
-
- it "returns false if use is not found in database" do
- auth_hash.stub(uid: 'non-existing')
- expect( oauth_user.persisted? ).to be_falsey
- end
- end
-
- describe :save do
- let(:provider) { 'twitter' }
-
- describe 'signup' do
- context "with allow_single_sign_on enabled" do
- before { Gitlab.config.omniauth.stub allow_single_sign_on: true }
-
- it "creates a user from Omniauth" do
- oauth_user.save
-
- expect(gl_user).to be_valid
- identity = gl_user.identities.first
- expect(identity.extern_uid).to eql uid
- expect(identity.provider).to eql 'twitter'
- end
- end
-
- context "with allow_single_sign_on disabled (Default)" do
- it "throws an error" do
- expect{ oauth_user.save }.to raise_error StandardError
- end
- end
- end
-
- describe 'blocking' do
- let(:provider) { 'twitter' }
- before { Gitlab.config.omniauth.stub allow_single_sign_on: true }
-
- context 'signup' do
- context 'dont block on create' do
- before { Gitlab.config.omniauth.stub block_auto_created_users: false }
-
- it do
- oauth_user.save
- expect(gl_user).to be_valid
- expect(gl_user).not_to be_blocked
- end
- end
-
- context 'block on create' do
- before { Gitlab.config.omniauth.stub block_auto_created_users: true }
-
- it do
- oauth_user.save
- expect(gl_user).to be_valid
- expect(gl_user).to be_blocked
- end
- end
- end
-
- context 'sign-in' do
- before do
- oauth_user.save
- oauth_user.gl_user.activate
- end
-
- context 'dont block on create' do
- before { Gitlab.config.omniauth.stub block_auto_created_users: false }
-
- it do
- oauth_user.save
- expect(gl_user).to be_valid
- expect(gl_user).not_to be_blocked
- end
- end
-
- context 'block on create' do
- before { Gitlab.config.omniauth.stub block_auto_created_users: true }
-
- it do
- oauth_user.save
- expect(gl_user).to be_valid
- expect(gl_user).not_to be_blocked
- end
- end
- end
- end
- end
-end
diff --git a/spec/lib/gitlab/popen_spec.rb b/spec/lib/gitlab/popen_spec.rb
deleted file mode 100644
index cd9d0456b25..00000000000
--- a/spec/lib/gitlab/popen_spec.rb
+++ /dev/null
@@ -1,45 +0,0 @@
-require 'spec_helper'
-
-describe 'Gitlab::Popen', no_db: true do
- let (:path) { Rails.root.join('tmp').to_s }
-
- before do
- @klass = Class.new(Object)
- @klass.send(:include, Gitlab::Popen)
- end
-
- context 'zero status' do
- before do
- @output, @status = @klass.new.popen(%W(ls), path)
- end
-
- it { expect(@status).to be_zero }
- it { expect(@output).to include('cache') }
- end
-
- context 'non-zero status' do
- before do
- @output, @status = @klass.new.popen(%W(cat NOTHING), path)
- end
-
- it { expect(@status).to eq(1) }
- it { expect(@output).to include('No such file or directory') }
- end
-
- context 'unsafe string command' do
- it 'raises an error when it gets called with a string argument' do
- expect { @klass.new.popen('ls', path) }.to raise_error
- end
- end
-
- context 'without a directory argument' do
- before do
- @output, @status = @klass.new.popen(%W(ls))
- end
-
- it { expect(@status).to be_zero }
- it { expect(@output).to include('spec') }
- end
-
-end
-
diff --git a/spec/lib/gitlab/push_data_builder_spec.rb b/spec/lib/gitlab/push_data_builder_spec.rb
deleted file mode 100644
index 1b8ba7b4d43..00000000000
--- a/spec/lib/gitlab/push_data_builder_spec.rb
+++ /dev/null
@@ -1,39 +0,0 @@
-require 'spec_helper'
-
-describe 'Gitlab::PushDataBuilder' do
- let(:project) { create(:project) }
- let(:user) { create(:user) }
-
-
- describe :build_sample do
- let(:data) { Gitlab::PushDataBuilder.build_sample(project, user) }
-
- it { expect(data).to be_a(Hash) }
- it { expect(data[:before]).to eq('6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9') }
- it { expect(data[:after]).to eq('5937ac0a7beb003549fc5fd26fc247adbce4a52e') }
- it { expect(data[:ref]).to eq('refs/heads/master') }
- it { expect(data[:commits].size).to eq(3) }
- it { expect(data[:repository][:git_http_url]).to eq(project.http_url_to_repo) }
- it { expect(data[:repository][:git_ssh_url]).to eq(project.ssh_url_to_repo) }
- it { expect(data[:repository][:visibility_level]).to eq(project.visibility_level) }
- it { expect(data[:total_commits_count]).to eq(3) }
- end
-
- describe :build do
- let(:data) do
- Gitlab::PushDataBuilder.build(project,
- user,
- Gitlab::Git::BLANK_SHA,
- '8a2a6eb295bb170b34c24c76c49ed0e9b2eaf34b',
- 'refs/tags/v1.1.0')
- end
-
- it { expect(data).to be_a(Hash) }
- it { expect(data[:before]).to eq(Gitlab::Git::BLANK_SHA) }
- it { expect(data[:checkout_sha]).to eq('5937ac0a7beb003549fc5fd26fc247adbce4a52e') }
- it { expect(data[:after]).to eq('8a2a6eb295bb170b34c24c76c49ed0e9b2eaf34b') }
- it { expect(data[:ref]).to eq('refs/tags/v1.1.0') }
- it { expect(data[:commits]).to be_empty }
- it { expect(data[:total_commits_count]).to be_zero }
- end
-end
diff --git a/spec/lib/gitlab/reference_extractor_spec.rb b/spec/lib/gitlab/reference_extractor_spec.rb
deleted file mode 100644
index c9fb62b61ae..00000000000
--- a/spec/lib/gitlab/reference_extractor_spec.rb
+++ /dev/null
@@ -1,156 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::ReferenceExtractor do
- let(:project) { create(:project) }
- subject { Gitlab::ReferenceExtractor.new(project, project.creator) }
-
- it 'extracts username references' do
- subject.analyze('this contains a @user reference')
- expect(subject.references[:user]).to eq([[project, 'user']])
- end
-
- it 'extracts issue references' do
- subject.analyze('this one talks about issue #1234')
- expect(subject.references[:issue]).to eq([[project, '1234']])
- end
-
- it 'extracts JIRA issue references' do
- subject.analyze('this one talks about issue JIRA-1234')
- expect(subject.references[:issue]).to eq([[project, 'JIRA-1234']])
- end
-
- it 'extracts merge request references' do
- subject.analyze("and here's !43, a merge request")
- expect(subject.references[:merge_request]).to eq([[project, '43']])
- end
-
- it 'extracts snippet ids' do
- subject.analyze('snippets like $12 get extracted as well')
- expect(subject.references[:snippet]).to eq([[project, '12']])
- end
-
- it 'extracts commit shas' do
- subject.analyze('commit shas 98cf0ae3 are pulled out as Strings')
- expect(subject.references[:commit]).to eq([[project, '98cf0ae3']])
- end
-
- it 'extracts commit ranges' do
- subject.analyze('here you go, a commit range: 98cf0ae3...98cf0ae4')
- expect(subject.references[:commit_range]).to eq([[project, '98cf0ae3...98cf0ae4']])
- end
-
- it 'extracts multiple references and preserves their order' do
- subject.analyze('@me and @you both care about this')
- expect(subject.references[:user]).to eq([
- [project, 'me'],
- [project, 'you']
- ])
- end
-
- it 'leaves the original note unmodified' do
- text = 'issue #123 is just the worst, @user'
- subject.analyze(text)
- expect(text).to eq('issue #123 is just the worst, @user')
- end
-
- it 'extracts no references for <pre>..</pre> blocks' do
- subject.analyze("<pre>def puts '#1 issue'\nend\n</pre>```")
- expect(subject.issues).to be_blank
- end
-
- it 'extracts no references for <code>..</code> blocks' do
- subject.analyze("<code>def puts '!1 request'\nend\n</code>```")
- expect(subject.merge_requests).to be_blank
- end
-
- it 'extracts no references for code blocks with language' do
- subject.analyze("this code:\n```ruby\ndef puts '#1 issue'\nend\n```")
- expect(subject.issues).to be_blank
- end
-
- it 'extracts issue references for invalid code blocks' do
- subject.analyze('test: ```this one talks about issue #1234```')
- expect(subject.references[:issue]).to eq([[project, '1234']])
- end
-
- it 'handles all possible kinds of references' do
- accessors = Gitlab::Markdown::TYPES.map { |t| "#{t}s".to_sym }
- expect(subject).to respond_to(*accessors)
- end
-
- it 'accesses valid user objects' do
- @u_foo = create(:user, username: 'foo')
- @u_bar = create(:user, username: 'bar')
- @u_offteam = create(:user, username: 'offteam')
-
- project.team << [@u_foo, :reporter]
- project.team << [@u_bar, :guest]
-
- subject.analyze('@foo, @baduser, @bar, and @offteam')
- expect(subject.users).to eq([@u_foo, @u_bar, @u_offteam])
- end
-
- it 'accesses valid issue objects' do
- @i0 = create(:issue, project: project)
- @i1 = create(:issue, project: project)
-
- subject.analyze("##{@i0.iid}, ##{@i1.iid}, and #999.")
- expect(subject.issues).to eq([@i0, @i1])
- end
-
- it 'accesses valid merge requests' do
- @m0 = create(:merge_request, source_project: project, target_project: project, source_branch: 'aaa')
- @m1 = create(:merge_request, source_project: project, target_project: project, source_branch: 'bbb')
-
- subject.analyze("!999, !#{@m1.iid}, and !#{@m0.iid}.")
- expect(subject.merge_requests).to eq([@m1, @m0])
- end
-
- it 'accesses valid snippets' do
- @s0 = create(:project_snippet, project: project)
- @s1 = create(:project_snippet, project: project)
- @s2 = create(:project_snippet)
-
- subject.analyze("$#{@s0.id}, $999, $#{@s2.id}, $#{@s1.id}")
- expect(subject.snippets).to eq([@s0, @s1])
- end
-
- it 'accesses valid commits' do
- commit = project.repository.commit('master')
-
- subject.analyze("this references commits #{commit.sha[0..6]} and 012345")
- extracted = subject.commits
- expect(extracted.size).to eq(1)
- expect(extracted[0].sha).to eq(commit.sha)
- expect(extracted[0].message).to eq(commit.message)
- end
-
- it 'accesses valid commit ranges' do
- commit = project.repository.commit('master')
- earlier_commit = project.repository.commit('master~2')
-
- subject.analyze("this references commits #{earlier_commit.sha[0..6]}...#{commit.sha[0..6]}")
- extracted = subject.commit_ranges
- expect(extracted.size).to eq(1)
- expect(extracted[0][0].sha).to eq(earlier_commit.sha)
- expect(extracted[0][0].message).to eq(earlier_commit.message)
- expect(extracted[0][1].sha).to eq(commit.sha)
- expect(extracted[0][1].message).to eq(commit.message)
- end
-
- context 'with a project with an underscore' do
- let(:other_project) { create(:project, path: 'test_project') }
- let(:issue) { create(:issue, project: other_project) }
-
- before do
- other_project.team << [project.creator, :developer]
- end
-
- it 'handles project issue references' do
- subject.analyze("this refers issue #{other_project.path_with_namespace}##{issue.iid}")
- extracted = subject.issues
- expect(extracted.size).to eq(1)
- expect(extracted).to eq([issue])
- end
- end
-end
diff --git a/spec/lib/gitlab/regex_spec.rb b/spec/lib/gitlab/regex_spec.rb
deleted file mode 100644
index 727884c41c5..00000000000
--- a/spec/lib/gitlab/regex_spec.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::Regex do
- describe 'project path regex' do
- it { expect('gitlab-ce').to match(Gitlab::Regex.project_path_regex) }
- it { expect('gitlab_git').to match(Gitlab::Regex.project_path_regex) }
- it { expect('_underscore.js').to match(Gitlab::Regex.project_path_regex) }
- it { expect('100px.com').to match(Gitlab::Regex.project_path_regex) }
- it { expect('?gitlab').not_to match(Gitlab::Regex.project_path_regex) }
- it { expect('git lab').not_to match(Gitlab::Regex.project_path_regex) }
- it { expect('gitlab.git').not_to match(Gitlab::Regex.project_path_regex) }
- end
-
- describe 'project name regex' do
- it { expect('gitlab-ce').to match(Gitlab::Regex.project_name_regex) }
- it { expect('GitLab CE').to match(Gitlab::Regex.project_name_regex) }
- it { expect('100 lines').to match(Gitlab::Regex.project_name_regex) }
- it { expect('gitlab.git').to match(Gitlab::Regex.project_name_regex) }
- it { expect('?gitlab').not_to match(Gitlab::Regex.project_name_regex) }
- end
-end
diff --git a/spec/lib/gitlab/satellite/action_spec.rb b/spec/lib/gitlab/satellite/action_spec.rb
deleted file mode 100644
index 28e3d64ee2b..00000000000
--- a/spec/lib/gitlab/satellite/action_spec.rb
+++ /dev/null
@@ -1,118 +0,0 @@
-require 'spec_helper'
-
-describe 'Gitlab::Satellite::Action' do
- let(:project) { create(:project) }
- let(:user) { create(:user) }
-
- describe '#prepare_satellite!' do
- it 'should be able to fetch timeout from conf' do
- expect(Gitlab::Satellite::Action::DEFAULT_OPTIONS[:git_timeout]).to eq(30.seconds)
- end
-
- it 'create a repository with a parking branch and one remote: origin' do
- repo = project.satellite.repo
-
- #now lets dirty it up
-
- starting_remote_count = repo.git.list_remotes.size
- expect(starting_remote_count).to be >= 1
- #kind of hookey way to add a second remote
- origin_uri = repo.git.remote({v: true}).split(" ")[1]
- begin
- repo.git.remote({raise: true}, 'add', 'another-remote', origin_uri)
- repo.git.branch({raise: true}, 'a-new-branch')
-
- expect(repo.heads.size).to be > (starting_remote_count)
- expect(repo.git.remote().split(" ").size).to be > (starting_remote_count)
- rescue
- end
-
- repo.git.config({}, "user.name", "#{user.name} -- foo")
- repo.git.config({}, "user.email", "#{user.email} -- foo")
- expect(repo.config['user.name']).to eq("#{user.name} -- foo")
- expect(repo.config['user.email']).to eq("#{user.email} -- foo")
-
-
- #These must happen in the context of the satellite directory...
- satellite_action = Gitlab::Satellite::Action.new(user, project)
- project.satellite.lock {
- #Now clean it up, use send to get around prepare_satellite! being protected
- satellite_action.send(:prepare_satellite!, repo)
- }
-
- #verify it's clean
- heads = repo.heads.map(&:name)
- expect(heads.size).to eq(1)
- expect(heads.include?(Gitlab::Satellite::Satellite::PARKING_BRANCH)).to eq(true)
- remotes = repo.git.remote().split(' ')
- expect(remotes.size).to eq(1)
- expect(remotes.include?('origin')).to eq(true)
- expect(repo.config['user.name']).to eq(user.name)
- expect(repo.config['user.email']).to eq(user.email)
- end
- end
-
- describe '#in_locked_and_timed_satellite' do
-
- it 'should make use of a lockfile' do
- repo = project.satellite.repo
- called = false
-
- #set assumptions
- FileUtils.rm_f(project.satellite.lock_file)
-
- expect(File.exists?(project.satellite.lock_file)).to be_falsey
-
- satellite_action = Gitlab::Satellite::Action.new(user, project)
- satellite_action.send(:in_locked_and_timed_satellite) do |sat_repo|
- expect(repo).to eq(sat_repo)
- expect(File.exists? project.satellite.lock_file).to be_truthy
- called = true
- end
-
- expect(called).to be_truthy
-
- end
-
- it 'should be able to use the satellite after locking' do
- repo = project.satellite.repo
- called = false
-
- # Set base assumptions
- if File.exists? project.satellite.lock_file
- expect(FileLockStatusChecker.new(project.satellite.lock_file).flocked?).to be_falsey
- end
-
- satellite_action = Gitlab::Satellite::Action.new(user, project)
- satellite_action.send(:in_locked_and_timed_satellite) do |sat_repo|
- called = true
- expect(repo).to eq(sat_repo)
- expect(File.exists? project.satellite.lock_file).to be_truthy
- expect(FileLockStatusChecker.new(project.satellite.lock_file).flocked?).to be_truthy
- end
-
- expect(called).to be_truthy
- expect(FileLockStatusChecker.new(project.satellite.lock_file).flocked?).to be_falsey
-
- end
-
- class FileLockStatusChecker < File
- def flocked?(&block)
- status = flock LOCK_EX|LOCK_NB
- case status
- when false
- return true
- when 0
- begin
- block ? block.call : false
- ensure
- flock LOCK_UN
- end
- else
- raise SystemCallError, status
- end
- end
- end
-
- end
-end
diff --git a/spec/lib/gitlab/satellite/merge_action_spec.rb b/spec/lib/gitlab/satellite/merge_action_spec.rb
deleted file mode 100644
index 915e3ff0e51..00000000000
--- a/spec/lib/gitlab/satellite/merge_action_spec.rb
+++ /dev/null
@@ -1,104 +0,0 @@
-require 'spec_helper'
-
-describe 'Gitlab::Satellite::MergeAction' do
- include RepoHelpers
-
- let(:project) { create(:project, namespace: create(:group)) }
- let(:fork_project) { create(:project, namespace: create(:group), forked_from_project: project) }
- let(:merge_request) { create(:merge_request, source_project: project, target_project: project) }
- let(:merge_request_fork) { create(:merge_request, source_project: fork_project, target_project: project) }
-
- let(:merge_request_with_conflict) { create(:merge_request, :conflict, source_project: project, target_project: project) }
- let(:merge_request_fork_with_conflict) { create(:merge_request, :conflict, source_project: project, target_project: project) }
-
- describe '#commits_between' do
- def verify_commits(commits, first_commit_sha, last_commit_sha)
- commits.each { |commit| expect(commit.class).to eq(Gitlab::Git::Commit) }
- expect(commits.first.id).to eq(first_commit_sha)
- expect(commits.last.id).to eq(last_commit_sha)
- end
-
- context 'on fork' do
- it 'should get proper commits between' do
- commits = Gitlab::Satellite::MergeAction.new(merge_request_fork.author, merge_request_fork).commits_between
- verify_commits(commits, sample_compare.commits.first, sample_compare.commits.last)
- end
- end
-
- context 'between branches' do
- it 'should raise exception -- not expected to be used by non forks' do
- expect { Gitlab::Satellite::MergeAction.new(merge_request.author, merge_request).commits_between }.to raise_error
- end
- end
- end
-
- describe '#format_patch' do
- def verify_content(patch)
- sample_compare.commits.each do |commit|
- expect(patch.include?(commit)).to be_truthy
- end
- end
-
- context 'on fork' do
- it 'should build a format patch' do
- patch = Gitlab::Satellite::MergeAction.new(merge_request_fork.author, merge_request_fork).format_patch
- verify_content(patch)
- end
- end
-
- context 'between branches' do
- it 'should build a format patch' do
- patch = Gitlab::Satellite::MergeAction.new(merge_request_fork.author, merge_request).format_patch
- verify_content(patch)
- end
- end
- end
-
- describe '#diffs_between_satellite tested against diff_in_satellite' do
- def is_a_matching_diff(diff, diffs)
- diff_count = diff.scan('diff --git').size
- expect(diff_count).to be >= 1
- expect(diffs.size).to eq(diff_count)
- diffs.each do |a_diff|
- expect(a_diff.class).to eq(Gitlab::Git::Diff)
- expect(diff.include? a_diff.diff).to be_truthy
- end
- end
-
- context 'on fork' do
- it 'should get proper diffs' do
- diffs = Gitlab::Satellite::MergeAction.new(merge_request_fork.author, merge_request_fork).diffs_between_satellite
- diff = Gitlab::Satellite::MergeAction.new(merge_request.author, merge_request_fork).diff_in_satellite
- is_a_matching_diff(diff, diffs)
- end
- end
-
- context 'between branches' do
- it 'should get proper diffs' do
- expect{ Gitlab::Satellite::MergeAction.new(merge_request.author, merge_request).diffs_between_satellite }.to raise_error
- end
- end
- end
-
- describe '#can_be_merged?' do
- context 'on fork' do
- it { expect(Gitlab::Satellite::MergeAction.new(
- merge_request_fork.author,
- merge_request_fork).can_be_merged?).to be_truthy }
-
- it { expect(Gitlab::Satellite::MergeAction.new(
- merge_request_fork_with_conflict.author,
- merge_request_fork_with_conflict).can_be_merged?).to be_falsey }
- end
-
- context 'between branches' do
- it { expect(Gitlab::Satellite::MergeAction.new(
- merge_request.author,
- merge_request).can_be_merged?).to be_truthy }
-
- it { expect(Gitlab::Satellite::MergeAction.new(
- merge_request_with_conflict.author,
- merge_request_with_conflict).can_be_merged?).to be_falsey }
- end
- end
-end
diff --git a/spec/lib/gitlab/upgrader_spec.rb b/spec/lib/gitlab/upgrader_spec.rb
deleted file mode 100644
index ce3ea6c260a..00000000000
--- a/spec/lib/gitlab/upgrader_spec.rb
+++ /dev/null
@@ -1,24 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::Upgrader do
- let(:upgrader) { Gitlab::Upgrader.new }
- let(:current_version) { Gitlab::VERSION }
-
- describe 'current_version_raw' do
- it { expect(upgrader.current_version_raw).to eq(current_version) }
- end
-
- describe 'latest_version?' do
- it 'should be true if newest version' do
- upgrader.stub(latest_version_raw: current_version)
- expect(upgrader.latest_version?).to be_truthy
- end
- end
-
- describe 'latest_version_raw' do
- it 'should be latest version for GitLab 5' do
- upgrader.stub(current_version_raw: "5.3.0")
- expect(upgrader.latest_version_raw).to eq("v5.4.2")
- end
- end
-end
diff --git a/spec/lib/gitlab/url_builder_spec.rb b/spec/lib/gitlab/url_builder_spec.rb
deleted file mode 100644
index 5153ed15af3..00000000000
--- a/spec/lib/gitlab/url_builder_spec.rb
+++ /dev/null
@@ -1,77 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::UrlBuilder do
- describe 'When asking for an issue' do
- it 'returns the issue url' do
- issue = create(:issue)
- url = Gitlab::UrlBuilder.new(:issue).build(issue.id)
- expect(url).to eq "#{Settings.gitlab['url']}/#{issue.project.path_with_namespace}/issues/#{issue.iid}"
- end
- end
-
- describe 'When asking for an merge request' do
- it 'returns the merge request url' do
- merge_request = create(:merge_request)
- url = Gitlab::UrlBuilder.new(:merge_request).build(merge_request.id)
- expect(url).to eq "#{Settings.gitlab['url']}/#{merge_request.project.path_with_namespace}/merge_requests/#{merge_request.iid}"
- end
- end
-
- describe 'When asking for a note on commit' do
- let(:note) { create(:note_on_commit) }
- let(:url) { Gitlab::UrlBuilder.new(:note).build(note.id) }
-
- it 'returns the note url' do
- expect(url).to eq "#{Settings.gitlab['url']}/#{note.project.path_with_namespace}/commit/#{note.commit_id}#note_#{note.id}"
- end
- end
-
- describe 'When asking for a note on commit diff' do
- let(:note) { create(:note_on_commit_diff) }
- let(:url) { Gitlab::UrlBuilder.new(:note).build(note.id) }
-
- it 'returns the note url' do
- expect(url).to eq "#{Settings.gitlab['url']}/#{note.project.path_with_namespace}/commit/#{note.commit_id}#note_#{note.id}"
- end
- end
-
- describe 'When asking for a note on issue' do
- let(:issue) { create(:issue) }
- let(:note) { create(:note_on_issue, noteable_id: issue.id) }
- let(:url) { Gitlab::UrlBuilder.new(:note).build(note.id) }
-
- it 'returns the note url' do
- expect(url).to eq "#{Settings.gitlab['url']}/#{issue.project.path_with_namespace}/issues/#{issue.iid}#note_#{note.id}"
- end
- end
-
- describe 'When asking for a note on merge request' do
- let(:merge_request) { create(:merge_request) }
- let(:note) { create(:note_on_merge_request, noteable_id: merge_request.id) }
- let(:url) { Gitlab::UrlBuilder.new(:note).build(note.id) }
-
- it 'returns the note url' do
- expect(url).to eq "#{Settings.gitlab['url']}/#{merge_request.project.path_with_namespace}/merge_requests/#{merge_request.iid}#note_#{note.id}"
- end
- end
-
- describe 'When asking for a note on merge request diff' do
- let(:merge_request) { create(:merge_request) }
- let(:note) { create(:note_on_merge_request_diff, noteable_id: merge_request.id) }
- let(:url) { Gitlab::UrlBuilder.new(:note).build(note.id) }
-
- it 'returns the note url' do
- expect(url).to eq "#{Settings.gitlab['url']}/#{merge_request.project.path_with_namespace}/merge_requests/#{merge_request.iid}#note_#{note.id}"
- end
- end
-
- describe 'When asking for a note on project snippet' do
- let(:snippet) { create(:project_snippet) }
- let(:note) { create(:note_on_project_snippet, noteable_id: snippet.id) }
- let(:url) { Gitlab::UrlBuilder.new(:note).build(note.id) }
-
- it 'returns the note url' do
- expect(url).to eq "#{Settings.gitlab['url']}/#{snippet.project.path_with_namespace}/snippets/#{note.noteable_id}#note_#{note.id}"
- end
- end
-end
diff --git a/spec/lib/gitlab/version_info_spec.rb b/spec/lib/gitlab/version_info_spec.rb
deleted file mode 100644
index 5afeb1c1ec3..00000000000
--- a/spec/lib/gitlab/version_info_spec.rb
+++ /dev/null
@@ -1,69 +0,0 @@
-require 'spec_helper'
-
-describe 'Gitlab::VersionInfo', no_db: true do
- before do
- @unknown = Gitlab::VersionInfo.new
- @v0_0_1 = Gitlab::VersionInfo.new(0, 0, 1)
- @v0_1_0 = Gitlab::VersionInfo.new(0, 1, 0)
- @v1_0_0 = Gitlab::VersionInfo.new(1, 0, 0)
- @v1_0_1 = Gitlab::VersionInfo.new(1, 0, 1)
- @v1_1_0 = Gitlab::VersionInfo.new(1, 1, 0)
- @v2_0_0 = Gitlab::VersionInfo.new(2, 0, 0)
- end
-
- context '>' do
- it { expect(@v2_0_0).to be > @v1_1_0 }
- it { expect(@v1_1_0).to be > @v1_0_1 }
- it { expect(@v1_0_1).to be > @v1_0_0 }
- it { expect(@v1_0_0).to be > @v0_1_0 }
- it { expect(@v0_1_0).to be > @v0_0_1 }
- end
-
- context '>=' do
- it { expect(@v2_0_0).to be >= Gitlab::VersionInfo.new(2, 0, 0) }
- it { expect(@v2_0_0).to be >= @v1_1_0 }
- end
-
- context '<' do
- it { expect(@v0_0_1).to be < @v0_1_0 }
- it { expect(@v0_1_0).to be < @v1_0_0 }
- it { expect(@v1_0_0).to be < @v1_0_1 }
- it { expect(@v1_0_1).to be < @v1_1_0 }
- it { expect(@v1_1_0).to be < @v2_0_0 }
- end
-
- context '<=' do
- it { expect(@v0_0_1).to be <= Gitlab::VersionInfo.new(0, 0, 1) }
- it { expect(@v0_0_1).to be <= @v0_1_0 }
- end
-
- context '==' do
- it { expect(@v0_0_1).to eq(Gitlab::VersionInfo.new(0, 0, 1)) }
- it { expect(@v0_1_0).to eq(Gitlab::VersionInfo.new(0, 1, 0)) }
- it { expect(@v1_0_0).to eq(Gitlab::VersionInfo.new(1, 0, 0)) }
- end
-
- context '!=' do
- it { expect(@v0_0_1).not_to eq(@v0_1_0) }
- end
-
- context 'unknown' do
- it { expect(@unknown).not_to be @v0_0_1 }
- it { expect(@unknown).not_to be Gitlab::VersionInfo.new }
- it { expect{@unknown > @v0_0_1}.to raise_error(ArgumentError) }
- it { expect{@unknown < @v0_0_1}.to raise_error(ArgumentError) }
- end
-
- context 'parse' do
- it { expect(Gitlab::VersionInfo.parse("1.0.0")).to eq(@v1_0_0) }
- it { expect(Gitlab::VersionInfo.parse("1.0.0.1")).to eq(@v1_0_0) }
- it { expect(Gitlab::VersionInfo.parse("git 1.0.0b1")).to eq(@v1_0_0) }
- it { expect(Gitlab::VersionInfo.parse("git 1.0b1")).not_to be_valid }
- end
-
- context 'to_s' do
- it { expect(@v1_0_0.to_s).to eq("1.0.0") }
- it { expect(@unknown.to_s).to eq("Unknown") }
- end
-end
-
diff --git a/spec/lib/repository_cache_spec.rb b/spec/lib/repository_cache_spec.rb
deleted file mode 100644
index af399f3a731..00000000000
--- a/spec/lib/repository_cache_spec.rb
+++ /dev/null
@@ -1,34 +0,0 @@
-require 'rspec'
-require_relative '../../lib/repository_cache'
-
-describe RepositoryCache do
- let(:backend) { double('backend').as_null_object }
- let(:cache) { RepositoryCache.new('example', backend) }
-
- describe '#cache_key' do
- it 'includes the namespace' do
- expect(cache.cache_key(:foo)).to eq 'foo:example'
- end
- end
-
- describe '#expire' do
- it 'expires the given key from the cache' do
- cache.expire(:foo)
- expect(backend).to have_received(:delete).with('foo:example')
- end
- end
-
- describe '#fetch' do
- it 'fetches the given key from the cache' do
- cache.fetch(:bar)
- expect(backend).to have_received(:fetch).with('bar:example')
- end
-
- it 'accepts a block' do
- p = -> {}
-
- cache.fetch(:baz, &p)
- expect(backend).to have_received(:fetch).with('baz:example', &p)
- end
- end
-end
diff --git a/spec/lib/votes_spec.rb b/spec/lib/votes_spec.rb
deleted file mode 100644
index df243a26008..00000000000
--- a/spec/lib/votes_spec.rb
+++ /dev/null
@@ -1,185 +0,0 @@
-require 'spec_helper'
-
-describe Issue, 'Votes' do
- let(:issue) { create(:issue) }
-
- describe "#upvotes" do
- it "with no notes has a 0/0 score" do
- expect(issue.upvotes).to eq(0)
- end
-
- it "should recognize non-+1 notes" do
- add_note "No +1 here"
- expect(issue.notes.size).to eq(1)
- expect(issue.notes.first.upvote?).to be_falsey
- expect(issue.upvotes).to eq(0)
- end
-
- it "should recognize a single +1 note" do
- add_note "+1 This is awesome"
- expect(issue.upvotes).to eq(1)
- end
-
- it 'should recognize multiple +1 notes' do
- add_note '+1 This is awesome', create(:user)
- add_note '+1 I want this', create(:user)
- expect(issue.upvotes).to eq(2)
- end
-
- it 'should not count 2 +1 votes from the same user' do
- add_note '+1 This is awesome'
- add_note '+1 I want this'
- expect(issue.upvotes).to eq(1)
- end
- end
-
- describe "#downvotes" do
- it "with no notes has a 0/0 score" do
- expect(issue.downvotes).to eq(0)
- end
-
- it "should recognize non--1 notes" do
- add_note "Almost got a -1"
- expect(issue.notes.size).to eq(1)
- expect(issue.notes.first.downvote?).to be_falsey
- expect(issue.downvotes).to eq(0)
- end
-
- it "should recognize a single -1 note" do
- add_note "-1 This is bad"
- expect(issue.downvotes).to eq(1)
- end
-
- it "should recognize multiple -1 notes" do
- add_note('-1 This is bad', create(:user))
- add_note('-1 Away with this', create(:user))
- expect(issue.downvotes).to eq(2)
- end
- end
-
- describe "#votes_count" do
- it "with no notes has a 0/0 score" do
- expect(issue.votes_count).to eq(0)
- end
-
- it "should recognize non notes" do
- add_note "No +1 here"
- expect(issue.notes.size).to eq(1)
- expect(issue.votes_count).to eq(0)
- end
-
- it "should recognize a single +1 note" do
- add_note "+1 This is awesome"
- expect(issue.votes_count).to eq(1)
- end
-
- it "should recognize a single -1 note" do
- add_note "-1 This is bad"
- expect(issue.votes_count).to eq(1)
- end
-
- it "should recognize multiple notes" do
- add_note('+1 This is awesome', create(:user))
- add_note('-1 This is bad', create(:user))
- add_note('+1 I want this', create(:user))
- expect(issue.votes_count).to eq(3)
- end
-
- it 'should not count 2 -1 votes from the same user' do
- add_note '-1 This is suspicious'
- add_note '-1 This is bad'
- expect(issue.votes_count).to eq(1)
- end
- end
-
- describe "#upvotes_in_percent" do
- it "with no notes has a 0% score" do
- expect(issue.upvotes_in_percent).to eq(0)
- end
-
- it "should count a single 1 note as 100%" do
- add_note "+1 This is awesome"
- expect(issue.upvotes_in_percent).to eq(100)
- end
-
- it 'should count multiple +1 notes as 100%' do
- add_note('+1 This is awesome', create(:user))
- add_note('+1 I want this', create(:user))
- expect(issue.upvotes_in_percent).to eq(100)
- end
-
- it 'should count fractions for multiple +1 and -1 notes correctly' do
- add_note('+1 This is awesome', create(:user))
- add_note('+1 I want this', create(:user))
- add_note('-1 This is bad', create(:user))
- add_note('+1 me too', create(:user))
- expect(issue.upvotes_in_percent).to eq(75)
- end
- end
-
- describe "#downvotes_in_percent" do
- it "with no notes has a 0% score" do
- expect(issue.downvotes_in_percent).to eq(0)
- end
-
- it "should count a single -1 note as 100%" do
- add_note "-1 This is bad"
- expect(issue.downvotes_in_percent).to eq(100)
- end
-
- it 'should count multiple -1 notes as 100%' do
- add_note('-1 This is bad', create(:user))
- add_note('-1 Away with this', create(:user))
- expect(issue.downvotes_in_percent).to eq(100)
- end
-
- it 'should count fractions for multiple +1 and -1 notes correctly' do
- add_note('+1 This is awesome', create(:user))
- add_note('+1 I want this', create(:user))
- add_note('-1 This is bad', create(:user))
- add_note('+1 me too', create(:user))
- expect(issue.downvotes_in_percent).to eq(25)
- end
- end
-
- describe '#filter_superceded_votes' do
-
- it 'should count a users vote only once amongst multiple votes' do
- add_note('-1 This needs work before I will accept it')
- add_note('+1 I want this', create(:user))
- add_note('+1 This is is awesome', create(:user))
- add_note('+1 this looks good now')
- add_note('+1 This is awesome', create(:user))
- add_note('+1 me too', create(:user))
- expect(issue.downvotes).to eq(0)
- expect(issue.upvotes).to eq(5)
- end
-
- it 'should count each users vote only once' do
- add_note '-1 This needs work before it will be accepted'
- add_note '+1 I like this'
- add_note '+1 I still like this'
- add_note '+1 I really like this'
- add_note '+1 Give me this now!!!!'
- expect(issue.downvotes).to eq(0)
- expect(issue.upvotes).to eq(1)
- end
-
- it 'should count a users vote only once without caring about comments' do
- add_note '-1 This needs work before it will be accepted'
- add_note 'Comment 1'
- add_note 'Another comment'
- add_note '+1 vote'
- add_note 'final comment'
- expect(issue.downvotes).to eq(0)
- expect(issue.upvotes).to eq(1)
- end
-
- end
-
- def add_note(text, author = issue.author)
- created_at = Time.now - 1.hour + Note.count.seconds
- issue.notes << create(:note, note: text, project: issue.project,
- author_id: author.id, created_at: created_at)
- end
-end