apache-config-generator/spec/apache/rewrites_spec.rb
2011-01-11 16:34:52 -05:00

141 lines
3.4 KiB
Ruby

require 'spec_helper'
require 'apache/config'
describe Apache::Config, "rewrites" do
let(:apache) { Apache::Config }
before { apache.reset! }
it "should enable the rewrite engine" do
apache.enable_rewrite_engine :log_level => 1
apache.to_a.should == [
'',
'RewriteEngine on',
'RewriteLogLevel 1',
''
]
end
it "should add a simple redirect permanent" do
apache.r301 '/here', '/there'
apache.to_a.should == [
'Redirect permanent "/here" "/there"'
]
end
it "should build rewrites" do
apache.rewrites do
rule %r{^/$}, '/test'
end
apache.to_a[1..-1].should == [
'', 'RewriteRule "^/$" "/test"', ''
]
end
end
describe Apache::RewriteManager, "specific rewrite rules" do
let(:rewrite) { Apache::RewriteManager }
before { rewrite.reset! }
it "should create a rewrite" do
rewrite.build do
cond '%{REQUEST_FILENAME}', 'test'
rule %r{^/$}, '/test'
r301 %r{^/success$}, '/test'
rewrite_test '/', '/test'
rewrite_test '/fail', '/test'
rewrite_test '/%{REQUEST_FILENAME}', '/test', :request_filename => 'success'
end[1..-1].should == [
'',
'RewriteCond "%{REQUEST_FILENAME}" "test"',
'RewriteRule "^/$" "/test"',
'RedirectMatch permanent "^/success$" "/test"'
]
end
end
describe Apache::MatchableThing, "something that can be matched" do
subject do
thing = Apache::MatchableThing.new
thing.rule('here', 'there')
class << thing
def tag; "RSpec"; end
end
thing
end
its(:to_s) { should == 'RSpec "here" "there"' }
its(:to_a) { should == [ 'RSpec "here" "there"' ] }
end
describe Apache::RewriteRule, "a RewriteRule" do
context 'basic' do
subject do
rule = Apache::RewriteRule.new
rule.cond('/%{REQUEST_FILENAME}', '^/test$')
rule.rule(%r{^/test$}, '/test2', :last => true, :preserve_query_string => true)
rule
end
its(:to_s) { should == 'RewriteRule "^/test$" "/test2" [L,QSA]' }
its(:to_a) { should == [
'',
'RewriteCond "/%{REQUEST_FILENAME}" "^/test$"',
'RewriteRule "^/test$" "/test2" [L,QSA]'
] }
it "should not the test" do
subject.test('/test', :request_filename => 'test').should == '/test2'
end
it "should fail if opts is not provided" do
lambda { subject.match?('test', nil) }.should raise_error
end
end
context 'dash' do
context 'no conditions' do
subject {
rule = Apache::RewriteRule.new
rule.rule(%r{^/test$}, '-', :last => true)
rule
}
it "should succeed and return itself" do
subject.test('/test').should == '/test'
subject.test('/fail').should == '/fail'
end
end
context 'conditions' do
subject do
rule = Apache::RewriteRule.new
rule.cond('/%{REQUEST_FILENAME}', '^/test$')
rule.rule(%r{^/test$}, '-', :last => true)
rule
end
it "should fail" do
subject.test('/test', :request_filename => 'cats').should == '/test'
end
it "should succeed" do
subject.test('/test', :request_filename => 'test').should == '/test'
end
end
end
end
describe Apache::RewriteCondition, "a RewriteCond" do
subject do
cond = Apache::RewriteCondition.new
cond.cond('%{REQUEST_FILENAME}', '^/test$', :or, :case_insensitive, :no_vary)
cond
end
its(:to_s) { should == 'RewriteCond "%{REQUEST_FILENAME}" "^/test$" [OR,NC,NV]' }
end