summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/triggers_controller.rb41
-rw-r--r--app/helpers/triggers_helper.rb5
-rw-r--r--app/models/build.rb52
-rw-r--r--app/models/commit.rb37
-rw-r--r--app/models/project.rb1
-rw-r--r--app/models/trigger.rb35
-rw-r--r--app/models/trigger_request.rb19
-rw-r--r--app/services/create_trigger_request_service.rb15
-rw-r--r--app/views/builds/_build.html.haml2
-rw-r--r--app/views/builds/show.html.haml17
-rw-r--r--app/views/layouts/_nav_project.html.haml4
-rw-r--r--app/views/triggers/_trigger.html.haml14
-rw-r--r--app/views/triggers/index.html.haml67
-rw-r--r--config/routes.rb2
-rw-r--r--db/migrate/20150806102222_create_trigger.rb12
-rw-r--r--db/migrate/20150806102457_add_trigger_to_builds.rb5
-rw-r--r--db/migrate/20150806105404_create_trigger_request.rb9
-rw-r--r--db/migrate/20150819162227_add_commit_id_to_trigger_requests.rb8
-rw-r--r--db/schema.rb27
-rw-r--r--lib/api/api.rb1
-rw-r--r--lib/api/entities.rb5
-rw-r--r--lib/api/triggers.rb47
-rw-r--r--spec/factories/builds.rb36
-rw-r--r--spec/factories/commits.rb21
-rw-r--r--spec/factories/trigger_requests.rb13
-rw-r--r--spec/factories/triggers.rb9
-rw-r--r--spec/models/build_spec.rb36
-rw-r--r--spec/models/commit_spec.rb27
-rw-r--r--spec/models/trigger_spec.rb20
29 files changed, 490 insertions, 97 deletions
diff --git a/app/controllers/triggers_controller.rb b/app/controllers/triggers_controller.rb
new file mode 100644
index 0000000..b942051
--- /dev/null
+++ b/app/controllers/triggers_controller.rb
@@ -0,0 +1,41 @@
+class TriggersController < ApplicationController
+ before_filter :authenticate_user!
+ before_filter :project
+ before_filter :authorize_access_project!
+ before_filter :authorize_manage_project!
+
+ layout 'project'
+
+ def index
+ @triggers = @project.triggers
+ @trigger = Trigger.new
+ end
+
+ def create
+ @trigger = @project.triggers.new
+ @trigger.save
+
+ if @trigger.valid?
+ redirect_to project_triggers_path(@project)
+ else
+ @triggers = @project.triggers.select(&:persisted?)
+ render :index
+ end
+ end
+
+ def destroy
+ trigger.destroy
+
+ redirect_to project_triggers_path(@project)
+ end
+
+ private
+
+ def trigger
+ @trigger ||= @project.triggers.find(params[:id])
+ end
+
+ def project
+ @project = Project.find(params[:project_id])
+ end
+end
diff --git a/app/helpers/triggers_helper.rb b/app/helpers/triggers_helper.rb
new file mode 100644
index 0000000..ac93bf6
--- /dev/null
+++ b/app/helpers/triggers_helper.rb
@@ -0,0 +1,5 @@
+module TriggersHelper
+ def build_trigger_url(project_id, ref_name)
+ "#{Settings.gitlab_ci.url}/api/v1/projects/#{project_id}/refs/#{ref_name}/trigger"
+ end
+end
diff --git a/app/models/build.rb b/app/models/build.rb
index da52f0a..913a47c 100644
--- a/app/models/build.rb
+++ b/app/models/build.rb
@@ -2,23 +2,25 @@
#
# Table name: builds
#
-# id :integer not null, primary key
-# project_id :integer
-# status :string(255)
-# finished_at :datetime
-# trace :text
-# created_at :datetime
-# updated_at :datetime
-# started_at :datetime
-# runner_id :integer
-# commit_id :integer
-# coverage :float
-# commands :text
-# job_id :integer
-# name :string(255)
-# deploy :boolean default(FALSE)
-# options :text
-# allow_failure :boolean default(FALSE), not null
+# id :integer not null, primary key
+# project_id :integer
+# status :string(255)
+# finished_at :datetime
+# trace :text
+# created_at :datetime
+# updated_at :datetime
+# started_at :datetime
+# runner_id :integer
+# commit_id :integer
+# coverage :float
+# commands :text
+# job_id :integer
+# name :string(255)
+# options :text
+# allow_failure :boolean default(FALSE), not null
+# stage :string(255)
+# deploy :boolean default(FALSE)
+# trigger_request_id :integer
#
class Build < ActiveRecord::Base
@@ -27,6 +29,7 @@ class Build < ActiveRecord::Base
belongs_to :commit
belongs_to :project
belongs_to :runner
+ belongs_to :trigger_request
serialize :options
@@ -78,6 +81,7 @@ class Build < ActiveRecord::Base
new_build.name = build.name
new_build.allow_failure = build.allow_failure
new_build.stage = build.stage
+ new_build.trigger_request = build.trigger_request
new_build.save
new_build
end
@@ -113,7 +117,7 @@ class Build < ActiveRecord::Base
end
if build.commit.success?
- build.commit.create_next_builds
+ build.commit.create_next_builds(build.trigger_request)
end
project.execute_services(build)
@@ -165,7 +169,7 @@ class Build < ActiveRecord::Base
end
def variables
- yaml_variables + project_variables
+ yaml_variables + project_variables + trigger_variables
end
def duration
@@ -264,4 +268,14 @@ class Build < ActiveRecord::Base
{ key: variable.key, value: variable.value, public: false }
end
end
+
+ def trigger_variables
+ if trigger_request && trigger_request.variables
+ trigger_request.variables.map do |key, value|
+ { key: key, value: value, public: false }
+ end
+ else
+ []
+ end
+ end
end
diff --git a/app/models/commit.rb b/app/models/commit.rb
index a27c86b..6195090 100644
--- a/app/models/commit.rb
+++ b/app/models/commit.rb
@@ -2,21 +2,23 @@
#
# Table name: commits
#
-# id :integer not null, primary key
-# project_id :integer
-# ref :string(255)
-# sha :string(255)
-# before_sha :string(255)
-# push_data :text
-# created_at :datetime
-# updated_at :datetime
-# tag :boolean default(FALSE)
-# yaml_errors :text
+# id :integer not null, primary key
+# project_id :integer
+# ref :string(255)
+# sha :string(255)
+# before_sha :string(255)
+# push_data :text
+# created_at :datetime
+# updated_at :datetime
+# tag :boolean default(FALSE)
+# yaml_errors :text
+# committed_at :datetime
#
class Commit < ActiveRecord::Base
belongs_to :project
has_many :builds, dependent: :destroy
+ has_many :trigger_requests, dependent: :destroy
serialize :push_data
@@ -99,7 +101,7 @@ class Commit < ActiveRecord::Base
config_processor.stages.find { |stage| stages.include? stage }
end
- def create_builds_for_stage(stage)
+ def create_builds_for_stage(stage, trigger_request)
return if skip_ci?
return unless config_processor
@@ -112,28 +114,29 @@ class Commit < ActiveRecord::Base
tag_list: build_attrs[:tags],
options: build_attrs[:options],
allow_failure: build_attrs[:allow_failure],
- stage: build_attrs[:stage]
+ stage: build_attrs[:stage],
+ trigger_request: trigger_request,
})
end
end
- def create_next_builds
+ def create_next_builds(trigger_request)
return if skip_ci?
return unless config_processor
- stages = builds.group_by(&:stage)
+ stages = builds.where(trigger_request: trigger_request).group_by(&:stage)
config_processor.stages.any? do |stage|
- !stages.include?(stage) && create_builds_for_stage(stage).present?
+ !stages.include?(stage) && create_builds_for_stage(stage, trigger_request).present?
end
end
- def create_builds
+ def create_builds(trigger_request = nil)
return if skip_ci?
return unless config_processor
config_processor.stages.any? do |stage|
- create_builds_for_stage(stage).present?
+ create_builds_for_stage(stage, trigger_request).present?
end
end
diff --git a/app/models/project.rb b/app/models/project.rb
index 9cc3678..4879f24 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -35,6 +35,7 @@ class Project < ActiveRecord::Base
has_many :web_hooks, dependent: :destroy
has_many :events, dependent: :destroy
has_many :variables, dependent: :destroy
+ has_many :triggers, dependent: :destroy
# Project services
has_many :services, dependent: :destroy
diff --git a/app/models/trigger.rb b/app/models/trigger.rb
new file mode 100644
index 0000000..26d9893
--- /dev/null
+++ b/app/models/trigger.rb
@@ -0,0 +1,35 @@
+# == Schema Information
+#
+# Table name: triggers
+#
+# id :integer not null, primary key
+# token :string(255)
+# project_id :integer not null
+# deleted_at :datetime
+# created_at :datetime
+# updated_at :datetime
+#
+
+class Trigger < ActiveRecord::Base
+ acts_as_paranoid
+
+ belongs_to :project
+ has_many :trigger_requests, dependent: :destroy
+
+ validates_presence_of :token
+ validates_uniqueness_of :token
+
+ before_validation :set_default_values
+
+ def set_default_values
+ self.token = SecureRandom.hex(15) if self.token.blank?
+ end
+
+ def last_trigger_request
+ trigger_requests.last
+ end
+
+ def short_token
+ token[0...10]
+ end
+end
diff --git a/app/models/trigger_request.rb b/app/models/trigger_request.rb
new file mode 100644
index 0000000..180c23f
--- /dev/null
+++ b/app/models/trigger_request.rb
@@ -0,0 +1,19 @@
+# == Schema Information
+#
+# Table name: trigger_requests
+#
+# id :integer not null, primary key
+# trigger_id :integer not null
+# variables :text
+# created_at :datetime
+# updated_at :datetime
+# commit_id :integer
+#
+
+class TriggerRequest < ActiveRecord::Base
+ belongs_to :trigger
+ belongs_to :commit
+ has_many :builds
+
+ serialize :variables
+end
diff --git a/app/services/create_trigger_request_service.rb b/app/services/create_trigger_request_service.rb
new file mode 100644
index 0000000..8ab34d2
--- /dev/null
+++ b/app/services/create_trigger_request_service.rb
@@ -0,0 +1,15 @@
+class CreateTriggerRequestService
+ def execute(project, trigger, ref, variables)
+ commit = project.commits.find_by_ref(ref)
+ return unless commit
+
+ trigger_request = trigger.trigger_requests.create!(
+ commit: commit,
+ variables: variables
+ )
+
+ if commit.create_builds(trigger_request)
+ trigger_request
+ end
+ end
+end
diff --git a/app/views/builds/_build.html.haml b/app/views/builds/_build.html.haml
index 4fa90c1..58a8727 100644
--- a/app/views/builds/_build.html.haml
+++ b/app/views/builds/_build.html.haml
@@ -16,6 +16,8 @@
- build.tag_list.each do |tag|
%span.label.label-primary
= tag
+ - if build.trigger_request
+ %span.label.label-info triggered
- if build.allow_failure
%span.label.label-danger allowed to fail
diff --git a/app/views/builds/show.html.haml b/app/views/builds/show.html.haml
index 55ac8af..95f5992 100644
--- a/app/views/builds/show.html.haml
+++ b/app/views/builds/show.html.haml
@@ -109,6 +109,23 @@
- elsif @build.runner
\##{@build.runner.id}
+ - if @build.trigger_request
+ .build-widget
+ %h4.title
+ Trigger
+
+ %p
+ %span.attr-name Token:
+ #{@build.trigger_request.trigger.short_token}
+
+ - if @build.trigger_request.variables
+ %p
+ %span.attr-name Variables:
+
+ %code
+ - @build.trigger_request.variables.each do |key, value|
+ #{key}=#{value}
+
.build-widget
%h4.title
Commit
diff --git a/app/views/layouts/_nav_project.html.haml b/app/views/layouts/_nav_project.html.haml
index 103b1c8..5bacd95 100644
--- a/app/views/layouts/_nav_project.html.haml
+++ b/app/views/layouts/_nav_project.html.haml
@@ -20,6 +20,10 @@
= link_to project_web_hooks_path(@project) do
%i.icon-link
Web Hooks
+ = nav_link path: 'triggers#index' do
+ = link_to project_triggers_path(@project) do
+ %i.icon-link
+ Triggers
= nav_link path: 'services#index' do
= link_to project_services_path(@project) do
%i.icon-gear
diff --git a/app/views/triggers/_trigger.html.haml b/app/views/triggers/_trigger.html.haml
new file mode 100644
index 0000000..72f7a17
--- /dev/null
+++ b/app/views/triggers/_trigger.html.haml
@@ -0,0 +1,14 @@
+%tr
+ %td
+ .clearfix
+ %span.monospace= trigger.token
+
+ %td
+ - if trigger.last_trigger_request
+ #{time_ago_in_words(trigger.last_trigger_request.created_at)} ago
+ - else
+ Never
+
+ %td
+ .pull-right
+ = link_to 'Revoke', project_trigger_path(@project, trigger), data: { confirm: 'Are you sure?'}, method: :delete, class: "btn btn-danger btn-sm btn-grouped"
diff --git a/app/views/triggers/index.html.haml b/app/views/triggers/index.html.haml
new file mode 100644
index 0000000..3401ef3
--- /dev/null
+++ b/app/views/triggers/index.html.haml
@@ -0,0 +1,67 @@
+%h3
+ Triggers
+
+%p.light
+ Triggers can be used to force a rebuild of a specific branch or tag with an API call.
+
+%hr.clearfix
+
+-if @triggers.any?
+ %table.table
+ %thead
+ %th Token
+ %th Last used
+ %th
+ = render @triggers
+- else
+ %h4 No triggers
+
+= form_for [@project, @trigger], html: { class: 'form-horizontal' } do |f|
+ .clearfix
+ = f.submit "Add Trigger", class: 'btn btn-success pull-right'
+
+%hr.clearfix
+
+-if @triggers.any?
+ %h3
+ Use CURL
+
+ %p.light
+ Copy the token above and set your branch or tag name. This is the reference that will be rebuild.
+
+
+ %pre
+ :plain
+ curl -X POST \
+ -F token=TOKEN \
+ #{build_trigger_url(@project.id, 'REF_NAME')}
+ %h3
+ Use .gitlab-ci.yml
+
+ %p.light
+ Copy the snippet to
+ %i .gitlab-ci.yml
+ of dependent project.
+ At the end of your build it will trigger this project to rebuilt.
+
+ %pre
+ :plain
+ trigger:
+ type: deploy
+ script:
+ - "curl -X POST -F token=TOKEN #{build_trigger_url(@project.id, 'REF_NAME')}"
+ %h3
+ Pass build variables
+
+ %p.light
+ Add
+ %strong variables[VARIABLE]=VALUE
+ to API request.
+ The value of variable could then be used to distinguish triggered build from normal one.
+
+ %pre
+ :plain
+ curl -X POST \
+ -F token=TOKEN \
+ -F "variables[RUN_NIGHTLY_BUILD]=true" \
+ #{build_trigger_url(@project.id, 'REF_NAME')}
diff --git a/config/routes.rb b/config/routes.rb
index e92e726..8fdcf95 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -56,6 +56,8 @@ Rails.application.routes.draw do
end
end
+ resources :triggers, only: [:index, :create, :destroy]
+
resources :runners, only: [:index, :edit, :update, :destroy, :show] do
member do
get :resume
diff --git a/db/migrate/20150806102222_create_trigger.rb b/db/migrate/20150806102222_create_trigger.rb
new file mode 100644
index 0000000..0f141b0
--- /dev/null
+++ b/db/migrate/20150806102222_create_trigger.rb
@@ -0,0 +1,12 @@
+class CreateTrigger < ActiveRecord::Migration
+ def up
+ create_table :triggers do |t|
+ t.string :token, null: true
+ t.integer :project_id, null: false
+ t.datetime :deleted_at
+ t.timestamps
+ end
+
+ add_index :triggers, :deleted_at
+ end
+end
diff --git a/db/migrate/20150806102457_add_trigger_to_builds.rb b/db/migrate/20150806102457_add_trigger_to_builds.rb
new file mode 100644
index 0000000..ad2fd78
--- /dev/null
+++ b/db/migrate/20150806102457_add_trigger_to_builds.rb
@@ -0,0 +1,5 @@
+class AddTriggerToBuilds < ActiveRecord::Migration
+ def up
+ add_column :builds, :trigger_request_id, :integer
+ end
+end
diff --git a/db/migrate/20150806105404_create_trigger_request.rb b/db/migrate/20150806105404_create_trigger_request.rb
new file mode 100644
index 0000000..b58ff31
--- /dev/null
+++ b/db/migrate/20150806105404_create_trigger_request.rb
@@ -0,0 +1,9 @@
+class CreateTriggerRequest < ActiveRecord::Migration
+ def change
+ create_table :trigger_requests do |t|
+ t.integer :trigger_id, null: false
+ t.text :variables
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20150819162227_add_commit_id_to_trigger_requests.rb b/db/migrate/20150819162227_add_commit_id_to_trigger_requests.rb
new file mode 100644
index 0000000..0e55537
--- /dev/null
+++ b/db/migrate/20150819162227_add_commit_id_to_trigger_requests.rb
@@ -0,0 +1,8 @@
+class AddCommitIdToTriggerRequests < ActiveRecord::Migration
+ def up
+ add_column :trigger_requests, :commit_id, :integer
+ end
+
+ def down
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index e88caed..6f630ab 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20150806091655) do
+ActiveRecord::Schema.define(version: 20150819162227) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -37,10 +37,11 @@ ActiveRecord::Schema.define(version: 20150806091655) do
t.text "commands"
t.integer "job_id"
t.string "name"
- t.boolean "deploy", default: false
+ t.boolean "deploy", default: false
t.text "options"
- t.boolean "allow_failure", default: false, null: false
+ t.boolean "allow_failure", default: false, null: false
t.string "stage"
+ t.integer "trigger_request_id"
end
add_index "builds", ["commit_id"], name: "index_builds_on_commit_id", using: :btree
@@ -56,7 +57,7 @@ ActiveRecord::Schema.define(version: 20150806091655) do
t.text "push_data"
t.datetime "created_at"
t.datetime "updated_at"
- t.boolean "tag", default: false
+ t.boolean "tag", default: false
t.text "yaml_errors"
t.datetime "committed_at"
end
@@ -186,6 +187,24 @@ ActiveRecord::Schema.define(version: 20150806091655) do
add_index "tags", ["name"], name: "index_tags_on_name", unique: true, using: :btree
+ create_table "trigger_requests", force: true do |t|
+ t.integer "trigger_id", null: false
+ t.text "variables"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.integer "commit_id"
+ end
+
+ create_table "triggers", force: true do |t|
+ t.string "token"
+ t.integer "project_id", null: false
+ t.datetime "deleted_at"
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ end
+
+ add_index "triggers", ["deleted_at"], name: "index_triggers_on_deleted_at", using: :btree
+
create_table "variables", force: true do |t|
t.integer "project_id", null: false
t.string "key"
diff --git a/lib/api/api.rb b/lib/api/api.rb
index d1127ed..6645ff1 100644
--- a/lib/api/api.rb
+++ b/lib/api/api.rb
@@ -30,5 +30,6 @@ module API
mount Runners
mount Projects
mount Forks
+ mount Triggers
end
end
diff --git a/lib/api/entities.rb b/lib/api/entities.rb
index 464667f..3423f4a 100644
--- a/lib/api/entities.rb
+++ b/lib/api/entities.rb
@@ -30,5 +30,10 @@ module API
class WebHook < Grape::Entity
expose :id, :project_id, :url
end
+
+ class TriggerRequest < Grape::Entity
+ expose :id, :variables
+ expose :commit, using: Commit
+ end
end
end
diff --git a/lib/api/triggers.rb b/lib/api/triggers.rb
new file mode 100644
index 0000000..1e4935a
--- /dev/null
+++ b/lib/api/triggers.rb
@@ -0,0 +1,47 @@
+module API
+ # Build Trigger API
+ class Triggers < Grape::API
+ resource :projects do
+ # Trigger a GitLab CI project build
+ #
+ # Parameters:
+ # id (required) - The ID of a CI project
+ # ref (required) - The name of project's branch or tag
+ # token (required) - The uniq token of trigger
+ # Example Request:
+ # POST /projects/:id/ref/:ref/trigger
+ post ":id/refs/:ref/trigger" do
+ required_attributes! [:token]
+
+ project = Project.find(params[:id])
+ trigger = Trigger.find_by_token(params[:token].to_s)
+ not_found! unless project && trigger
+ unauthorized! unless trigger.project == project
+
+ # validate variables
+ variables = params[:variables]
+ if variables
+ unless variables.is_a?(Hash)
+ render_api_error!('variables needs to be a hash', 400)
+ end
+
+ unless variables.all? { |key, value| key.is_a?(String) && value.is_a?(String) }
+ render_api_error!('variables needs to be a map of key-valued strings', 400)
+ end
+
+ # convert variables from Mash to Hash
+ variables = variables.to_h
+ end
+
+ # create request and trigger builds
+ trigger_request = CreateTriggerRequestService.new.execute(project, trigger, params[:ref].to_s, variables)
+ if trigger_request
+ present trigger_request, with: Entities::TriggerRequest
+ else
+ errors = 'No builds created'
+ render_api_error!(errors, 400)
+ end
+ end
+ end
+ end
+end
diff --git a/spec/factories/builds.rb b/spec/factories/builds.rb
index af63bbd..346e000 100644
--- a/spec/factories/builds.rb
+++ b/spec/factories/builds.rb
@@ -2,23 +2,25 @@
#
# Table name: builds
#
-# id :integer not null, primary key
-# project_id :integer
-# status :string(255)
-# finished_at :datetime
-# trace :text
-# created_at :datetime
-# updated_at :datetime
-# started_at :datetime
-# runner_id :integer
-# commit_id :integer
-# coverage :float
-# commands :text
-# job_id :integer
-# name :string(255)
-# deploy :boolean default(FALSE)
-# options :text
-# allow_failure :boolean default(FALSE), not null
+# id :integer not null, primary key
+# project_id :integer
+# status :string(255)
+# finished_at :datetime
+# trace :text
+# created_at :datetime
+# updated_at :datetime
+# started_at :datetime
+# runner_id :integer
+# commit_id :integer
+# coverage :float
+# commands :text
+# job_id :integer
+# name :string(255)
+# deploy :boolean default(FALSE)
+# options :text
+# allow_failure :boolean default(FALSE), not null
+# stage :string(255)
+# trigger_request_id :integer
#
# Read about factories at https://github.com/thoughtbot/factory_girl
diff --git a/spec/factories/commits.rb b/spec/factories/commits.rb
index 4a411ee..82f7d70 100644
--- a/spec/factories/commits.rb
+++ b/spec/factories/commits.rb
@@ -2,16 +2,17 @@
#
# Table name: commits
#
-# id :integer not null, primary key
-# project_id :integer
-# ref :string(255)
-# sha :string(255)
-# before_sha :string(255)
-# push_data :text
-# created_at :datetime
-# updated_at :datetime
-# tag :boolean default(FALSE)
-# yaml_errors :text
+# id :integer not null, primary key
+# project_id :integer
+# ref :string(255)
+# sha :string(255)
+# before_sha :string(255)
+# push_data :text
+# created_at :datetime
+# updated_at :datetime
+# tag :boolean default(FALSE)
+# yaml_errors :text
+# committed_at :datetime
#
# Read about factories at https://github.com/thoughtbot/factory_girl
diff --git a/spec/factories/trigger_requests.rb b/spec/factories/trigger_requests.rb
new file mode 100644
index 0000000..3056f58
--- /dev/null
+++ b/spec/factories/trigger_requests.rb
@@ -0,0 +1,13 @@
+# Read about factories at https://github.com/thoughtbot/factory_girl
+
+FactoryGirl.define do
+ factory :trigger_request do
+ factory :trigger_request_with_variables do
+ variables do
+ {
+ KEY: 'VALUE'
+ }
+ end
+ end
+ end
+end
diff --git a/spec/factories/triggers.rb b/spec/factories/triggers.rb
new file mode 100644
index 0000000..a5af47b
--- /dev/null
+++ b/spec/factories/triggers.rb
@@ -0,0 +1,9 @@
+# Read about factories at https://github.com/thoughtbot/factory_girl
+
+FactoryGirl.define do
+ factory :trigger_without_token, class: Trigger do
+ factory :trigger do
+ token 'token'
+ end
+ end
+end
diff --git a/spec/models/build_spec.rb b/spec/models/build_spec.rb
index 7e1c7e9..ffa79a2 100644
--- a/spec/models/build_spec.rb
+++ b/spec/models/build_spec.rb
@@ -2,23 +2,25 @@
#
# Table name: builds
#
-# id :integer not null, primary key
-# project_id :integer
-# status :string(255)
-# finished_at :datetime
-# trace :text
-# created_at :datetime
-# updated_at :datetime
-# started_at :datetime
-# runner_id :integer
-# commit_id :integer
-# coverage :float
-# commands :text
-# job_id :integer
-# name :string(255)
-# deploy :boolean default(FALSE)
-# options :text
-# allow_failure :boolean default(FALSE), not null
+# id :integer not null, primary key
+# project_id :integer
+# status :string(255)
+# finished_at :datetime
+# trace :text
+# created_at :datetime
+# updated_at :datetime
+# started_at :datetime
+# runner_id :integer
+# commit_id :integer
+# coverage :float
+# commands :text
+# job_id :integer
+# name :string(255)
+# deploy :boolean default(FALSE)
+# options :text
+# allow_failure :boolean default(FALSE), not null
+# stage :string(255)
+# trigger_request_id :integer
#
require 'spec_helper'
diff --git a/spec/models/commit_spec.rb b/spec/models/commit_spec.rb
index 2074781..dbb9a9e 100644
--- a/spec/models/commit_spec.rb
+++ b/spec/models/commit_spec.rb
@@ -2,16 +2,17 @@
#
# Table name: commits
#
-# id :integer not null, primary key
-# project_id :integer
-# ref :string(255)
-# sha :string(255)
-# before_sha :string(255)
-# push_data :text
-# created_at :datetime
-# updated_at :datetime
-# tag :boolean default(FALSE)
-# yaml_errors :text
+# id :integer not null, primary key
+# project_id :integer
+# ref :string(255)
+# sha :string(255)
+# before_sha :string(255)
+# push_data :text
+# created_at :datetime
+# updated_at :datetime
+# tag :boolean default(FALSE)
+# yaml_errors :text
+# committed_at :datetime
#
require 'spec_helper'
@@ -141,15 +142,15 @@ describe Commit do
commit.builds.reload
commit.builds.size.should == 2
- commit.create_next_builds.should be_true
+ commit.create_next_builds(nil).should be_true
commit.builds.reload
commit.builds.size.should == 4
- commit.create_next_builds.should be_true
+ commit.create_next_builds(nil).should be_true
commit.builds.reload
commit.builds.size.should == 5
- commit.create_next_builds.should be_false
+ commit.create_next_builds(nil).should be_false
end
end
diff --git a/spec/models/trigger_spec.rb b/spec/models/trigger_spec.rb
new file mode 100644
index 0000000..1728c0f
--- /dev/null
+++ b/spec/models/trigger_spec.rb
@@ -0,0 +1,20 @@
+
+require 'spec_helper'
+
+describe Trigger do
+ let(:project) { FactoryGirl.create :project }
+
+ subject { FactoryGirl.create :trigger, project: project }
+
+ describe 'before_validation' do
+ it 'should set an random token if none provided' do
+ project = FactoryGirl.create :trigger_without_token
+ project.token.should_not == ""
+ end
+
+ it 'should not set an random token if one provided' do
+ project = FactoryGirl.create :trigger
+ project.token.should == 'token'
+ end
+ end
+end