morale 1.0.0 → 1.1.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/Gemfile +1 -2
- data/Gemfile.lock +4 -2
- data/lib/morale/account.rb +2 -2
- data/lib/morale/command.rb +0 -1
- data/lib/morale/commands/account.rb +1 -1
- data/lib/morale/commands/project.rb +1 -1
- data/lib/morale/commands/ticket.rb +1 -1
- data/lib/morale/credentials_store.rb +2 -0
- data/lib/morale/{platform.rb → io.rb} +1 -9
- data/lib/morale.rb +1 -1
- data/morale.gemspec +5 -11
- metadata +11 -18
- data/LICENSE +0 -0
- data/lib/morale/client.rb +0 -84
- data/lib/morale/connection_store.rb +0 -58
- data/lib/morale/storage.rb +0 -29
- data/spec/morale/client_spec.rb +0 -119
- data/spec/morale/connection_store_spec.rb +0 -65
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -24,6 +24,9 @@ GEM
|
|
24
24
|
httparty (0.7.8)
|
25
25
|
crack (= 0.1.8)
|
26
26
|
json (1.4.6)
|
27
|
+
morale-client (0.0.1)
|
28
|
+
httparty (~> 0.7.8)
|
29
|
+
json (~> 1.4.6)
|
27
30
|
rake (0.8.7)
|
28
31
|
rspec (2.6.0)
|
29
32
|
rspec-core (~> 2.6.0)
|
@@ -44,12 +47,11 @@ PLATFORMS
|
|
44
47
|
|
45
48
|
DEPENDENCIES
|
46
49
|
aruba (= 0.3.6)
|
47
|
-
crack (= 0.1.8)
|
48
50
|
cucumber (= 1.0.6)
|
49
51
|
diff-lcs (= 1.1.3)
|
50
52
|
hirb
|
51
|
-
httparty (= 0.7.8)
|
52
53
|
json (= 1.4.6)
|
54
|
+
morale-client
|
53
55
|
rake (= 0.8.7)
|
54
56
|
rspec (= 2.6.0)
|
55
57
|
thor (= 0.14.6)
|
data/lib/morale/account.rb
CHANGED
@@ -3,7 +3,7 @@ require 'morale/credentials_store'
|
|
3
3
|
|
4
4
|
module Morale
|
5
5
|
class Account
|
6
|
-
include Morale::
|
6
|
+
include Morale::IO
|
7
7
|
|
8
8
|
class << self
|
9
9
|
include Morale::CredentialsStore
|
@@ -82,7 +82,7 @@ module Morale
|
|
82
82
|
password = running_on_windows? ? ask_for_secret_on_windows : ask_for_secret
|
83
83
|
api_key = Morale::Client.authorize(user, password, @subdomain).api_key
|
84
84
|
|
85
|
-
say "Invalid email/password combination or API key was not generated." if api_key.
|
85
|
+
say "Invalid email/password combination or API key was not generated." if api_key.empty?
|
86
86
|
|
87
87
|
[@subdomain, api_key]
|
88
88
|
end
|
data/lib/morale/command.rb
CHANGED
@@ -1,13 +1,5 @@
|
|
1
1
|
module Morale
|
2
|
-
module
|
3
|
-
def home_directory
|
4
|
-
running_on_windows? ? ENV['USERPROFILE'] : ENV['HOME']
|
5
|
-
end
|
6
|
-
|
7
|
-
def running_on_windows?
|
8
|
-
RUBY_PLATFORM =~ /mswin32|mingw32/
|
9
|
-
end
|
10
|
-
|
2
|
+
module IO
|
11
3
|
def say(message="", color=nil, force_new_line=(message.to_s !~ /( |\t)$/))
|
12
4
|
message = message.to_s
|
13
5
|
message = set_color(message, color) if color
|
data/lib/morale.rb
CHANGED
data/morale.gemspec
CHANGED
@@ -5,8 +5,8 @@ Gem::Specification.new do |s|
|
|
5
5
|
s.rubygems_version = '1.3.5'
|
6
6
|
|
7
7
|
s.name = 'morale'
|
8
|
-
s.version = '1.
|
9
|
-
s.date = '2011-
|
8
|
+
s.version = '1.1.0'
|
9
|
+
s.date = '2011-12-12'
|
10
10
|
s.rubyforge_project = 'morale'
|
11
11
|
|
12
12
|
s.summary = "Command line interface to create & manage tickets on Morale."
|
@@ -20,10 +20,10 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.executables = ["morale"]
|
21
21
|
|
22
22
|
s.rdoc_options = ["--charset=UTF-8"]
|
23
|
-
s.extra_rdoc_files = %w[README.md
|
23
|
+
s.extra_rdoc_files = %w[README.md]
|
24
24
|
|
25
|
+
s.add_dependency('morale-client', "~> 0.0.1")
|
25
26
|
s.add_dependency('hirb', "~> 0.5.0")
|
26
|
-
s.add_dependency('httparty', "~> 0.7.8")
|
27
27
|
s.add_dependency('json', "~> 1.4.6")
|
28
28
|
s.add_dependency('thor', "~> 0.14.6")
|
29
29
|
|
@@ -36,7 +36,6 @@ Gem::Specification.new do |s|
|
|
36
36
|
s.files = %w[
|
37
37
|
Gemfile
|
38
38
|
Gemfile.lock
|
39
|
-
LICENSE
|
40
39
|
README.md
|
41
40
|
Rakefile
|
42
41
|
bin/morale
|
@@ -50,22 +49,17 @@ Gem::Specification.new do |s|
|
|
50
49
|
lib/morale.rb
|
51
50
|
lib/morale/account.rb
|
52
51
|
lib/morale/authorization.rb
|
53
|
-
lib/morale/client.rb
|
54
52
|
lib/morale/command.rb
|
55
53
|
lib/morale/commands/account.rb
|
56
54
|
lib/morale/commands/authorization.rb
|
57
55
|
lib/morale/commands/project.rb
|
58
56
|
lib/morale/commands/ticket.rb
|
59
|
-
lib/morale/connection_store.rb
|
60
57
|
lib/morale/credentials_store.rb
|
61
58
|
lib/morale/flow.rb
|
62
|
-
lib/morale/
|
63
|
-
lib/morale/storage.rb
|
59
|
+
lib/morale/io.rb
|
64
60
|
morale.gemspec
|
65
61
|
spec/morale/account_spec.rb
|
66
|
-
spec/morale/client_spec.rb
|
67
62
|
spec/morale/command_spec.rb
|
68
|
-
spec/morale/connection_store_spec.rb
|
69
63
|
spec/morale/credentials_store_spec.rb
|
70
64
|
spec/morale/storage_spec.rb
|
71
65
|
spec/spec_helper.rb
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 1
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
|
9
|
-
version: 1.0.0
|
9
|
+
version: 1.1.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Brilliant Fantastic
|
@@ -14,11 +14,11 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-
|
17
|
+
date: 2011-12-12 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
name:
|
21
|
+
name: morale-client
|
22
22
|
prerelease: false
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
@@ -26,13 +26,13 @@ dependencies:
|
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
segments:
|
28
28
|
- 0
|
29
|
-
- 5
|
30
29
|
- 0
|
31
|
-
|
30
|
+
- 1
|
31
|
+
version: 0.0.1
|
32
32
|
type: :runtime
|
33
33
|
version_requirements: *id001
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
|
-
name:
|
35
|
+
name: hirb
|
36
36
|
prerelease: false
|
37
37
|
requirement: &id002 !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
@@ -40,9 +40,9 @@ dependencies:
|
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
segments:
|
42
42
|
- 0
|
43
|
-
-
|
44
|
-
-
|
45
|
-
version: 0.
|
43
|
+
- 5
|
44
|
+
- 0
|
45
|
+
version: 0.5.0
|
46
46
|
type: :runtime
|
47
47
|
version_requirements: *id002
|
48
48
|
- !ruby/object:Gem::Dependency
|
@@ -81,11 +81,9 @@ extensions: []
|
|
81
81
|
|
82
82
|
extra_rdoc_files:
|
83
83
|
- README.md
|
84
|
-
- LICENSE
|
85
84
|
files:
|
86
85
|
- Gemfile
|
87
86
|
- Gemfile.lock
|
88
|
-
- LICENSE
|
89
87
|
- README.md
|
90
88
|
- Rakefile
|
91
89
|
- bin/morale
|
@@ -99,22 +97,17 @@ files:
|
|
99
97
|
- lib/morale.rb
|
100
98
|
- lib/morale/account.rb
|
101
99
|
- lib/morale/authorization.rb
|
102
|
-
- lib/morale/client.rb
|
103
100
|
- lib/morale/command.rb
|
104
101
|
- lib/morale/commands/account.rb
|
105
102
|
- lib/morale/commands/authorization.rb
|
106
103
|
- lib/morale/commands/project.rb
|
107
104
|
- lib/morale/commands/ticket.rb
|
108
|
-
- lib/morale/connection_store.rb
|
109
105
|
- lib/morale/credentials_store.rb
|
110
106
|
- lib/morale/flow.rb
|
111
|
-
- lib/morale/
|
112
|
-
- lib/morale/storage.rb
|
107
|
+
- lib/morale/io.rb
|
113
108
|
- morale.gemspec
|
114
109
|
- spec/morale/account_spec.rb
|
115
|
-
- spec/morale/client_spec.rb
|
116
110
|
- spec/morale/command_spec.rb
|
117
|
-
- spec/morale/connection_store_spec.rb
|
118
111
|
- spec/morale/credentials_store_spec.rb
|
119
112
|
- spec/morale/storage_spec.rb
|
120
113
|
- spec/spec_helper.rb
|
data/LICENSE
DELETED
File without changes
|
data/lib/morale/client.rb
DELETED
@@ -1,84 +0,0 @@
|
|
1
|
-
require 'httparty'
|
2
|
-
require 'json'
|
3
|
-
require 'morale/account'
|
4
|
-
require 'morale/connection_store'
|
5
|
-
|
6
|
-
module Morale
|
7
|
-
class Client
|
8
|
-
class Unauthorized < RuntimeError; end
|
9
|
-
class NotFound < RuntimeError; end
|
10
|
-
|
11
|
-
include HTTParty
|
12
|
-
extend Morale::ConnectionStore
|
13
|
-
|
14
|
-
format :json
|
15
|
-
|
16
|
-
API_VERSION = 'v1'
|
17
|
-
|
18
|
-
attr_accessor :api_key
|
19
|
-
attr_reader :subdomain
|
20
|
-
|
21
|
-
def self.authorize(user, password, subdomain)
|
22
|
-
client = new(subdomain)
|
23
|
-
client.unauthorize
|
24
|
-
client.api_key = client.class.post('/in', :body => { :email => user, :password => password })["api_key"]
|
25
|
-
return client
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.accounts(user)
|
29
|
-
client = new
|
30
|
-
client.unauthorize
|
31
|
-
response = client.class.get("/accounts", :query => { :email => user })
|
32
|
-
raise Unauthorized if response.code == 401
|
33
|
-
raise NotFound if response.code == 404
|
34
|
-
response
|
35
|
-
end
|
36
|
-
|
37
|
-
def accounts
|
38
|
-
authorize
|
39
|
-
response = self.class.get("/accounts", :query => { :api_key => @api_key })
|
40
|
-
raise Unauthorized if response.code == 401
|
41
|
-
raise NotFound if response.code == 404
|
42
|
-
response
|
43
|
-
end
|
44
|
-
|
45
|
-
def initialize(subdomain="", api_key="")
|
46
|
-
@api_key = api_key
|
47
|
-
@subdomain = subdomain
|
48
|
-
self.class.default_options[:base_uri] = HTTParty.normalize_base_uri("#{subdomain}#{"." unless subdomain.nil? || subdomain.empty?}#{self.class.base_url}/api/#{API_VERSION}")
|
49
|
-
end
|
50
|
-
|
51
|
-
def projects
|
52
|
-
authorize
|
53
|
-
response = self.class.get('/projects')
|
54
|
-
raise Unauthorized if response.code == 401
|
55
|
-
raise NotFound if response.code == 404
|
56
|
-
response
|
57
|
-
end
|
58
|
-
|
59
|
-
def tickets(options={})
|
60
|
-
authorize
|
61
|
-
response = self.class.get("/projects/#{options[:project_id]}/tickets")
|
62
|
-
raise Unauthorized if response.code == 401
|
63
|
-
raise NotFound if response.code == 404
|
64
|
-
response
|
65
|
-
end
|
66
|
-
|
67
|
-
def ticket(project_id, command)
|
68
|
-
authorize
|
69
|
-
response = self.class.post("/projects/#{project_id}/tickets", :body => { :command => command })
|
70
|
-
raise Unauthorized if response.code == 401
|
71
|
-
raise NotFound if response.code == 404
|
72
|
-
response
|
73
|
-
end
|
74
|
-
|
75
|
-
def authorize
|
76
|
-
self.class.basic_auth @subdomain, @api_key
|
77
|
-
end
|
78
|
-
|
79
|
-
def unauthorize
|
80
|
-
self.class.basic_auth nil, nil
|
81
|
-
end
|
82
|
-
|
83
|
-
end
|
84
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
require 'morale/storage'
|
2
|
-
require 'morale/platform'
|
3
|
-
|
4
|
-
module Morale
|
5
|
-
module ConnectionStore
|
6
|
-
include Morale::Storage
|
7
|
-
include Morale::Platform
|
8
|
-
|
9
|
-
def base_url
|
10
|
-
if @base_url.nil?
|
11
|
-
@base_url = read_connection
|
12
|
-
if @base_url.nil?
|
13
|
-
@base_url = default_base_url
|
14
|
-
self.write_connection
|
15
|
-
end
|
16
|
-
end
|
17
|
-
@base_url
|
18
|
-
end
|
19
|
-
|
20
|
-
def base_url=(value)
|
21
|
-
@base_url = value
|
22
|
-
self.write_connection
|
23
|
-
end
|
24
|
-
|
25
|
-
def location
|
26
|
-
ENV['CONNECTION_LOCATION'] || default_location
|
27
|
-
end
|
28
|
-
|
29
|
-
def location=(value)
|
30
|
-
ENV['CONNECTION_LOCATION'] = value
|
31
|
-
end
|
32
|
-
|
33
|
-
def default_location
|
34
|
-
"#{home_directory}/.morale/connection"
|
35
|
-
end
|
36
|
-
|
37
|
-
def delete_connection
|
38
|
-
self.delete
|
39
|
-
@base_url = nil
|
40
|
-
end
|
41
|
-
|
42
|
-
def read_connection
|
43
|
-
connection = self.read
|
44
|
-
connection.split("\n") if connection
|
45
|
-
end
|
46
|
-
|
47
|
-
def write_connection
|
48
|
-
self.write self.base_url
|
49
|
-
end
|
50
|
-
|
51
|
-
private
|
52
|
-
|
53
|
-
def default_base_url
|
54
|
-
ENV['DEFAULT_BASE_URL'] || "teammorale.com"
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
58
|
-
end
|
data/lib/morale/storage.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
module Morale
|
2
|
-
module Storage
|
3
|
-
|
4
|
-
attr_accessor :location
|
5
|
-
|
6
|
-
def delete
|
7
|
-
FileUtils.rm_f(location)
|
8
|
-
end
|
9
|
-
|
10
|
-
def read
|
11
|
-
File.exists?(location) and File.read(location)
|
12
|
-
end
|
13
|
-
|
14
|
-
def write(data)
|
15
|
-
FileUtils.mkdir_p(File.dirname(location))
|
16
|
-
f = File.open(location, 'w')
|
17
|
-
f.puts data
|
18
|
-
f.close
|
19
|
-
set_permissions
|
20
|
-
end
|
21
|
-
|
22
|
-
private
|
23
|
-
|
24
|
-
def set_permissions
|
25
|
-
FileUtils.chmod 0700, File.dirname(location)
|
26
|
-
FileUtils.chmod 0600, location
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
data/spec/morale/client_spec.rb
DELETED
@@ -1,119 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
require "json"
|
3
|
-
require "morale/client"
|
4
|
-
|
5
|
-
describe Morale::Client do
|
6
|
-
describe "#authorize" do
|
7
|
-
it "authorizes a user with a valid email address and password" do
|
8
|
-
api_key = "blah"
|
9
|
-
stub_request(:post, "http://blah.lvh.me:3000/api/v1/in").to_return(:body => { "api_key" => "#{api_key}" }.to_json)
|
10
|
-
Morale::Client.authorize(nil, nil, 'blah').api_key.should == api_key
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
describe "#accounts" do
|
15
|
-
it "displays all the accounts for a specific user based on their email" do
|
16
|
-
stub_request(:get, "http://lvh.me:3000/api/v1/accounts?email=someone@example.com").to_return(:body =>
|
17
|
-
[{"account" => {"group_name" => "Shimmy Sham","site_address"=>"shimmy_sham","created_at" => "2011-07-31T21:28:53Z","updated_at" => "2011-07-31T21:28:53Z","plan_id" => 1,"id" => 2}},
|
18
|
-
{"account" => {"group_name" => "Pumpkin Tarts","site_address"=>"pumpkin_tarts","created_at" => "2011-07-31T21:40:24Z","updated_at" => "2011-07-31T21:40:24Z","plan_id" => 1,"id" => 1}}].to_json)
|
19
|
-
|
20
|
-
accounts = Morale::Client.accounts('someone@example.com')
|
21
|
-
accounts.count.should == 2
|
22
|
-
end
|
23
|
-
|
24
|
-
it "displays all the accounts for a specific user based on their api_key" do
|
25
|
-
stub_request(:get, "http://blah:@blah.lvh.me:3000/api/v1/accounts?api_key=").to_return(:body =>
|
26
|
-
[{"account" => {"group_name" => "Shimmy Sham","site_address"=>"shimmy_sham","created_at" => "2011-07-31T21:28:53Z","updated_at" => "2011-07-31T21:28:53Z","plan_id" => 1,"id" => 2}},
|
27
|
-
{"account" => {"group_name" => "Pumpkin Tarts","site_address"=>"pumpkin_tarts","created_at" => "2011-07-31T21:40:24Z","updated_at" => "2011-07-31T21:40:24Z","plan_id" => 1,"id" => 1}}].to_json)
|
28
|
-
|
29
|
-
client = Morale::Client.new('blah')
|
30
|
-
client.accounts.count.should == 2
|
31
|
-
client.accounts[0]["account"]["group_name"].should == "Shimmy Sham"
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
describe "#projects" do
|
36
|
-
it "displays all the projects for a specific account" do
|
37
|
-
stub_request(:get, "http://blah:@blah.lvh.me:3000/api/v1/projects").to_return(:body =>
|
38
|
-
[{"project" => {"name" => "Skunk Works","created_at" => "2011-07-31T21:40:24Z","updated_at" => "2011-07-31T21:40:24Z","account_id" => 1,"id" => 1}},
|
39
|
-
{"project" => {"name" => "Poop Shoot","created_at" => "2011-07-31T21:28:53Z","updated_at" => "2011-07-31T21:28:53Z","account_id" => 1,"id" => 2}}].to_json)
|
40
|
-
client = Morale::Client.new('blah')
|
41
|
-
client.projects.count.should == 2
|
42
|
-
client.projects[0]["project"]["name"].should == "Skunk Works"
|
43
|
-
client.projects[1]["project"]["id"].should == 2
|
44
|
-
end
|
45
|
-
|
46
|
-
it "should raise unauthorized if a 401 is received" do
|
47
|
-
stub_request(:get, "http://blah:@blah.lvh.me:3000/api/v1/projects").to_return(:status => 401)
|
48
|
-
client = Morale::Client.new('blah')
|
49
|
-
lambda { client.projects.count }.should raise_error(Morale::Client::Unauthorized)
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
describe "#ticket" do
|
54
|
-
it "should return a JSON ticket that was created" do
|
55
|
-
stub_request(:post, "http://blah:123456@blah.lvh.me:3000/api/v1/projects/1/tickets").
|
56
|
-
with(:body => "command=This%20is%20a%20test%20that%20should%20create%20a%20new%20task%20as%3A%20Lester").
|
57
|
-
to_return(:body => {
|
58
|
-
"created_at" => "2011-09-27T02:56:03Z",
|
59
|
-
"assigned_to" => { "user" => { "first_name" => "Lester", "last_name" => "Tester", "email" => "test@test.com" } },
|
60
|
-
"title" => "This is a test that should create a new task",
|
61
|
-
"project_id" => "1",
|
62
|
-
"priority" => "null",
|
63
|
-
"archived" => "false",
|
64
|
-
"id" => "1",
|
65
|
-
"created_by" => { "user" => { "first_name" => "Lester", "last_name" => "Tester", "email" => "test@test.com" } },
|
66
|
-
"due_date" => "null",
|
67
|
-
"identifier" => "1" }.to_json
|
68
|
-
)
|
69
|
-
client = Morale::Client.new('blah', '123456')
|
70
|
-
response = client.ticket(1, "This is a test that should create a new task as: Lester")
|
71
|
-
response['title'].should == "This is a test that should create a new task"
|
72
|
-
response['assigned_to']['user']['first_name'].should == "Lester"
|
73
|
-
response['project_id'].should == "1"
|
74
|
-
end
|
75
|
-
|
76
|
-
it "should raise unauthorized if a 401 is received" do
|
77
|
-
stub_request(:post, "http://blah:123456@blah.lvh.me:3000/api/v1/projects/1/tickets").
|
78
|
-
with(:body => "command=This%20is%20a%20test%20that%20should%20create%20a%20new%20task%20as%3A%20Lester").
|
79
|
-
to_return(:status => 401)
|
80
|
-
client = Morale::Client.new('blah', '123456')
|
81
|
-
lambda { client.ticket('1', "This is a test that should create a new task as: Lester") }.should raise_error(Morale::Client::Unauthorized)
|
82
|
-
end
|
83
|
-
|
84
|
-
it "should raise notfound if a 404 is received" do
|
85
|
-
stub_request(:post, "http://blah:123456@blah.lvh.me:3000/api/v1/projects/1/tickets").
|
86
|
-
with(:body => "command=This%20is%20a%20test%20that%20should%20create%20a%20new%20task%20as%3A%20Lester").
|
87
|
-
to_return(:status => 404)
|
88
|
-
client = Morale::Client.new('blah', '123456')
|
89
|
-
lambda { client.ticket('1', "This is a test that should create a new task as: Lester") }.should raise_error(Morale::Client::NotFound)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
describe "#tickets" do
|
94
|
-
it "should return all active tickets when no options are specified" do
|
95
|
-
stub_request(:get, "http://blah:123456@blah.lvh.me:3000/api/v1/projects/1/tickets").to_return(:body =>
|
96
|
-
[{"ticket" => {"title" => "This is test #1","created_at" => "2011-07-31T21:40:24Z","updated_at" => "2011-07-31T21:40:24Z","project_id" => 1,"id" => 1,"identifier" => "1","type" => "Task","due_date" => "2011-10-15 16:00:00.000000","priority" => nil,"archived" => "f"}},
|
97
|
-
{"ticket" => {"title" => "This is test #2","created_at" => "2011-07-31T21:28:53Z","updated_at" => "2011-07-31T21:28:53Z","project_id" => 1,"id" => 2, "identifier" => "2","type" => "Bug","due_date" => nil,"priority" => "2","archived" => "f"}}].to_json)
|
98
|
-
client = Morale::Client.new('blah', '123456')
|
99
|
-
response = client.tickets({:project_id => 1})
|
100
|
-
response.count.should == 2
|
101
|
-
response[0]["ticket"]["title"].should == "This is test #1"
|
102
|
-
response[1]["ticket"]["title"].should == "This is test #2"
|
103
|
-
end
|
104
|
-
|
105
|
-
it "should raise unauthorized if a 401 is received" do
|
106
|
-
stub_request(:get, "http://blah:123456@blah.lvh.me:3000/api/v1/projects/1/tickets").
|
107
|
-
to_return(:status => 401)
|
108
|
-
client = Morale::Client.new('blah', '123456')
|
109
|
-
lambda { client.tickets({:project_id => 1}) }.should raise_error(Morale::Client::Unauthorized)
|
110
|
-
end
|
111
|
-
|
112
|
-
it "should raise notfound if a 404 is received" do
|
113
|
-
stub_request(:get, "http://blah:123456@blah.lvh.me:3000/api/v1/projects/1/tickets").
|
114
|
-
to_return(:status => 404)
|
115
|
-
client = Morale::Client.new('blah', '123456')
|
116
|
-
lambda { client.tickets({ :project_id => 1 }) }.should raise_error(Morale::Client::NotFound)
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'morale/connection_store'
|
3
|
-
|
4
|
-
describe Morale::ConnectionStore do
|
5
|
-
|
6
|
-
class Dummy; end
|
7
|
-
before (:each) do
|
8
|
-
@dummy = Dummy.new
|
9
|
-
@dummy.extend(Morale::ConnectionStore)
|
10
|
-
end
|
11
|
-
|
12
|
-
after (:each) do
|
13
|
-
@dummy.delete_connection
|
14
|
-
end
|
15
|
-
|
16
|
-
describe "#location" do
|
17
|
-
it "should return the correct location of the connection file" do
|
18
|
-
@dummy.location.should == "#{ENV['HOME']}/.morale/connection"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe "#base_url" do
|
23
|
-
it "should store the default base url if it is not set" do
|
24
|
-
@dummy.base_url.should == "teammorale.com"
|
25
|
-
File.read(@dummy.location).should =~ /teammorale.com/
|
26
|
-
end
|
27
|
-
|
28
|
-
it "should return the environment variable for the default base url" do
|
29
|
-
@dummy.delete_connection
|
30
|
-
ENV['DEFAULT_BASE_URL'] = "somewhere-else.com"
|
31
|
-
@dummy.base_url.should == "somewhere-else.com"
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should store the base url when it is set" do
|
35
|
-
@dummy.base_url = "somewhere-else.com"
|
36
|
-
File.read(@dummy.location).should =~ /somewhere-else.com/
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "#delete_connection" do
|
41
|
-
it "should clear the base_url field" do
|
42
|
-
ENV['DEFAULT_BASE_URL'] = nil
|
43
|
-
@dummy.base_url = "Blah!"
|
44
|
-
@dummy.delete_connection
|
45
|
-
@dummy.base_url.should == "teammorale.com"
|
46
|
-
end
|
47
|
-
|
48
|
-
it "should delete the connection file" do
|
49
|
-
FileUtils.mkdir_p(File.dirname(@dummy.location))
|
50
|
-
f = File.open(@dummy.location, 'w')
|
51
|
-
f.puts "Blah!"
|
52
|
-
|
53
|
-
@dummy.delete_connection
|
54
|
-
File.exists?(@dummy.location).should be_false
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
describe "#write_connection" do
|
59
|
-
it "should write data to the location of the connection file" do
|
60
|
-
@dummy.base_url = "Blah!"
|
61
|
-
@dummy.write_connection
|
62
|
-
File.read(@dummy.location).should =~ /Blah!/
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|