sbsm 1.3.0 → 1.3.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/test/suite.rb CHANGED
@@ -3,8 +3,11 @@
3
3
  require 'simplecov'
4
4
 
5
5
  $: << File.dirname(File.expand_path(__FILE__))
6
- SimpleCov.start
7
-
6
+ SimpleCov.start do
7
+ add_filter "/test/"
8
+ add_filter "/gems/"
9
+ end
10
+ require 'sbsm/logger'
8
11
  Dir.foreach(File.dirname(__FILE__)) do |file|
9
12
  if /^test_.*\.rb$/o.match(file)
10
13
  require file
@@ -0,0 +1,122 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ $: << File.dirname(__FILE__)
4
+ $:.unshift File.expand_path('../lib', File.dirname(__FILE__))
5
+
6
+ ENV['RACK_ENV'] = 'test'
7
+ ENV['REQUEST_METHOD'] = 'GET'
8
+
9
+ require 'minitest/autorun'
10
+ require 'rack/test'
11
+ require 'sbsm/app'
12
+ require 'simple_sbsm'
13
+ require 'nokogiri'
14
+ begin
15
+ require 'pry'
16
+ rescue LoadError
17
+ end
18
+
19
+ class MyTest < MiniTest::Unit::TestCase
20
+ include Rack::Test::Methods
21
+
22
+ def setup
23
+ SBSM.info msg = "Starting #{SERVER_URI}"
24
+ DRb.start_service(SERVER_URI, Demo::SimpleSBSM.new)
25
+ sleep(0.1)
26
+ end
27
+ def teardown
28
+ DRb.stop_service
29
+ end
30
+ def app
31
+ Demo::SimpleSBSM.new
32
+ end
33
+ def test_post_feedback
34
+ get '/de/page' do # needed to set cookie
35
+ last_response.set_cookie SBSM::App::PERSISTENT_COOKIE_NAME, :value => "demo_cookie"
36
+ end
37
+ get '/de/page/feedback' do
38
+ last_response.set_cookie SBSM::App::PERSISTENT_COOKIE_NAME, :value => "second_cookie"
39
+ end
40
+ assert last_response.ok?
41
+ skip 'We must add here an input form or we cannot continue testing'
42
+ assert_match FEEDBACK_HTML_CONTENT, last_response.body
43
+ page = Nokogiri::HTML(last_response.body)
44
+ x = page.css('div')
45
+ assert page.css('input').find{|x| x.attributes['name'].value.eql?('state_id') }.attributes['value'].value
46
+ state_id = page.css('input').find{|x| x.attributes['name'].value.eql?('state_id') }.attributes['value'].value.to_i
47
+ assert state_id > 0
48
+ post '/de/page/feedback', { 'anrede' => 'Herr', 'msg' => 'SBSM rocks!' , 'state_id' => '1245'}
49
+ assert last_response.ok?
50
+ assert last_response.headers['Content-Length'].to_s.length > 0
51
+ assert_match CONFIRM_HTML_CONTENT, last_response.body
52
+ post '/de/page/feedback', { 'confirm' => 'true', 'anrede' => 'Herr', 'msg' => 'SBSM rocks!' }
53
+ assert last_response.ok?
54
+ assert_match CONFIRM_DONE_HTML_CONTENT, last_response.body
55
+ end
56
+ if false
57
+ def test_session_home
58
+ get '/home'
59
+ assert last_response.ok?
60
+ assert_match /^request_path is \/home$/, last_response.body
61
+ assert_match HOME_HTML_CONTENT, last_response.body
62
+ assert_match /utf-8/i, last_response.headers['Content-Type']
63
+ end
64
+ def test_css_file
65
+ css_content = "html { max-width: 960px; margin: 0 auto; }"
66
+ css_file = File.join('doc/sbsm.css')
67
+ FileUtils.makedirs(File.dirname(css_file))
68
+ unless File.exist?(css_file)
69
+ File.open(css_file, 'w+') do |file|
70
+ file.puts css_content
71
+ end
72
+ end
73
+ get '/sbsm.css'
74
+ assert last_response.ok?
75
+ assert_match css_content, last_response.body
76
+ end
77
+ def test_session_about_then_home
78
+ get '/de/page/about'
79
+ assert last_response.ok?
80
+ assert_match /^About SBSM: TDD ist great!/, last_response.body
81
+ get '/home'
82
+ assert last_response.ok?
83
+ assert_match HOME_HTML_CONTENT, last_response.body
84
+ end
85
+ def test_default_content_from_home
86
+ test_path = '/default_if_no_such_path'
87
+ get test_path
88
+ assert last_response.ok?
89
+ assert_match /^#{HOME_HTML_CONTENT}/, last_response.body
90
+ assert_match HOME_HTML_CONTENT, last_response.body
91
+ assert_match /^request_path is /, last_response.body
92
+ assert_match test_path, last_response.body
93
+ end
94
+ def test_session_id_is_maintained
95
+ get '/'
96
+ assert last_response.ok?
97
+ body = last_response.body.clone
98
+ assert_match /^request_path is \/$/, body
99
+ assert_match /member_counter is 1$/, body
100
+ assert_match HOME_HTML_CONTENT, body
101
+ m = /class_counter is (\d+)$/.match(body)
102
+ counter = m[1]
103
+ assert_match /class_counter is (\d+)$/, body
104
+ # Getting the request a second time must increment the class, but not the member counter
105
+ get '/'
106
+ assert last_response.ok?
107
+ body = last_response.body.clone
108
+ assert_match /^request_path is \/$/, body
109
+ assert_match /member_counter is 1$/, body
110
+ assert_match /class_counter is #{counter.to_i+1}$/, body
111
+ end
112
+ def test_session_home_then_fr_about
113
+ get '/home'
114
+ assert last_response.ok?
115
+ assert_match /^request_path is \/home$/, last_response.body
116
+ assert_match HOME_HTML_CONTENT, last_response.body
117
+ get '/fr/page/about'
118
+ assert last_response.ok?
119
+ assert_match ABOUT_HTML_CONTENT, last_response.body
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,121 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ #--
4
+ #
5
+ # State Based Session Management
6
+ # Copyright (C) 2004 Hannes Wyss
7
+ #
8
+ # This library is free software; you can redistribute it and/or
9
+ # modify it under the terms of the GNU Lesser General Public
10
+ # License as published by the Free Software Foundation; either
11
+ # version 2.1 of the License, or (at your option) any later version.
12
+ #
13
+ # This library is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
+ # Lesser General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU Lesser General Public
19
+ # License along with this library; if not, write to the Free Software
20
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
+ #
22
+ # ywesee - intellectual capital connected, Winterthurerstrasse 52, CH-8006 Zürich, Switzerland
23
+ # hwyss@ywesee.com
24
+ #
25
+ # TestSession -- sbsm -- 22.10.2002 -- hwyss@ywesee.com
26
+ #++
27
+
28
+ require 'minitest/autorun'
29
+ require 'fileutils'
30
+ require 'sbsm/logger'
31
+ begin
32
+ require 'pry'
33
+ rescue LoadError
34
+ end
35
+ class TestLogger < Minitest::Test
36
+ def setup
37
+ @saved_loger = SBSM.logger.clone
38
+ @default_name = Time.now.strftime("/tmp/sbsm_#{SBSM::VERSION}.log.%Y%m%d")
39
+ FileUtils.rm_f(@default_name)
40
+ # we reload the logger class as it initializes the logger to a default value
41
+ load 'sbsm/logger.rb'
42
+ assert(File.exist?(@default_name))
43
+ end
44
+ def teardown
45
+ SBSM.logger= @saved_loger
46
+ end
47
+
48
+ def test_default_levels
49
+ saved_length = File.size(@default_name)
50
+ SBSM.debug("debug #{__LINE__}")
51
+ assert_equal(saved_length, File.size(@default_name))
52
+ SBSM.info("info #{__LINE__}")
53
+ assert_equal(saved_length, File.size(@default_name))
54
+
55
+ SBSM.logger.level = :info
56
+ SBSM.info("info #{__LINE__}")
57
+ assert(saved_length < File.size(@default_name))
58
+ saved_length = File.size(@default_name)
59
+ SBSM.debug("debug #{__LINE__}")
60
+ saved_length = File.size(@default_name)
61
+
62
+ SBSM.logger.level = :debug
63
+ SBSM.info("info #{__LINE__}")
64
+ assert(saved_length < File.size(@default_name))
65
+ saved_length = File.size(@default_name)
66
+ SBSM.debug("debug #{__LINE__}")
67
+ assert(saved_length < File.size(@default_name))
68
+
69
+ saved_length = File.size(@default_name)
70
+ SBSM.logger.level = :warn
71
+ SBSM.info("info #{__LINE__}")
72
+ SBSM.debug("debug #{__LINE__}")
73
+ assert_equal(saved_length, File.size(@default_name))
74
+ end
75
+
76
+ def test_change_logger
77
+ new_name = '/tmp/sbsm_test_log'
78
+ FileUtils.rm_f(new_name)
79
+ assert_equal(false, File.exist?(new_name))
80
+ SBSM.logger= Logger.new(new_name)
81
+ assert_equal(true, File.exist?(new_name))
82
+ saved_length = File.size(new_name)
83
+
84
+ default_saved_length = File.size(@default_name)
85
+ SBSM.debug("debug #{__LINE__}")
86
+ SBSM.info("info #{__LINE__}")
87
+ assert_equal(default_saved_length, File.size(@default_name))
88
+ assert_equal(true, File.exist?(new_name))
89
+
90
+ SBSM.logger.level = :info
91
+ SBSM.info("info #{__LINE__}")
92
+ assert(saved_length < File.size(new_name))
93
+ saved_length = File.size(new_name)
94
+ SBSM.debug("debug #{__LINE__}")
95
+ saved_length = File.size(new_name)
96
+
97
+ SBSM.logger.level = :debug
98
+ SBSM.info("info #{__LINE__}")
99
+ assert(saved_length < File.size(new_name))
100
+ saved_length = File.size(new_name)
101
+ SBSM.debug("debug #{__LINE__}")
102
+ assert(saved_length < File.size(new_name))
103
+
104
+ saved_length = File.size(new_name)
105
+ SBSM.logger.level = :warn
106
+ SBSM.info("info #{__LINE__}")
107
+ SBSM.debug("debug #{__LINE__}")
108
+ assert_equal(saved_length, File.size(new_name))
109
+ assert_equal(default_saved_length, File.size(@default_name))
110
+ end
111
+
112
+ def test_nil_logger
113
+ default_saved_length = File.size(@default_name)
114
+ SBSM.logger= nil
115
+ assert_equal(default_saved_length, File.size(@default_name))
116
+ SBSM.debug("debug #{__LINE__}")
117
+ SBSM.info("info #{__LINE__}")
118
+ assert_equal(default_saved_length, File.size(@default_name))
119
+ end
120
+
121
+ end
data/test/test_session.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  # encoding: utf-8
3
+ #--
3
4
  #
4
5
  # State Based Session Management
5
6
  # Copyright (C) 2004 Hannes Wyss
@@ -22,10 +23,12 @@
22
23
  # hwyss@ywesee.com
23
24
  #
24
25
  # TestSession -- sbsm -- 22.10.2002 -- hwyss@ywesee.com
26
+ #++
25
27
 
26
28
  require 'minitest/autorun'
27
29
  require 'sbsm/session'
28
- #require 'htmlgrid/component'
30
+ require 'rack'
31
+ require 'rack/test'
29
32
 
30
33
  class StubSessionUnknownUser
31
34
  end
@@ -54,16 +57,9 @@ class StubSessionValidator
54
57
  false
55
58
  end
56
59
  end
57
- class StubSessionRequest < Hash
58
- attr_accessor :unparsed_uri
59
- def params
60
- self
61
- end
62
- def cookies
63
- {}
64
- end
65
- def request_method
66
- 'GET'
60
+ class StubSessionRequest < Rack::Request
61
+ def initialize(path='')
62
+ super(Rack::MockRequest.env_for("http://example.com:8080/#{path}", {}))
67
63
  end
68
64
  end
69
65
  class StubSessionView
@@ -131,11 +127,24 @@ class StubSessionSession < SBSM::Session
131
127
  end
132
128
 
133
129
  class TestSession < Minitest::Test
130
+ include Rack::Test::Methods
134
131
  def setup
135
132
  @session = Session.new("test", StubSessionApp.new, StubSessionValidator.new)
136
133
  @request = StubSessionRequest.new
137
134
  @state = StubSessionState.new(@session, nil)
138
135
  end
136
+ def test_user_input_hash
137
+ @request["hash[1]"] = "4"
138
+ @request["hash[2]"] = "5"
139
+ @request["hash[3]"] = "6"
140
+ @session.process(@request)
141
+ hash = @session.user_input(:hash)
142
+ assert_equal(Hash, hash.class)
143
+ assert_equal(3, hash.size)
144
+ assert_equal("4", hash["1"])
145
+ assert_equal("5", hash["2"])
146
+ assert_equal("6", hash["3"])
147
+ end
139
148
  def test_attended_states_store
140
149
  @session.process(@request)
141
150
  state = @session.state
@@ -206,7 +215,7 @@ class TestSession < Minitest::Test
206
215
  state.object_id => state,
207
216
  }
208
217
  @session.active_state = @state
209
- @request.store('state_id', state.object_id.next)
218
+ # @request.params.store('state_id', state.object_id.next)
210
219
  @session.process(@request)
211
220
  assert_equal(@state, @session.active_state)
212
221
  end
@@ -221,7 +230,7 @@ class TestSession < Minitest::Test
221
230
  state.object_id => state,
222
231
  }
223
232
  @session.state = @state
224
- @request.store('state_id', state.object_id)
233
+ @request.params.store('state_id', state.object_id)
225
234
  @session.process(@request)
226
235
  assert_equal(state, @session.active_state)
227
236
  end
@@ -231,12 +240,12 @@ class TestSession < Minitest::Test
231
240
  state.volatile = volatile
232
241
  @session.active_state = state
233
242
  @session.state = state
234
- @request.store('event', :volatile)
243
+ @request.params.store('event', :volatile)
235
244
  newstate = @session.process(@request)
236
245
  assert_equal(:volatile, @session.event)
237
246
  assert_equal(volatile, @session.state)
238
247
  assert_equal(state, @session.active_state)
239
- @request.store('event', :foo)
248
+ @request.params.store('event', :foo)
240
249
  newstate = @session.process(@request)
241
250
  assert_equal(state.foo, @session.state)
242
251
  assert_equal(state.foo, @session.active_state)
@@ -321,8 +330,8 @@ class TestSession < Minitest::Test
321
330
  }
322
331
  @session.state = @state
323
332
  expected = state.foo
324
- @request.store('state_id', state.object_id)
325
- @request.store('event', :foo)
333
+ @request.params.store('state_id', state.object_id)
334
+ @request.params.store('event', :foo)
326
335
  @session.process(@request)
327
336
  assert_equal(expected, @session.state)
328
337
  assert_equal(expected, @session.attended_states[expected.object_id])
@@ -6,434 +6,215 @@ $: << File.dirname(__FILE__)
6
6
  $:.unshift File.expand_path('../lib', File.dirname(__FILE__))
7
7
 
8
8
  require 'minitest/autorun'
9
+ require 'rack/request'
9
10
  require 'sbsm/trans_handler'
11
+ require 'sbsm/logger'
10
12
  require 'cgi'
11
13
  require 'fileutils'
12
14
 
13
- module Apache
14
- DECLINED = 0
15
+ def fake_request_for_path(path='/')
16
+ Rack::Request.new(Rack::MockRequest.env_for("http://example.com:8080#{path}", {}))
15
17
  end
18
+
16
19
  module SBSM
17
- class TestTransHandler < Minitest::Test
18
- class RequestStub
19
- attr_accessor :uri, :notes, :server
20
- end
21
- class ServerStub
22
- attr_accessor :document_root
23
- def log_notice(fmt, *args)
24
- end
25
- def log_warn(*args)
26
- warn(args.join(' - '))
27
- end
28
- end
29
- class NotesStub < Hash
30
- alias :add :store
31
- end
32
- def setup
33
- @doc_root = File.expand_path('data/htdoc', File.dirname(__FILE__))
34
- @etc_path = File.expand_path('../etc', @doc_root)
35
- @doc_root.taint
36
- end
37
- def teardown
38
- FileUtils.rm_r(@etc_path) if(File.exist?(@etc_path))
39
- end
40
- def test_parser_name
41
- assert_equal('uri', TransHandler.instance.parser_name)
42
- end
43
- def test_translate_uri
44
- request = RequestStub.new
45
- request.server = ServerStub.new
46
20
 
47
- request.uri = '/'
48
- request.notes = NotesStub.new
49
- TransHandler.instance.translate_uri(request)
50
- assert_equal({}, request.notes)
51
- assert_equal('/index.rbx', request.uri)
21
+ class TestTransHandler < Minitest::Test
22
+ def setup
23
+ @config_file = File.expand_path('../etc/trans_handler.yml', File.dirname(__FILE__))
24
+ end
25
+ def teardown
26
+ FileUtils.rm_f(@config_file) if File.exist?(@config_file)
27
+ end
28
+ def test_parser_name
29
+ assert_equal('uri', TransHandler.instance.parser_name)
30
+ end
31
+ def test_translate_uri
32
+ request = fake_request_for_path '/'
33
+ TransHandler.instance.translate_uri(request)
34
+ assert_equal({}, request.params)
35
+ assert_equal('/index.rbx', request.uri)
52
36
 
53
- request.uri = '/fr'
54
- request.notes = NotesStub.new
55
- TransHandler.instance.translate_uri(request)
56
- assert_equal({'language' => 'fr'}, request.notes)
57
- assert_equal('/index.rbx', request.uri)
37
+ request = fake_request_for_path '/fr'
38
+ TransHandler.instance.translate_uri(request)
39
+ assert_equal({'language' => 'fr'}, request.params)
40
+ assert_equal('/index.rbx', request.uri)
58
41
 
59
- request.uri = '/en/'
60
- request.notes = NotesStub.new
61
- TransHandler.instance.translate_uri(request)
62
- assert_equal({'language' => 'en'}, request.notes)
63
- assert_equal('/index.rbx', request.uri)
42
+ request = fake_request_for_path '/en/'
43
+ TransHandler.instance.translate_uri(request)
44
+ assert_equal({'language' => 'en'}, request.params)
45
+ assert_equal('/index.rbx', request.uri)
64
46
 
65
- request.uri = '/de/search/state_id/407422388/search_query/ponstan'
66
- request.notes = NotesStub.new
67
- TransHandler.instance.translate_uri(request)
68
- expected = {
69
- 'language' => 'de',
47
+ request = fake_request_for_path '/de/search/state_id/407422388/search_query/ponstan'
48
+ TransHandler.instance.translate_uri(request)
49
+ expected = {
50
+ 'language' => 'de',
70
51
  'flavor' => 'search',
71
52
  'event' => 'state_id',
72
53
  "407422388"=>"search_query",
73
54
  'ponstan'=> '',
74
- }
75
- assert_equal(expected, request.notes)
76
- assert_equal('/index.rbx', request.uri)
55
+ }
56
+ assert_equal(expected, request.params)
57
+ assert_equal('/index.rbx', request.uri)
77
58
 
78
- request.uri = '/de/search/state_id/407422388/search_query/ponstan/page/4'
79
- request.notes = NotesStub.new
80
- TransHandler.instance.translate_uri(request)
81
- expected = {
82
- 'language' => 'de',
59
+ request = fake_request_for_path '/de/search/state_id/407422388/search_query/ponstan/page/4'
60
+ TransHandler.instance.translate_uri(request)
61
+ expected = {
62
+ 'language' => 'de',
83
63
  'flavor' => 'search',
84
64
  'event' => 'state_id',
85
65
  "407422388"=>"search_query",
86
66
  'ponstan'=> 'page',
87
- '4' => '',
88
- }
89
- assert_equal(expected, request.notes)
90
- assert_equal('/index.rbx', request.uri)
67
+ '4' => '',
68
+ }
69
+ assert_equal(expected, request.params)
70
+ assert_equal('/index.rbx', request.uri)
91
71
 
92
- request.uri = '/de/search/pretty//state_id/407422388/search_query/ponstan/page/4'
93
- request.notes = NotesStub.new
94
- expected = '/index.rbx?language=de&event=search&pretty=&state_id=407422388&search_query=ponstan&page=4'
95
- TransHandler.instance.translate_uri(request)
96
- expected = {
97
- 'language' => 'de',
72
+ request = fake_request_for_path '/de/search/pretty//state_id/407422388/search_query/ponstan/page/4'
73
+ expected = '/index.rbx?language=de&event=search&pretty=&state_id=407422388&search_query=ponstan&page=4'
74
+ TransHandler.instance.translate_uri(request)
75
+ expected = {
76
+ 'language' => 'de',
98
77
  'flavor' => 'search',
99
78
  'event' => 'pretty',
100
79
  ""=>"state_id",
101
80
  "407422388"=>"search_query",
102
81
  'ponstan'=> 'page',
103
82
  '4' => '',
104
- }
105
- assert_equal(expected, request.notes)
106
- assert_equal('/index.rbx', request.uri)
107
-
108
- request.uri = '/de/search/search_query/'
109
- request.notes = NotesStub.new
110
- TransHandler.instance.translate_uri(request)
111
- expected = {
112
- 'language' => 'de',
113
- 'flavor' => 'search',
114
- 'event' => 'search_query',
115
- }
116
- assert_equal(expected, request.notes)
117
- assert_equal('/index.rbx', request.uri)
118
- end
119
- def test_translate_uri__shortcut
120
- request = RequestStub.new
121
- request.server = ServerStub.new
122
- request.server.document_root = @doc_root
83
+ }
84
+ assert_equal(expected, request.params)
85
+ assert_equal('/index.rbx', request.uri)
123
86
 
124
- request.uri = '/shortcut'
125
- request.notes = NotesStub.new
87
+ request = fake_request_for_path '/de/search/search_query/'
126
88
  TransHandler.instance.translate_uri(request)
127
- assert_equal({}, request.notes)
128
- assert_equal('/shortcut', request.uri)
129
-
130
- FileUtils.mkdir_p(@etc_path)
131
- shortcut = File.join(@etc_path, 'trans_handler.yml')
132
- File.open(shortcut, 'w') { |fh|
133
- fh.puts <<-EOS
134
- ---
135
- shortcut:
136
- /somewhere:
137
- over: the rainbow
138
- goodbye: yellow brick road
139
- /shortcut:
140
- shortcut: variables
141
- EOS
89
+ expected = {
90
+ 'language' => 'de',
91
+ 'flavor' => 'search',
92
+ 'event' => 'search_query',
142
93
  }
143
-
144
- request.uri = '/shortcut'
145
- request.notes = NotesStub.new
146
- # run in safe-mode
147
- Thread.new {
148
- $SAFE = 1
149
- TransHandler.instance.translate_uri(request)
150
- }.join
151
- assert_equal({'shortcut' => 'variables'}, request.notes)
152
- assert_equal('/index.rbx', request.uri)
153
-
154
- request.uri = '/somewhere'
155
- request.notes = NotesStub.new
156
- TransHandler.instance.translate_uri(request)
157
- expected = {
158
- 'over' => 'the rainbow',
159
- 'goodbye' => 'yellow brick road',
160
- }
161
- assert_equal(expected, request.notes)
162
- assert_equal('/index.rbx', request.uri)
163
- end
164
- end
165
- class TestTransHandler < Minitest::Test
166
- class RequestStub
167
- attr_accessor :uri, :notes, :server
168
- end
169
- class ServerStub
170
- attr_accessor :document_root
171
- def log_notice(fmt, *args)
172
- end
173
- def log_warn(*args)
174
- warn(args.join(' - '))
175
- end
176
- end
177
- class NotesStub < Hash
178
- alias :add :store
179
- end
180
- def setup
181
- @doc_root = File.expand_path('data/htdoc', File.dirname(__FILE__))
182
- @etc_path = File.expand_path('../etc', @doc_root)
183
- @doc_root.taint
184
- end
185
- def teardown
186
- FileUtils.rm_r(@etc_path) if(File.exist?(@etc_path))
187
- end
188
- def test_translate_uri
189
- request = RequestStub.new
190
- request.server = ServerStub.new
191
-
192
- request.uri = '/'
193
- request.notes = NotesStub.new
194
- TransHandler.instance.translate_uri(request)
195
- assert_equal({}, request.notes)
196
- assert_equal('/index.rbx', request.uri)
197
-
198
- request.uri = '/fr'
199
- request.notes = NotesStub.new
200
- TransHandler.instance.translate_uri(request)
201
- assert_equal({'language' => 'fr'}, request.notes)
202
- assert_equal('/index.rbx', request.uri)
203
-
204
- request.uri = '/en/'
205
- request.notes = NotesStub.new
206
- TransHandler.instance.translate_uri(request)
207
- assert_equal({'language' => 'en'}, request.notes)
208
- assert_equal('/index.rbx', request.uri)
209
-
210
- request.uri = '/en/flavor'
211
- request.notes = NotesStub.new
212
- TransHandler.instance.translate_uri(request)
213
- expected = {
214
- 'language'=> 'en',
215
- 'flavor' => 'flavor',
216
- }
217
- assert_equal(expected, request.notes)
218
- assert_equal('/index.rbx', request.uri)
219
-
220
- request.uri = '/en/other'
221
- request.notes = NotesStub.new
222
- TransHandler.instance.translate_uri(request)
223
- expected = {
224
- 'language'=> 'en',
225
- 'flavor' => 'other',
226
- }
227
- assert_equal(expected, request.notes)
228
- assert_equal('/index.rbx', request.uri)
229
-
230
- request.uri = '/de/gcc/search/state_id/407422388/search_query/ponstan'
231
- request.notes = NotesStub.new
232
- TransHandler.instance.translate_uri(request)
233
- expected = {
234
- 'language' => 'de',
235
- 'flavor' => 'gcc',
236
- 'event' => 'search',
237
- 'state_id' => '407422388',
238
- 'search_query'=> 'ponstan',
239
- }
240
- assert_equal(expected, request.notes)
241
- assert_equal('/index.rbx', request.uri)
242
-
243
- request.uri = '/de/gcc/search/state_id/407422388/search_query/ponstan/page/4'
244
- request.notes = NotesStub.new
245
- TransHandler.instance.translate_uri(request)
246
- expected = {
247
- 'language' => 'de',
248
- 'flavor' => 'gcc',
249
- 'event' => 'search',
250
- 'state_id' => '407422388',
251
- 'search_query'=> 'ponstan',
252
- 'page' => '4',
253
- }
254
- assert_equal(expected, request.notes)
255
- assert_equal('/index.rbx', request.uri)
256
-
257
- request.uri = '/de/gcc/search/pretty//state_id/407422388/search_query/ponstan/page/4'
258
- request.notes = NotesStub.new
259
- expected = '/index.rbx?language=de&flavor=gcc&event=search&pretty=&state_id=407422388&search_query=ponstan&page=4'
260
- TransHandler.instance.translate_uri(request)
261
- expected = {
262
- 'language' => 'de',
263
- 'flavor' => 'gcc',
264
- 'event' => 'search',
265
- 'pretty' => '',
266
- 'state_id' => '407422388',
267
- 'search_query'=> 'ponstan',
268
- 'page' => '4',
269
- }
270
- assert_equal(expected, request.notes)
271
- assert_equal('/index.rbx', request.uri)
272
-
273
- request.uri = '/de/gcc/search/search_query/'
274
- request.notes = NotesStub.new
275
- TransHandler.instance.translate_uri(request)
276
- expected = {
277
- 'language' => 'de',
278
- 'flavor' => 'gcc',
279
- 'event' => 'search',
280
- 'search_query'=> '',
281
- }
282
- assert_equal(expected, request.notes)
283
- assert_equal('/index.rbx', request.uri)
284
- end
285
- def test_translate_uri__shortcut
286
- request = RequestStub.new
287
- request.server = ServerStub.new
288
- request.server.document_root = @doc_root
289
-
290
- request.uri = '/shortcut'
291
- request.notes = NotesStub.new
94
+ assert_equal(expected, request.params)
95
+ assert_equal('/index.rbx', request.uri)
96
+ end
97
+ def test_translate_uri__shortcut
98
+ assert_equal false, File.exist?(@config_file)
99
+ request = fake_request_for_path '/shortcut'
292
100
  TransHandler.instance.translate_uri(request)
293
- assert_equal({}, request.notes)
294
- assert_equal('/shortcut', request.uri)
101
+ assert_equal({}, request.params)
102
+ assert_equal('/shortcut', request.uri)
295
103
 
296
- FileUtils.mkdir_p(@etc_path)
297
- shortcut = File.join(@etc_path, 'trans_handler.yml')
298
- File.open(shortcut, 'w') { |fh|
104
+ FileUtils.mkdir_p(File.dirname(@config_file))
105
+ File.open(@config_file, 'w') do |fh|
299
106
  fh.puts <<-EOS
300
- ---
107
+ ---
301
108
  shortcut:
302
- /somewhere:
109
+ /somewhere:
303
110
  over: the rainbow
304
111
  goodbye: yellow brick road
305
- /shortcut:
112
+ /shortcut:
306
113
  shortcut: variables
307
- EOS
308
- }
309
-
310
- request.uri = '/shortcut'
311
- request.notes = NotesStub.new
312
- # run in safe-mode
313
- Thread.new {
314
- $SAFE = 1
315
- TransHandler.instance.translate_uri(request)
316
- }.join
317
- assert_equal({'shortcut' => 'variables'}, request.notes)
318
- assert_equal('/index.rbx', request.uri)
319
-
320
- request.uri = '/somewhere'
321
- request.notes = NotesStub.new
322
- TransHandler.instance.translate_uri(request)
323
- expected = {
324
- 'over' => 'the rainbow',
325
- 'goodbye' => 'yellow brick road',
326
- }
327
- assert_equal(expected, request.notes)
328
- assert_equal('/index.rbx', request.uri)
329
- end
330
- end
331
- class TestTransHandler < Minitest::Test
332
- class RequestStub
333
- attr_accessor :uri, :notes, :server
334
- end
335
- class ServerStub
336
- attr_accessor :document_root
337
- def log_notice(fmt, *args)
338
- end
339
- def log_warn(*args)
340
- warn(args.join(' - '))
114
+ EOS
341
115
  end
342
- end
343
- class NotesStub < Hash
344
- alias :add :store
345
- end
346
- def setup
347
- @doc_root = File.expand_path('data/htdoc', File.dirname(__FILE__))
348
- @etc_path = File.expand_path('../etc', @doc_root)
349
- @doc_root.taint
350
- end
351
- def teardown
352
- FileUtils.rm_r(@etc_path) if(File.exist?(@etc_path))
353
- end
354
- def test_translate_uri
355
- request = RequestStub.new
356
- request.server = ServerStub.new
357
-
358
- request.uri = '/'
359
- request.notes = NotesStub.new
360
- TransHandler.instance.translate_uri(request)
361
- assert_equal({}, request.notes)
362
- assert_equal('/index.rbx', request.uri)
116
+ assert_equal true, File.exist?(@config_file)
117
+ request = fake_request_for_path '/shortcut'
118
+ # run in safe-mode
119
+ Thread.new {
120
+ $SAFE = 1
121
+ TransHandler.instance.translate_uri(request)
122
+ }.join
123
+ assert_equal({'shortcut' => 'variables'}, request.params)
124
+ assert_equal('/index.rbx', request.uri)
125
+
126
+ request = fake_request_for_path '/somewhere'
127
+ TransHandler.instance.translate_uri(request)
128
+ expected = {
129
+ 'over' => 'the rainbow',
130
+ 'goodbye' => 'yellow brick road',
131
+ }
132
+ assert_equal(expected, request.params)
133
+ assert_equal('/index.rbx', request.uri)
134
+ end
135
+ def test_translate_uri_paths
136
+ request = fake_request_for_path '/'
137
+ TransHandler.instance.translate_uri(request)
138
+ assert_equal({}, request.params)
139
+ assert_equal('/index.rbx', request.uri)
363
140
 
364
- request.uri = '/fr'
365
- request.notes = NotesStub.new
366
- TransHandler.instance.translate_uri(request)
367
- assert_equal({'language' => 'fr'}, request.notes)
368
- assert_equal('/index.rbx', request.uri)
141
+ request = fake_request_for_path '/fr'
142
+ TransHandler.instance.translate_uri(request)
143
+ assert_equal({'language' => 'fr'}, request.params)
144
+ assert_equal('/index.rbx', request.uri)
369
145
 
370
- request.uri = '/en/'
371
- request.notes = NotesStub.new
372
- TransHandler.instance.translate_uri(request)
373
- assert_equal({'language' => 'en'}, request.notes)
374
- assert_equal('/index.rbx', request.uri)
146
+ request = fake_request_for_path '/en/'
147
+ TransHandler.instance.translate_uri(request)
148
+ assert_equal({'language' => 'en'}, request.params)
149
+ assert_equal('/index.rbx', request.uri)
375
150
 
376
- request.uri = '/en/zone'
377
- request.notes = NotesStub.new
378
- TransHandler.instance.translate_uri(request)
379
- expected = {
380
- 'language'=> 'en',
381
- 'flavor' => 'zone',
382
- }
383
- assert_equal(expected, request.notes)
384
- assert_equal('/index.rbx', request.uri)
151
+ request = fake_request_for_path '/en/flavor'
152
+ TransHandler.instance.translate_uri(request)
153
+ expected = {
154
+ 'language'=> 'en',
155
+ 'flavor' => 'flavor',
156
+ }
157
+ assert_equal(expected, request.params)
158
+ assert_equal('/index.rbx', request.uri)
385
159
 
386
- request.uri = '/en/other'
387
- request.notes = NotesStub.new
388
- TransHandler.instance.translate_uri(request)
389
- expected = {
390
- 'language'=> 'en',
391
- 'flavor' => 'other',
392
- }
393
- assert_equal(expected, request.notes)
394
- assert_equal('/index.rbx', request.uri)
160
+ request = fake_request_for_path '/en/other'
161
+ TransHandler.instance.translate_uri(request)
162
+ expected = {
163
+ 'language'=> 'en',
164
+ 'flavor' => 'other',
165
+ }
166
+ assert_equal(expected, request.params)
167
+ assert_equal('/index.rbx', request.uri)
395
168
 
396
- request.uri = '/de/gcc/search/state_id/407422388/search_query/ponstan/page/4'
397
- request.notes = NotesStub.new
398
- TransHandler.instance.translate_uri(request)
399
- expected = {
400
- 'language' => 'de',
401
- 'flavor' => 'gcc',
402
- 'event' => 'search',
403
- 'state_id' => '407422388',
404
- 'search_query'=> 'ponstan',
405
- 'page' => '4',
406
- }
407
- assert_equal(expected, request.notes)
408
- assert_equal('/index.rbx', request.uri)
169
+ request = fake_request_for_path '/de/gcc/search/state_id/407422388/search_query/ponstan'
170
+ TransHandler.instance.translate_uri(request)
171
+ expected = {
172
+ 'language' => 'de',
173
+ 'flavor' => 'gcc',
174
+ 'event' => 'search',
175
+ 'state_id' => '407422388',
176
+ 'search_query'=> 'ponstan',
177
+ }
178
+ assert_equal(expected, request.params)
179
+ assert_equal('/index.rbx', request.uri)
180
+ request = fake_request_for_path '/de/gcc/search/state_id/407422388/search_query/ponstan/page/4'
181
+ TransHandler.instance.translate_uri(request)
182
+ expected = {
183
+ 'language' => 'de',
184
+ 'flavor' => 'gcc',
185
+ 'event' => 'search',
186
+ 'state_id' => '407422388',
187
+ 'search_query'=> 'ponstan',
188
+ 'page' => '4',
189
+ }
190
+ assert_equal(expected, request.params)
191
+ assert_equal('/index.rbx', request.uri)
409
192
 
410
- request.uri = '/de/gcc/search/pretty//state_id/407422388/search_query/ponstan/page/4'
411
- request.notes = NotesStub.new
412
- expected = '/index.rbx?language=de&zone=gcc&event=search&detail=objid&pretty=&state_id=407422388&search_query=ponstan&page=4'
413
- TransHandler.instance.translate_uri(request)
414
- expected = {
415
- 'language' => 'de',
416
- 'flavor' => 'gcc',
417
- 'event' => 'search',
418
- 'pretty' => '',
419
- 'state_id' => '407422388',
420
- 'search_query'=> 'ponstan',
421
- 'page' => '4',
422
- }
423
- assert_equal(expected, request.notes)
424
- assert_equal('/index.rbx', request.uri)
193
+ request = fake_request_for_path '/de/gcc/search/pretty//state_id/407422388/search_query/ponstan/page/4'
194
+ expected = '/index.rbx?language=de&flavor=gcc&event=search&pretty=&state_id=407422388&search_query=ponstan&page=4'
195
+ TransHandler.instance.translate_uri(request)
196
+ expected = {
197
+ 'language' => 'de',
198
+ 'flavor' => 'gcc',
199
+ 'event' => 'search',
200
+ 'pretty' => '',
201
+ 'state_id' => '407422388',
202
+ 'search_query'=> 'ponstan',
203
+ 'page' => '4',
204
+ }
205
+ assert_equal(expected, request.params)
206
+ assert_equal('/index.rbx', request.uri)
425
207
 
426
- request.uri = '/de/gcc/search/search_query/'
427
- request.notes = NotesStub.new
428
- TransHandler.instance.translate_uri(request)
429
- expected = {
430
- 'language' => 'de',
431
- 'flavor' => 'gcc',
432
- 'event' => 'search',
433
- 'search_query'=> '',
434
- }
435
- assert_equal(expected, request.notes)
436
- assert_equal('/index.rbx', request.uri)
437
- end
438
- end
208
+ request = fake_request_for_path '/de/gcc/search/search_query/'
209
+ TransHandler.instance.translate_uri(request)
210
+ expected = {
211
+ 'language' => 'de',
212
+ 'flavor' => 'gcc',
213
+ 'event' => 'search',
214
+ 'search_query'=> '',
215
+ }
216
+ assert_equal(expected, request.params)
217
+ assert_equal('/index.rbx', request.uri)
218
+ end
219
+ end
439
220
  end