Refactor the Command to use the new Config class and add examples for #scout_url

This commit is contained in:
R. Tyler Croy 2012-12-17 22:42:46 -08:00
parent 00352ab19b
commit 69d31f8a1e
4 changed files with 98 additions and 20 deletions

View File

@ -9,6 +9,12 @@ require 'sauce/heroku/config'
module Heroku
module Command
class Sauce < BaseWithApp
def initialize(*args)
super(*args)
@config = ::Sauce::Heroku::Config.new
@config.load!
end
def index
display 'Please run `heroku help sauce` for more details'
end
@ -75,7 +81,7 @@ access_key: #{apikey}
[:ie9, ['Windows 2008', 'iexplore', '9']],
].each do |method, args|
define_method(method) do
unless configured?
unless @config.configured?
display 'Sauce for Heroku has not yet been configured!'
else
@url = api.get_app(app).body['web_url']
@ -99,7 +105,7 @@ access_key: #{apikey}
def scoutup!
unless configured?
unless @config.configured?
display 'The Sauce plugin is not configured properly'
return
end
@ -111,8 +117,8 @@ access_key: #{apikey}
response = HTTParty.post(scout_url,
:body => body.to_json,
:basic_auth => {:username => username,
:password => access_key},
:basic_auth => {:username => @config.username,
:password => @config.access_key},
:headers => {'Content-Type' => 'application/json'})
return false unless (response && response.code == 200)
@ -127,18 +133,8 @@ access_key: #{apikey}
end
def scout_url
return nil unless configured?
"https://saucelabs.com/rest/v1/users/#{username}/scout"
end
def username
return unless configured?
@config['username']
end
def access_key
return unless configured?
@config['access_key']
return nil unless @config.configured?
"https://saucelabs.com/rest/v1/users/#{@config.username}/scout"
end
end
end

View File

@ -4,7 +4,6 @@ module Sauce
module Heroku
class Config
CONFIG_FILE = 'ondemand.yml'
attr_accessor :config
def filepath
@ -32,6 +31,16 @@ module Sauce
def configured?
return !(config.nil?)
end
def username
return nil unless configured?
config['username']
end
def access_key
return nil unless configured?
config['access_key']
end
end
end
end

View File

@ -97,4 +97,48 @@ describe Sauce::Heroku::Config do
it { should eql(expected_path) }
end
end
describe '#username' do
subject { config.username }
context 'when not configured' do
before :each do
config.stub(:configured? => false)
end
it { should be_nil }
end
context 'when configured' do
let(:username) { 'rspec' }
let(:contents) { {'username' => username } }
before :each do
config.stub(:config => contents)
end
it { should eql(username) }
end
end
describe '#access_key' do
subject { config.access_key }
context 'when not configured' do
before :each do
config.stub(:configured? => false)
end
it { should be_nil }
end
context 'when configured' do
let(:key) { 'spec-key' }
let(:contents) { {'access_key' => key } }
before :each do
config.stub(:config => contents)
end
it { should eql(key) }
end
end
end

View File

@ -1,22 +1,51 @@
require 'spec_helper'
describe Heroku::Command::Sauce do
let(:command) { subject }
it { should be_instance_of Heroku::Command::Sauce }
let(:command) { described_class.new }
describe '#scoutup!' do
context 'when configured' do
let(:config) do
c = mock('Sauce::Heroku::Config Mock')
c.stub(:configured? => true)
c.stub(:username => 'rspec')
c.stub(:access_key => 'rspec')
c
end
let(:scouturl) { 'http://fakeurl' }
before :each do
command.stub(:scout_url).and_return(scouturl)
command.instance_variable_set(:@config, config)
end
it 'should post to Sauce Labs' do
pending
HTTParty.should_receive(:post).with(scouturl,
hash_including(:headers => {'Content-Type' => 'application/json'}))
command.send(:scoutup!)
end
end
end
describe '#scout_url' do
subject { command.send(:scout_url) }
context 'when not configured' do
it { should be_nil }
end
context 'when configured' do
let(:config) do
c = mock('Mock Config', :username => 'rspec')
c.stub(:configured? => true)
c
end
before :each do
command.instance_variable_set(:@config, config)
end
it { should_not be_nil }
it { should_not be_empty }
end
end
end