sum 0.1.1
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/Capfile +3 -0
- data/MIT-LICENSE +18 -0
- data/README.markdown +69 -0
- data/Rakefile +56 -0
- data/config.ru +3 -0
- data/config/database.example.yml +10 -0
- data/config/deploy.example.rb +36 -0
- data/config/externals.yml +18 -0
- data/config/mail.example.yml +32 -0
- data/config/schedule.rb +20 -0
- data/db/migrate/001_users.rb +22 -0
- data/db/migrate/002_user_emails.rb +15 -0
- data/features/front_page.feature +15 -0
- data/features/read_email.feature +445 -0
- data/features/receive_email.feature +59 -0
- data/features/step_definitions/email.rb +52 -0
- data/features/step_definitions/given.rb +60 -0
- data/features/step_definitions/then.rb +36 -0
- data/features/step_definitions/when.rb +46 -0
- data/features/support/env.rb +38 -0
- data/features/support/helpers.rb +50 -0
- data/features/support/rspec.rb +11 -0
- data/features/support/webrat.rb +3 -0
- data/features/update_user.feature +83 -0
- data/gemspec.rb +45 -0
- data/lib/sum.rb +30 -0
- data/lib/sum/boot.rb +29 -0
- data/lib/sum/controller/cron.rb +12 -0
- data/lib/sum/controller/front.rb +6 -0
- data/lib/sum/controller/new.rb +15 -0
- data/lib/sum/helper/application.rb +8 -0
- data/lib/sum/helper/cron.rb +12 -0
- data/lib/sum/helper/new.rb +27 -0
- data/lib/sum/model/incoming_mail.rb +89 -0
- data/lib/sum/model/user.rb +298 -0
- data/lib/sum/model/user_email.rb +31 -0
- data/lib/sum/view/email.haml +70 -0
- data/lib/sum/view/field.haml +23 -0
- data/lib/sum/view/form.haml +13 -0
- data/lib/sum/view/front.haml +29 -0
- data/lib/sum/view/layout.haml +26 -0
- data/lib/sum/view/new.haml +5 -0
- data/lib/sum/view/success.haml +14 -0
- data/lib/sum/view/tos.haml +3 -0
- data/public/image/1.png +0 -0
- data/public/image/2.png +0 -0
- data/public/image/3.png +0 -0
- data/public/image/bg.png +0 -0
- data/public/image/bot.png +0 -0
- data/public/image/facebox/b.png +0 -0
- data/public/image/facebox/bl.png +0 -0
- data/public/image/facebox/br.png +0 -0
- data/public/image/facebox/closelabel.gif +0 -0
- data/public/image/facebox/loading.gif +0 -0
- data/public/image/facebox/tl.png +0 -0
- data/public/image/facebox/tr.png +0 -0
- data/public/image/favicon.png +0 -0
- data/public/image/field_off.png +0 -0
- data/public/image/field_on.png +0 -0
- data/public/image/ribbon.png +0 -0
- data/public/image/screenshot_receive.png +0 -0
- data/public/image/screenshot_send.png +0 -0
- data/public/image/submit.png +0 -0
- data/public/image/top.png +0 -0
- data/public/javascript/facebox.js +319 -0
- data/public/javascript/jquery-1.3.2.js +19 -0
- data/public/javascript/sum.js +13 -0
- data/public/style/facebox.css +95 -0
- data/public/style/ie.css +35 -0
- data/public/style/print.css +30 -0
- data/public/style/screen.css +256 -0
- data/public/style/sum.css +119 -0
- data/public/style/sum.less +159 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +59 -0
- data/spec/sum/model/incoming_mail_spec.rb +106 -0
- data/spec/sum/model/user_spec.rb +172 -0
- data/sum.gemspec +69 -0
- data/vendor/webrat/History.txt +358 -0
- data/vendor/webrat/MIT-LICENSE.txt +19 -0
- data/vendor/webrat/README.rdoc +85 -0
- data/vendor/webrat/Rakefile +200 -0
- data/vendor/webrat/install.rb +1 -0
- data/vendor/webrat/lib/webrat.rb +31 -0
- data/vendor/webrat/lib/webrat/core.rb +14 -0
- data/vendor/webrat/lib/webrat/core/configuration.rb +102 -0
- data/vendor/webrat/lib/webrat/core/elements/area.rb +31 -0
- data/vendor/webrat/lib/webrat/core/elements/element.rb +33 -0
- data/vendor/webrat/lib/webrat/core/elements/field.rb +409 -0
- data/vendor/webrat/lib/webrat/core/elements/form.rb +103 -0
- data/vendor/webrat/lib/webrat/core/elements/label.rb +31 -0
- data/vendor/webrat/lib/webrat/core/elements/link.rb +93 -0
- data/vendor/webrat/lib/webrat/core/elements/select_option.rb +35 -0
- data/vendor/webrat/lib/webrat/core/locators.rb +20 -0
- data/vendor/webrat/lib/webrat/core/locators/area_locator.rb +38 -0
- data/vendor/webrat/lib/webrat/core/locators/button_locator.rb +54 -0
- data/vendor/webrat/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
- data/vendor/webrat/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
- data/vendor/webrat/lib/webrat/core/locators/field_locator.rb +25 -0
- data/vendor/webrat/lib/webrat/core/locators/field_named_locator.rb +41 -0
- data/vendor/webrat/lib/webrat/core/locators/form_locator.rb +19 -0
- data/vendor/webrat/lib/webrat/core/locators/label_locator.rb +34 -0
- data/vendor/webrat/lib/webrat/core/locators/link_locator.rb +74 -0
- data/vendor/webrat/lib/webrat/core/locators/locator.rb +20 -0
- data/vendor/webrat/lib/webrat/core/locators/select_option_locator.rb +59 -0
- data/vendor/webrat/lib/webrat/core/logging.rb +24 -0
- data/vendor/webrat/lib/webrat/core/matchers.rb +4 -0
- data/vendor/webrat/lib/webrat/core/matchers/have_content.rb +73 -0
- data/vendor/webrat/lib/webrat/core/matchers/have_selector.rb +74 -0
- data/vendor/webrat/lib/webrat/core/matchers/have_tag.rb +21 -0
- data/vendor/webrat/lib/webrat/core/matchers/have_xpath.rb +147 -0
- data/vendor/webrat/lib/webrat/core/methods.rb +63 -0
- data/vendor/webrat/lib/webrat/core/mime.rb +29 -0
- data/vendor/webrat/lib/webrat/core/save_and_open_page.rb +48 -0
- data/vendor/webrat/lib/webrat/core/scope.rb +350 -0
- data/vendor/webrat/lib/webrat/core/session.rb +299 -0
- data/vendor/webrat/lib/webrat/core/xml.rb +115 -0
- data/vendor/webrat/lib/webrat/core/xml/hpricot.rb +19 -0
- data/vendor/webrat/lib/webrat/core/xml/nokogiri.rb +76 -0
- data/vendor/webrat/lib/webrat/core/xml/rexml.rb +24 -0
- data/vendor/webrat/lib/webrat/core_extensions/blank.rb +58 -0
- data/vendor/webrat/lib/webrat/core_extensions/deprecate.rb +8 -0
- data/vendor/webrat/lib/webrat/core_extensions/detect_mapped.rb +12 -0
- data/vendor/webrat/lib/webrat/core_extensions/meta_class.rb +6 -0
- data/vendor/webrat/lib/webrat/core_extensions/nil_to_param.rb +5 -0
- data/vendor/webrat/lib/webrat/core_extensions/tcp_socket.rb +27 -0
- data/vendor/webrat/lib/webrat/mechanize.rb +74 -0
- data/vendor/webrat/lib/webrat/merb.rb +9 -0
- data/vendor/webrat/lib/webrat/merb_multipart_support.rb +27 -0
- data/vendor/webrat/lib/webrat/merb_session.rb +82 -0
- data/vendor/webrat/lib/webrat/rack.rb +25 -0
- data/vendor/webrat/lib/webrat/rails.rb +106 -0
- data/vendor/webrat/lib/webrat/rspec-rails.rb +10 -0
- data/vendor/webrat/lib/webrat/selenium.rb +81 -0
- data/vendor/webrat/lib/webrat/selenium/application_server_factory.rb +40 -0
- data/vendor/webrat/lib/webrat/selenium/application_servers.rb +5 -0
- data/vendor/webrat/lib/webrat/selenium/application_servers/base.rb +46 -0
- data/vendor/webrat/lib/webrat/selenium/application_servers/external.rb +26 -0
- data/vendor/webrat/lib/webrat/selenium/application_servers/merb.rb +50 -0
- data/vendor/webrat/lib/webrat/selenium/application_servers/rails.rb +44 -0
- data/vendor/webrat/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
- data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/button.js +19 -0
- data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/label.js +16 -0
- data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webrat.js +5 -0
- data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webratlink.js +12 -0
- data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
- data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
- data/vendor/webrat/lib/webrat/selenium/matchers.rb +4 -0
- data/vendor/webrat/lib/webrat/selenium/matchers/have_content.rb +66 -0
- data/vendor/webrat/lib/webrat/selenium/matchers/have_selector.rb +49 -0
- data/vendor/webrat/lib/webrat/selenium/matchers/have_tag.rb +72 -0
- data/vendor/webrat/lib/webrat/selenium/matchers/have_xpath.rb +45 -0
- data/vendor/webrat/lib/webrat/selenium/selenium_extensions.js +6 -0
- data/vendor/webrat/lib/webrat/selenium/selenium_rc_server.rb +84 -0
- data/vendor/webrat/lib/webrat/selenium/selenium_session.rb +248 -0
- data/vendor/webrat/lib/webrat/selenium/silence_stream.rb +18 -0
- data/vendor/webrat/lib/webrat/sinatra.rb +11 -0
- data/vendor/webrat/spec/fakes/test_session.rb +34 -0
- data/vendor/webrat/spec/integration/merb/Rakefile +35 -0
- data/vendor/webrat/spec/integration/merb/app/controllers/application.rb +2 -0
- data/vendor/webrat/spec/integration/merb/app/controllers/exceptions.rb +13 -0
- data/vendor/webrat/spec/integration/merb/app/controllers/testing.rb +27 -0
- data/vendor/webrat/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
- data/vendor/webrat/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
- data/vendor/webrat/spec/integration/merb/app/views/layout/application.html.erb +12 -0
- data/vendor/webrat/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
- data/vendor/webrat/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
- data/vendor/webrat/spec/integration/merb/config/environments/development.rb +15 -0
- data/vendor/webrat/spec/integration/merb/config/environments/rake.rb +11 -0
- data/vendor/webrat/spec/integration/merb/config/environments/test.rb +14 -0
- data/vendor/webrat/spec/integration/merb/config/init.rb +25 -0
- data/vendor/webrat/spec/integration/merb/config/rack.rb +11 -0
- data/vendor/webrat/spec/integration/merb/config/router.rb +34 -0
- data/vendor/webrat/spec/integration/merb/spec/spec.opts +1 -0
- data/vendor/webrat/spec/integration/merb/spec/spec_helper.rb +24 -0
- data/vendor/webrat/spec/integration/merb/spec/webrat_spec.rb +39 -0
- data/vendor/webrat/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
- data/vendor/webrat/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
- data/vendor/webrat/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
- data/vendor/webrat/spec/integration/merb/tasks/merb.thor/main.thor +150 -0
- data/vendor/webrat/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
- data/vendor/webrat/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
- data/vendor/webrat/spec/integration/rack/Rakefile +5 -0
- data/vendor/webrat/spec/integration/rack/app.rb +73 -0
- data/vendor/webrat/spec/integration/rack/test/helper.rb +20 -0
- data/vendor/webrat/spec/integration/rack/test/webrat_rack_test.rb +62 -0
- data/vendor/webrat/spec/integration/rails/Rakefile +30 -0
- data/vendor/webrat/spec/integration/rails/app/controllers/application.rb +15 -0
- data/vendor/webrat/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
- data/vendor/webrat/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
- data/vendor/webrat/spec/integration/rails/app/controllers/links_controller.rb +7 -0
- data/vendor/webrat/spec/integration/rails/app/controllers/webrat_controller.rb +43 -0
- data/vendor/webrat/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
- data/vendor/webrat/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
- data/vendor/webrat/spec/integration/rails/app/helpers/links_helper.rb +2 -0
- data/vendor/webrat/spec/integration/rails/app/views/buttons/show.html.erb +11 -0
- data/vendor/webrat/spec/integration/rails/app/views/fields/show.html.erb +9 -0
- data/vendor/webrat/spec/integration/rails/app/views/links/show.html.erb +5 -0
- data/vendor/webrat/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
- data/vendor/webrat/spec/integration/rails/app/views/webrat/buttons.html.erb +11 -0
- data/vendor/webrat/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
- data/vendor/webrat/spec/integration/rails/config/boot.rb +109 -0
- data/vendor/webrat/spec/integration/rails/config/environment.rb +12 -0
- data/vendor/webrat/spec/integration/rails/config/environments/development.rb +17 -0
- data/vendor/webrat/spec/integration/rails/config/environments/selenium.rb +22 -0
- data/vendor/webrat/spec/integration/rails/config/environments/test.rb +22 -0
- data/vendor/webrat/spec/integration/rails/config/initializers/inflections.rb +10 -0
- data/vendor/webrat/spec/integration/rails/config/initializers/mime_types.rb +5 -0
- data/vendor/webrat/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
- data/vendor/webrat/spec/integration/rails/config/locales/en.yml +5 -0
- data/vendor/webrat/spec/integration/rails/config/routes.rb +18 -0
- data/vendor/webrat/spec/integration/rails/public/404.html +30 -0
- data/vendor/webrat/spec/integration/rails/public/422.html +30 -0
- data/vendor/webrat/spec/integration/rails/public/500.html +33 -0
- data/vendor/webrat/spec/integration/rails/script/about +4 -0
- data/vendor/webrat/spec/integration/rails/script/console +3 -0
- data/vendor/webrat/spec/integration/rails/script/dbconsole +3 -0
- data/vendor/webrat/spec/integration/rails/script/destroy +3 -0
- data/vendor/webrat/spec/integration/rails/script/generate +3 -0
- data/vendor/webrat/spec/integration/rails/script/performance/benchmarker +3 -0
- data/vendor/webrat/spec/integration/rails/script/performance/profiler +3 -0
- data/vendor/webrat/spec/integration/rails/script/performance/request +3 -0
- data/vendor/webrat/spec/integration/rails/script/plugin +3 -0
- data/vendor/webrat/spec/integration/rails/script/process/inspector +3 -0
- data/vendor/webrat/spec/integration/rails/script/process/reaper +3 -0
- data/vendor/webrat/spec/integration/rails/script/process/spawner +3 -0
- data/vendor/webrat/spec/integration/rails/script/runner +3 -0
- data/vendor/webrat/spec/integration/rails/script/server +3 -0
- data/vendor/webrat/spec/integration/rails/test/integration/button_click_test.rb +80 -0
- data/vendor/webrat/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
- data/vendor/webrat/spec/integration/rails/test/integration/link_click_test.rb +27 -0
- data/vendor/webrat/spec/integration/rails/test/integration/webrat_test.rb +97 -0
- data/vendor/webrat/spec/integration/rails/test/test_helper.rb +25 -0
- data/vendor/webrat/spec/integration/sinatra/Rakefile +5 -0
- data/vendor/webrat/spec/integration/sinatra/classic_app.rb +64 -0
- data/vendor/webrat/spec/integration/sinatra/modular_app.rb +16 -0
- data/vendor/webrat/spec/integration/sinatra/test/classic_app_test.rb +37 -0
- data/vendor/webrat/spec/integration/sinatra/test/modular_app_test.rb +18 -0
- data/vendor/webrat/spec/integration/sinatra/test/test_helper.rb +16 -0
- data/vendor/webrat/spec/private/core/configuration_spec.rb +116 -0
- data/vendor/webrat/spec/private/core/field_spec.rb +85 -0
- data/vendor/webrat/spec/private/core/link_spec.rb +24 -0
- data/vendor/webrat/spec/private/core/logging_spec.rb +10 -0
- data/vendor/webrat/spec/private/core/session_spec.rb +195 -0
- data/vendor/webrat/spec/private/mechanize/mechanize_session_spec.rb +81 -0
- data/vendor/webrat/spec/private/merb/attaches_file_spec.rb +93 -0
- data/vendor/webrat/spec/private/merb/merb_session_spec.rb +61 -0
- data/vendor/webrat/spec/private/nokogiri_spec.rb +77 -0
- data/vendor/webrat/spec/private/rails/attaches_file_spec.rb +81 -0
- data/vendor/webrat/spec/private/rails/rails_session_spec.rb +112 -0
- data/vendor/webrat/spec/private/selenium/application_servers/rails_spec.rb +26 -0
- data/vendor/webrat/spec/public/basic_auth_spec.rb +24 -0
- data/vendor/webrat/spec/public/check_spec.rb +191 -0
- data/vendor/webrat/spec/public/choose_spec.rb +118 -0
- data/vendor/webrat/spec/public/click_area_spec.rb +106 -0
- data/vendor/webrat/spec/public/click_button_spec.rb +496 -0
- data/vendor/webrat/spec/public/click_link_spec.rb +511 -0
- data/vendor/webrat/spec/public/fill_in_spec.rb +209 -0
- data/vendor/webrat/spec/public/locators/field_by_xpath_spec.rb +19 -0
- data/vendor/webrat/spec/public/locators/field_labeled_spec.rb +172 -0
- data/vendor/webrat/spec/public/locators/field_with_id_spec.rb +16 -0
- data/vendor/webrat/spec/public/matchers/contain_spec.rb +114 -0
- data/vendor/webrat/spec/public/matchers/have_selector_spec.rb +142 -0
- data/vendor/webrat/spec/public/matchers/have_tag_spec.rb +39 -0
- data/vendor/webrat/spec/public/matchers/have_xpath_spec.rb +136 -0
- data/vendor/webrat/spec/public/reload_spec.rb +10 -0
- data/vendor/webrat/spec/public/save_and_open_spec.rb +70 -0
- data/vendor/webrat/spec/public/select_date_spec.rb +112 -0
- data/vendor/webrat/spec/public/select_datetime_spec.rb +137 -0
- data/vendor/webrat/spec/public/select_spec.rb +249 -0
- data/vendor/webrat/spec/public/select_time_spec.rb +100 -0
- data/vendor/webrat/spec/public/selenium/application_server_factory_spec.rb +49 -0
- data/vendor/webrat/spec/public/selenium/application_servers/external_spec.rb +12 -0
- data/vendor/webrat/spec/public/selenium/selenium_session_spec.rb +37 -0
- data/vendor/webrat/spec/public/set_hidden_field_spec.rb +5 -0
- data/vendor/webrat/spec/public/submit_form_spec.rb +5 -0
- data/vendor/webrat/spec/public/visit_spec.rb +58 -0
- data/vendor/webrat/spec/public/within_spec.rb +177 -0
- data/vendor/webrat/spec/rcov.opts +1 -0
- data/vendor/webrat/spec/spec.opts +2 -0
- data/vendor/webrat/spec/spec_helper.rb +50 -0
- metadata +474 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
|
|
2
|
+
|
|
3
|
+
describe Webrat::Link do
|
|
4
|
+
# include Webrat::Link
|
|
5
|
+
|
|
6
|
+
before do
|
|
7
|
+
webrat_session = mock(Webrat::TestSession)
|
|
8
|
+
@link_text_with_nbsp = 'Link' + [0xA0].pack("U") + 'Text'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should pass through relative urls" do
|
|
12
|
+
link = Webrat::Link.new(webrat_session, {"href" => "/path"})
|
|
13
|
+
webrat_session.should_receive(:request_page).with("/path", :get, {})
|
|
14
|
+
link.click
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it "shouldnt put base url onto " do
|
|
18
|
+
url = "https://www.example.com/path"
|
|
19
|
+
webrat_session.should_receive(:request_page).with(url, :get, {})
|
|
20
|
+
link = Webrat::Link.new(webrat_session, {"href" => url})
|
|
21
|
+
link.click
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
|
|
2
|
+
|
|
3
|
+
describe Webrat::Session do
|
|
4
|
+
|
|
5
|
+
it "should not have a doc_root" do
|
|
6
|
+
session = Webrat::Session.new
|
|
7
|
+
session.doc_root.should be_nil
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should expose the current_dom" do
|
|
11
|
+
session = Webrat::Session.new
|
|
12
|
+
|
|
13
|
+
def session.response
|
|
14
|
+
Object.new
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def session.response_body
|
|
18
|
+
"<html></html>"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
session.should respond_to(:current_dom)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should provide a current_page for backwards compatibility" do
|
|
25
|
+
session = Webrat::Session.new
|
|
26
|
+
current_page = session.current_page
|
|
27
|
+
current_page.should_not be_nil
|
|
28
|
+
current_page.should respond_to(:url)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should allow custom headers to be set" do
|
|
32
|
+
session = Webrat::Session.new
|
|
33
|
+
session.header('Accept', 'application/xml')
|
|
34
|
+
|
|
35
|
+
session.instance_variable_get(:@custom_headers)['Accept'].should == 'application/xml'
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "should return a copy of the headers to be sent" do
|
|
39
|
+
session = Webrat::Session.new
|
|
40
|
+
session.instance_eval {
|
|
41
|
+
@default_headers = {'HTTP_X_FORWARDED_FOR' => '192.168.1.1'}
|
|
42
|
+
@custom_headers = {'Accept' => 'application/xml'}
|
|
43
|
+
}
|
|
44
|
+
session.headers.should == {'HTTP_X_FORWARDED_FOR' => '192.168.1.1', 'Accept' => 'application/xml'}
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
describe "#http_accept" do
|
|
48
|
+
before(:each) do
|
|
49
|
+
webrat_session = Webrat::Session.new
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "should set the Accept header with the string Mime type" do
|
|
53
|
+
webrat_session.http_accept('application/xml')
|
|
54
|
+
webrat_session.headers['Accept'].should == 'application/xml'
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "should set the Accept head with the string value of the symbol Mime type" do
|
|
58
|
+
webrat_session.http_accept(:xml)
|
|
59
|
+
webrat_session.headers['Accept'].should == 'application/xml'
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "should raise an error if a symbol Mime type is passed that does not exist" do
|
|
63
|
+
lambda { webrat_session.http_accept(:oogabooga) }.should raise_error(ArgumentError)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
describe "#request_page" do
|
|
68
|
+
before(:each) do
|
|
69
|
+
webrat_session = Webrat::Session.new
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it "should raise an error if the request is not a success" do
|
|
73
|
+
webrat_session.stub!(:get)
|
|
74
|
+
webrat_session.stub!(:response_body => "Exception caught")
|
|
75
|
+
webrat_session.stub!(:response_code => 500)
|
|
76
|
+
webrat_session.stub!(:formatted_error => "application error")
|
|
77
|
+
webrat_session.stub!(:save_and_open_page)
|
|
78
|
+
|
|
79
|
+
lambda { webrat_session.request_page('some url', :get, {}) }.should raise_error(Webrat::PageLoadError)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it "should raise an error but not open if the request is not a success and config quashes save_and_open" do
|
|
83
|
+
Webrat.configure do |config|
|
|
84
|
+
config.open_error_files = false
|
|
85
|
+
end
|
|
86
|
+
webrat_session.stub!(:get)
|
|
87
|
+
webrat_session.stub!(:response_body => "Exception caught")
|
|
88
|
+
webrat_session.stub!(:response_code => 500)
|
|
89
|
+
webrat_session.stub!(:formatted_error => "application error")
|
|
90
|
+
webrat_session.should_not_receive(:save_and_open_page)
|
|
91
|
+
|
|
92
|
+
lambda { webrat_session.request_page('some url', :get, {}) }.should raise_error(Webrat::PageLoadError)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it "should now follow external redirects" do
|
|
96
|
+
webrat_session.should_receive(:internal_redirect?).and_return(false)
|
|
97
|
+
|
|
98
|
+
webrat_session.request_page("/oldurl", :get, {})
|
|
99
|
+
|
|
100
|
+
webrat_session.current_url.should == "/oldurl"
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
describe "#redirect?" do
|
|
105
|
+
before(:each) do
|
|
106
|
+
webrat_session = Webrat::Session.new
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
it "should return true if the last response was a redirect and Fixnum#/ returns a Rational" do
|
|
110
|
+
# This happens if the ruby-units gem has been required
|
|
111
|
+
Fixnum.class_eval do
|
|
112
|
+
alias_method :original_divide, "/".to_sym
|
|
113
|
+
|
|
114
|
+
def /(other)
|
|
115
|
+
Rational(self, other)
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
webrat_session.stub!(:response_code => 301)
|
|
120
|
+
webrat_session.redirect?.should be_true
|
|
121
|
+
|
|
122
|
+
Fixnum.class_eval do
|
|
123
|
+
alias_method "/".to_sym, :original_divide
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it "should return true if the last response was a redirect" do
|
|
128
|
+
webrat_session.stub!(:response_code => 301)
|
|
129
|
+
webrat_session.redirect?.should be_true
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it "should return false if the last response wasn't a redirect" do
|
|
133
|
+
webrat_session.stub!(:response_code => 200)
|
|
134
|
+
webrat_session.redirect?.should be_false
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
describe "#internal_redirect?" do
|
|
139
|
+
before(:each) do
|
|
140
|
+
webrat_session = Webrat::Session.new
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
it "should return true if the last response was a redirect and the host of the current_url matches that of the response location" do
|
|
144
|
+
webrat_session.stub!(:redirect? => true)
|
|
145
|
+
webrat_session.stub!(:current_url => "http://example.com")
|
|
146
|
+
webrat_session.stub!(:response_location => "http://example.com")
|
|
147
|
+
webrat_session.internal_redirect?.should be_true
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
it "should return true if the last response was a redirect and the hosts are the same but the subdomains are different" do
|
|
151
|
+
webrat_session.stub!(:redirect? => true)
|
|
152
|
+
webrat_session.stub!(:current_url => "http://example.com")
|
|
153
|
+
webrat_session.stub!(:response_location => "http://myName.example.com")
|
|
154
|
+
webrat_session.internal_redirect?.should be_true
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
it "should return false if the last response was not a redirect" do
|
|
158
|
+
webrat_session.stub!(:redirect? => false)
|
|
159
|
+
webrat_session.internal_redirect?.should be_false
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it "should return false if the last response was a redirect but the host of the current_url doesn't matches that of the response location" do
|
|
163
|
+
webrat_session.stub!(:redirect? => true)
|
|
164
|
+
webrat_session.stub!(:current_url => "http://example.com")
|
|
165
|
+
webrat_session.stub!(:response_location => "http://google.com")
|
|
166
|
+
webrat_session.internal_redirect?.should be_false
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
it "should return false if the last response was a redirect but the host of the current_url doesn't matches that of the response location, but they have the same subdomain" do
|
|
170
|
+
webrat_session.stub!(:redirect? => true)
|
|
171
|
+
webrat_session.stub!(:current_url => "http://login.example.com")
|
|
172
|
+
webrat_session.stub!(:response_location => "http://login.google.com")
|
|
173
|
+
webrat_session.internal_redirect?.should be_false
|
|
174
|
+
end
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
describe "#redirected_to" do
|
|
178
|
+
before(:each) do
|
|
179
|
+
webrat_session = Webrat::Session.new
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
it "should return nil if not redirected" do
|
|
183
|
+
webrat_session.stub!(:redirect? => false)
|
|
184
|
+
webrat_session.redirected_to.should be_nil
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
it "should return the response_location if redirected" do
|
|
188
|
+
webrat_session.stub!(:redirect? => true)
|
|
189
|
+
webrat_session.stub!(:response_location => "http://www.example.com")
|
|
190
|
+
webrat_session.redirected_to.should == "http://www.example.com"
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
|
2
|
+
|
|
3
|
+
require "webrat/mechanize"
|
|
4
|
+
|
|
5
|
+
describe Webrat::MechanizeSession do
|
|
6
|
+
before :each do
|
|
7
|
+
Webrat.configuration.mode = :mechanize
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
before(:each) do
|
|
11
|
+
@mech = Webrat::MechanizeSession.new
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
describe "headers method" do
|
|
15
|
+
it "should return empty headers for a newly initialized session" do
|
|
16
|
+
@mech.headers.should == {}
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
describe "post" do
|
|
21
|
+
def url
|
|
22
|
+
'http://test.host/users'
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def data
|
|
26
|
+
{:user => {:first_name => 'Nancy', :last_name => 'Callahan'}}
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def flattened_data
|
|
30
|
+
{'user[first_name]' => 'Nancy', 'user[last_name]' => 'Callahan'}
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "should flatten model post data" do
|
|
34
|
+
mechanize = mock(:mechanize)
|
|
35
|
+
WWW::Mechanize.stub!(:new => mechanize)
|
|
36
|
+
mechanize.should_receive(:post).with(url, flattened_data)
|
|
37
|
+
Webrat::MechanizeSession.new.post(url, data)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
describe "#absolute_url" do
|
|
42
|
+
before(:each) do
|
|
43
|
+
@session = Webrat::MechanizeSession.new
|
|
44
|
+
@session.stub!(:current_url).and_return(absolute_url)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def absolute_url
|
|
48
|
+
'http://test.host/users/fred/cabbages'
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def rooted_url
|
|
52
|
+
'/users/fred/cabbages'
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def relative_url
|
|
56
|
+
'../../wilma'
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "should return unmodified url if prefixed with scheme" do
|
|
60
|
+
@session.absolute_url(absolute_url).should == absolute_url
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it "should prefix scheme and hostname if url begins with /" do
|
|
64
|
+
@session.absolute_url(rooted_url).should == absolute_url
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "should resolve sibling URLs relative to current path" do
|
|
68
|
+
@session.absolute_url(relative_url).should == 'http://test.host/users/wilma'
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it "should cope with sibling URLs from root of site" do
|
|
72
|
+
@session.stub!(:current_url).and_return('http://test.host')
|
|
73
|
+
@session.absolute_url(relative_url).should == 'http://test.host/wilma'
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it "should cope with https" do
|
|
77
|
+
@session.stub!(:current_url).and_return('https://test.host')
|
|
78
|
+
@session.absolute_url(relative_url).should == 'https://test.host/wilma'
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
|
2
|
+
|
|
3
|
+
describe "attach_file with merb" do
|
|
4
|
+
before do
|
|
5
|
+
Webrat.configuration.mode = :merb
|
|
6
|
+
@filename = __FILE__
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
it "should fail if no file field found" do
|
|
10
|
+
with_html <<-HTML
|
|
11
|
+
<html>
|
|
12
|
+
<form method="post" action="/widgets">
|
|
13
|
+
</form>
|
|
14
|
+
</html>
|
|
15
|
+
HTML
|
|
16
|
+
lambda { attach_file("Doc", "/some/path") }.should raise_error(Webrat::NotFoundError)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "should submit empty strings for blank file fields" do
|
|
20
|
+
with_html <<-HTML
|
|
21
|
+
<html>
|
|
22
|
+
<form method="post" action="/widgets">
|
|
23
|
+
<input type="file" id="widget_file" name="widget[file]" />
|
|
24
|
+
<input type="submit" />
|
|
25
|
+
</form>
|
|
26
|
+
</html>
|
|
27
|
+
HTML
|
|
28
|
+
webrat_session.should_receive(:post).with("/widgets", { "widget" => { "file" => "" } })
|
|
29
|
+
click_button
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it "should submit the attached file" do
|
|
33
|
+
with_html <<-HTML
|
|
34
|
+
<html>
|
|
35
|
+
<form method="post" action="/widgets">
|
|
36
|
+
<label for="widget_file">Document</label>
|
|
37
|
+
<input type="file" id="widget_file" name="widget[file]" />
|
|
38
|
+
<input type="submit" />
|
|
39
|
+
</form>
|
|
40
|
+
</html>
|
|
41
|
+
HTML
|
|
42
|
+
webrat_session.should_receive(:post).with { |path, params|
|
|
43
|
+
path.should == "/widgets"
|
|
44
|
+
params.should have_key("widget")
|
|
45
|
+
params["widget"].should have_key("file")
|
|
46
|
+
params["widget"]["file"].should be_an_instance_of(File)
|
|
47
|
+
params["widget"]["file"].path.should == @filename
|
|
48
|
+
}
|
|
49
|
+
attach_file "Document", @filename
|
|
50
|
+
click_button
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should support collections" do
|
|
54
|
+
with_html <<-HTML
|
|
55
|
+
<html>
|
|
56
|
+
<form method="post" action="/widgets">
|
|
57
|
+
<label for="widget_file1">Document</label>
|
|
58
|
+
<input type="file" id="widget_file1" name="widget[files][]" />
|
|
59
|
+
<label for="widget_file2">Spreadsheet</label>
|
|
60
|
+
<input type="file" id="widget_file2" name="widget[files][]" />
|
|
61
|
+
<input type="submit" />
|
|
62
|
+
</form>
|
|
63
|
+
</html>
|
|
64
|
+
HTML
|
|
65
|
+
webrat_session.should_receive(:post).with { |path, params|
|
|
66
|
+
path.should == "/widgets"
|
|
67
|
+
params.should have_key("widget")
|
|
68
|
+
params["widget"].should have_key("files")
|
|
69
|
+
params["widget"]["files"][0].should be_an_instance_of(File)
|
|
70
|
+
params["widget"]["files"][0].path.should == @filename
|
|
71
|
+
params["widget"]["files"][1].should be_an_instance_of(File)
|
|
72
|
+
params["widget"]["files"][1].path.should == @filename
|
|
73
|
+
}
|
|
74
|
+
attach_file "Document", @filename
|
|
75
|
+
attach_file "Spreadsheet", @filename
|
|
76
|
+
click_button
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
xit "should allow the content type to be specified" do
|
|
80
|
+
with_html <<-HTML
|
|
81
|
+
<html>
|
|
82
|
+
<form method="post" action="/widgets">
|
|
83
|
+
<label for="person_picture">Picture</label>
|
|
84
|
+
<input type="file" id="person_picture" name="person[picture]" />
|
|
85
|
+
<input type="submit" />
|
|
86
|
+
</form>
|
|
87
|
+
</html>
|
|
88
|
+
HTML
|
|
89
|
+
ActionController::TestUploadedFile.should_receive(:new).with(@filename, "image/png").any_number_of_times
|
|
90
|
+
attach_file "Picture", @filename, "image/png"
|
|
91
|
+
click_button
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
|
|
2
|
+
|
|
3
|
+
require "webrat/merb"
|
|
4
|
+
|
|
5
|
+
describe Webrat::MerbSession do
|
|
6
|
+
it "should not pass empty params if data is and empty hash" do
|
|
7
|
+
session = Webrat::MerbSession.new
|
|
8
|
+
response = OpenStruct.new
|
|
9
|
+
response.status = 200
|
|
10
|
+
session.should_receive(:request).with('url', {:params=> nil, :method=>"GET", :headers=>nil}).and_return(response)
|
|
11
|
+
session.get('url', {}, nil)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
%w{post put delete}.each do |request_method|
|
|
15
|
+
it "should call do request with method #{request_method.upcase} for a #{request_method} call" do
|
|
16
|
+
session = Webrat::MerbSession.new
|
|
17
|
+
response = OpenStruct.new
|
|
18
|
+
response.status = 200
|
|
19
|
+
|
|
20
|
+
session.should_receive(:request).with('url', {:params=>nil, :method=>request_method.upcase, :headers=>nil}).and_return(response)
|
|
21
|
+
session.send(request_method, 'url', {}, nil)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
%w{post put}.each do |request_method|
|
|
26
|
+
it "should call do request with method #{request_method.upcase} with a file attachment" do
|
|
27
|
+
session = Webrat::MerbSession.new
|
|
28
|
+
response = OpenStruct.new
|
|
29
|
+
response.status = 200
|
|
30
|
+
|
|
31
|
+
file = File.new(__FILE__)
|
|
32
|
+
session.should_receive(:request).with { |path, env|
|
|
33
|
+
path.should == "url"
|
|
34
|
+
env[:method].should == request_method.upcase
|
|
35
|
+
env[:headers].should be_nil
|
|
36
|
+
env[:input].should be_an_instance_of(StringIO)
|
|
37
|
+
env["CONTENT_LENGTH"].should be_an_instance_of(Fixnum)
|
|
38
|
+
env["CONTENT_TYPE"].should match(/multipart.*boundary/)
|
|
39
|
+
}.and_return(response)
|
|
40
|
+
session.send(request_method, 'url', { :file => file }, nil)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context "a session with a response" do
|
|
45
|
+
before do
|
|
46
|
+
@session = Webrat::MerbSession.new
|
|
47
|
+
@response = OpenStruct.new
|
|
48
|
+
@response.status = 200
|
|
49
|
+
@response.body = 'test response'
|
|
50
|
+
@session.instance_variable_set(:@response, @response)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should return body of a request as a response_body" do
|
|
54
|
+
@session.response_body.should == @response.body
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it "should return status of a request as a response_code" do
|
|
58
|
+
@session.response_code.should == @response.status
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|