aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/test')
-rw-r--r--actionpack/test/abstract_unit.rb4
-rw-r--r--actionpack/test/controller/http/action_methods_test.rb19
-rw-r--r--actionpack/test/controller/http/conditional_get_test.rb55
-rw-r--r--actionpack/test/controller/http/data_streaming_test.rb27
-rw-r--r--actionpack/test/controller/http/force_ssl_test.rb20
-rw-r--r--actionpack/test/controller/http/redirect_to_test.rb19
-rw-r--r--actionpack/test/controller/http/renderers_test.rb37
-rw-r--r--actionpack/test/controller/http/url_for_test.rb20
8 files changed, 201 insertions, 0 deletions
diff --git a/actionpack/test/abstract_unit.rb b/actionpack/test/abstract_unit.rb
index b1a5356ddd..a05a816b71 100644
--- a/actionpack/test/abstract_unit.rb
+++ b/actionpack/test/abstract_unit.rb
@@ -293,6 +293,10 @@ module ActionController
end
end
+ class HTTP
+ include SharedTestRoutes.url_helpers
+ end
+
class TestCase
include ActionDispatch::TestProcess
diff --git a/actionpack/test/controller/http/action_methods_test.rb b/actionpack/test/controller/http/action_methods_test.rb
new file mode 100644
index 0000000000..20bb53aca2
--- /dev/null
+++ b/actionpack/test/controller/http/action_methods_test.rb
@@ -0,0 +1,19 @@
+require 'abstract_unit'
+
+class ActionMethodsHTTPController < ActionController::HTTP
+ def one; end
+ def two; end
+ hide_action :two
+end
+
+class ActionMethodsHTTPTest < ActiveSupport::TestCase
+ def setup
+ @controller = ActionMethodsHTTPController.new
+ end
+
+ def test_action_methods
+ assert_equal Set.new(%w(one)),
+ @controller.class.action_methods,
+ "#{@controller.controller_path} should not be empty!"
+ end
+end
diff --git a/actionpack/test/controller/http/conditional_get_test.rb b/actionpack/test/controller/http/conditional_get_test.rb
new file mode 100644
index 0000000000..70d5ef296f
--- /dev/null
+++ b/actionpack/test/controller/http/conditional_get_test.rb
@@ -0,0 +1,55 @@
+require 'abstract_unit'
+
+class ConditionalGetHTTPController < ActionController::HTTP
+ before_filter :handle_last_modified_and_etags, :only => :two
+
+ def one
+ if stale?(:last_modified => Time.now.utc.beginning_of_day, :etag => [:foo, 123])
+ render :text => "Hi!"
+ end
+ end
+
+ def two
+ render :text => "Hi!"
+ end
+
+ private
+
+ def handle_last_modified_and_etags
+ fresh_when(:last_modified => Time.now.utc.beginning_of_day, :etag => [ :foo, 123 ])
+ end
+end
+
+class ConditionalGetHTTPTest < ActionController::TestCase
+ tests ConditionalGetHTTPController
+
+ def setup
+ @last_modified = Time.now.utc.beginning_of_day.httpdate
+ end
+
+ def test_request_with_bang_gets_last_modified
+ get :two
+ assert_equal @last_modified, @response.headers['Last-Modified']
+ assert_response :success
+ end
+
+ def test_request_with_bang_obeys_last_modified
+ @request.if_modified_since = @last_modified
+ get :two
+ assert_response :not_modified
+ end
+
+ def test_last_modified_works_with_less_than_too
+ @request.if_modified_since = 5.years.ago.httpdate
+ get :two
+ assert_response :success
+ end
+
+ def test_request_not_modified
+ @request.if_modified_since = @last_modified
+ get :one
+ assert_equal 304, @response.status.to_i
+ assert_blank @response.body
+ assert_equal @last_modified, @response.headers['Last-Modified']
+ end
+end
diff --git a/actionpack/test/controller/http/data_streaming_test.rb b/actionpack/test/controller/http/data_streaming_test.rb
new file mode 100644
index 0000000000..67457b25b0
--- /dev/null
+++ b/actionpack/test/controller/http/data_streaming_test.rb
@@ -0,0 +1,27 @@
+require 'abstract_unit'
+
+module TestHTTPFileUtils
+ def file_name() File.basename(__FILE__) end
+ def file_path() File.expand_path(__FILE__) end
+ def file_data() @data ||= File.open(file_path, 'rb') { |f| f.read } end
+end
+
+class DataStreamingHTTPController < ActionController::HTTP
+ include TestHTTPFileUtils
+
+ def one; end
+ def two
+ send_data(file_data, {})
+ end
+end
+
+class DataStreamingHTTPTest < ActionController::TestCase
+ include TestHTTPFileUtils
+ tests DataStreamingHTTPController
+
+ def test_data
+ response = process('two')
+ assert_kind_of String, response.body
+ assert_equal file_data, response.body
+ end
+end
diff --git a/actionpack/test/controller/http/force_ssl_test.rb b/actionpack/test/controller/http/force_ssl_test.rb
new file mode 100644
index 0000000000..479ede6b78
--- /dev/null
+++ b/actionpack/test/controller/http/force_ssl_test.rb
@@ -0,0 +1,20 @@
+require 'abstract_unit'
+
+class ForceSSLHTTPController < ActionController::HTTP
+ force_ssl
+
+ def one; end
+ def two
+ head :ok
+ end
+end
+
+class ForceSSLHTTPTest < ActionController::TestCase
+ tests ForceSSLHTTPController
+
+ def test_banana_redirects_to_https
+ get :two
+ assert_response 301
+ assert_equal "https://test.host/force_sslhttp/two", redirect_to_url
+ end
+end
diff --git a/actionpack/test/controller/http/redirect_to_test.rb b/actionpack/test/controller/http/redirect_to_test.rb
new file mode 100644
index 0000000000..c410910bae
--- /dev/null
+++ b/actionpack/test/controller/http/redirect_to_test.rb
@@ -0,0 +1,19 @@
+require 'abstract_unit'
+
+class RedirectToHTTPController < ActionController::HTTP
+ def one
+ redirect_to :action => "two"
+ end
+
+ def two; end
+end
+
+class RedirectToHTTPTest < ActionController::TestCase
+ tests RedirectToHTTPController
+
+ def test_redirect_to
+ get :one
+ assert_response :redirect
+ assert_equal "http://test.host/redirect_to_http/two", redirect_to_url
+ end
+end
diff --git a/actionpack/test/controller/http/renderers_test.rb b/actionpack/test/controller/http/renderers_test.rb
new file mode 100644
index 0000000000..a28f226a94
--- /dev/null
+++ b/actionpack/test/controller/http/renderers_test.rb
@@ -0,0 +1,37 @@
+require 'abstract_unit'
+
+class Model
+ def to_json(options = {})
+ { :a => 'b' }.to_json(options)
+ end
+
+ def to_xml(options = {})
+ { :a => 'b' }.to_xml(options)
+ end
+end
+
+class RenderersHTTPController < ActionController::HTTP
+ def one
+ render :json => Model.new
+ end
+
+ def two
+ render :xml => Model.new
+ end
+end
+
+class RenderersHTTPTest < ActionController::TestCase
+ tests RenderersHTTPController
+
+ def test_render_json
+ get :one
+ assert_response :success
+ assert_equal({ :a => 'b' }.to_json, @response.body)
+ end
+
+ def test_render_xml
+ get :two
+ assert_response :success
+ assert_equal({ :a => 'b' }.to_xml, @response.body)
+ end
+end
diff --git a/actionpack/test/controller/http/url_for_test.rb b/actionpack/test/controller/http/url_for_test.rb
new file mode 100644
index 0000000000..fba24011a2
--- /dev/null
+++ b/actionpack/test/controller/http/url_for_test.rb
@@ -0,0 +1,20 @@
+require 'abstract_unit'
+
+class UrlForHTTPController < ActionController::HTTP
+ def one; end
+ def two; end
+end
+
+class UrlForHTTPTest < ActionController::TestCase
+ tests UrlForHTTPController
+
+ def setup
+ super
+ @request.host = 'www.example.com'
+ end
+
+ def test_url_for
+ get :one
+ assert_equal "http://www.example.com/url_for_http/one", @controller.url_for
+ end
+end