Commit de726f5b671455151e1a50ff6a2c72952c600370
1 parent
16015844
Exists in
master
and in
1 other branch
Parse Hoptoad XML to create errors/notices.
Showing
11 changed files
with
332 additions
and
5 deletions
Show diff stats
Gemfile
1 | source 'http://rubygems.org' | 1 | source 'http://rubygems.org' |
2 | 2 | ||
3 | gem 'rails', '3.0.0.rc' | 3 | gem 'rails', '3.0.0.rc' |
4 | -gem 'nokogiri' | 4 | +gem 'libxml-ruby' |
5 | gem 'bson_ext', :require => nil | 5 | gem 'bson_ext', :require => nil |
6 | gem 'mongoid', '2.0.0.beta.15' | 6 | gem 'mongoid', '2.0.0.beta.15' |
7 | gem 'haml' | 7 | gem 'haml' |
8 | 8 | ||
9 | +group :development, :test do | ||
10 | + gem 'rspec-rails', '>= 2.0.0.beta.19' | ||
11 | +end | ||
12 | + | ||
9 | group :test do | 13 | group :test do |
10 | gem 'rspec', '>= 2.0.0.beta.19' | 14 | gem 'rspec', '>= 2.0.0.beta.19' |
11 | - gem 'rspec-rails', '>= 2.0.0.beta.19' | 15 | + gem 'database_cleaner', '0.5.2' |
12 | end | 16 | end |
Gemfile.lock
@@ -33,10 +33,13 @@ GEM | @@ -33,10 +33,13 @@ GEM | ||
33 | bson (1.0.4) | 33 | bson (1.0.4) |
34 | bson_ext (1.0.4) | 34 | bson_ext (1.0.4) |
35 | builder (2.1.2) | 35 | builder (2.1.2) |
36 | + database_cleaner (0.5.2) | ||
36 | diff-lcs (1.1.2) | 37 | diff-lcs (1.1.2) |
37 | erubis (2.6.6) | 38 | erubis (2.6.6) |
38 | abstract (>= 1.0.0) | 39 | abstract (>= 1.0.0) |
40 | + haml (3.0.15) | ||
39 | i18n (0.4.1) | 41 | i18n (0.4.1) |
42 | + libxml-ruby (1.1.4) | ||
40 | mail (2.2.5) | 43 | mail (2.2.5) |
41 | activesupport (>= 2.3.6) | 44 | activesupport (>= 2.3.6) |
42 | mime-types | 45 | mime-types |
@@ -97,8 +100,10 @@ PLATFORMS | @@ -97,8 +100,10 @@ PLATFORMS | ||
97 | 100 | ||
98 | DEPENDENCIES | 101 | DEPENDENCIES |
99 | bson_ext | 102 | bson_ext |
103 | + database_cleaner (= 0.5.2) | ||
104 | + haml | ||
105 | + libxml-ruby | ||
100 | mongoid (= 2.0.0.beta.15) | 106 | mongoid (= 2.0.0.beta.15) |
101 | - nokogiri | ||
102 | rails (= 3.0.0.rc) | 107 | rails (= 3.0.0.rc) |
103 | rspec (>= 2.0.0.beta.19) | 108 | rspec (>= 2.0.0.beta.19) |
104 | rspec-rails (>= 2.0.0.beta.19) | 109 | rspec-rails (>= 2.0.0.beta.19) |
Rakefile
@@ -3,5 +3,9 @@ | @@ -3,5 +3,9 @@ | ||
3 | 3 | ||
4 | require File.expand_path('../config/application', __FILE__) | 4 | require File.expand_path('../config/application', __FILE__) |
5 | require 'rake' | 5 | require 'rake' |
6 | +require 'bundler' | ||
6 | 7 | ||
7 | Hypnotoad::Application.load_tasks | 8 | Hypnotoad::Application.load_tasks |
9 | + | ||
10 | +Rake::Task[:default].clear | ||
11 | +task :default => ['spec'] | ||
8 | \ No newline at end of file | 12 | \ No newline at end of file |
@@ -0,0 +1,32 @@ | @@ -0,0 +1,32 @@ | ||
1 | +require 'hoptoad' | ||
2 | + | ||
3 | +class Notice | ||
4 | + include Mongoid::Document | ||
5 | + | ||
6 | + field :backtrace, :type => Array | ||
7 | + field :server_environment, :type => Hash | ||
8 | + field :request, :type => Hash | ||
9 | + field :notifier, :type => Hash | ||
10 | + | ||
11 | + embedded_in :error, :inverse_of => :notices | ||
12 | + | ||
13 | + def self.from_xml(hoptoad_xml) | ||
14 | + hoptoad_notice = Hoptoad::V2.parse_xml(hoptoad_xml) | ||
15 | + | ||
16 | + error = Error.for({ | ||
17 | + :class_name => hoptoad_notice['error']['class'], | ||
18 | + :message => hoptoad_notice['error']['message'], | ||
19 | + :component => hoptoad_notice['request']['component'], | ||
20 | + :action => hoptoad_notice['request']['action'], | ||
21 | + :environment => hoptoad_notice['server-environment']['environment-name'] | ||
22 | + }) | ||
23 | + | ||
24 | + error.notices.create({ | ||
25 | + :backtrace => hoptoad_notice['error']['backtrace']['line'], | ||
26 | + :server_environment => hoptoad_notice['server-environment'], | ||
27 | + :request => hoptoad_notice['request'], | ||
28 | + :notifier => hoptoad_notice['notifier'] | ||
29 | + }) | ||
30 | + end | ||
31 | + | ||
32 | +end | ||
0 | \ No newline at end of file | 33 | \ No newline at end of file |
config/initializers/xml_backend.rb
@@ -0,0 +1,35 @@ | @@ -0,0 +1,35 @@ | ||
1 | +module Hoptoad | ||
2 | + module V2 | ||
3 | + | ||
4 | + def self.parse_xml(xml) | ||
5 | + parsed = ActiveSupport::XmlMini.backend.parse(xml)['notice'] | ||
6 | + rekey(parsed) | ||
7 | + end | ||
8 | + | ||
9 | + private | ||
10 | + | ||
11 | + def self.rekey(node) | ||
12 | + if node.is_a?(Hash) && node.has_key?('var') && node.has_key?('key') | ||
13 | + {node['key'] => rekey(node['var'])} | ||
14 | + elsif node.is_a?(Hash) && node.has_key?('var') | ||
15 | + rekey(node['var']) | ||
16 | + elsif node.is_a?(Hash) && node.has_key?('__content__') && node.has_key?('key') | ||
17 | + {node['key'] => node['__content__']} | ||
18 | + elsif node.is_a?(Hash) && node.has_key?('__content__') | ||
19 | + node['__content__'] | ||
20 | + elsif node.is_a?(Hash) | ||
21 | + node.inject({}) {|rekeyed, (key,val)| | ||
22 | + rekeyed.merge(key => rekey(val)) | ||
23 | + } | ||
24 | + elsif node.is_a?(Array) && node.first.has_key?('key') | ||
25 | + node.inject({}) {|rekeyed,keypair| | ||
26 | + rekeyed.merge(rekey(keypair)) | ||
27 | + } | ||
28 | + elsif node.is_a?(Array) | ||
29 | + node.map {|n| rekey(n)} | ||
30 | + else | ||
31 | + node | ||
32 | + end | ||
33 | + end | ||
34 | + end | ||
35 | +end | ||
0 | \ No newline at end of file | 36 | \ No newline at end of file |
@@ -0,0 +1,147 @@ | @@ -0,0 +1,147 @@ | ||
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<notice version="2.0"> | ||
3 | + <api-key>ALLGLORYTOTHEHYPNOTOAD</api-key> | ||
4 | + <notifier> | ||
5 | + <name>Hoptoad Notifier</name> | ||
6 | + <version>2.3.2</version> | ||
7 | + <url>http://hoptoadapp.com</url> | ||
8 | + </notifier> | ||
9 | + <error> | ||
10 | + <class>HoptoadTestingException</class> | ||
11 | + <message>HoptoadTestingException: Testing hoptoad via "rake hoptoad:test". If you can see this, it works.</message> | ||
12 | + <backtrace> | ||
13 | + <line number="425" file="[GEM_ROOT]/gems/activesupport-3.0.0.rc/lib/active_support/callbacks.rb" method="_run__2115867319__process_action__262109504__callbacks"/> | ||
14 | + <line number="404" file="[GEM_ROOT]/gems/activesupport-3.0.0.rc/lib/active_support/callbacks.rb" method="send"/> | ||
15 | + <line number="404" file="[GEM_ROOT]/gems/activesupport-3.0.0.rc/lib/active_support/callbacks.rb" method="_run_process_action_callbacks"/> | ||
16 | + <line number="93" file="[GEM_ROOT]/gems/activesupport-3.0.0.rc/lib/active_support/callbacks.rb" method="send"/> | ||
17 | + <line number="93" file="[GEM_ROOT]/gems/activesupport-3.0.0.rc/lib/active_support/callbacks.rb" method="run_callbacks"/> | ||
18 | + <line number="17" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/abstract_controller/callbacks.rb" method="process_action"/> | ||
19 | + <line number="30" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_controller/metal/instrumentation.rb" method="process_action"/> | ||
20 | + <line number="52" file="[GEM_ROOT]/gems/activesupport-3.0.0.rc/lib/active_support/notifications.rb" method="instrument"/> | ||
21 | + <line number="21" file="[GEM_ROOT]/gems/activesupport-3.0.0.rc/lib/active_support/notifications/instrumenter.rb" method="instrument"/> | ||
22 | + <line number="52" file="[GEM_ROOT]/gems/activesupport-3.0.0.rc/lib/active_support/notifications.rb" method="instrument"/> | ||
23 | + <line number="29" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_controller/metal/instrumentation.rb" method="process_action"/> | ||
24 | + <line number="17" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_controller/metal/rescue.rb" method="process_action"/> | ||
25 | + <line number="105" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/abstract_controller/base.rb" method="process"/> | ||
26 | + <line number="40" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/abstract_controller/rendering.rb" method="process"/> | ||
27 | + <line number="133" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_controller/metal.rb" method="dispatch"/> | ||
28 | + <line number="14" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_controller/metal/rack_delegation.rb" method="dispatch"/> | ||
29 | + <line number="173" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_controller/metal.rb" method="action"/> | ||
30 | + <line number="62" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_dispatch/routing/route_set.rb" method="call"/> | ||
31 | + <line number="62" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_dispatch/routing/route_set.rb" method="dispatch"/> | ||
32 | + <line number="27" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_dispatch/routing/route_set.rb" method="call"/> | ||
33 | + <line number="148" file="[GEM_ROOT]/gems/rack-mount-0.6.9/lib/rack/mount/route_set.rb" method="call"/> | ||
34 | + <line number="89" file="[GEM_ROOT]/gems/rack-mount-0.6.9/lib/rack/mount/code_generation.rb" method="recognize"/> | ||
35 | + <line number="66" file="[GEM_ROOT]/gems/rack-mount-0.6.9/lib/rack/mount/code_generation.rb" method="optimized_each"/> | ||
36 | + <line number="88" file="[GEM_ROOT]/gems/rack-mount-0.6.9/lib/rack/mount/code_generation.rb" method="recognize"/> | ||
37 | + <line number="139" file="[GEM_ROOT]/gems/rack-mount-0.6.9/lib/rack/mount/route_set.rb" method="call"/> | ||
38 | + <line number="489" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_dispatch/routing/route_set.rb" method="call"/> | ||
39 | + <line number="41" file="[GEM_ROOT]/gems/haml-3.0.15/lib/sass/plugin/rack.rb" method="call"/> | ||
40 | + <line number="14" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_dispatch/middleware/head.rb" method="call"/> | ||
41 | + <line number="24" file="[GEM_ROOT]/gems/rack-1.2.1/lib/rack/methodoverride.rb" method="call"/> | ||
42 | + <line number="21" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_dispatch/middleware/params_parser.rb" method="call"/> | ||
43 | + <line number="177" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_dispatch/middleware/flash.rb" method="call"/> | ||
44 | + <line number="149" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_dispatch/middleware/session/abstract_store.rb" method="call"/> | ||
45 | + <line number="268" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_dispatch/middleware/cookies.rb" method="call"/> | ||
46 | + <line number="32" file="[GEM_ROOT]/gems/activerecord-3.0.0.rc/lib/active_record/query_cache.rb" method="call"/> | ||
47 | + <line number="28" file="[GEM_ROOT]/gems/activerecord-3.0.0.rc/lib/active_record/connection_adapters/abstract/query_cache.rb" method="cache"/> | ||
48 | + <line number="12" file="[GEM_ROOT]/gems/activerecord-3.0.0.rc/lib/active_record/query_cache.rb" method="cache"/> | ||
49 | + <line number="31" file="[GEM_ROOT]/gems/activerecord-3.0.0.rc/lib/active_record/query_cache.rb" method="call"/> | ||
50 | + <line number="46" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_dispatch/middleware/callbacks.rb" method="call"/> | ||
51 | + <line number="410" file="[GEM_ROOT]/gems/activesupport-3.0.0.rc/lib/active_support/callbacks.rb" method="_run_call_callbacks"/> | ||
52 | + <line number="44" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_dispatch/middleware/callbacks.rb" method="call"/> | ||
53 | + <line number="107" file="[GEM_ROOT]/gems/rack-1.2.1/lib/rack/sendfile.rb" method="call"/> | ||
54 | + <line number="48" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_dispatch/middleware/remote_ip.rb" method="call"/> | ||
55 | + <line number="48" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_dispatch/middleware/show_exceptions.rb" method="call"/> | ||
56 | + <line number="13" file="[GEM_ROOT]/gems/railties-3.0.0.rc/lib/rails/rack/logger.rb" method="call"/> | ||
57 | + <line number="17" file="[GEM_ROOT]/gems/rack-1.2.1/lib/rack/runtime.rb" method="call"/> | ||
58 | + <line number="72" file="[GEM_ROOT]/gems/activesupport-3.0.0.rc/lib/active_support/cache/strategy/local_cache.rb" method="call"/> | ||
59 | + <line number="11" file="[GEM_ROOT]/gems/rack-1.2.1/lib/rack/lock.rb" method="call"/> | ||
60 | + <line number="11" file="[GEM_ROOT]/gems/rack-1.2.1/lib/rack/lock.rb" method="synchronize"/> | ||
61 | + <line number="11" file="[GEM_ROOT]/gems/rack-1.2.1/lib/rack/lock.rb" method="call"/> | ||
62 | + <line number="30" file="[GEM_ROOT]/gems/actionpack-3.0.0.rc/lib/action_dispatch/middleware/static.rb" method="call"/> | ||
63 | + <line number="168" file="[GEM_ROOT]/gems/railties-3.0.0.rc/lib/rails/application.rb" method="call"/> | ||
64 | + <line number="77" file="[GEM_ROOT]/gems/railties-3.0.0.rc/lib/rails/application.rb" method="send"/> | ||
65 | + <line number="77" file="[GEM_ROOT]/gems/railties-3.0.0.rc/lib/rails/application.rb" method="method_missing"/> | ||
66 | + <line number="636" file="[GEM_ROOT]/gems/rake-0.8.7/lib/rake.rb" method="call"/> | ||
67 | + <line number="636" file="[GEM_ROOT]/gems/rake-0.8.7/lib/rake.rb" method="execute"/> | ||
68 | + <line number="631" file="[GEM_ROOT]/gems/rake-0.8.7/lib/rake.rb" method="each"/> | ||
69 | + <line number="631" file="[GEM_ROOT]/gems/rake-0.8.7/lib/rake.rb" method="execute"/> | ||
70 | + <line number="597" file="[GEM_ROOT]/gems/rake-0.8.7/lib/rake.rb" method="invoke_with_call_chain"/> | ||
71 | + <line number="242" file="/Users/jdpace/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/1.8/monitor.rb" method="synchronize"/> | ||
72 | + <line number="590" file="[GEM_ROOT]/gems/rake-0.8.7/lib/rake.rb" method="invoke_with_call_chain"/> | ||
73 | + <line number="583" file="[GEM_ROOT]/gems/rake-0.8.7/lib/rake.rb" method="invoke"/> | ||
74 | + <line number="2051" file="[GEM_ROOT]/gems/rake-0.8.7/lib/rake.rb" method="invoke_task"/> | ||
75 | + <line number="2029" file="[GEM_ROOT]/gems/rake-0.8.7/lib/rake.rb" method="top_level"/> | ||
76 | + <line number="2029" file="[GEM_ROOT]/gems/rake-0.8.7/lib/rake.rb" method="each"/> | ||
77 | + <line number="2029" file="[GEM_ROOT]/gems/rake-0.8.7/lib/rake.rb" method="top_level"/> | ||
78 | + <line number="2068" file="[GEM_ROOT]/gems/rake-0.8.7/lib/rake.rb" method="standard_exception_handling"/> | ||
79 | + <line number="2023" file="[GEM_ROOT]/gems/rake-0.8.7/lib/rake.rb" method="top_level"/> | ||
80 | + <line number="2001" file="[GEM_ROOT]/gems/rake-0.8.7/lib/rake.rb" method="run"/> | ||
81 | + <line number="2068" file="[GEM_ROOT]/gems/rake-0.8.7/lib/rake.rb" method="standard_exception_handling"/> | ||
82 | + <line number="1998" file="[GEM_ROOT]/gems/rake-0.8.7/lib/rake.rb" method="run"/> | ||
83 | + <line number="31" file="[GEM_ROOT]/gems/rake-0.8.7/bin/rake" method=""/> | ||
84 | + <line number="19" file="[GEM_ROOT]/bin/rake" method="load"/> | ||
85 | + <line number="19" file="[GEM_ROOT]/bin/rake" method=""/> | ||
86 | + </backtrace> | ||
87 | + </error> | ||
88 | + <request> | ||
89 | + <url>http://example.org/verify</url> | ||
90 | + <component>application</component> | ||
91 | + <action>verify</action> | ||
92 | + <params> | ||
93 | + <var key="action">verify</var> | ||
94 | + <var key="controller">application</var> | ||
95 | + </params> | ||
96 | + <cgi-data> | ||
97 | + <var key="rack.session"/> | ||
98 | + <var key="action_dispatch.request.formats">text/html</var> | ||
99 | + <var key="action_dispatch.request.parameters"> | ||
100 | + <var key="action">verify</var> | ||
101 | + <var key="controller">application</var> | ||
102 | + </var> | ||
103 | + <var key="SERVER_NAME">example.org</var> | ||
104 | + <var key="rack.url_scheme">http</var> | ||
105 | + <var key="action_dispatch.remote_ip"/> | ||
106 | + <var key="CONTENT_LENGTH">0</var> | ||
107 | + <var key="rack.errors">#<StringIO:0x103d9dec0></var> | ||
108 | + <var key="action_dispatch.request.unsigned_session_cookie"/> | ||
109 | + <var key="action_dispatch.request.query_parameters"/> | ||
110 | + <var key="HTTPS">off</var> | ||
111 | + <var key="rack.run_once">false</var> | ||
112 | + <var key="PATH_INFO">/verify</var> | ||
113 | + <var key="action_dispatch.secret_token">994f235e3372684bc736dd11842b754d2ddcffc8c2958d33a29527c3217becd6655fa4653a318bc7c34131f9baf2acc0c424ed07e48e0e5e87c6cd34d711e985</var> | ||
114 | + <var key="rack.version">11</var> | ||
115 | + <var key="SCRIPT_NAME"/> | ||
116 | + <var key="action_dispatch.request.path_parameters"> | ||
117 | + <var key="action">verify</var> | ||
118 | + <var key="controller">application</var> | ||
119 | + </var> | ||
120 | + <var key="rack.multithread">false</var> | ||
121 | + <var key="action_dispatch.parameter_filter">password</var> | ||
122 | + <var key="action_dispatch.cookies"/> | ||
123 | + <var key="action_dispatch.request.request_parameters"/> | ||
124 | + <var key="rack.multiprocess">true</var> | ||
125 | + <var key="rack.request.query_hash"/> | ||
126 | + <var key="SERVER_PORT">80</var> | ||
127 | + <var key="REQUEST_METHOD">GET</var> | ||
128 | + <var key="action_controller.instance">#<ApplicationController:0x103d2f560></var> | ||
129 | + <var key="rack.session.options"> | ||
130 | + <var key="secure">false</var> | ||
131 | + <var key="httponly">true</var> | ||
132 | + <var key="path">/</var> | ||
133 | + <var key="expire_after"/> | ||
134 | + <var key="domain"/> | ||
135 | + <var key="id"/> | ||
136 | + </var> | ||
137 | + <var key="rack.input">#<StringIO:0x103d9dc90></var> | ||
138 | + <var key="action_dispatch.request.content_type"/> | ||
139 | + <var key="rack.request.query_string"/> | ||
140 | + <var key="QUERY_STRING"/> | ||
141 | + </cgi-data> | ||
142 | + </request> | ||
143 | + <server-environment> | ||
144 | + <project-root>/path/to/sample/project</project-root> | ||
145 | + <environment-name>development</environment-name> | ||
146 | + </server-environment> | ||
147 | +</notice> | ||
0 | \ No newline at end of file | 148 | \ No newline at end of file |
@@ -0,0 +1,29 @@ | @@ -0,0 +1,29 @@ | ||
1 | +require 'spec_helper' | ||
2 | + | ||
3 | +describe Error do | ||
4 | + | ||
5 | + context '#for' do | ||
6 | + before do | ||
7 | + @conditions = { | ||
8 | + :class_name => 'Whoops', | ||
9 | + :message => 'Whoops: Oopsy Daisy', | ||
10 | + :component => 'Foo', | ||
11 | + :action => 'bar', | ||
12 | + :environment => 'production' | ||
13 | + } | ||
14 | + end | ||
15 | + | ||
16 | + it 'returns the correct error if one already exists' do | ||
17 | + existing = Error.create(@conditions) | ||
18 | + Error.for(@conditions).should == existing | ||
19 | + end | ||
20 | + | ||
21 | + it 'creates a new error if a matching one does not already exist' do | ||
22 | + Error.where(@conditions).exists?.should == false | ||
23 | + lambda { | ||
24 | + Error.for(@conditions) | ||
25 | + }.should change(Error,:count).by(1) | ||
26 | + end | ||
27 | + end | ||
28 | + | ||
29 | +end | ||
0 | \ No newline at end of file | 30 | \ No newline at end of file |
@@ -0,0 +1,55 @@ | @@ -0,0 +1,55 @@ | ||
1 | +require 'spec_helper' | ||
2 | + | ||
3 | +describe Notice do | ||
4 | + | ||
5 | + context '#from_xml' do | ||
6 | + before do | ||
7 | + @xml = Rails.root.join('spec','fixtures','hoptoad_test_notice.xml').read | ||
8 | + end | ||
9 | + | ||
10 | + it 'finds the correct error for the notice' do | ||
11 | + Error.should_receive(:for).with({ | ||
12 | + :class_name => 'HoptoadTestingException', | ||
13 | + :message => 'HoptoadTestingException: Testing hoptoad via "rake hoptoad:test". If you can see this, it works.', | ||
14 | + :component => 'application', | ||
15 | + :action => 'verify', | ||
16 | + :environment => 'development' | ||
17 | + }).and_return(err = Error.new) | ||
18 | + err.notices.stub(:create) | ||
19 | + @notice = Notice.from_xml(@xml) | ||
20 | + end | ||
21 | + | ||
22 | + it 'should create a new notice' do | ||
23 | + @notice = Notice.from_xml(@xml) | ||
24 | + @notice.should be_persisted | ||
25 | + end | ||
26 | + | ||
27 | + it 'assigns an error to the notice' do | ||
28 | + @notice = Notice.from_xml(@xml) | ||
29 | + @notice.error.should be_an(Error) | ||
30 | + end | ||
31 | + | ||
32 | + it 'captures the backtrace' do | ||
33 | + @notice = Notice.from_xml(@xml) | ||
34 | + @notice.backtrace.size.should == 73 | ||
35 | + @notice.backtrace.last['file'].should == '[GEM_ROOT]/bin/rake' | ||
36 | + end | ||
37 | + | ||
38 | + it 'captures the server_environment' do | ||
39 | + @notice = Notice.from_xml(@xml) | ||
40 | + @notice.server_environment['environment-name'].should == 'development' | ||
41 | + end | ||
42 | + | ||
43 | + it 'captures the request' do | ||
44 | + @notice = Notice.from_xml(@xml) | ||
45 | + @notice.request['url'].should == 'http://example.org/verify' | ||
46 | + @notice.request['params']['controller'].should == 'application' | ||
47 | + end | ||
48 | + | ||
49 | + it 'captures the notifier' do | ||
50 | + @notice = Notice.from_xml(@xml) | ||
51 | + @notice.notifier['name'].should == 'Hoptoad Notifier' | ||
52 | + end | ||
53 | + end | ||
54 | + | ||
55 | +end | ||
0 | \ No newline at end of file | 56 | \ No newline at end of file |
spec/spec_helper.rb
@@ -3,6 +3,7 @@ | @@ -3,6 +3,7 @@ | ||
3 | ENV["RAILS_ENV"] ||= 'test' | 3 | ENV["RAILS_ENV"] ||= 'test' |
4 | require File.expand_path("../../config/environment", __FILE__) | 4 | require File.expand_path("../../config/environment", __FILE__) |
5 | require 'rspec/rails' | 5 | require 'rspec/rails' |
6 | +require 'database_cleaner' | ||
6 | 7 | ||
7 | # Requires supporting files with custom matchers and macros, etc, | 8 | # Requires supporting files with custom matchers and macros, etc, |
8 | # in ./support/ and its subdirectories. | 9 | # in ./support/ and its subdirectories. |
@@ -10,5 +11,10 @@ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f} | @@ -10,5 +11,10 @@ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f} | ||
10 | 11 | ||
11 | RSpec.configure do |config| | 12 | RSpec.configure do |config| |
12 | config.mock_with :rspec | 13 | config.mock_with :rspec |
13 | - config.fixture_path = "#{::Rails.root}/spec/fixtures" | 14 | + |
15 | + config.before(:each) do | ||
16 | + DatabaseCleaner.orm = "mongoid" | ||
17 | + DatabaseCleaner.strategy = :truncation | ||
18 | + DatabaseCleaner.clean | ||
19 | + end | ||
14 | end | 20 | end |