5105: Add API stub helpers and basic ArvadosApiClient unit tests.
authorTom Clegg <tom@curoverse.com>
Thu, 5 Mar 2015 19:39:27 +0000 (14:39 -0500)
committerTom Clegg <tom@curoverse.com>
Thu, 5 Mar 2015 23:38:37 +0000 (18:38 -0500)
apps/workbench/test/test_helper.rb
apps/workbench/test/unit/arvados_api_client_test.rb [new file with mode: 0644]

index 078190bd32d0a02af56b59df5d28ad1556a511d8..335fcd0ee51b76fd04077cfbcbfc0bb39d381ced 100644 (file)
@@ -86,6 +86,32 @@ module ApiFixtureLoader
   end
 end
 
+module ApiMockHelpers
+  def self.included base
+    base.class_eval do
+      def stub_api_calls_with_body body, status_code=200
+        resp = mock
+        stubbed_client = ArvadosApiClient.new
+        stubbed_client.instance_eval do
+          resp.responds_like_instance_of HTTP::Message
+          resp.stubs(:content).returns body
+          resp.stubs(:status_code).returns status_code
+          @api_client = HTTPClient.new
+          @api_client.stubs(:post).returns resp
+        end
+        ArvadosApiClient.stubs(:new_or_current).returns(stubbed_client)
+      end
+
+      def stub_api_calls_with_invalid_json
+        stub_api_calls_with_body ']"omg,bogus"['
+      end
+    end
+  end
+end
+class ActiveSupport::TestCase
+  include ApiMockHelpers
+end
+
 class ActiveSupport::TestCase
   include ApiFixtureLoader
   def session_for api_client_auth_name
diff --git a/apps/workbench/test/unit/arvados_api_client_test.rb b/apps/workbench/test/unit/arvados_api_client_test.rb
new file mode 100644 (file)
index 0000000..a58a1ee
--- /dev/null
@@ -0,0 +1,20 @@
+require 'test_helper'
+
+class ArvadosApiClientTest < ActiveSupport::TestCase
+  test 'successful stubbed api request' do
+    stub_api_calls_with_body '{"foo":"bar","baz":0}'
+    use_token :active
+    resp = ArvadosApiClient.new_or_current.api Link, ''
+    assert_equal Hash, resp.class
+    assert_equal 'bar', resp[:foo]
+    assert_equal 0, resp[:baz]
+  end
+
+  test 'exception if server returns non-JSON' do
+    stub_api_calls_with_invalid_json
+    assert_raises ArvadosApiClient::InvalidApiResponseException do
+      use_token :active
+      resp = ArvadosApiClient.new_or_current.api Link, ''
+    end
+  end
+end