blob: 4ef7edcaeb889f589b930f7c32a4f5070970425d [file] [log] [blame]
#
# common test setup
#
# prepend whimsy/lib to library search path
lib = File.expand_path('../' * 5 + 'lib', __FILE__)
$LOAD_PATH.unshift lib unless $LOAD_PATH.include? lib
ENV['RACK_ENV'] = 'test'
ENV['REMOTE_USER'] = 'test'
require 'capybara/rspec'
require "selenium-webdriver"
require_relative '../main'
Capybara.app = Sinatra::Application
Capybara.javascript_driver = :selenium_chrome_headless
require 'whimsy/asf/rack'
module MockServer
# wunderbar environment
def _
self
end
# sinatra environment
def env
Struct.new(:user, :password).new('test', nil)
end
def respond_to_missing?(method, _include_private=false)
method =~ /^_(\w+)$/
end
# capture wunderbar 'json' output methods
def method_missing(method, *args, &block)
if method =~ /^_(\w+)$/ and args.length == 1
instance_variable_set "@#{$1}", args.first
else
super
end
end
# run system commands, appending output to transcript.
# intercept commits, adding the files to the cleanup list
def system(*args)
args.flatten!
# Wunderbar .system accepts one or two trailing hashes; ignore them for now
# TODO: do we need to handle :stdin?
args.pop if args.last.is_a? Hash
args.pop if args.last.is_a? Hash
if args[1] == 'commit'
@commits ||= {}
if args.include? '--'
target = args[args.index('--') + 1]
else
target = args[2..-1].find {|arg| not arg.start_with? '-'}
end
@commits[File.basename target] = File.read(target)
`svn revert #{target}`
0
else
args.reject! {|arg| arg.is_a? Array}
@transcript ||= ''
@transcript += `#{Shellwords.join(args)}`
$?.exitstatus
end
end
end
RSpec.configure do |config|
config.include MockServer
config.before(:each) do
FileUtils.rm_rf Agenda::CACHE
FileUtils.mkdir_p Agenda::CACHE
end
end
# must be a non-director member of the secretarial team
SEC_ID='secretary_id' # dummy for testing
DUMMY = {
'ldapsearch -x -LLL -b ou=groups,ou=services,dc=apache,dc=org -s one cn=pmc-chairs member memberUid' =>
[{"member" => []}],
'ldapsearch -x -LLL -b ou=groups,dc=apache,dc=org -s one cn=member memberUid' =>
[[]],
'ldapsearch -x -LLL -b ou=groups,ou=services,dc=apache,dc=org -s one cn=board member memberUid' =>
[{"member" => []}],
'ldapsearch -x -LLL -b ou=groups,ou=services,dc=apache,dc=org -s sub cn=asf-secretary dn' =>
[["cn=asf-secretary,ou=groups,ou=services,dc=apache,dc=org"]],
'ldapsearch -x -LLL -b ou=groups,ou=services,dc=apache,dc=org -s one cn=asf-secretary member memberUid' =>
[{"member"=>["uid=#{SEC_ID},ou=people,dc=apache,dc=org"], "dn"=>["cn=asf-secretary,ou=groups,ou=services,dc=apache,dc=org"]}],
'ldapsearch -x -LLL -b ou=groups,ou=services,dc=apache,dc=org -s sub cn=board dn' =>
[['cn=board,ou=groups,ou=services,dc=apache,dc=org']],
'ldapsearch -x -LLL -b ou=groups,ou=services,dc=apache,dc=org -s sub cn=pmc-chairs dn' =>
[[]],
"ldapsearch -x -LLL -b ou=people,dc=apache,dc=org -s one uid=#{SEC_ID} " =>
[{"uid"=>["#{SEC_ID}"], "dn"=>["uid=#{SEC_ID},ou=people,dc=apache,dc=org"]}],
}
$LOAD_PATH.unshift '/srv/whimsy/lib'
require 'whimsy/asf/config'
require 'whimsy/asf/ldap'
module ASF
def self.search_scope(scope, base, filter, attrs=nil)
sname = %w(base one sub children)[scope] rescue scope
cmd = "ldapsearch -x -LLL -b #{base} -s #{sname} #{filter} " +
[attrs].flatten.join(' ')
# $stderr.puts cmd
ret = DUMMY[cmd]
if ret
# $stderr.puts ret.inspect
return ret
else
raise "Cannot find response for: '#{cmd}'"
end
end
end