summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/assets/stylesheets/ci/sections/builds.scss8
-rw-r--r--app/controllers/ci/application_controller.rb27
-rw-r--r--app/controllers/ci/commits_controller.rb2
-rw-r--r--app/controllers/ci/projects_controller.rb6
-rw-r--r--app/helpers/ci/commits_helper.rb6
-rw-r--r--app/helpers/ci/user_sessions_helper.rb32
-rw-r--r--app/models/ci/network.rb122
-rw-r--r--app/models/ci/project.rb8
-rw-r--r--app/services/ci/create_project_service.rb6
-rw-r--r--lib/api/services.rb4
-rw-r--r--lib/ci/api/projects.rb2
-rw-r--r--spec/factories/ci/projects.rb2
-rw-r--r--spec/features/ci/builds_spec.rb79
-rw-r--r--spec/features/ci/commits_spec.rb15
-rw-r--r--spec/helpers/ci/user_helper_spec.rb49
-rw-r--r--spec/helpers/ci/user_sessions_helper_spec.rb69
-rw-r--r--spec/lib/ci/ansi2html_spec.rb67
-rw-r--r--spec/models/ci/network_spec.rb54
18 files changed, 113 insertions, 445 deletions
diff --git a/app/assets/stylesheets/ci/sections/builds.scss b/app/assets/stylesheets/ci/sections/builds.scss
index a9d39bb0cbd..600919635d0 100644
--- a/app/assets/stylesheets/ci/sections/builds.scss
+++ b/app/assets/stylesheets/ci/sections/builds.scss
@@ -52,3 +52,11 @@ pre.trace {
color: #777;
}
}
+
+.alert-disabled {
+ background: #EEE;
+
+ a {
+ color: #3084bb !important;
+ }
+}
diff --git a/app/controllers/ci/application_controller.rb b/app/controllers/ci/application_controller.rb
index 9a32efaee7d..a5868da377f 100644
--- a/app/controllers/ci/application_controller.rb
+++ b/app/controllers/ci/application_controller.rb
@@ -4,14 +4,8 @@ module Ci
"app/helpers/ci"
end
- include Ci::UserSessionsHelper
-
- rescue_from Ci::Network::UnauthorizedError, with: :invalid_token
- before_filter :default_headers
helper_method :gl_project
- protect_from_forgery
-
private
def authenticate_public_page!
@@ -75,27 +69,6 @@ module Ci
}
end
- def check_config
- redirect_to oauth2_ci_help_path unless valid_config?
- end
-
- def valid_config?
- server = GitlabCi.config.gitlab_server
-
- if server.blank? || server.url.blank? || server.app_id.blank? || server.app_secret.blank?
- false
- else
- true
- end
- rescue Settingslogic::MissingSetting, NoMethodError
- false
- end
-
- def invalid_token
- reset_session
- redirect_to ci_root_path
- end
-
def gl_project
::Project.find(@project.gitlab_id)
end
diff --git a/app/controllers/ci/commits_controller.rb b/app/controllers/ci/commits_controller.rb
index bad9075dde6..0f7f5485661 100644
--- a/app/controllers/ci/commits_controller.rb
+++ b/app/controllers/ci/commits_controller.rb
@@ -21,7 +21,7 @@ module Ci
def cancel
commit.builds.running_or_pending.each(&:cancel)
- redirect_to ci_project_ref_commit_path(project, commit.ref, commit.sha)
+ redirect_to ci_project_ref_commits_path(project, commit.ref, commit.sha)
end
private
diff --git a/app/controllers/ci/projects_controller.rb b/app/controllers/ci/projects_controller.rb
index c30c5d9590b..9074972e94a 100644
--- a/app/controllers/ci/projects_controller.rb
+++ b/app/controllers/ci/projects_controller.rb
@@ -27,7 +27,7 @@ module Ci
@projects = Ci::Project.where(gitlab_id: @gl_projects.map(&:id)).ordered_by_last_commit_date
@total_count = @gl_projects.size
-
+
@gl_projects = @gl_projects.where.not(id: @projects.map(&:gitlab_id))
respond_to do |format|
@@ -35,8 +35,6 @@ module Ci
pager_json("ci/projects/gitlab", @total_count)
end
end
- rescue Ci::Network::UnauthorizedError
- raise
rescue
@error = 'Failed to fetch GitLab projects'
end
@@ -82,8 +80,8 @@ module Ci
end
def destroy
+ project.gl_project.gitlab_ci_service.update_attributes(active: false)
project.destroy
- Ci::Network.new.disable_ci(project.gitlab_id, current_user.authenticate_options)
Ci::EventService.new.remove_project(current_user, project)
diff --git a/app/helpers/ci/commits_helper.rb b/app/helpers/ci/commits_helper.rb
index 748d12138b1..86f254223cb 100644
--- a/app/helpers/ci/commits_helper.rb
+++ b/app/helpers/ci/commits_helper.rb
@@ -15,8 +15,12 @@ module Ci
end
end
+ def ci_commit_path(commit)
+ ci_project_ref_commits_path(commit.project, commit.ref, commit.sha)
+ end
+
def commit_link(commit)
- link_to(commit.short_sha, ci_project_ref_commits_path(commit.project, commit.ref, commit.sha))
+ link_to(commit.short_sha, ci_commit_path(commit))
end
def truncate_first_line(message, length = 50)
diff --git a/app/helpers/ci/user_sessions_helper.rb b/app/helpers/ci/user_sessions_helper.rb
deleted file mode 100644
index 0296a74395c..00000000000
--- a/app/helpers/ci/user_sessions_helper.rb
+++ /dev/null
@@ -1,32 +0,0 @@
-module Ci
- module UserSessionsHelper
- def generate_oauth_salt
- SecureRandom.hex(16)
- end
-
- def generate_oauth_hmac(salt, return_to)
- return unless return_to
- digest = OpenSSL::Digest.new('sha256')
- key = Gitlab::Application.secrets.db_key_base + salt
- OpenSSL::HMAC.hexdigest(digest, key, return_to)
- end
-
- def generate_oauth_state(return_to)
- return unless return_to
- salt = generate_oauth_salt
- hmac = generate_oauth_hmac(salt, return_to)
- "#{salt}:#{hmac}:#{return_to}"
- end
-
- def get_ouath_state_return_to(state)
- state.split(':', 3)[2] if state
- end
-
- def is_oauth_state_valid?(state)
- return true unless state
- salt, hmac, return_to = state.split(':', 3)
- return false unless return_to
- hmac == generate_oauth_hmac(salt, return_to)
- end
- end
-end
diff --git a/app/models/ci/network.rb b/app/models/ci/network.rb
deleted file mode 100644
index 1a54213f4f1..00000000000
--- a/app/models/ci/network.rb
+++ /dev/null
@@ -1,122 +0,0 @@
-module Ci
- class Network
- class UnauthorizedError < StandardError; end
-
- include HTTParty
-
- API_PREFIX = '/api/v3/'
-
- def authenticate(api_opts)
- opts = {
- query: api_opts
- }
-
- endpoint = File.join(url, API_PREFIX, 'user')
- response = self.class.get(endpoint, default_opts.merge(opts))
-
- build_response(response)
- end
-
- def projects(api_opts, scope = :owned)
- # Dont load archived projects
- api_opts.merge!(archived: false)
-
- opts = {
- query: api_opts
- }
-
- query = if scope == :owned
- 'projects/owned.json'
- else
- 'projects.json'
- end
-
- endpoint = File.join(url, API_PREFIX, query)
- response = self.class.get(endpoint, default_opts.merge(opts))
-
- build_response(response)
- end
-
- def project(api_opts, project_id)
- opts = {
- query: api_opts
- }
-
- query = "projects/#{project_id}.json"
-
- endpoint = File.join(url, API_PREFIX, query)
- response = self.class.get(endpoint, default_opts.merge(opts))
-
- build_response(response)
- end
-
- def project_hooks(api_opts, project_id)
- opts = {
- query: api_opts
- }
-
- query = "projects/#{project_id}/hooks.json"
-
- endpoint = File.join(url, API_PREFIX, query)
- response = self.class.get(endpoint, default_opts.merge(opts))
-
- build_response(response)
- end
-
- def enable_ci(project_id, data, api_opts)
- opts = {
- body: data.to_json,
- query: api_opts
- }
-
- query = "projects/#{project_id}/services/gitlab-ci.json"
- endpoint = File.join(url, API_PREFIX, query)
- response = self.class.put(endpoint, default_opts.merge(opts))
-
- case response.code
- when 200
- true
- when 401
- raise UnauthorizedError
- else
- nil
- end
- end
-
- def disable_ci(project_id, api_opts)
- opts = {
- query: api_opts
- }
-
- query = "projects/#{project_id}/services/gitlab-ci.json"
-
- endpoint = File.join(url, API_PREFIX, query)
- response = self.class.delete(endpoint, default_opts.merge(opts))
-
- build_response(response)
- end
-
- private
-
- def url
- Gitlab.config.gitlab.url
- end
-
- def default_opts
- {
- headers: { "Content-Type" => "application/json" },
- }
- end
-
- def build_response(response)
- case response.code
- when 200
- response.parsed_response
- when 401
- raise UnauthorizedError
- else
- nil
- end
- end
- end
-end
diff --git a/app/models/ci/project.rb b/app/models/ci/project.rb
index 9c9198302f6..2cf1783616f 100644
--- a/app/models/ci/project.rb
+++ b/app/models/ci/project.rb
@@ -28,9 +28,11 @@
module Ci
class Project < ActiveRecord::Base
extend Ci::Model
-
+
include Ci::ProjectStatus
+ belongs_to :gl_project, class_name: '::Project', foreign_key: :gitlab_id
+
has_many :commits, ->() { order(:committed_at) }, dependent: :destroy, class_name: 'Ci::Commit'
has_many :builds, through: :commits, dependent: :destroy, class_name: 'Ci::Build'
has_many :runner_projects, dependent: :destroy, class_name: 'Ci::RunnerProject'
@@ -90,11 +92,13 @@ module Ci
project
end
+ # TODO: remove
def from_gitlab(user, scope = :owned, options)
opts = user.authenticate_options
opts.merge! options
- projects = Ci::Network.new.projects(opts.compact, scope)
+ raise 'Implement me of fix'
+ #projects = Ci::Network.new.projects(opts.compact, scope)
if projects
projects.map { |pr| OpenStruct.new(pr) }
diff --git a/app/services/ci/create_project_service.rb b/app/services/ci/create_project_service.rb
index 81bbc29bb4f..0419612d521 100644
--- a/app/services/ci/create_project_service.rb
+++ b/app/services/ci/create_project_service.rb
@@ -13,9 +13,9 @@ module Ci
project_url: project_route.gsub(":project_id", @project.id.to_s),
}
- unless Ci::Network.new.enable_ci(@project.gitlab_id, data, {private_token: current_user.private_token})
- raise ActiveRecord::Rollback
- end
+ gl_project = ::Project.find(@project.gitlab_id)
+ gl_project.build_missing_services
+ gl_project.gitlab_ci_service.update_attributes(data.merge(active: true))
end
if forked_project
diff --git a/lib/api/services.rb b/lib/api/services.rb
index 73645cedea4..6d2322bb464 100644
--- a/lib/api/services.rb
+++ b/lib/api/services.rb
@@ -20,7 +20,7 @@ module API
end
required_attributes! validators.map(&:attributes).flatten.uniq
- attrs = attributes_for_keys service_attributes
+ attrs = attributes_for_keys service_attributes
if project_service.update_attributes(attrs.merge(active: true))
true
@@ -41,7 +41,7 @@ module API
attrs = service_attributes.inject({}) do |hash, key|
hash.merge!(key => nil)
end
-
+
if project_service.update_attributes(attrs.merge(active: false))
true
else
diff --git a/lib/ci/api/projects.rb b/lib/ci/api/projects.rb
index bdcacecf6ab..556de3bff9f 100644
--- a/lib/ci/api/projects.rb
+++ b/lib/ci/api/projects.rb
@@ -18,7 +18,7 @@ module Ci
project = Ci::Project.find(params[:project_id])
unauthorized! unless current_user.can_manage_project?(project.gitlab_id)
-
+
web_hook = project.web_hooks.new({ url: params[:web_hook] })
if web_hook.save
diff --git a/spec/factories/ci/projects.rb b/spec/factories/ci/projects.rb
index e6be88fa585..e6bd0685f8d 100644
--- a/spec/factories/ci/projects.rb
+++ b/spec/factories/ci/projects.rb
@@ -43,7 +43,7 @@ FactoryGirl.define do
"git@demo.gitlab.com:gitlab/gitlab-shell#{n}.git"
end
- sequence :gitlab_id
+ gl_project factory: :project
factory :ci_project do
token 'iPWx6WM4lhHNedGfBpPJNP'
diff --git a/spec/features/ci/builds_spec.rb b/spec/features/ci/builds_spec.rb
index ddfc579d1b8..2f020e524e2 100644
--- a/spec/features/ci/builds_spec.rb
+++ b/spec/features/ci/builds_spec.rb
@@ -1,57 +1,60 @@
require 'spec_helper'
describe "Builds" do
- before do
- @project = FactoryGirl.create :project
- @commit = FactoryGirl.create :commit, project: @project
- @build = FactoryGirl.create :build, commit: @commit
- end
-
- describe "GET /:project/builds/:id" do
+ context :private_project do
before do
+ @project = FactoryGirl.create :ci_project
+ @commit = FactoryGirl.create :ci_commit, project: @project
+ @build = FactoryGirl.create :ci_build, commit: @commit
login_as :user
- visit project_build_path(@project, @build)
+ @project.gl_project.team << [@user, :master]
end
- it { expect(page).to have_content @commit.sha[0..7] }
- it { expect(page).to have_content @commit.git_commit_message }
- it { expect(page).to have_content @commit.git_author_name }
- end
+ describe "GET /:project/builds/:id" do
+ before do
+ visit ci_project_build_path(@project, @build)
+ end
- describe "GET /:project/builds/:id/cancel" do
- before do
- login_as :user
- @build.run!
- visit cancel_project_build_path(@project, @build)
+ it { expect(page).to have_content @commit.sha[0..7] }
+ it { expect(page).to have_content @commit.git_commit_message }
+ it { expect(page).to have_content @commit.git_author_name }
end
- it { expect(page).to have_content 'canceled' }
- it { expect(page).to have_content 'Retry' }
- end
+ describe "GET /:project/builds/:id/cancel" do
+ before do
+ @build.run!
+ visit cancel_ci_project_build_path(@project, @build)
+ end
- describe "POST /:project/builds/:id/retry" do
- before do
- login_as :user
- @build.cancel!
- visit project_build_path(@project, @build)
- click_link 'Retry'
+ it { expect(page).to have_content 'canceled' }
+ it { expect(page).to have_content 'Retry' }
end
- it { expect(page).to have_content 'pending' }
- it { expect(page).to have_content 'Cancel' }
+ describe "POST /:project/builds/:id/retry" do
+ before do
+ @build.cancel!
+ visit ci_project_build_path(@project, @build)
+ click_link 'Retry'
+ end
+
+ it { expect(page).to have_content 'pending' }
+ it { expect(page).to have_content 'Cancel' }
+ end
end
- describe "Show page public accessible" do
- before do
- @project = FactoryGirl.create :public_project
- @commit = FactoryGirl.create :commit, project: @project
- @runner = FactoryGirl.create :specific_runner
- @build = FactoryGirl.create :build, commit: @commit, runner: @runner
+ context :public_project do
+ describe "Show page public accessible" do
+ before do
+ @project = FactoryGirl.create :ci_public_project
+ @commit = FactoryGirl.create :ci_commit, project: @project
+ @runner = FactoryGirl.create :ci_specific_runner
+ @build = FactoryGirl.create :ci_build, commit: @commit, runner: @runner
- stub_gitlab_calls
- visit project_build_path(@project, @build)
- end
+ stub_gitlab_calls
+ visit ci_project_build_path(@project, @build)
+ end
- it { expect(page).to have_content @commit.sha[0..7] }
+ it { expect(page).to have_content @commit.sha[0..7] }
+ end
end
end
diff --git a/spec/features/ci/commits_spec.rb b/spec/features/ci/commits_spec.rb
index 774beee9a10..40a62ca4574 100644
--- a/spec/features/ci/commits_spec.rb
+++ b/spec/features/ci/commits_spec.rb
@@ -1,17 +1,20 @@
require 'spec_helper'
describe "Commits" do
+ include Ci::CommitsHelper
+
context "Authenticated user" do
before do
- login_as :user
@project = FactoryGirl.create :ci_project
@commit = FactoryGirl.create :ci_commit, project: @project
@build = FactoryGirl.create :ci_build, commit: @commit
+ login_as :user
+ @project.gl_project.team << [@user, :master]
end
describe "GET /:project/commits/:sha" do
before do
- visit ci_project_ref_commit_path(@project, @commit.ref, @commit.sha)
+ visit ci_commit_path(@commit)
end
it { expect(page).to have_content @commit.sha[0..7] }
@@ -21,7 +24,7 @@ describe "Commits" do
describe "Cancel commit" do
it "cancels commit" do
- visit ci_project_ref_commit_path(@project, @commit.ref, @commit.sha)
+ visit ci_commit_path(@commit)
click_on "Cancel"
expect(page).to have_content "canceled"
@@ -30,7 +33,7 @@ describe "Commits" do
describe ".gitlab-ci.yml not found warning" do
it "does not show warning" do
- visit ci_project_ref_commit_path(@project, @commit.ref, @commit.sha)
+ visit ci_commit_path(@commit)
expect(page).not_to have_content ".gitlab-ci.yml not found in this commit"
end
@@ -39,7 +42,7 @@ describe "Commits" do
@commit.push_data[:ci_yaml_file] = nil
@commit.save
- visit ci_project_ref_commit_path(@project, @commit.ref, @commit.sha)
+ visit ci_commit_path(@commit)
expect(page).to have_content ".gitlab-ci.yml not found in this commit"
end
@@ -55,7 +58,7 @@ describe "Commits" do
describe "GET /:project/commits/:sha" do
before do
- visit ci_project_ref_commit_path(@project, @commit.ref, @commit.sha)
+ visit ci_commit_path(@commit)
end
it { expect(page).to have_content @commit.sha[0..7] }
diff --git a/spec/helpers/ci/user_helper_spec.rb b/spec/helpers/ci/user_helper_spec.rb
deleted file mode 100644
index f95bfb355ed..00000000000
--- a/spec/helpers/ci/user_helper_spec.rb
+++ /dev/null
@@ -1,49 +0,0 @@
-require 'spec_helper'
-
-describe Ci::UserHelper do
- describe :user_avatar_url do
- let (:user) { User.new({'avatar_url' => avatar_url}) }
-
- context 'no avatar' do
- let (:avatar_url) { nil }
-
- it 'should return a generic avatar' do
- user_avatar_url(user).should == 'ci/no_avatar.png'
- end
- end
-
- context 'plain gravatar' do
- let (:base_url) { 'http://www.gravatar.com/avatar/abcdefgh' }
- let (:avatar_url) { "#{base_url}?s=40&d=mm" }
-
- it 'should return gravatar with default size' do
- user_avatar_url(user).should == "#{base_url}?s=40&d=identicon"
- end
-
- it 'should return gravatar with custom size' do
- user_avatar_url(user, 120).should == "#{base_url}?s=120&d=identicon"
- end
- end
-
- context 'secure gravatar' do
- let (:base_url) { 'https://secure.gravatar.com/avatar/abcdefgh' }
- let (:avatar_url) { "#{base_url}?s=40&d=mm" }
-
- it 'should return gravatar with default size' do
- user_avatar_url(user).should == "#{base_url}?s=40&d=identicon"
- end
-
- it 'should return gravatar with custom size' do
- user_avatar_url(user, 120).should == "#{base_url}?s=120&d=identicon"
- end
- end
-
- context 'custom avatar' do
- let (:avatar_url) { 'http://example.local/avatar.png' }
-
- it 'should return custom avatar' do
- user_avatar_url(user).should == avatar_url
- end
- end
- end
-end
diff --git a/spec/helpers/ci/user_sessions_helper_spec.rb b/spec/helpers/ci/user_sessions_helper_spec.rb
deleted file mode 100644
index 5f654866d99..00000000000
--- a/spec/helpers/ci/user_sessions_helper_spec.rb
+++ /dev/null
@@ -1,69 +0,0 @@
-require 'spec_helper'
-
-describe Ci::UserSessionsHelper do
- describe :generate_oauth_hmac do
- let (:salt) { 'a' }
- let (:salt2) { 'b' }
- let (:return_to) { 'b' }
-
- it 'should return null if return_to is also null' do
- generate_oauth_hmac(salt, nil).should be_nil
- end
-
- it 'should return not null if return_to is also not null' do
- generate_oauth_hmac(salt, return_to).should_not be_nil
- end
-
- it 'should return different hmacs for different salts' do
- secret1 = generate_oauth_hmac(salt, return_to)
- secret2 = generate_oauth_hmac(salt2, return_to)
- secret1.should_not eq(secret2)
- end
- end
-
- describe :generate_oauth_state do
- let (:return_to) { 'b' }
-
- it 'should return null if return_to is also null' do
- generate_oauth_state(nil).should be_nil
- end
-
- it 'should return two different states for same return_to' do
- state1 = generate_oauth_state(return_to)
- state2 = generate_oauth_state(return_to)
- state1.should_not eq(state2)
- end
- end
-
- describe :get_ouath_state_return_to do
- let (:return_to) { 'a' }
- let (:state) { generate_oauth_state(return_to) }
-
- it 'should return return_to' do
- get_ouath_state_return_to(state).should eq(return_to)
- end
- end
-
- describe :is_oauth_state_valid? do
- let (:return_to) { 'a' }
- let (:state) { generate_oauth_state(return_to) }
- let (:forged) { "forged#{state}" }
- let (:invalid) { 'aa' }
- let (:invalid2) { 'aa:bb' }
- let (:invalid3) { 'aa:bb:' }
-
- it 'should validate oauth state' do
- is_oauth_state_valid?(state).should be_true
- end
-
- it 'should not validate forged state' do
- is_oauth_state_valid?(forged).should be_false
- end
-
- it 'should not validate invalid state' do
- is_oauth_state_valid?(invalid).should be_false
- is_oauth_state_valid?(invalid2).should be_false
- is_oauth_state_valid?(invalid3).should be_false
- end
- end
-end
diff --git a/spec/lib/ci/ansi2html_spec.rb b/spec/lib/ci/ansi2html_spec.rb
index 35f115f7f4a..75c023bbc43 100644
--- a/spec/lib/ci/ansi2html_spec.rb
+++ b/spec/lib/ci/ansi2html_spec.rb
@@ -1,133 +1,134 @@
require 'spec_helper'
describe Ci::Ansi2html do
+ subject { Ci::Ansi2html }
it "prints non-ansi as-is" do
- Ansi2html::convert("Hello").should == 'Hello'
+ expect(subject.convert("Hello")).to eq('Hello')
end
it "strips non-color-changing controll sequences" do
- Ansi2html::convert("Hello \e[2Kworld").should == 'Hello world'
+ expect(subject.convert("Hello \e[2Kworld")).to eq('Hello world')
end
it "prints simply red" do
- Ansi2html::convert("\e[31mHello\e[0m").should == '<span class="term-fg-red">Hello</span>'
+ expect(subject.convert("\e[31mHello\e[0m")).to eq('<span class="term-fg-red">Hello</span>')
end
it "prints simply red without trailing reset" do
- Ansi2html::convert("\e[31mHello").should == '<span class="term-fg-red">Hello</span>'
+ expect(subject.convert("\e[31mHello")).to eq('<span class="term-fg-red">Hello</span>')
end
it "prints simply yellow" do
- Ansi2html::convert("\e[33mHello\e[0m").should == '<span class="term-fg-yellow">Hello</span>'
+ expect(subject.convert("\e[33mHello\e[0m")).to eq('<span class="term-fg-yellow">Hello</span>')
end
it "prints default on blue" do
- Ansi2html::convert("\e[39;44mHello").should == '<span class="term-bg-blue">Hello</span>'
+ expect(subject.convert("\e[39;44mHello")).to eq('<span class="term-bg-blue">Hello</span>')
end
it "prints red on blue" do
- Ansi2html::convert("\e[31;44mHello").should == '<span class="term-fg-red term-bg-blue">Hello</span>'
+ expect(subject.convert("\e[31;44mHello")).to eq('<span class="term-fg-red term-bg-blue">Hello</span>')
end
it "resets colors after red on blue" do
- Ansi2html::convert("\e[31;44mHello\e[0m world").should == '<span class="term-fg-red term-bg-blue">Hello</span> world'
+ expect(subject.convert("\e[31;44mHello\e[0m world")).to eq('<span class="term-fg-red term-bg-blue">Hello</span> world')
end
it "performs color change from red/blue to yellow/blue" do
- Ansi2html::convert("\e[31;44mHello \e[33mworld").should == '<span class="term-fg-red term-bg-blue">Hello </span><span class="term-fg-yellow term-bg-blue">world</span>'
+ expect(subject.convert("\e[31;44mHello \e[33mworld")).to eq('<span class="term-fg-red term-bg-blue">Hello </span><span class="term-fg-yellow term-bg-blue">world</span>')
end
it "performs color change from red/blue to yellow/green" do
- Ansi2html::convert("\e[31;44mHello \e[33;42mworld").should == '<span class="term-fg-red term-bg-blue">Hello </span><span class="term-fg-yellow term-bg-green">world</span>'
+ expect(subject.convert("\e[31;44mHello \e[33;42mworld")).to eq('<span class="term-fg-red term-bg-blue">Hello </span><span class="term-fg-yellow term-bg-green">world</span>')
end
it "performs color change from red/blue to reset to yellow/green" do
- Ansi2html::convert("\e[31;44mHello\e[0m \e[33;42mworld").should == '<span class="term-fg-red term-bg-blue">Hello</span> <span class="term-fg-yellow term-bg-green">world</span>'
+ expect(subject.convert("\e[31;44mHello\e[0m \e[33;42mworld")).to eq('<span class="term-fg-red term-bg-blue">Hello</span> <span class="term-fg-yellow term-bg-green">world</span>')
end
it "ignores unsupported codes" do
- Ansi2html::convert("\e[51mHello\e[0m").should == 'Hello'
+ expect(subject.convert("\e[51mHello\e[0m")).to eq('Hello')
end
it "prints light red" do
- Ansi2html::convert("\e[91mHello\e[0m").should == '<span class="term-fg-l-red">Hello</span>'
+ expect(subject.convert("\e[91mHello\e[0m")).to eq('<span class="term-fg-l-red">Hello</span>')
end
it "prints default on light red" do
- Ansi2html::convert("\e[101mHello\e[0m").should == '<span class="term-bg-l-red">Hello</span>'
+ expect(subject.convert("\e[101mHello\e[0m")).to eq('<span class="term-bg-l-red">Hello</span>')
end
it "performs color change from red/blue to default/blue" do
- Ansi2html::convert("\e[31;44mHello \e[39mworld").should == '<span class="term-fg-red term-bg-blue">Hello </span><span class="term-bg-blue">world</span>'
+ expect(subject.convert("\e[31;44mHello \e[39mworld")).to eq('<span class="term-fg-red term-bg-blue">Hello </span><span class="term-bg-blue">world</span>')
end
it "performs color change from light red/blue to default/blue" do
- Ansi2html::convert("\e[91;44mHello \e[39mworld").should == '<span class="term-fg-l-red term-bg-blue">Hello </span><span class="term-bg-blue">world</span>'
+ expect(subject.convert("\e[91;44mHello \e[39mworld")).to eq('<span class="term-fg-l-red term-bg-blue">Hello </span><span class="term-bg-blue">world</span>')
end
it "prints bold text" do
- Ansi2html::convert("\e[1mHello").should == '<span class="term-bold">Hello</span>'
+ expect(subject.convert("\e[1mHello")).to eq('<span class="term-bold">Hello</span>')
end
it "resets bold text" do
- Ansi2html::convert("\e[1mHello\e[21m world").should == '<span class="term-bold">Hello</span> world'
- Ansi2html::convert("\e[1mHello\e[22m world").should == '<span class="term-bold">Hello</span> world'
+ expect(subject.convert("\e[1mHello\e[21m world")).to eq('<span class="term-bold">Hello</span> world')
+ expect(subject.convert("\e[1mHello\e[22m world")).to eq('<span class="term-bold">Hello</span> world')
end
it "prints italic text" do
- Ansi2html::convert("\e[3mHello").should == '<span class="term-italic">Hello</span>'
+ expect(subject.convert("\e[3mHello")).to eq('<span class="term-italic">Hello</span>')
end
it "resets italic text" do
- Ansi2html::convert("\e[3mHello\e[23m world").should == '<span class="term-italic">Hello</span> world'
+ expect(subject.convert("\e[3mHello\e[23m world")).to eq('<span class="term-italic">Hello</span> world')
end
it "prints underlined text" do
- Ansi2html::convert("\e[4mHello").should == '<span class="term-underline">Hello</span>'
+ expect(subject.convert("\e[4mHello")).to eq('<span class="term-underline">Hello</span>')
end
it "resets underlined text" do
- Ansi2html::convert("\e[4mHello\e[24m world").should == '<span class="term-underline">Hello</span> world'
+ expect(subject.convert("\e[4mHello\e[24m world")).to eq('<span class="term-underline">Hello</span> world')
end
it "prints concealed text" do
- Ansi2html::convert("\e[8mHello").should == '<span class="term-conceal">Hello</span>'
+ expect(subject.convert("\e[8mHello")).to eq('<span class="term-conceal">Hello</span>')
end
it "resets concealed text" do
- Ansi2html::convert("\e[8mHello\e[28m world").should == '<span class="term-conceal">Hello</span> world'
+ expect(subject.convert("\e[8mHello\e[28m world")).to eq('<span class="term-conceal">Hello</span> world')
end
it "prints crossed-out text" do
- Ansi2html::convert("\e[9mHello").should == '<span class="term-cross">Hello</span>'
+ expect(subject.convert("\e[9mHello")).to eq('<span class="term-cross">Hello</span>')
end
it "resets crossed-out text" do
- Ansi2html::convert("\e[9mHello\e[29m world").should == '<span class="term-cross">Hello</span> world'
+ expect(subject.convert("\e[9mHello\e[29m world")).to eq('<span class="term-cross">Hello</span> world')
end
it "can print 256 xterm fg colors" do
- Ansi2html::convert("\e[38;5;16mHello").should == '<span class="xterm-fg-16">Hello</span>'
+ expect(subject.convert("\e[38;5;16mHello")).to eq('<span class="xterm-fg-16">Hello</span>')
end
it "can print 256 xterm fg colors on normal magenta background" do
- Ansi2html::convert("\e[38;5;16;45mHello").should == '<span class="xterm-fg-16 term-bg-magenta">Hello</span>'
+ expect(subject.convert("\e[38;5;16;45mHello")).to eq('<span class="xterm-fg-16 term-bg-magenta">Hello</span>')
end
it "can print 256 xterm bg colors" do
- Ansi2html::convert("\e[48;5;240mHello").should == '<span class="xterm-bg-240">Hello</span>'
+ expect(subject.convert("\e[48;5;240mHello")).to eq('<span class="xterm-bg-240">Hello</span>')
end
it "can print 256 xterm bg colors on normal magenta foreground" do
- Ansi2html::convert("\e[48;5;16;35mHello").should == '<span class="term-fg-magenta xterm-bg-16">Hello</span>'
+ expect(subject.convert("\e[48;5;16;35mHello")).to eq('<span class="term-fg-magenta xterm-bg-16">Hello</span>')
end
it "prints bold colored text vividly" do
- Ansi2html::convert("\e[1;31mHello\e[0m").should == '<span class="term-fg-l-red term-bold">Hello</span>'
+ expect(subject.convert("\e[1;31mHello\e[0m")).to eq('<span class="term-fg-l-red term-bold">Hello</span>')
end
it "prints bold light colored text correctly" do
- Ansi2html::convert("\e[1;91mHello\e[0m").should == '<span class="term-fg-l-red term-bold">Hello</span>'
+ expect(subject.convert("\e[1;91mHello\e[0m")).to eq('<span class="term-fg-l-red term-bold">Hello</span>')
end
end
diff --git a/spec/models/ci/network_spec.rb b/spec/models/ci/network_spec.rb
deleted file mode 100644
index 551eb08ab33..00000000000
--- a/spec/models/ci/network_spec.rb
+++ /dev/null
@@ -1,54 +0,0 @@
-require 'spec_helper'
-
-describe Network do
- let(:network) { Network.new }
-
- describe :enable_ci do
- subject { network.enable_ci '', '', '' }
-
- context 'on success' do
- before do
- response = double
- allow(response).to receive(:code) { 200 }
- allow(network.class).to receive(:put) { response }
- end
-
- it { is_expected.to be_truthy }
- end
-
- context 'on failure' do
- before do
- response = double
- allow(response).to receive(:code) { 404 }
- allow(network.class).to receive(:put) { response }
- end
-
- it { is_expected.to be_nil }
- end
- end
-
- describe :disable_ci do
- let(:response) { double }
- subject { network.disable_ci '', '' }
-
- context 'on success' do
- let(:parsed_response) { 'parsed' }
- before do
- allow(response).to receive(:code) { 200 }
- allow(response).to receive(:parsed_response) { parsed_response }
- allow(network.class).to receive(:delete) { response }
- end
-
- it { is_expected.to equal(parsed_response) }
- end
-
- context 'on failure' do
- before do
- allow(response).to receive(:code) { 404 }
- allow(network.class).to receive(:delete) { response }
- end
-
- it { is_expected.to be_nil }
- end
- end
-end