Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

suburi cucumber test.

Adds the features/uri-features test directory, testing sub-uri
deployment. These tests uses script/server since much of this code is
about configuring the server.  They are not run by "rake cucumber", to
run them use "bundle exec rake cucumber features/uri-test".

Tests requires a working app_config.yml setup with pod_url =
"http://localhost:3000/diaspora"

Patches cucumber.yml to always load step definitions from features/**, see
http://thoughtsincomputation.com/posts/cucumber-step-definitions-and-autorequire-hell
  • Loading branch information...
commit 8d218e78719eefd6d24a7c4e74f18cec7849a52b 1 parent c92f80b
leamas leamas authored Alec Leamas committed
1  config/application.rb
View
@@ -56,5 +56,6 @@ class Application < Rails::Application
config.filter_parameters += [:text]
config.filter_parameters += [:caption]
config.filter_parameters += [:bio]
+
end
end
4 config/cucumber.yml
View
@@ -3,6 +3,6 @@ rerun = File.file?('rerun.txt') ? IO.read('rerun.txt') : ""
rerun_opts = rerun.to_s.strip.empty? ? "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} features" : "--format #{ENV['CUCUMBER_FORMAT'] || 'pretty'} #{rerun}"
std_opts = "--format #{ENV['CUCUMBER_FORMAT'] || 'progress'} --strict --tags ~@wip"
%>
-default: <%= std_opts %> features
-wip: --tags @wip:3 --wip features
+default: <%= std_opts %> -r features
+wip: -r features --tags @wip:3 --wip features
rerun: <%= rerun_opts %> --format rerun --out rerun.txt --strict --tags ~@wip
4 config/environment.rb
View
@@ -6,6 +6,7 @@
require File.expand_path('../application', __FILE__)
Haml::Template.options[:format] = :html5
Haml::Template.options[:escape_html] = true
+ActionController::Base.config.relative_url_root = "/daspora"
if File.exists?(File.expand_path("./config/languages.yml"))
languages = YAML::load(File.open(File.expand_path("./config/languages.yml")))
@@ -24,6 +25,7 @@
LANGUAGE_CODES_MAP = {}
end
+#config.action_controller.relative_url_root = "/diaspora"
+
# Initialize the rails application
Diaspora::Application.initialize!
-
33 features/step_definitions/uri-step.rb
View
@@ -0,0 +1,33 @@
+Given /^configuration parameter (\w+) is ([^ ]+)$/ do |key, value|
+ require Rails.root.join('config', "initializers", "_load_app_config.rb")
+ app_value = AppConfig[ key.to_sym]
+ assert_equal value, app_value,
+ "You must set #{key} to #{value} and kill running server"
+end
+
+When /^I visit url ([^ ]+)$/ do |url|
+ visit( url)
+end
+
+Then /^I should find '([^']*)' in ([^ ]+)$/ do |pattern,file|
+ found = %x!fgrep -o #{pattern} #{file}!
+ assert_equal pattern, found.chomp, "Can't find pattern in #{file}"
+end
+
+Then /^I should match '([^']*)' in ([^ ]+)$/ do |pattern,file|
+ found = `egrep -o '#{pattern}' #{file}`
+ assert_match /#{pattern}/, found.chomp, "Can't find #{pattern} in #{file}"
+end
+
+When /^I retrieve ([^ ]+) into ([^ ]+)$/ do |url,file|
+ system( "wget -q -O #{file} #{url}")
+end
+
+Then /^a page\-asset should be ([^ ]+)$/ do |asset_path|
+ page.has_content?(asset_path)
+end
+
+
+
+
+
11 features/support/env.rb
View
@@ -71,3 +71,14 @@ def lpush(*args)
UserFixer.regenerate_user_fixtures
UserFixer.load_user_fixtures
end
+
+Before('@localserver') do
+ TestServerFixture.start_if_needed
+ CapybaraSettings.instance.save
+ Capybara.current_driver = :selenium
+ Capybara.run_server = false
+end
+
+After('@localserver') do
+ CapybaraSettings.instance.restore
+end
73 features/support/server.rb
View
@@ -0,0 +1,73 @@
+
+ENV["RAILS_ENV"] ||= "test"
+require File.expand_path(File.dirname(__FILE__) + '/../../config/environment')
+
+require 'timeout'
+require 'socket'
+require 'singleton'
+
+require 'capybara/rails'
+require 'capybara/cucumber'
+require 'capybara/session'
+
+class TestServerFixture
+# simple interface to script/server
+
+ def self.is_port_open(host, port, tries)
+ for i in (1..tries)
+ begin
+ Timeout::timeout(2) do
+ begin
+ s = TCPSocket.new(host, port)
+ s.close
+ return true
+ rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
+ sleep( 2)
+ end
+ end
+ rescue Timeout::Error
+ return false
+ end
+ end
+ return false
+ end
+
+ def self.start_if_needed
+ unless TestServerFixture.is_port_open( "localhost", 3000, 2)
+ system( "script/server -d")
+ if TestServerFixture.is_port_open( "localhost", 3000, 30)
+ puts "script/server started"
+ else
+ puts "Error: can't start script/server"
+ end
+ end
+ end
+
+end
+
+class CapybaraSettings
+# simple save/restore for Capybara
+
+ include Singleton
+
+ def save
+ begin
+ @run_server = Capybara.run_server
+ @driver = Capybara.current_driver
+ @host = Capybara.app_host
+ rescue => e
+ puts "Saving exception: " + e.inspect
+ end
+ end
+
+ def restore
+ begin
+ Capybara.current_driver = @driver
+ Capybara.app_host = @host
+ Capybara.run_server = @run_server
+ rescue => e
+ puts "Restore exception: " + e.inspect
+ end
+ end
+
+end
19 features/uri-tests/uri.feature
View
@@ -0,0 +1,19 @@
+@localserver
+Feature: Flexible uri deployment
+ To make it possible to use Diaspora on small home servers,
+ which might house also other sw, it should be possible to deploy
+ diaspora on a sub-uri such as http://example.org/diaspora.
+
+ Scenario: Serve webfinger request
+ Given configuration parameter pod_url is http://localhost:3000/diaspora
+ When I retrieve http://localhost:3000/.well-known/host-meta into tmp/host-meta
+ Then I should find 'http://localhost:3000/diaspora/webfinger?q={uri}' in tmp/host-meta
+
+ Scenario: Present application to user
+ Given configuration parameter pod_url is http://localhost:3000/diaspora
+ When I visit url http://localhost:3000/diaspora
+ And I retrieve http://localhost:3000/diaspora into tmp/index.html
+ Then I should see "put something in"
+ And a page-asset should be http://localhost:3000/diaspora/stylesheets/ui.css
+ And I should match 'http://localhost:3000/diaspora/stylesheets/blueprint/print.css.[0-9]+"' in tmp/index.html
+
1  lib/tasks/cucumber.rake
View
@@ -18,6 +18,7 @@ begin
t.binary = vendored_cucumber_bin # If nil, the gem's binary is used.
t.fork = true # You may get faster startup if you set this to false
t.profile = 'default'
+ t.cucumber_opts = "features --exclude features/uri-tests/*"
end
Cucumber::Rake::Task.new(:wip, 'Run features that are being worked on') do |t|

1 comment on commit 8d218e7

leamas
Collaborator

The changes in environment.rb are test garbage, cleared in next patch

Please sign in to comment.
Something went wrong with that request. Please try again.