zenslap 0.1.8 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/zenslap +15 -26
- data/zenslap.gemspec +3 -5
- metadata +11 -56
- data/Gemfile +0 -22
- data/lib/zenslap.rb +0 -4
- data/lib/zenslap/client.rb +0 -20
- data/lib/zenslap/commands.rb +0 -95
- data/lib/zenslap/console_error.rb +0 -5
- data/lib/zenslap/git_repo.rb +0 -88
- data/spec/client_spec.rb +0 -27
- data/spec/commands_spec.rb +0 -122
- data/spec/git_repo_spec.rb +0 -157
- data/spec/spec_helper.rb +0 -39
data/bin/zenslap
CHANGED
@@ -1,26 +1,15 @@
|
|
1
|
-
#!/
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
else
|
17
|
-
puts <<-eos
|
18
|
-
|
19
|
-
=== Zenslap commands
|
20
|
-
|
21
|
-
create # create zenslap environment for this project
|
22
|
-
destroy # destroy zenslap environment for this project
|
23
|
-
|
24
|
-
eos
|
25
|
-
|
26
|
-
end
|
1
|
+
#!/bin/sh
|
2
|
+
app=$(git config zenslap.zenslap)
|
3
|
+
while [ "$app" = "" ]; do·
|
4
|
+
echo "Enter the name of the zenslap app"
|
5
|
+
read unvalidatedApp·
|
6
|
+
$(heroku config --app $unvalidatedApp)
|
7
|
+
if [ "$?" != "0" ]; then
|
8
|
+
echo $app
|
9
|
+
else
|
10
|
+
app=$unvalidatedApp
|
11
|
+
git config zenslap.zenslap $app
|
12
|
+
fi
|
13
|
+
done
|
14
|
+
echo $app
|
15
|
+
heroku $* --app $app
|
data/zenslap.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{zenslap}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["opsb"]
|
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.description = %q{Client for zenslap continuous integration}
|
15
15
|
s.email = %q{oliver@opsb.co.uk}
|
16
16
|
s.executables = ["zenslap"]
|
17
|
-
s.files = Dir.glob("{bin
|
17
|
+
s.files = Dir.glob("{bin}/**/*") + %w(zenslap.gemspec)
|
18
18
|
|
19
19
|
s.homepage = %q{http://github.com/opsb/zenslap-client}
|
20
20
|
s.rdoc_options = ["--charset=UTF-8"]
|
@@ -22,8 +22,6 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.rubygems_version = %q{1.3.7}
|
23
23
|
s.summary = %q{Client for zenslap continuous integration}
|
24
24
|
s.test_files = Dir.glob("spec/**/*")
|
25
|
-
s.add_dependency('heroku', ["
|
26
|
-
s.add_dependency('opsb-git', ["= 1.2.11"])
|
27
|
-
s.add_dependency('rest-client', ["= 1.6.1"])
|
25
|
+
s.add_dependency('heroku', ["~> 1.17.8"])
|
28
26
|
end
|
29
27
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zenslap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- opsb
|
@@ -24,48 +24,16 @@ dependencies:
|
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
hash:
|
29
|
+
hash: 67
|
30
30
|
segments:
|
31
31
|
- 1
|
32
|
-
-
|
33
|
-
-
|
34
|
-
version: 1.
|
32
|
+
- 17
|
33
|
+
- 8
|
34
|
+
version: 1.17.8
|
35
35
|
type: :runtime
|
36
36
|
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: opsb-git
|
39
|
-
prerelease: false
|
40
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - "="
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
hash: 9
|
46
|
-
segments:
|
47
|
-
- 1
|
48
|
-
- 2
|
49
|
-
- 11
|
50
|
-
version: 1.2.11
|
51
|
-
type: :runtime
|
52
|
-
version_requirements: *id002
|
53
|
-
- !ruby/object:Gem::Dependency
|
54
|
-
name: rest-client
|
55
|
-
prerelease: false
|
56
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - "="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
hash: 13
|
62
|
-
segments:
|
63
|
-
- 1
|
64
|
-
- 6
|
65
|
-
- 1
|
66
|
-
version: 1.6.1
|
67
|
-
type: :runtime
|
68
|
-
version_requirements: *id003
|
69
37
|
description: Client for zenslap continuous integration
|
70
38
|
email: oliver@opsb.co.uk
|
71
39
|
executables:
|
@@ -76,17 +44,7 @@ extra_rdoc_files: []
|
|
76
44
|
|
77
45
|
files:
|
78
46
|
- bin/zenslap
|
79
|
-
- lib/zenslap/client.rb
|
80
|
-
- lib/zenslap/commands.rb
|
81
|
-
- lib/zenslap/console_error.rb
|
82
|
-
- lib/zenslap/git_repo.rb
|
83
|
-
- lib/zenslap.rb
|
84
|
-
- Gemfile
|
85
47
|
- zenslap.gemspec
|
86
|
-
- spec/client_spec.rb
|
87
|
-
- spec/commands_spec.rb
|
88
|
-
- spec/git_repo_spec.rb
|
89
|
-
- spec/spec_helper.rb
|
90
48
|
has_rdoc: true
|
91
49
|
homepage: http://github.com/opsb/zenslap-client
|
92
50
|
licenses: []
|
@@ -121,8 +79,5 @@ rubygems_version: 1.3.7
|
|
121
79
|
signing_key:
|
122
80
|
specification_version: 3
|
123
81
|
summary: Client for zenslap continuous integration
|
124
|
-
test_files:
|
125
|
-
|
126
|
-
- spec/commands_spec.rb
|
127
|
-
- spec/git_repo_spec.rb
|
128
|
-
- spec/spec_helper.rb
|
82
|
+
test_files: []
|
83
|
+
|
data/Gemfile
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
source :rubygems
|
2
|
-
|
3
|
-
gemspec
|
4
|
-
|
5
|
-
|
6
|
-
group :test do
|
7
|
-
gem 'rspec'
|
8
|
-
gem 'ruby-debug'
|
9
|
-
gem 'shoulda'
|
10
|
-
gem 'mocha'
|
11
|
-
gem 'bourne'
|
12
|
-
gem 'webmock', '1.3.5'
|
13
|
-
gem 'method_lister'
|
14
|
-
end
|
15
|
-
|
16
|
-
group :local do
|
17
|
-
gem 'autotest'
|
18
|
-
gem 'redgreen'
|
19
|
-
gem 'autotest-growl'
|
20
|
-
gem 'autotest-fsevent'
|
21
|
-
gem 'ruby-debug'
|
22
|
-
end
|
data/lib/zenslap.rb
DELETED
data/lib/zenslap/client.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'rest-client'
|
2
|
-
|
3
|
-
class ZenslapClient
|
4
|
-
ZENSLAP_HOST = ENV['_ZENSLAP_CLIENT_HOST'] || "zenslap.me"
|
5
|
-
|
6
|
-
def self.configure(uuid, repo_owner, repo_name, github_credentials, heroku_app)
|
7
|
-
#TODO need to make https
|
8
|
-
RestClient.post("http://#{ZENSLAP_HOST}/projects",
|
9
|
-
{
|
10
|
-
:project => github_credentials.merge({
|
11
|
-
:owner => repo_owner,
|
12
|
-
:name => repo_name,
|
13
|
-
:uuid => uuid,
|
14
|
-
:heroku_app => heroku_app
|
15
|
-
})
|
16
|
-
}
|
17
|
-
)
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
data/lib/zenslap/commands.rb
DELETED
@@ -1,95 +0,0 @@
|
|
1
|
-
require 'heroku'
|
2
|
-
require 'heroku/command'
|
3
|
-
|
4
|
-
module Zenslap
|
5
|
-
class Command
|
6
|
-
|
7
|
-
ZENSLAP_HEROKU_USER = "admin@zenslap.me"
|
8
|
-
ZENSLAP_ADDON = "zenslap2"
|
9
|
-
|
10
|
-
def run(command)
|
11
|
-
case command
|
12
|
-
when "create" then create
|
13
|
-
when "destroy" then destroy
|
14
|
-
else raise "#{command} command not found"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def display(message)
|
19
|
-
puts "---> #{message}"
|
20
|
-
end
|
21
|
-
|
22
|
-
def display_error(message)
|
23
|
-
puts "---! #{message}"
|
24
|
-
end
|
25
|
-
|
26
|
-
def display_numbered_bullets(items)
|
27
|
-
items.each_with_index do |item, index|
|
28
|
-
puts " #{index}) #{item}"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def git_repo
|
33
|
-
@git_repo ||= GitRepo.new
|
34
|
-
end
|
35
|
-
|
36
|
-
def heroku
|
37
|
-
Heroku::Command.run_internal('auth:client', [])
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_environment_name(name, owner)
|
41
|
-
full_name = "#{name}-zenslap-#{owner}".gsub(/[^a-zA-Z\d-]/, '-')
|
42
|
-
return full_name if full_name.length <= 30
|
43
|
-
return full_name[0, 27].gsub(/-+$/, "") + "-" + rand(99).to_s
|
44
|
-
end
|
45
|
-
|
46
|
-
def create
|
47
|
-
begin
|
48
|
-
if git_repo.remote_exists? 'zenslap'
|
49
|
-
display_error "Zenslap has already been set up"
|
50
|
-
return
|
51
|
-
end
|
52
|
-
|
53
|
-
display "Checking for github details"
|
54
|
-
git_repo.github_owner
|
55
|
-
git_repo.github_name
|
56
|
-
git_repo.github_credentials
|
57
|
-
|
58
|
-
display "Creating test environment in heroku"
|
59
|
-
display "Using account: #{heroku.user}"
|
60
|
-
heroku_app = test_environment_name(git_repo.github_name, git_repo.github_owner)
|
61
|
-
display "Creating test environment: #{heroku_app}"
|
62
|
-
heroku.create heroku_app
|
63
|
-
heroku.add_collaborator(heroku_app, ZENSLAP_HEROKU_USER)
|
64
|
-
git_repo.add_zenslap_remote(heroku_app)
|
65
|
-
|
66
|
-
display "Installing zenslap addon"
|
67
|
-
heroku.install_addon heroku_app, ZENSLAP_ADDON
|
68
|
-
zenslap_id = heroku.config_vars(heroku_app)["ZENSLAP_ID"]
|
69
|
-
|
70
|
-
display "Configuring zenslap"
|
71
|
-
ZenslapClient.configure( zenslap_id, git_repo.github_owner, git_repo.github_name, git_repo.github_credentials, heroku_app )
|
72
|
-
|
73
|
-
display ""
|
74
|
-
display "Nearly there, you just need to do add a couple of things on github and you'll be ready to go"
|
75
|
-
display_numbered_bullets [
|
76
|
-
"Add 'zenslap' as a collaborator",
|
77
|
-
"Add 'http://zenslap.me/pushes' to the service hooks"
|
78
|
-
]
|
79
|
-
|
80
|
-
rescue ConsoleError => e
|
81
|
-
display_error e
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def destroy
|
86
|
-
display "Destroying zenslap project and test environment"
|
87
|
-
heroku.destroy git_repo.zenslap_app
|
88
|
-
display "Removing zenslap git remote"
|
89
|
-
git_repo.remove_zenslap_remote
|
90
|
-
display "All done. Thanks for using zenslap."
|
91
|
-
rescue ConsoleError => e
|
92
|
-
display_error e
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
data/lib/zenslap/git_repo.rb
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
require 'git'
|
2
|
-
|
3
|
-
class GitRepo
|
4
|
-
GITHUB_REGEX = /github.com[:\/](\S+)\/(\S+?)(?:\.git)?$/
|
5
|
-
HEROKU_GIT_REGEX = /git@heroku\..*?:(.*)\.git/
|
6
|
-
|
7
|
-
def github_url
|
8
|
-
@github_url ||= find_url("---> Which github repository do you want to use?", GITHUB_REGEX, "No github remotes found. You need to add one to your git config before you can add zenslap.")
|
9
|
-
end
|
10
|
-
|
11
|
-
def find_url(help, regex, message)
|
12
|
-
remotes = git.remotes.select{ |r| r.url =~ regex }
|
13
|
-
raise ConsoleError.new(message) if remotes.empty?
|
14
|
-
remotes.length == 1 ? remotes.first.url : choose_one( help, remotes ).url
|
15
|
-
end
|
16
|
-
|
17
|
-
def choose_one(help, remotes)
|
18
|
-
names = remotes.map &:name
|
19
|
-
begin
|
20
|
-
puts help
|
21
|
-
puts names
|
22
|
-
name = gets.chomp
|
23
|
-
end while not names.include? name
|
24
|
-
remotes.find{ |r| r.name == name }
|
25
|
-
end
|
26
|
-
|
27
|
-
def github_credentials
|
28
|
-
{ :login => retrieve_github('user'), :token => retrieve_github('token') }
|
29
|
-
end
|
30
|
-
|
31
|
-
def add_zenslap_remote(name)
|
32
|
-
git.add_remote "zenslap", "git@heroku.com:#{name}.git"
|
33
|
-
end
|
34
|
-
|
35
|
-
def remove_zenslap_remote
|
36
|
-
git.remote("zenslap").remove
|
37
|
-
end
|
38
|
-
|
39
|
-
def zenslap_app
|
40
|
-
HEROKU_GIT_REGEX.match(git.remote("zenslap").url)[1]
|
41
|
-
end
|
42
|
-
|
43
|
-
def remote_exists?(name)
|
44
|
-
!!git.remotes.find{|r|r.name == name}
|
45
|
-
end
|
46
|
-
|
47
|
-
def retrieve_github(param)
|
48
|
-
value = exec("git config --get github.#{param}").strip
|
49
|
-
if value == ""
|
50
|
-
value = ask_for("your github #{param}")
|
51
|
-
exec("git config --add github.#{param} #{value}")
|
52
|
-
end
|
53
|
-
value
|
54
|
-
end
|
55
|
-
|
56
|
-
def ask_for(message)
|
57
|
-
value = ""
|
58
|
-
while value == ""
|
59
|
-
puts "---> Please enter #{message}"
|
60
|
-
value = gets.strip
|
61
|
-
end
|
62
|
-
value
|
63
|
-
end
|
64
|
-
|
65
|
-
def exec(command)
|
66
|
-
`#{command}`
|
67
|
-
end
|
68
|
-
|
69
|
-
def git
|
70
|
-
Git.open('.')
|
71
|
-
end
|
72
|
-
|
73
|
-
def github_owner
|
74
|
-
@owner ||= parse_github_url[0]
|
75
|
-
end
|
76
|
-
|
77
|
-
def github_name
|
78
|
-
@name ||= parse_github_url[1]
|
79
|
-
end
|
80
|
-
|
81
|
-
private
|
82
|
-
|
83
|
-
def parse_github_url
|
84
|
-
search_result = /github.com[:\/](\S+)\/(\S+?)(?:\.git)?$/.match(github_url)
|
85
|
-
raise InvalidUrlError, github_url unless search_result
|
86
|
-
owner, name = search_result[1..2]
|
87
|
-
end
|
88
|
-
end
|
data/spec/client_spec.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'net/http'
|
3
|
-
require 'uri'
|
4
|
-
|
5
|
-
describe ZenslapClient do
|
6
|
-
|
7
|
-
context "zenslap client" do
|
8
|
-
ZENSLAP_ID = 5
|
9
|
-
OWNER = "opsb"
|
10
|
-
NAME = "carbonpt"
|
11
|
-
GITHUB_CREDENTIALS = { :login => 'jimbo', :token => 'randomhash'}
|
12
|
-
HEROKU_EMAIL = "jim@bob.com"
|
13
|
-
HEROKU_PASSWORD = "password"
|
14
|
-
HEROKU_APP = "conference_hub_ci"
|
15
|
-
|
16
|
-
before do
|
17
|
-
RestClient.stubs(:post)
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should configure the project" do
|
21
|
-
ZenslapClient.configure ZENSLAP_ID, OWNER, NAME, GITHUB_CREDENTIALS, HEROKU_APP
|
22
|
-
RestClient.should have_received(:post).with( "http://zenslap.me/projects", :project =>
|
23
|
-
GITHUB_CREDENTIALS.merge({ :owner => OWNER, :name => NAME, :uuid => ZENSLAP_ID, :heroku_app => HEROKU_APP } ))
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|
data/spec/commands_spec.rb
DELETED
@@ -1,122 +0,0 @@
|
|
1
|
-
require 'spec_helper.rb'
|
2
|
-
require 'heroku'
|
3
|
-
|
4
|
-
module ZenslapSpec
|
5
|
-
|
6
|
-
describe Zenslap::Command do
|
7
|
-
ZENSLAP_ID = 1
|
8
|
-
GITHUB_URL = "git@github.com:opsb/conference_hub"
|
9
|
-
GITHUB_REPO_OWNER = "opsb"
|
10
|
-
GITHUB_REPO_NAME = "conference_hub"
|
11
|
-
GITHUB_LOGIN = "jimbo"
|
12
|
-
GITHUB_TOKEN = "df67sd6f67"
|
13
|
-
GITHUB_CREDENTIALS = { :login => GITHUB_LOGIN, :token => GITHUB_TOKEN }
|
14
|
-
HEROKU_EMAIL = "jim@bob.com"
|
15
|
-
HEROKU_PASSWORD = "password"
|
16
|
-
HEROKU_APP = "conference-hub-zenslap-opsb"
|
17
|
-
ADDON_NAME = "zenslap2"
|
18
|
-
|
19
|
-
def stub_git
|
20
|
-
@git_repo = stub do
|
21
|
-
stubs(:github_url).returns(GITHUB_URL)
|
22
|
-
stubs(:github_credentials).returns(GITHUB_CREDENTIALS)
|
23
|
-
stubs(:github_owner).returns(GITHUB_REPO_OWNER)
|
24
|
-
stubs(:github_name).returns(GITHUB_REPO_NAME)
|
25
|
-
stubs(:add_zenslap_remote)
|
26
|
-
stubs(:remove_zenslap_remote)
|
27
|
-
stubs(:zenslap_app).returns(HEROKU_APP)
|
28
|
-
end
|
29
|
-
GitRepo.stubs(:new).returns(@git_repo)
|
30
|
-
end
|
31
|
-
|
32
|
-
def stub_zenslap
|
33
|
-
ZenslapClient.stubs(:configure)
|
34
|
-
end
|
35
|
-
|
36
|
-
def stub_heroku
|
37
|
-
@heroku = stub do
|
38
|
-
stubs(:user).returns(HEROKU_EMAIL)
|
39
|
-
stubs(:password).returns(HEROKU_PASSWORD)
|
40
|
-
stubs(:create).returns(HEROKU_APP)
|
41
|
-
stubs(:add_collaborator)
|
42
|
-
stubs(:install_addon)
|
43
|
-
stubs(:config_vars).returns({ "ZENSLAP_ID" => ZENSLAP_ID })
|
44
|
-
stubs(:destroy)
|
45
|
-
end
|
46
|
-
Heroku::Command.stubs(:run_internal).with('auth:client', []).returns(@heroku)
|
47
|
-
end
|
48
|
-
|
49
|
-
context "zenslap" do
|
50
|
-
before do
|
51
|
-
@command = Zenslap::Command.new
|
52
|
-
@command.stubs(:display_error)
|
53
|
-
@command.stubs(:display)
|
54
|
-
@command.stubs(:display_numbered_bullets)
|
55
|
-
stub_git
|
56
|
-
stub_zenslap
|
57
|
-
stub_heroku
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should ensure test environment names have a maximum of 30 characters" do
|
61
|
-
name = @command.test_environment_name("delayed_job_groups_mongoid", "opsb")
|
62
|
-
name.should match /^delayed-job-groups-mongoid-\d+/
|
63
|
-
name.length.should be <= 30
|
64
|
-
end
|
65
|
-
|
66
|
-
context "#create" do
|
67
|
-
context "when zenslap has already been created" do
|
68
|
-
before do
|
69
|
-
@git_repo.stubs(:remote_exists?).with("zenslap").returns(true)
|
70
|
-
@command.create
|
71
|
-
end
|
72
|
-
|
73
|
-
it "should display message saying zenslap has already been created" do
|
74
|
-
@command.should have_received(:display_error).with("Zenslap has already been set up")
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
context "before zenslap has been created" do
|
79
|
-
before do
|
80
|
-
@git_repo.stubs(:remote_exists?).with("zenslap").returns(false)
|
81
|
-
@command.create
|
82
|
-
end
|
83
|
-
|
84
|
-
it "should create new heroku app to be used for running tests and billing" do
|
85
|
-
@heroku.should have_received(:create).with( HEROKU_APP )
|
86
|
-
end
|
87
|
-
|
88
|
-
it "should add zenslap remote" do
|
89
|
-
assert_received @git_repo, :add_zenslap_remote, &with( HEROKU_APP )
|
90
|
-
end
|
91
|
-
|
92
|
-
it "should add zenslap as a collaborator to heroku app" do
|
93
|
-
assert_received @heroku, :add_collaborator, &with( HEROKU_APP, "admin@zenslap.me" )
|
94
|
-
end
|
95
|
-
|
96
|
-
it "should install addon" do
|
97
|
-
assert_received @heroku, :install_addon, &with( HEROKU_APP, ADDON_NAME )
|
98
|
-
end
|
99
|
-
|
100
|
-
it "should configure zenslap with github and heroku details" do
|
101
|
-
assert_received ZenslapClient, :configure,
|
102
|
-
&with( ZENSLAP_ID, GITHUB_REPO_OWNER, GITHUB_REPO_NAME, GITHUB_CREDENTIALS, HEROKU_APP )
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
context "#destroy" do
|
108
|
-
before do
|
109
|
-
@command.destroy
|
110
|
-
end
|
111
|
-
|
112
|
-
it "should destroy heroku app" do
|
113
|
-
assert_received @heroku, :destroy, &with(HEROKU_APP)
|
114
|
-
end
|
115
|
-
|
116
|
-
it "should remove zenslap remote" do
|
117
|
-
@git_repo.should have_received(:remove_zenslap_remote)
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
data/spec/git_repo_spec.rb
DELETED
@@ -1,157 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module GitRepoSpec
|
4
|
-
HEROKU_URL= "git@heroku.com:conference_hub.git"
|
5
|
-
GITHUB_URL = "git@github.com:opsb/conference_hub"
|
6
|
-
ZENSLAP_URL = "git@heroku.com:conference_hub-zenslap.git"
|
7
|
-
GITHUB_USER = "jimbo"
|
8
|
-
GITHUB_TOKEN = "df67sd6f67"
|
9
|
-
HEROKU_APP = "conference_hub"
|
10
|
-
ZENSLAP_ID = "abc"
|
11
|
-
ZENSLAP_APP = "conference_hub_ci"
|
12
|
-
ZENSLAP_GIT_REPO = "git@heroku.com:#{ZENSLAP_APP}.git"
|
13
|
-
|
14
|
-
INVALID_GITHUB_URLS = [
|
15
|
-
"git@invalidhub.com:opsb/conference_hub.git",
|
16
|
-
"https://opsb@github.com/opsbconference_hub.git",
|
17
|
-
"http://github.com.git"
|
18
|
-
]
|
19
|
-
|
20
|
-
VALID_GITHUB_URLS = [
|
21
|
-
"git@github.com:opsb/conference_hub.git",
|
22
|
-
"https://opsb@github.com/opsb/conference_hub.git",
|
23
|
-
"http://github.com/bblim-ke/we-bmo-ck.git",
|
24
|
-
"http://github.com/bblim-ke/we.bmo.ck.git",
|
25
|
-
"git@github.com:opsb/heroku-zenslap"
|
26
|
-
]
|
27
|
-
|
28
|
-
describe GitRepo do
|
29
|
-
def stub_git
|
30
|
-
origin_remote = stub(:name => "origin", :url => GITHUB_URL)
|
31
|
-
@zenslap_remote = stub(:name => "zenslap", :url => ZENSLAP_URL, :remove => nil)
|
32
|
-
@git = stub do
|
33
|
-
stubs(:remotes).returns([origin_remote])
|
34
|
-
stubs(:add_remote)
|
35
|
-
stubs(:config)
|
36
|
-
end
|
37
|
-
@git.stubs(:remote).with("zenslap").returns(@zenslap_remote)
|
38
|
-
Git.stubs(:open).returns(@git)
|
39
|
-
end
|
40
|
-
|
41
|
-
context "repository" do
|
42
|
-
before do
|
43
|
-
stub_git
|
44
|
-
@git_repo = GitRepo.new
|
45
|
-
end
|
46
|
-
|
47
|
-
it "should have github owner" do
|
48
|
-
assert_equal @git_repo.github_owner, "opsb"
|
49
|
-
end
|
50
|
-
|
51
|
-
it "should have github name" do
|
52
|
-
assert_equal @git_repo.github_name, "conference_hub"
|
53
|
-
end
|
54
|
-
|
55
|
-
it "should have github_url" do
|
56
|
-
assert_equal @git_repo.github_url, GITHUB_URL
|
57
|
-
end
|
58
|
-
|
59
|
-
it "should know if a remote exists" do
|
60
|
-
@git_repo.remote_exists?('origin').should be_true
|
61
|
-
end
|
62
|
-
|
63
|
-
it "should know if a remote does not exist" do
|
64
|
-
@git_repo.remote_exists?('non existent remote').should be_false
|
65
|
-
end
|
66
|
-
|
67
|
-
it "should add zenslap remote" do
|
68
|
-
@git_repo.add_zenslap_remote(HEROKU_APP)
|
69
|
-
@git.should have_received(:add_remote).with("zenslap", HEROKU_URL)
|
70
|
-
end
|
71
|
-
|
72
|
-
it "should remove zenslap remote" do
|
73
|
-
@git_repo.remove_zenslap_remote
|
74
|
-
@zenslap_remote.should have_received(:remove)
|
75
|
-
end
|
76
|
-
|
77
|
-
VALID_GITHUB_URLS.each do |url|
|
78
|
-
context "with remote: #{url}" do
|
79
|
-
before do
|
80
|
-
@git = stub(:remotes => [stub(:url => url)])
|
81
|
-
Git.stubs(:open).returns(@git)
|
82
|
-
end
|
83
|
-
|
84
|
-
it "should have valid github url" do
|
85
|
-
@git_repo.github_url.should == url
|
86
|
-
end
|
87
|
-
|
88
|
-
it "should have valid github owner" do
|
89
|
-
@git_repo.github_owner.should_not be_blank
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
INVALID_GITHUB_URLS.each do |url|
|
95
|
-
it "should not accept invalid github url #{url}" do
|
96
|
-
git_repo = stub(:remotes => [stub(:url => url)])
|
97
|
-
Git.stubs(:open).returns(git_repo)
|
98
|
-
lambda {
|
99
|
-
@git_repo.github_url
|
100
|
-
}.should raise_error(ConsoleError)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
context "with zenslap remote" do
|
105
|
-
it "should have zenslap app" do
|
106
|
-
@git.stubs(:remote).with("zenslap").returns(stub( :name => "zenslap", :url => ZENSLAP_GIT_REPO))
|
107
|
-
assert_equal @git_repo.zenslap_app, ZENSLAP_APP
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
context "with stored github.user" do
|
112
|
-
before do
|
113
|
-
@git_repo.stubs(:exec).with("git config --get github.user").returns(GITHUB_USER + "\n")
|
114
|
-
@git_repo.stubs(:exec).with("git config --get github.token").returns(GITHUB_TOKEN + "\n")
|
115
|
-
end
|
116
|
-
|
117
|
-
it "should have github_credentials" do
|
118
|
-
assert_equal @git_repo.github_credentials, {:login => GITHUB_USER, :token => GITHUB_TOKEN}
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
context "missing github credentials" do
|
123
|
-
before do
|
124
|
-
@git_repo.stubs(:exec).with("git config --get github.user").returns("")
|
125
|
-
@git_repo.stubs(:exec).with("git config --get github.token").returns("")
|
126
|
-
|
127
|
-
@git_repo.stubs(:ask_for).with("your github user").returns(GITHUB_USER)
|
128
|
-
@git_repo.stubs(:ask_for).with("your github token").returns(GITHUB_TOKEN)
|
129
|
-
|
130
|
-
@git_repo.stubs(:exec).with("git config --add github.user #{GITHUB_USER}")
|
131
|
-
@git_repo.stubs(:exec).with("git config --add github.token #{GITHUB_TOKEN}")
|
132
|
-
|
133
|
-
@git_repo.github_credentials
|
134
|
-
end
|
135
|
-
|
136
|
-
it "should have asked for a github user" do
|
137
|
-
assert_received @git_repo, :ask_for, &with("your github user")
|
138
|
-
end
|
139
|
-
|
140
|
-
it "should have asked for a github token" do
|
141
|
-
assert_received @git_repo, :ask_for, &with("your github token")
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
context "missing github address" do
|
146
|
-
it "should show error" do
|
147
|
-
Git.stubs( :open ).returns( stub( :remotes => [] ) )
|
148
|
-
assert_raise ConsoleError do
|
149
|
-
@git_repo.github_url
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
Bundler.require(:default, :test)
|
2
|
-
require 'test/unit'
|
3
|
-
require 'shoulda'
|
4
|
-
require 'rspec'
|
5
|
-
require 'mocha'
|
6
|
-
require 'bourne'
|
7
|
-
require 'ruby-debug'
|
8
|
-
|
9
|
-
require File.dirname(__FILE__) + '/../lib/zenslap.rb'
|
10
|
-
|
11
|
-
|
12
|
-
RSpec.configure do |config|
|
13
|
-
config.mock_with :mocha
|
14
|
-
config.include Test::Unit::Assertions
|
15
|
-
end
|
16
|
-
|
17
|
-
def with(*args)
|
18
|
-
Proc.new do |expect|
|
19
|
-
expect.with *args
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
#Uncomment if you wish to see the requests and responses
|
24
|
-
# WebMock.after_request do |request_signature, response|
|
25
|
-
# puts "Request #{request_signature} was made and #{response} was returned"
|
26
|
-
# end
|
27
|
-
|
28
|
-
def show_invocations
|
29
|
-
puts
|
30
|
-
puts "Invocations"
|
31
|
-
puts "==========="
|
32
|
-
puts
|
33
|
-
Mocha::Mockery.instance.invocations.each do |invocation|
|
34
|
-
puts("#{invocation.mock.inspect}.#{invocation.method_name}( %s )\n\n" % [
|
35
|
-
invocation.arguments.map(&:inspect).join(", ")
|
36
|
-
])
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|