From c0906c27ef4ac084426bcfeeaed2779eacfa3d4c Mon Sep 17 00:00:00 2001 From: Florian Munz Date: Wed, 4 Jul 2012 12:54:05 +0200 Subject: [PATCH] use explicit stubs instead of recorded responses never really worked out the way I thought it would --- Rakefile | 16 ------------ lib/podio.rb | 1 - lib/podio/client.rb | 2 -- lib/podio/middleware/response_recorder.rb | 14 ----------- test/client_test.rb | 16 +++++++++--- .../1e1fb7999f3b19d6c8d6dfd0c5820133.rack | 1 - .../abfda7ef2946ffad654fc42d00627569.rack | 1 - .../cc73b5e3e28cce22bf8d644a68178b70.rack | 1 - .../eaa5ecfefb156b0a0bd29b3591786946.rack | 1 - .../f5a56d9a7e19777642508edf80a45bc8.rack | 1 - test/test_helper.rb | 25 +------------------ 11 files changed, 14 insertions(+), 65 deletions(-) delete mode 100644 lib/podio/middleware/response_recorder.rb delete mode 100644 test/fixtures/client/1e1fb7999f3b19d6c8d6dfd0c5820133.rack delete mode 100644 test/fixtures/client/abfda7ef2946ffad654fc42d00627569.rack delete mode 100644 test/fixtures/client/cc73b5e3e28cce22bf8d644a68178b70.rack delete mode 100644 test/fixtures/client/eaa5ecfefb156b0a0bd29b3591786946.rack delete mode 100644 test/fixtures/client/f5a56d9a7e19777642508edf80a45bc8.rack diff --git a/Rakefile b/Rakefile index e4c0c346..e4d61ea5 100644 --- a/Rakefile +++ b/Rakefile @@ -8,24 +8,8 @@ task :default => [:test] desc 'Run tests' Rake::TestTask.new(:test) do |t| - ENV['ENABLE_STUBS'] = 'true' - ENV['ENABLE_RECORD'] = 'false' t.ruby_opts = ["-rubygems"] if defined? Gem t.libs << "lib" << "test" t.pattern = 'test/**/*_test.rb' t.verbose = true end - -desc 'Record responses' -task :record do - ENV['ENABLE_RECORD'] = 'true' - ENV['ENABLE_STUBS'] = 'false' - - Dir['test/**/*_test.rb'].each do |f| - ruby("-Ilib:test", f) - - folder_name = f.match(/test\/(.+)_test.rb/)[1] - FileUtils.mkdir_p("test/fixtures/#{folder_name}") - FileUtils.mv(Dir.glob('*.rack'), "test/fixtures/#{folder_name}") - end -end diff --git a/lib/podio.rb b/lib/podio.rb index f3183b8d..d5e08e71 100644 --- a/lib/podio.rb +++ b/lib/podio.rb @@ -8,7 +8,6 @@ require 'podio/middleware/oauth2' require 'podio/middleware/json_response' require 'podio/middleware/error_response' -require 'podio/middleware/response_recorder' require 'podio/active_podio/base' require 'podio/active_podio/updatable' diff --git a/lib/podio/client.rb b/lib/podio/client.rb index ad84ea28..bfbab5bb 100644 --- a/lib/podio/client.rb +++ b/lib/podio/client.rb @@ -17,7 +17,6 @@ def initialize(options = {}) @stubs = Faraday::Adapter::Test::Stubs.new end @test_mode = options[:test_mode] - @record_mode = options[:record_mode] setup_connections end @@ -165,7 +164,6 @@ def configure_connection # builder.use Middleware::DateConversion builder.use Middleware::ErrorResponse builder.use Middleware::JsonResponse - builder.use Middleware::ResponseRecorder if @record_mode end end diff --git a/lib/podio/middleware/response_recorder.rb b/lib/podio/middleware/response_recorder.rb deleted file mode 100644 index e90206c8..00000000 --- a/lib/podio/middleware/response_recorder.rb +++ /dev/null @@ -1,14 +0,0 @@ -require 'digest/md5' - -module Podio - module Middleware - class ResponseRecorder < Faraday::Response::Middleware - def on_complete(env) - response = "['#{Faraday::Utils.normalize_path(env[:url])}', :#{env[:method]}, #{env[:status]}, #{env[:response_headers]}, '#{env[:body]}']" - - filename = Digest::MD5.hexdigest("#{env[:url].request_uri}-#{env[:body]}") - ::File.open("#{filename}.rack", 'w') { |f| f.write(response) } - end - end - end -end diff --git a/test/client_test.rb b/test/client_test.rb index 658d1300..5915ca02 100644 --- a/test/client_test.rb +++ b/test/client_test.rb @@ -27,10 +27,12 @@ class ClientTest < Test::Unit::TestCase end test 'should get an access token' do + Podio.client.stubs.post('/oauth/token') {[200, {}, {"access_token" => "a3345189a07b478284356c8b0b3c54d5", "expires_in" => 28799, "refresh_token" => "cdca6acfeb374598ba2790c9e5283b21"}]} + client = Podio.client client.oauth_token = nil assert_nil client.oauth_token - + user = fixtures[:users][:professor] client.authenticate_with_credentials(user[:mail], user[:password]) @@ -39,10 +41,14 @@ class ClientTest < Test::Unit::TestCase end test 'should be able to refresh access token' do + Podio.client.stubs.post('/oauth/token') {[200, {}, {"access_token" => "a3345189a07b478284356c8b0b3c54d5", "expires_in" => 28799, "refresh_token" => "cdca6acfeb374598ba2790c9e5283b21"}]} + login_as(:fry) client = Podio.client old_token = client.oauth_token.dup + Podio.client.stubs.post('/oauth/token') {[200, {}, {"access_token" => "efb7614007ae426481de69310ec14953", "expires_in" => 28799, "refresh_token" => "cdca6acfeb374598ba2790c9e5283b21"}]} + client.refresh_access_token assert_not_equal old_token.access_token, client.oauth_token.access_token @@ -50,12 +56,13 @@ class ClientTest < Test::Unit::TestCase end test 'should automatically refresh an expired token' do - # this token is already expired in the test database - # Podio.client.oauth_token = Podio::OAuthToken.new('access_token' => '30da4594eef93528c11df7fb5deb989cd629ea7060a1ce1ced628d19398214c942bcfe0334cf953ef70a80ea1afdfd80183d5c75d19c1f5526ca4c6f6f3471ef', 'refresh_token' => '82e7a11ae187f28a25261599aa6229cd89f8faee48cba18a75d70efae88ba665ced11d43143b7f5bebb31a4103662b851dd2db1879a3947b843259479fccfad3', 'expires_in' => -10) + Podio.client.stubs.post('/oauth/token') {[200, {}, {"access_token" => "a3345189a07b478284356c8b0b3c54d5", "expires_in" => 28799, "refresh_token" => "cdca6acfeb374598ba2790c9e5283b21"}]} login_as(:professor) Podio.client.reset + Podio.client.stubs.get('/org/') {[200, {}, [{"status" => "active"}]]} + assert_nothing_raised do response = Podio.connection.get("/org/") assert_equal 200, response.status @@ -80,6 +87,9 @@ class ClientTest < Test::Unit::TestCase test 'should be able to make arbitrary requests' do login_as(:professor) + + Podio.client.stubs.get('/org/') {[200, {}, [{"status" => "active"}]]} + response = Podio.connection.get("/org/") assert_equal 200, response.status assert response.body.is_a?(Array) diff --git a/test/fixtures/client/1e1fb7999f3b19d6c8d6dfd0c5820133.rack b/test/fixtures/client/1e1fb7999f3b19d6c8d6dfd0c5820133.rack deleted file mode 100644 index f380dfa3..00000000 --- a/test/fixtures/client/1e1fb7999f3b19d6c8d6dfd0c5820133.rack +++ /dev/null @@ -1 +0,0 @@ -['/oauth/token', :post, 200, {"server"=>"nginx/0.7.65", "date"=>"Wed, 04 Jul 2012 10:00:18 GMT", "content-type"=>"application/json; charset=utf-8", "connection"=>"close", "content-length"=>"172", "x-podio-request-id"=>"0"}, '{"access_token":"a3345189a07b478284356c8b0b3c54d5","token_type":"bearer","ref":{"type":"user","id":4},"expires_in":28799,"refresh_token":"cdca6acfeb374598ba2790c9e5283b21"}'] \ No newline at end of file diff --git a/test/fixtures/client/abfda7ef2946ffad654fc42d00627569.rack b/test/fixtures/client/abfda7ef2946ffad654fc42d00627569.rack deleted file mode 100644 index efe09df4..00000000 --- a/test/fixtures/client/abfda7ef2946ffad654fc42d00627569.rack +++ /dev/null @@ -1 +0,0 @@ -['/org/', :get, 200, {"server"=>"nginx/0.7.65", "date"=>"Wed, 04 Jul 2012 10:00:19 GMT", "content-type"=>"application/json; charset=utf-8", "connection"=>"close", "content-length"=>"1411", "x-podio-request-id"=>"0"}, '[{"status":"active","premium":true,"url_label":"planetexpresscom","image":null,"rank":1,"spaces":[{"premium":true,"name":"Employee Network","rights":["view","update","subscribe","add_file","add_task","add_status","add_widget","add_contact","add_user","add_meeting"],"url":"http:\/\/planetexpresscom.podio.com\/employeenetwork\/","url_label":"employeenetwork","space_id":4,"role":"admin","type":"emp_network","rank":3},{"premium":true,"name":"Intranet","rights":["view","update","delete","subscribe","share","add_app","add_file","add_task","add_status","add_widget","add_contact","add_user","add_user_light","add_meeting"],"url":"http:\/\/planetexpresscom.podio.com\/intranet\/","url_label":"intranet","space_id":6,"role":"admin","type":"regular","rank":2},{"premium":true,"name":"Shipping","rights":["view","update","delete","subscribe","share","add_app","add_file","add_task","add_status","add_widget","add_contact","add_user","add_user_light","add_meeting"],"url":"http:\/\/planetexpresscom.podio.com\/shipping\/","url_label":"shipping","space_id":7,"role":"admin","type":"regular","rank":1}],"logo":null,"segment":null,"contract_status":"full","name":"Planet Express","rights":["view","update","add_space","add_conversation","add_widget","statistics","view_admins"],"url":"http:\/\/planetexpresscom.podio.com\/","org_id":3,"role":"admin","domains":["planetexpress.com"],"type":"premium","segment_size":null}]'] \ No newline at end of file diff --git a/test/fixtures/client/cc73b5e3e28cce22bf8d644a68178b70.rack b/test/fixtures/client/cc73b5e3e28cce22bf8d644a68178b70.rack deleted file mode 100644 index 8fc95df4..00000000 --- a/test/fixtures/client/cc73b5e3e28cce22bf8d644a68178b70.rack +++ /dev/null @@ -1 +0,0 @@ -['/oauth/token', :post, 200, {"server"=>"nginx/0.7.65", "date"=>"Wed, 04 Jul 2012 10:00:19 GMT", "content-type"=>"application/json; charset=utf-8", "connection"=>"close", "content-length"=>"172", "x-podio-request-id"=>"0"}, '{"access_token":"efb7614007ae426481de69310ec14953","token_type":"bearer","ref":{"type":"user","id":4},"expires_in":28799,"refresh_token":"cdca6acfeb374598ba2790c9e5283b21"}'] \ No newline at end of file diff --git a/test/fixtures/client/eaa5ecfefb156b0a0bd29b3591786946.rack b/test/fixtures/client/eaa5ecfefb156b0a0bd29b3591786946.rack deleted file mode 100644 index 82585eca..00000000 --- a/test/fixtures/client/eaa5ecfefb156b0a0bd29b3591786946.rack +++ /dev/null @@ -1 +0,0 @@ -['/oauth/token', :post, 200, {"server"=>"nginx/0.7.65", "date"=>"Wed, 04 Jul 2012 10:00:19 GMT", "content-type"=>"application/json; charset=utf-8", "connection"=>"close", "content-length"=>"172", "x-podio-request-id"=>"0"}, '{"access_token":"34cb1a272d334db190a43fb518aac4b6","token_type":"bearer","ref":{"type":"user","id":5},"expires_in":28799,"refresh_token":"bada03ed9ffa4384800eb8b494b9ae90"}'] \ No newline at end of file diff --git a/test/fixtures/client/f5a56d9a7e19777642508edf80a45bc8.rack b/test/fixtures/client/f5a56d9a7e19777642508edf80a45bc8.rack deleted file mode 100644 index 6fd62047..00000000 --- a/test/fixtures/client/f5a56d9a7e19777642508edf80a45bc8.rack +++ /dev/null @@ -1 +0,0 @@ -['/oauth/token', :post, 200, {"server"=>"nginx/0.7.65", "date"=>"Wed, 04 Jul 2012 10:00:19 GMT", "content-type"=>"application/json; charset=utf-8", "connection"=>"close", "content-length"=>"172", "x-podio-request-id"=>"0"}, '{"access_token":"46a847b878cc402da932396049f40a5b","token_type":"bearer","ref":{"type":"user","id":5},"expires_in":28799,"refresh_token":"bada03ed9ffa4384800eb8b494b9ae90"}'] \ No newline at end of file diff --git a/test/test_helper.rb b/test/test_helper.rb index c2dc51ce..0abd7259 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -2,14 +2,10 @@ require 'podio' -ENABLE_STUBS = ENV['ENABLE_STUBS'] == 'true' -ENABLE_RECORD = ENV['ENABLE_RECORD'] == 'true' - class Test::Unit::TestCase def setup set_podio_client - stub_responses if ENABLE_STUBS end # test "verify something" do @@ -33,8 +29,7 @@ def set_podio_client :api_url => 'http://api-sandbox.podio.dev', :api_key => 'sandbox@podio.com', :api_secret => 'sandbox_secret', - :enable_stubs => ENABLE_STUBS && !ENABLE_RECORD, - :record_mode => ENABLE_RECORD, + :enable_stubs => true, :test_mode => true ) end @@ -47,24 +42,6 @@ def login_as(user_identifier) Podio.client.reset end - def stub_responses - folder_name = self.class.name.underscore.gsub('_test', '') - current_folder = File.join(File.dirname(__FILE__), 'fixtures', folder_name) - - if File.exists?(current_folder) - Dir.foreach(current_folder) do |filename| - next unless filename.include?('.rack') - - rack_response = eval(File.read(File.join(current_folder, filename))) - - url = rack_response.shift - method = rack_response.shift - - Podio.client.stubs.send(method, url) { rack_response } - end - end - end - def fixtures @fixtures ||= YAML.load_file(File.join(File.dirname(__FILE__), 'fixtures', 'fixtures.yaml')) end