Commit 4db87f7c4bd46983c1aad8ed7cc7338ca7bbf72e

Authored by Carlos Paramio
1 parent 4525fc84

Integration with Assembla

app/models/assembla_service.rb 0 → 100644
... ... @@ -0,0 +1,45 @@
  1 +# == Schema Information
  2 +#
  3 +# Table name: services
  4 +#
  5 +# id :integer not null, primary key
  6 +# type :string(255)
  7 +# title :string(255)
  8 +# token :string(255)
  9 +# project_id :integer not null
  10 +# created_at :datetime not null
  11 +# updated_at :datetime not null
  12 +# active :boolean default(FALSE), not null
  13 +# project_url :string(255)
  14 +# subdomain :string(255)
  15 +# room :string(255)
  16 +#
  17 +
  18 +class AssemblaService < Service
  19 + include HTTParty
  20 +
  21 + validates :token, presence: true, if: :activated?
  22 +
  23 + def title
  24 + 'Assembla'
  25 + end
  26 +
  27 + def description
  28 + 'Project Management Software (Source Commits Endpoint)'
  29 + end
  30 +
  31 + def to_param
  32 + 'assembla'
  33 + end
  34 +
  35 + def fields
  36 + [
  37 + { type: 'text', name: 'token', placeholder: '' }
  38 + ]
  39 + end
  40 +
  41 + def execute(push)
  42 + url = "https://atlas.assembla.com/spaces/ouposp/github_tool?secret_key=#{token}"
  43 + AssemblaService.post(url, body: { payload: push }.to_json, headers: { 'Content-Type' => 'application/json' })
  44 + end
  45 +end
... ...
app/models/project.rb
... ... @@ -50,6 +50,7 @@ class Project &lt; ActiveRecord::Base
50 50 has_one :pivotaltracker_service, dependent: :destroy
51 51 has_one :hipchat_service, dependent: :destroy
52 52 has_one :flowdock_service, dependent: :destroy
  53 + has_one :assembla_service, dependent: :destroy
53 54 has_one :forked_project_link, dependent: :destroy, foreign_key: "forked_to_project_id"
54 55 has_one :forked_from_project, through: :forked_project_link
55 56  
... ... @@ -224,7 +225,7 @@ class Project &lt; ActiveRecord::Base
224 225 end
225 226  
226 227 def available_services_names
227   - %w(gitlab_ci campfire hipchat pivotaltracker flowdock)
  228 + %w(gitlab_ci campfire hipchat pivotaltracker flowdock assembla)
228 229 end
229 230  
230 231 def gitlab_ci?
... ...
features/project/service.feature
... ... @@ -30,3 +30,9 @@ Feature: Project Services
30 30 And I click Flowdock service link
31 31 And I fill Flowdock settings
32 32 Then I should see Flowdock service settings saved
  33 +
  34 + Scenario: Activate Assembla service
  35 + When I visit project "Shop" services page
  36 + And I click Assembla service link
  37 + And I fill Assembla settings
  38 + Then I should see Assembla service settings saved
33 39 \ No newline at end of file
... ...
features/steps/project/project_services.rb
... ... @@ -12,6 +12,7 @@ class ProjectServices &lt; Spinach::FeatureSteps
12 12 page.should have_content 'Campfire'
13 13 page.should have_content 'Hipchat'
14 14 page.should have_content 'GitLab CI'
  15 + page.should have_content 'Assembla'
15 16 end
16 17  
17 18 And 'I click gitlab-ci service link' do
... ... @@ -72,4 +73,18 @@ class ProjectServices &lt; Spinach::FeatureSteps
72 73 Then 'I should see Flowdock service settings saved' do
73 74 find_field('Token').value.should == 'verySecret'
74 75 end
  76 +
  77 + And 'I click Assembla service link' do
  78 + click_link 'Assembla'
  79 + end
  80 +
  81 + And 'I fill Assembla settings' do
  82 + check 'Active'
  83 + fill_in 'Token', with: 'verySecret'
  84 + click_button 'Save'
  85 + end
  86 +
  87 + Then 'I should see Assembla service settings saved' do
  88 + find_field('Token').value.should == 'verySecret'
  89 + end
75 90 end
... ...
spec/models/assembla_service_spec.rb 0 → 100644
... ... @@ -0,0 +1,50 @@
  1 +# == Schema Information
  2 +#
  3 +# Table name: services
  4 +#
  5 +# id :integer not null, primary key
  6 +# type :string(255)
  7 +# title :string(255)
  8 +# token :string(255)
  9 +# project_id :integer not null
  10 +# created_at :datetime not null
  11 +# updated_at :datetime not null
  12 +# active :boolean default(FALSE), not null
  13 +# project_url :string(255)
  14 +# subdomain :string(255)
  15 +# room :string(255)
  16 +#
  17 +
  18 +require 'spec_helper'
  19 +
  20 +describe AssemblaService do
  21 + describe "Associations" do
  22 + it { should belong_to :project }
  23 + it { should have_one :service_hook }
  24 + end
  25 +
  26 + describe "Execute" do
  27 + let(:user) { create(:user) }
  28 + let(:project) { create(:project_with_code) }
  29 +
  30 + before do
  31 + @assembla_service = AssemblaService.new
  32 + @assembla_service.stub(
  33 + project_id: project.id,
  34 + project: project,
  35 + service_hook: true,
  36 + token: 'verySecret'
  37 + )
  38 + @sample_data = GitPushService.new.sample_data(project, user)
  39 + @api_url = 'https://atlas.assembla.com/spaces/ouposp/github_tool?secret_key=verySecret'
  40 + WebMock.stub_request(:post, @api_url)
  41 + end
  42 +
  43 + it "should call FlowDock API" do
  44 + @assembla_service.execute(@sample_data)
  45 + WebMock.should have_requested(:post, @api_url).with(
  46 + body: /#{@sample_data[:before]}.*#{@sample_data[:after]}.*#{project.path}/
  47 + ).once
  48 + end
  49 + end
  50 +end
... ...