daredevil 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +18 -0
  4. data/config/locales/daredevil.yml +14 -0
  5. data/lib/daredevil.rb +60 -0
  6. data/lib/daredevil/configuration.rb +22 -0
  7. data/lib/daredevil/engine.rb +6 -0
  8. data/lib/daredevil/errors.rb +41 -0
  9. data/lib/daredevil/responder.rb +126 -0
  10. data/lib/daredevil/responder/actions.rb +92 -0
  11. data/lib/daredevil/responder/responses.rb +30 -0
  12. data/lib/daredevil/responder/sanitizers.rb +18 -0
  13. data/lib/daredevil/utils/rack_helper.rb +13 -0
  14. data/lib/daredevil/version.rb +3 -0
  15. data/test/daredevil_test.rb +15 -0
  16. data/test/dummy/README.rdoc +28 -0
  17. data/test/dummy/Rakefile +6 -0
  18. data/test/dummy/app/controllers/application_controller.rb +4 -0
  19. data/test/dummy/app/controllers/posts_controller.rb +44 -0
  20. data/test/dummy/app/models/application_record.rb +3 -0
  21. data/test/dummy/app/models/post.rb +3 -0
  22. data/test/dummy/app/serializers/kustom_post_serializer.rb +3 -0
  23. data/test/dummy/app/serializers/post_serializer.rb +3 -0
  24. data/test/dummy/app/views/posts/_post.json.jbuilder +1 -0
  25. data/test/dummy/app/views/posts/index.json.jbuilder +5 -0
  26. data/test/dummy/app/views/posts/show.json.jbuilder +4 -0
  27. data/test/dummy/bin/bundle +3 -0
  28. data/test/dummy/bin/rails +4 -0
  29. data/test/dummy/bin/rake +4 -0
  30. data/test/dummy/bin/setup +29 -0
  31. data/test/dummy/config.ru +4 -0
  32. data/test/dummy/config/application.rb +14 -0
  33. data/test/dummy/config/boot.rb +5 -0
  34. data/test/dummy/config/database.yml +25 -0
  35. data/test/dummy/config/environment.rb +5 -0
  36. data/test/dummy/config/environments/development.rb +41 -0
  37. data/test/dummy/config/environments/test.rb +42 -0
  38. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  39. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  40. data/test/dummy/config/initializers/session_store.rb +3 -0
  41. data/test/dummy/config/initializers/to_time_preserves_timezone.rb +10 -0
  42. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  43. data/test/dummy/config/locales/en.yml +23 -0
  44. data/test/dummy/config/routes.rb +3 -0
  45. data/test/dummy/config/secrets.yml +22 -0
  46. data/test/dummy/db/development.sqlite3 +0 -0
  47. data/test/dummy/db/migrate/20170713181802_create_posts.rb +8 -0
  48. data/test/dummy/db/schema.rb +20 -0
  49. data/test/dummy/db/test.sqlite3 +0 -0
  50. data/test/dummy/log/development.log +12878 -0
  51. data/test/dummy/log/test.log +5 -0
  52. data/test/factories/posts.rb +6 -0
  53. data/test/post_jbuilder_test.rb +27 -0
  54. data/test/post_test.rb +77 -0
  55. data/test/reports/TEST-DaredevilTest.xml +9 -0
  56. data/test/reports/TEST-PostJbuilderTest.xml +7 -0
  57. data/test/reports/TEST-PostTest.xml +17 -0
  58. data/test/test_helper.rb +20 -0
  59. metadata +174 -0
@@ -0,0 +1,5 @@
1
+  (0.1ms) begin transaction
2
+ -------------------------
3
+ DaredevilTest: test_truth
4
+ -------------------------
5
+  (0.0ms) rollback transaction
@@ -0,0 +1,6 @@
1
+ FactoryGirl.define do
2
+ factory :post do
3
+ title 'I love ruby a lot'
4
+ body 'On a scale from 1 to 10 it is certainly a unicorn.'
5
+ end
6
+ end
@@ -0,0 +1,27 @@
1
+ require 'test_helper'
2
+
3
+ class PostJbuilderTest < ActionDispatch::IntegrationTest
4
+ setup do
5
+ @post = create(:post)
6
+ @params = { params: { format: :json } }
7
+ end
8
+
9
+ test 'normal success response' do
10
+ get posts_url, @params
11
+ r = JSON.parse(response.body)
12
+ assert r.is_a?(Array)
13
+
14
+ sample = r.first
15
+ assert sample['id'].present?
16
+ assert_equal 'I love ruby a lot', sample['title']
17
+ assert_response :success
18
+ end
19
+
20
+ test 'show response' do
21
+ get post_path(@post), @params
22
+ r = JSON.parse(response.body)
23
+ assert r['id'].present?
24
+ assert_equal 'I love ruby a lot', r['title']
25
+ assert_response :success
26
+ end
27
+ end
@@ -0,0 +1,77 @@
1
+ require 'test_helper'
2
+
3
+ class PostTest < ActionDispatch::IntegrationTest
4
+ # Setup by setting serializers as the responder type
5
+ # Must teardown after this test class runs to reset to default
6
+ setup do
7
+ Daredevil.config.config.responder_type = :serializers
8
+ @post = create(:post)
9
+ @params = { params: { format: :json } }
10
+ end
11
+
12
+ teardown do
13
+ Daredevil.config.config.responder_type = :jbuilder
14
+ end
15
+
16
+ test 'normal success response' do
17
+ get posts_url, @params
18
+ assert_response :success
19
+ end
20
+
21
+ test 'serializer response show' do
22
+ get post_path(@post), @params
23
+ r = JSON.parse(response.body)
24
+ assert r['id'].present?
25
+ assert_equal 'I love ruby a lot', r['title']
26
+ assert_response :success
27
+ end
28
+
29
+ test 'custom serializer response show' do
30
+ skip
31
+ PostsController.stubs(:respond_with).with(@post, serializer: KustomPostSerializer)
32
+ get post_path(@post), @params
33
+ r = JSON.parse(response.body)
34
+ refute r['id'].present?
35
+ assert_equal 'I love ruby a lot', r['title']
36
+ assert_response :success
37
+ end
38
+
39
+ test 'rescue RecordNotFound' do
40
+ assert_nothing_raised do
41
+ get post_path(2), @params
42
+ end
43
+
44
+ r = JSON.parse(response.body)
45
+ assert_response :not_found
46
+ assert_equal 404, r['status']
47
+ assert_equal 'Not found', r['message']
48
+ assert_equal 'Post', r['resource']
49
+ end
50
+
51
+ test 'rescue ParameterMissing' do
52
+ assert_nothing_raised do
53
+ post posts_path, @params
54
+ end
55
+
56
+ r = JSON.parse(response.body)
57
+ assert_equal 422, r['status']
58
+ assert_equal 'Missing Parameter', r['message']
59
+ assert_equal 'post', r['resource']
60
+ assert_equal 'Please supply the post param', r['detail']
61
+ end
62
+
63
+ test 'post create with blank attribute' do
64
+ @post = attributes_for(:post, title: nil)
65
+ post posts_path, params: { post: @post, format: :json }
66
+ assert_response :unprocessable_entity
67
+
68
+ r = JSON.parse(response.body)
69
+ assert_equal 422, r['status']
70
+ assert_equal 'Invalid Attribute', r['message']
71
+ assert_equal 1, r['errors'].size
72
+ assert_equal 'Post', r['errors'][0]['resource']
73
+ assert_equal 'title', r['errors'][0]['field']
74
+ assert_equal 'can\'t be blank', r['errors'][0]['reason']
75
+ assert_equal 'Title can\'t be blank', r['errors'][0]['detail']
76
+ end
77
+ end
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <testsuite time='0.001125' skipped='0' failures='0' errors='0' name="DaredevilTest" assertions='3' tests='3'>
3
+ <testcase time='0.000523' file="test/daredevil_test.rb" name="test_configuration_defaults_to_jbuilder" assertions='1'>
4
+ </testcase>
5
+ <testcase time='0.000286' file="test/daredevil_test.rb" name="test_it_has_a_gem_version" assertions='1'>
6
+ </testcase>
7
+ <testcase time='0.000316' file="test/daredevil_test.rb" name="test_Daredevil_is_actually_a_thing" assertions='1'>
8
+ </testcase>
9
+ </testsuite>
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <testsuite time='0.024558' skipped='0' failures='0' errors='0' name="PostJbuilderTest" assertions='7' tests='2'>
3
+ <testcase time='0.014719' file="test/post_jbuilder_test.rb" name="test_normal_success_response" assertions='4'>
4
+ </testcase>
5
+ <testcase time='0.009839' file="test/post_jbuilder_test.rb" name="test_show_response" assertions='3'>
6
+ </testcase>
7
+ </testsuite>
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <testsuite time='0.182819' skipped='1' failures='0' errors='0' name="PostTest" assertions='20' tests='6'>
3
+ <testcase time='0.148914' file="test/post_test.rb" name="test_normal_success_response" assertions='1'>
4
+ </testcase>
5
+ <testcase time='0.001733' file="test/post_test.rb" name="test_custom_serializer_response_show" assertions='0'>
6
+ <skipped type='Minitest::Skip' message="Skipped, no message given">
7
+ </skipped>
8
+ </testcase>
9
+ <testcase time='0.012014' file="test/post_test.rb" name="test_rescue_RecordNotFound" assertions='4'>
10
+ </testcase>
11
+ <testcase time='0.009188' file="test/post_test.rb" name="test_rescue_ParameterMissing" assertions='4'>
12
+ </testcase>
13
+ <testcase time='0.005293' file="test/post_test.rb" name="test_serializer_response_show" assertions='3'>
14
+ </testcase>
15
+ <testcase time='0.005677' file="test/post_test.rb" name="test_post_create_with_blank_attribute" assertions='8'>
16
+ </testcase>
17
+ </testsuite>
@@ -0,0 +1,20 @@
1
+ require File.expand_path("../../test/dummy/config/environment.rb", __FILE__)
2
+ ActiveRecord::Migrator.migrations_paths = [File.expand_path("../../test/dummy/db/migrate", __FILE__)]
3
+
4
+ require "rails/test_help"
5
+ require 'mocha/mini_test'
6
+ require 'minitest/reporters'
7
+
8
+ # Filter out Minitest backtrace while allowing backtrace from other libraries
9
+ # to be shown.
10
+ Minitest.backtrace_filter = Minitest::BacktraceFilter.new
11
+
12
+ # Load support files
13
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
14
+
15
+ reporter_options = { color: true }
16
+ Minitest::Reporters.use! [Minitest::Reporters::DefaultReporter.new(reporter_options)]
17
+
18
+ class ActiveSupport::TestCase
19
+ include FactoryGirl::Syntax::Methods
20
+ end
metadata ADDED
@@ -0,0 +1,174 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: daredevil
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Kevin Brown
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-08-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 4.2.8
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 4.2.8
27
+ - !ruby/object:Gem::Dependency
28
+ name: sqlite3
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Daredevil provides insight into JSON API errors with friendly messages,
42
+ verbose error details, and it's dead simple.
43
+ email:
44
+ - chevinbrown@gmail.com
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - MIT-LICENSE
50
+ - Rakefile
51
+ - config/locales/daredevil.yml
52
+ - lib/daredevil.rb
53
+ - lib/daredevil/configuration.rb
54
+ - lib/daredevil/engine.rb
55
+ - lib/daredevil/errors.rb
56
+ - lib/daredevil/responder.rb
57
+ - lib/daredevil/responder/actions.rb
58
+ - lib/daredevil/responder/responses.rb
59
+ - lib/daredevil/responder/sanitizers.rb
60
+ - lib/daredevil/utils/rack_helper.rb
61
+ - lib/daredevil/version.rb
62
+ - test/daredevil_test.rb
63
+ - test/dummy/README.rdoc
64
+ - test/dummy/Rakefile
65
+ - test/dummy/app/controllers/application_controller.rb
66
+ - test/dummy/app/controllers/posts_controller.rb
67
+ - test/dummy/app/models/application_record.rb
68
+ - test/dummy/app/models/post.rb
69
+ - test/dummy/app/serializers/kustom_post_serializer.rb
70
+ - test/dummy/app/serializers/post_serializer.rb
71
+ - test/dummy/app/views/posts/_post.json.jbuilder
72
+ - test/dummy/app/views/posts/index.json.jbuilder
73
+ - test/dummy/app/views/posts/show.json.jbuilder
74
+ - test/dummy/bin/bundle
75
+ - test/dummy/bin/rails
76
+ - test/dummy/bin/rake
77
+ - test/dummy/bin/setup
78
+ - test/dummy/config.ru
79
+ - test/dummy/config/application.rb
80
+ - test/dummy/config/boot.rb
81
+ - test/dummy/config/database.yml
82
+ - test/dummy/config/environment.rb
83
+ - test/dummy/config/environments/development.rb
84
+ - test/dummy/config/environments/test.rb
85
+ - test/dummy/config/initializers/cookies_serializer.rb
86
+ - test/dummy/config/initializers/filter_parameter_logging.rb
87
+ - test/dummy/config/initializers/session_store.rb
88
+ - test/dummy/config/initializers/to_time_preserves_timezone.rb
89
+ - test/dummy/config/initializers/wrap_parameters.rb
90
+ - test/dummy/config/locales/en.yml
91
+ - test/dummy/config/routes.rb
92
+ - test/dummy/config/secrets.yml
93
+ - test/dummy/db/development.sqlite3
94
+ - test/dummy/db/migrate/20170713181802_create_posts.rb
95
+ - test/dummy/db/schema.rb
96
+ - test/dummy/db/test.sqlite3
97
+ - test/dummy/log/development.log
98
+ - test/dummy/log/test.log
99
+ - test/factories/posts.rb
100
+ - test/post_jbuilder_test.rb
101
+ - test/post_test.rb
102
+ - test/reports/TEST-DaredevilTest.xml
103
+ - test/reports/TEST-PostJbuilderTest.xml
104
+ - test/reports/TEST-PostTest.xml
105
+ - test/test_helper.rb
106
+ homepage: http://github.com/proctoru/daredevil
107
+ licenses:
108
+ - MIT
109
+ metadata: {}
110
+ post_install_message:
111
+ rdoc_options: []
112
+ require_paths:
113
+ - lib
114
+ required_ruby_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ required_rubygems_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ requirements: []
125
+ rubyforge_project:
126
+ rubygems_version: 2.6.8
127
+ signing_key:
128
+ specification_version: 4
129
+ summary: JSON API errors insight.
130
+ test_files:
131
+ - test/daredevil_test.rb
132
+ - test/dummy/app/controllers/application_controller.rb
133
+ - test/dummy/app/controllers/posts_controller.rb
134
+ - test/dummy/app/models/application_record.rb
135
+ - test/dummy/app/models/post.rb
136
+ - test/dummy/app/serializers/kustom_post_serializer.rb
137
+ - test/dummy/app/serializers/post_serializer.rb
138
+ - test/dummy/app/views/posts/_post.json.jbuilder
139
+ - test/dummy/app/views/posts/index.json.jbuilder
140
+ - test/dummy/app/views/posts/show.json.jbuilder
141
+ - test/dummy/bin/bundle
142
+ - test/dummy/bin/rails
143
+ - test/dummy/bin/rake
144
+ - test/dummy/bin/setup
145
+ - test/dummy/config/application.rb
146
+ - test/dummy/config/boot.rb
147
+ - test/dummy/config/database.yml
148
+ - test/dummy/config/environment.rb
149
+ - test/dummy/config/environments/development.rb
150
+ - test/dummy/config/environments/test.rb
151
+ - test/dummy/config/initializers/cookies_serializer.rb
152
+ - test/dummy/config/initializers/filter_parameter_logging.rb
153
+ - test/dummy/config/initializers/session_store.rb
154
+ - test/dummy/config/initializers/to_time_preserves_timezone.rb
155
+ - test/dummy/config/initializers/wrap_parameters.rb
156
+ - test/dummy/config/locales/en.yml
157
+ - test/dummy/config/routes.rb
158
+ - test/dummy/config/secrets.yml
159
+ - test/dummy/config.ru
160
+ - test/dummy/db/development.sqlite3
161
+ - test/dummy/db/migrate/20170713181802_create_posts.rb
162
+ - test/dummy/db/schema.rb
163
+ - test/dummy/db/test.sqlite3
164
+ - test/dummy/log/development.log
165
+ - test/dummy/log/test.log
166
+ - test/dummy/Rakefile
167
+ - test/dummy/README.rdoc
168
+ - test/factories/posts.rb
169
+ - test/post_jbuilder_test.rb
170
+ - test/post_test.rb
171
+ - test/reports/TEST-DaredevilTest.xml
172
+ - test/reports/TEST-PostJbuilderTest.xml
173
+ - test/reports/TEST-PostTest.xml
174
+ - test/test_helper.rb