sinatra-symphony 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -38,6 +38,36 @@ Time per request: 186.581 [ms] (mean, across all concurrent requests)
38
38
  Transfer rate: 0.72 [Kbytes/sec] received
39
39
  ```
40
40
 
41
+ ## Testing
42
+
43
+ Uses good old `rack-test` and a wrapper.
44
+
45
+ ```ruby
46
+ require 'minitest/autorun'
47
+ require 'sinatra/symphony/test'
48
+
49
+ class MiniTest::Spec
50
+ include Rack::Test::Methods
51
+
52
+ def app
53
+ Sinatra::Symphony::Test.new(@myapp)
54
+ end
55
+ end
56
+
57
+ describe 'myapp' do
58
+ it 'should work' do
59
+ @myapp = Class.new(Sinatra::Symphony) do
60
+ get '/' do
61
+ 'hello world'
62
+ end
63
+ end
64
+
65
+ get '/'
66
+ assert_equal 'hello world', last_response.body
67
+ end
68
+ end
69
+ ```
70
+
41
71
  # See Also
42
72
  [https://github.com/kyledrake/sinatra-synchrony](https://github.com/kyledrake/sinatra-synchrony)
43
73
 
@@ -0,0 +1,18 @@
1
+ require 'rack/test'
2
+ require 'sinatra-symphony'
3
+
4
+ module Sinatra
5
+ class Symphony::Test
6
+ def initialize app
7
+ @app = app
8
+ end
9
+
10
+ def call env
11
+ EM.run do
12
+ env['async.callback'] = proc {|response| @response = response; EM.stop}
13
+ catch(:async) {@app.call(env)}
14
+ end
15
+ @response
16
+ end
17
+ end # Symphony::Test
18
+ end # Sinatra
data/test/helper.rb CHANGED
@@ -2,38 +2,8 @@ require 'bundler/setup'
2
2
  require 'minitest/autorun'
3
3
  require 'em-synchrony/em-http'
4
4
  require 'sinatra-symphony'
5
- require 'thin'
6
- require 'uri'
5
+ require 'sinatra/symphony/test'
7
6
 
8
7
  class MiniTest::Spec
9
- def schedule app, port = 4000, &block
10
- res = nil
11
- server = fork do
12
- capture_io do
13
- Thin::Server.start('127.0.0.1', port, app)
14
- end
15
- end
16
-
17
- wait_for_service_start(port)
18
- schedule_in_thread { res = block.call URI.parse("http://127.0.0.1:#{port}") }
19
- return res
20
- ensure
21
- Process.kill 'KILL', server rescue nil
22
- end
23
-
24
- def schedule_in_thread &block
25
- EM.run do
26
- EM.synchrony do
27
- block.call
28
- EM.stop
29
- end
30
- end
31
- end
32
-
33
- def wait_for_service_start port, timeout = 5
34
- (timeout / 0.1).to_i.times.each do
35
- sleep 0.1
36
- break if TCPSocket.new('127.0.0.1', port) rescue nil
37
- end
38
- end
8
+ include Rack::Test::Methods
39
9
  end
data/test/test_app.rb CHANGED
@@ -1,16 +1,33 @@
1
1
  require 'helper'
2
2
 
3
3
  describe 'sinatra-symphony app' do
4
+ def app
5
+ Sinatra::Symphony::Test.new(@myapp)
6
+ end
7
+
4
8
  it 'should run' do
5
- myapp = Class.new(Sinatra::Symphony) do
9
+ @myapp = Class.new(Sinatra::Symphony) do
6
10
  get '/hello' do
7
11
  'world'
8
12
  end
9
13
  end
10
14
 
11
- http = schedule(myapp) {|base_uri| EM::HttpRequest.new((base_uri + '/hello').to_s).get}
12
- assert http
13
- assert_equal 200, http.response_header.status
14
- assert_equal 'world', http.response
15
+ get '/hello'
16
+ assert_equal 200, last_response.status
17
+ assert_equal 'world', last_response.body
18
+ end
19
+
20
+ it 'should work with rack-test' do
21
+ @myapp = Class.new(Sinatra::Symphony) do
22
+ get '/' do
23
+ http = EM::HttpRequest.new('http://www.google.com/foobar').get
24
+ status http.response_header.status
25
+ '404'
26
+ end
27
+ end
28
+
29
+ get '/'
30
+ assert_equal 404, last_response.status
31
+ assert_equal '404', last_response.body
15
32
  end
16
33
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-symphony
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-11 00:00:00.000000000 Z
12
+ date: 2012-05-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra
@@ -91,6 +91,22 @@ dependencies:
91
91
  - - ! '>='
92
92
  - !ruby/object:Gem::Version
93
93
  version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: rack-test
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
94
110
  - !ruby/object:Gem::Dependency
95
111
  name: em-http-request
96
112
  requirement: !ruby/object:Gem::Requirement
@@ -107,7 +123,7 @@ dependencies:
107
123
  - - ! '>='
108
124
  - !ruby/object:Gem::Version
109
125
  version: '0'
110
- description: em-synchrony glue for sinatra
126
+ description: em-synchrony glue for sinatra.
111
127
  email:
112
128
  - deepfryed@gmail.com
113
129
  executables: []
@@ -117,6 +133,7 @@ files:
117
133
  - test/helper.rb
118
134
  - test/test_app.rb
119
135
  - lib/sinatra/symphony.rb
136
+ - lib/sinatra/symphony/test.rb
120
137
  - lib/sinatra-symphony.rb
121
138
  - README.md
122
139
  homepage: http://github.com/deepfryed/sinatra-symphony
@@ -139,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
139
156
  version: '0'
140
157
  requirements: []
141
158
  rubyforge_project:
142
- rubygems_version: 1.8.21
159
+ rubygems_version: 1.8.24
143
160
  signing_key:
144
161
  specification_version: 3
145
162
  summary: em-synchrony glue for sinatra