restspec 0.0.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.
Files changed (202) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +21 -0
  3. data/.gitignore +23 -0
  4. data/.rspec +4 -0
  5. data/Gemfile +4 -0
  6. data/Guardfile +6 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +188 -0
  9. data/ROADMAP.md +11 -0
  10. data/Rakefile +20 -0
  11. data/bin/restspec +54 -0
  12. data/bin/templates/Gemfile +3 -0
  13. data/bin/templates/custom_macros.rb +3 -0
  14. data/bin/templates/restspec_config.rb +10 -0
  15. data/bin/templates/spec_helper.rb +19 -0
  16. data/docs/endpoints.md +200 -0
  17. data/docs/helpers.md +40 -0
  18. data/docs/macros.md +140 -0
  19. data/docs/matchers.md +38 -0
  20. data/docs/schemas.md +28 -0
  21. data/docs/tutorial.md +477 -0
  22. data/docs/types.md +134 -0
  23. data/examples/store-api-tests/.rspec +3 -0
  24. data/examples/store-api-tests/Gemfile +4 -0
  25. data/examples/store-api-tests/Gemfile.lock +70 -0
  26. data/examples/store-api-tests/spec/api/category_spec.rb +23 -0
  27. data/examples/store-api-tests/spec/api/product_spec.rb +55 -0
  28. data/examples/store-api-tests/spec/api/restspec/endpoints.rb +39 -0
  29. data/examples/store-api-tests/spec/api/restspec/requirements.rb +0 -0
  30. data/examples/store-api-tests/spec/api/restspec/restspec_config.rb +6 -0
  31. data/examples/store-api-tests/spec/api/restspec/schemas.rb +11 -0
  32. data/examples/store-api-tests/spec/spec_helper.rb +19 -0
  33. data/examples/store-api-tests/spec/support/custom_macros.rb +3 -0
  34. data/examples/store-api-tests/spec/support/custom_matchers.rb +0 -0
  35. data/examples/store-api/.editorconfig +24 -0
  36. data/examples/store-api/.rbenv-vars.example +3 -0
  37. data/examples/store-api/.rspec +4 -0
  38. data/examples/store-api/.ruby-version +1 -0
  39. data/examples/store-api/Gemfile +58 -0
  40. data/examples/store-api/Gemfile.lock +216 -0
  41. data/examples/store-api/Guardfile +39 -0
  42. data/examples/store-api/README.md +1 -0
  43. data/examples/store-api/Rakefile +6 -0
  44. data/examples/store-api/app/assets/images/.keep +0 -0
  45. data/examples/store-api/app/assets/javascripts/application.js +16 -0
  46. data/examples/store-api/app/assets/javascripts/categories.js.coffee +3 -0
  47. data/examples/store-api/app/assets/javascripts/products.js.coffee +3 -0
  48. data/examples/store-api/app/assets/stylesheets/application.css +15 -0
  49. data/examples/store-api/app/assets/stylesheets/categories.css.scss +3 -0
  50. data/examples/store-api/app/assets/stylesheets/products.css.scss +3 -0
  51. data/examples/store-api/app/assets/stylesheets/scaffolds.css.scss +69 -0
  52. data/examples/store-api/app/controllers/application_controller.rb +5 -0
  53. data/examples/store-api/app/controllers/categories_controller.rb +74 -0
  54. data/examples/store-api/app/controllers/concerns/.keep +0 -0
  55. data/examples/store-api/app/controllers/products_controller.rb +74 -0
  56. data/examples/store-api/app/helpers/application_helper.rb +2 -0
  57. data/examples/store-api/app/helpers/categories_helper.rb +2 -0
  58. data/examples/store-api/app/helpers/products_helper.rb +2 -0
  59. data/examples/store-api/app/mailers/.keep +0 -0
  60. data/examples/store-api/app/models/.keep +0 -0
  61. data/examples/store-api/app/models/category.rb +2 -0
  62. data/examples/store-api/app/models/concerns/.keep +0 -0
  63. data/examples/store-api/app/models/product.rb +3 -0
  64. data/examples/store-api/app/views/categories/_form.html.erb +21 -0
  65. data/examples/store-api/app/views/categories/edit.html.erb +6 -0
  66. data/examples/store-api/app/views/categories/index.html.erb +25 -0
  67. data/examples/store-api/app/views/categories/index.json.jbuilder +4 -0
  68. data/examples/store-api/app/views/categories/new.html.erb +5 -0
  69. data/examples/store-api/app/views/categories/show.html.erb +9 -0
  70. data/examples/store-api/app/views/categories/show.json.jbuilder +1 -0
  71. data/examples/store-api/app/views/layouts/application.html.erb +14 -0
  72. data/examples/store-api/app/views/products/_form.html.erb +29 -0
  73. data/examples/store-api/app/views/products/edit.html.erb +6 -0
  74. data/examples/store-api/app/views/products/index.html.erb +29 -0
  75. data/examples/store-api/app/views/products/index.json.jbuilder +4 -0
  76. data/examples/store-api/app/views/products/new.html.erb +5 -0
  77. data/examples/store-api/app/views/products/show.html.erb +19 -0
  78. data/examples/store-api/app/views/products/show.json.jbuilder +6 -0
  79. data/examples/store-api/bin/bundle +3 -0
  80. data/examples/store-api/bin/guard +16 -0
  81. data/examples/store-api/bin/rails +8 -0
  82. data/examples/store-api/bin/rake +8 -0
  83. data/examples/store-api/bin/spring +18 -0
  84. data/examples/store-api/config.ru +4 -0
  85. data/examples/store-api/config/application.rb +30 -0
  86. data/examples/store-api/config/boot.rb +4 -0
  87. data/examples/store-api/config/database.yml +25 -0
  88. data/examples/store-api/config/environment.rb +5 -0
  89. data/examples/store-api/config/environments/development.rb +37 -0
  90. data/examples/store-api/config/environments/production.rb +78 -0
  91. data/examples/store-api/config/environments/test.rb +39 -0
  92. data/examples/store-api/config/initializers/assets.rb +8 -0
  93. data/examples/store-api/config/initializers/backtrace_silencers.rb +7 -0
  94. data/examples/store-api/config/initializers/cookies_serializer.rb +3 -0
  95. data/examples/store-api/config/initializers/filter_parameter_logging.rb +4 -0
  96. data/examples/store-api/config/initializers/inflections.rb +16 -0
  97. data/examples/store-api/config/initializers/mime_types.rb +4 -0
  98. data/examples/store-api/config/initializers/session_store.rb +3 -0
  99. data/examples/store-api/config/initializers/wrap_parameters.rb +14 -0
  100. data/examples/store-api/config/locales/en.yml +23 -0
  101. data/examples/store-api/config/routes.rb +59 -0
  102. data/examples/store-api/config/secrets.yml +22 -0
  103. data/examples/store-api/db/migrate/20141205154816_create_products.rb +11 -0
  104. data/examples/store-api/db/migrate/20141205171104_create_categories.rb +9 -0
  105. data/examples/store-api/db/migrate/20141205171140_add_category_id_to_products.rb +5 -0
  106. data/examples/store-api/db/schema.rb +31 -0
  107. data/examples/store-api/db/seeds.rb +7 -0
  108. data/examples/store-api/lib/assets/.keep +0 -0
  109. data/examples/store-api/lib/tasks/.keep +0 -0
  110. data/examples/store-api/log/.keep +0 -0
  111. data/examples/store-api/public/404.html +67 -0
  112. data/examples/store-api/public/422.html +67 -0
  113. data/examples/store-api/public/500.html +66 -0
  114. data/examples/store-api/public/favicon.ico +0 -0
  115. data/examples/store-api/public/robots.txt +5 -0
  116. data/examples/store-api/spec/controllers/categories_controller_spec.rb +159 -0
  117. data/examples/store-api/spec/controllers/products_controller_spec.rb +159 -0
  118. data/examples/store-api/spec/factories/categories.rb +6 -0
  119. data/examples/store-api/spec/factories/products.rb +8 -0
  120. data/examples/store-api/spec/helpers/categories_helper_spec.rb +15 -0
  121. data/examples/store-api/spec/helpers/products_helper_spec.rb +15 -0
  122. data/examples/store-api/spec/models/category_spec.rb +5 -0
  123. data/examples/store-api/spec/models/product_spec.rb +5 -0
  124. data/examples/store-api/spec/rails_helper.rb +50 -0
  125. data/examples/store-api/spec/requests/categories_spec.rb +10 -0
  126. data/examples/store-api/spec/requests/products_spec.rb +10 -0
  127. data/examples/store-api/spec/routing/categories_routing_spec.rb +35 -0
  128. data/examples/store-api/spec/routing/products_routing_spec.rb +35 -0
  129. data/examples/store-api/spec/spec_helper.rb +85 -0
  130. data/examples/store-api/spec/views/categories/edit.html.erb_spec.rb +18 -0
  131. data/examples/store-api/spec/views/categories/index.html.erb_spec.rb +19 -0
  132. data/examples/store-api/spec/views/categories/new.html.erb_spec.rb +18 -0
  133. data/examples/store-api/spec/views/categories/show.html.erb_spec.rb +14 -0
  134. data/examples/store-api/spec/views/products/edit.html.erb_spec.rb +24 -0
  135. data/examples/store-api/spec/views/products/index.html.erb_spec.rb +25 -0
  136. data/examples/store-api/spec/views/products/new.html.erb_spec.rb +24 -0
  137. data/examples/store-api/spec/views/products/show.html.erb_spec.rb +18 -0
  138. data/examples/store-api/vendor/assets/javascripts/.keep +0 -0
  139. data/examples/store-api/vendor/assets/stylesheets/.keep +0 -0
  140. data/lib/restspec.rb +38 -0
  141. data/lib/restspec/configuration.rb +43 -0
  142. data/lib/restspec/endpoints/dsl.rb +142 -0
  143. data/lib/restspec/endpoints/endpoint.rb +135 -0
  144. data/lib/restspec/endpoints/namespace.rb +89 -0
  145. data/lib/restspec/endpoints/network.rb +39 -0
  146. data/lib/restspec/endpoints/request.rb +11 -0
  147. data/lib/restspec/endpoints/response.rb +53 -0
  148. data/lib/restspec/requirements/dsl.rb +10 -0
  149. data/lib/restspec/requirements/requirement.rb +59 -0
  150. data/lib/restspec/rspec/api_helpers.rb +64 -0
  151. data/lib/restspec/rspec/api_macros.rb +126 -0
  152. data/lib/restspec/rspec/extras.rb +2 -0
  153. data/lib/restspec/rspec/matchers/api_matchers.rb +6 -0
  154. data/lib/restspec/rspec/matchers/be_like_schema.rb +18 -0
  155. data/lib/restspec/rspec/matchers/be_like_schema_array.rb +18 -0
  156. data/lib/restspec/rspec/matchers/have_header.rb +47 -0
  157. data/lib/restspec/rspec/matchers/have_status.rb +17 -0
  158. data/lib/restspec/rspec/matchers/include_where.rb +14 -0
  159. data/lib/restspec/rspec/shared_examples.rb +12 -0
  160. data/lib/restspec/schema/attribute.rb +31 -0
  161. data/lib/restspec/schema/attribute_example.rb +21 -0
  162. data/lib/restspec/schema/checker.rb +73 -0
  163. data/lib/restspec/schema/dsl.rb +36 -0
  164. data/lib/restspec/schema/schema.rb +21 -0
  165. data/lib/restspec/schema/schema_example.rb +28 -0
  166. data/lib/restspec/schema/types.rb +35 -0
  167. data/lib/restspec/schema/types/array_type.rb +34 -0
  168. data/lib/restspec/schema/types/basic_type.rb +35 -0
  169. data/lib/restspec/schema/types/boolean_type.rb +11 -0
  170. data/lib/restspec/schema/types/decimal_string_type.rb +32 -0
  171. data/lib/restspec/schema/types/decimal_type.rb +14 -0
  172. data/lib/restspec/schema/types/embedded_schema_type.rb +28 -0
  173. data/lib/restspec/schema/types/hash_type.rb +25 -0
  174. data/lib/restspec/schema/types/integer_type.rb +11 -0
  175. data/lib/restspec/schema/types/null_type.rb +11 -0
  176. data/lib/restspec/schema/types/one_of_type.rb +21 -0
  177. data/lib/restspec/schema/types/schema_id_type.rb +88 -0
  178. data/lib/restspec/schema/types/string_type.rb +11 -0
  179. data/lib/restspec/shortcuts.rb +8 -0
  180. data/lib/restspec/stores/endpoint_store.rb +25 -0
  181. data/lib/restspec/stores/namespace_store.rb +20 -0
  182. data/lib/restspec/stores/schema_store.rb +19 -0
  183. data/lib/restspec/values/status_code.rb +13 -0
  184. data/lib/restspec/values/super_hash.rb +12 -0
  185. data/lib/restspec/version.rb +3 -0
  186. data/restspec.gemspec +37 -0
  187. data/spec/restspec/endpoints/dsl_spec.rb +269 -0
  188. data/spec/restspec/endpoints/endpoint_spec.rb +146 -0
  189. data/spec/restspec/endpoints/namespace_spec.rb +143 -0
  190. data/spec/restspec/endpoints/response_spec.rb +49 -0
  191. data/spec/restspec/schema/attribute_example_spec.rb +35 -0
  192. data/spec/restspec/schema/dsl_spec.rb +78 -0
  193. data/spec/restspec/schema/schema_example_spec.rb +40 -0
  194. data/spec/restspec/schema/schema_spec.rb +11 -0
  195. data/spec/restspec/schema/types/array_type_spec.rb +56 -0
  196. data/spec/restspec/schema/types/basic_type_spec.rb +62 -0
  197. data/spec/restspec/schema/types/boolean_type_spec.rb +26 -0
  198. data/spec/restspec/schema/types/null_type_spec.rb +25 -0
  199. data/spec/restspec/schema/types/string_type_spec.rb +26 -0
  200. data/spec/restspec/values/status_code_spec.rb +13 -0
  201. data/spec/spec_helper.rb +23 -0
  202. metadata +484 -0
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/422.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The change you wanted was rejected.</h1>
62
+ <p>Maybe you tried to change something you didn't have access to.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,66 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/500.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>We're sorry, but something went wrong.</h1>
62
+ </div>
63
+ <p>If you are the application owner check the logs for more information.</p>
64
+ </div>
65
+ </body>
66
+ </html>
File without changes
@@ -0,0 +1,5 @@
1
+ # See http://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file
2
+ #
3
+ # To ban all spiders from the entire site uncomment the next two lines:
4
+ # User-agent: *
5
+ # Disallow: /
@@ -0,0 +1,159 @@
1
+ require 'rails_helper'
2
+
3
+ # This spec was generated by rspec-rails when you ran the scaffold generator.
4
+ # It demonstrates how one might use RSpec to specify the controller code that
5
+ # was generated by Rails when you ran the scaffold generator.
6
+ #
7
+ # It assumes that the implementation code is generated by the rails scaffold
8
+ # generator. If you are using any extension libraries to generate different
9
+ # controller code, this generated spec may or may not pass.
10
+ #
11
+ # It only uses APIs available in rails and/or rspec-rails. There are a number
12
+ # of tools you can use to make these specs even more expressive, but we're
13
+ # sticking to rails and rspec-rails APIs to keep things simple and stable.
14
+ #
15
+ # Compared to earlier versions of this generator, there is very limited use of
16
+ # stubs and message expectations in this spec. Stubs are only used when there
17
+ # is no simpler way to get a handle on the object needed for the example.
18
+ # Message expectations are only used when there is no simpler way to specify
19
+ # that an instance is receiving a specific message.
20
+
21
+ RSpec.describe CategoriesController, :type => :controller do
22
+
23
+ # This should return the minimal set of attributes required to create a valid
24
+ # Category. As you add validations to Category, be sure to
25
+ # adjust the attributes here as well.
26
+ let(:valid_attributes) {
27
+ skip("Add a hash of attributes valid for your model")
28
+ }
29
+
30
+ let(:invalid_attributes) {
31
+ skip("Add a hash of attributes invalid for your model")
32
+ }
33
+
34
+ # This should return the minimal set of values that should be in the session
35
+ # in order to pass any filters (e.g. authentication) defined in
36
+ # CategoriesController. Be sure to keep this updated too.
37
+ let(:valid_session) { {} }
38
+
39
+ describe "GET index" do
40
+ it "assigns all categories as @categories" do
41
+ category = Category.create! valid_attributes
42
+ get :index, {}, valid_session
43
+ expect(assigns(:categories)).to eq([category])
44
+ end
45
+ end
46
+
47
+ describe "GET show" do
48
+ it "assigns the requested category as @category" do
49
+ category = Category.create! valid_attributes
50
+ get :show, {:id => category.to_param}, valid_session
51
+ expect(assigns(:category)).to eq(category)
52
+ end
53
+ end
54
+
55
+ describe "GET new" do
56
+ it "assigns a new category as @category" do
57
+ get :new, {}, valid_session
58
+ expect(assigns(:category)).to be_a_new(Category)
59
+ end
60
+ end
61
+
62
+ describe "GET edit" do
63
+ it "assigns the requested category as @category" do
64
+ category = Category.create! valid_attributes
65
+ get :edit, {:id => category.to_param}, valid_session
66
+ expect(assigns(:category)).to eq(category)
67
+ end
68
+ end
69
+
70
+ describe "POST create" do
71
+ describe "with valid params" do
72
+ it "creates a new Category" do
73
+ expect {
74
+ post :create, {:category => valid_attributes}, valid_session
75
+ }.to change(Category, :count).by(1)
76
+ end
77
+
78
+ it "assigns a newly created category as @category" do
79
+ post :create, {:category => valid_attributes}, valid_session
80
+ expect(assigns(:category)).to be_a(Category)
81
+ expect(assigns(:category)).to be_persisted
82
+ end
83
+
84
+ it "redirects to the created category" do
85
+ post :create, {:category => valid_attributes}, valid_session
86
+ expect(response).to redirect_to(Category.last)
87
+ end
88
+ end
89
+
90
+ describe "with invalid params" do
91
+ it "assigns a newly created but unsaved category as @category" do
92
+ post :create, {:category => invalid_attributes}, valid_session
93
+ expect(assigns(:category)).to be_a_new(Category)
94
+ end
95
+
96
+ it "re-renders the 'new' template" do
97
+ post :create, {:category => invalid_attributes}, valid_session
98
+ expect(response).to render_template("new")
99
+ end
100
+ end
101
+ end
102
+
103
+ describe "PUT update" do
104
+ describe "with valid params" do
105
+ let(:new_attributes) {
106
+ skip("Add a hash of attributes valid for your model")
107
+ }
108
+
109
+ it "updates the requested category" do
110
+ category = Category.create! valid_attributes
111
+ put :update, {:id => category.to_param, :category => new_attributes}, valid_session
112
+ category.reload
113
+ skip("Add assertions for updated state")
114
+ end
115
+
116
+ it "assigns the requested category as @category" do
117
+ category = Category.create! valid_attributes
118
+ put :update, {:id => category.to_param, :category => valid_attributes}, valid_session
119
+ expect(assigns(:category)).to eq(category)
120
+ end
121
+
122
+ it "redirects to the category" do
123
+ category = Category.create! valid_attributes
124
+ put :update, {:id => category.to_param, :category => valid_attributes}, valid_session
125
+ expect(response).to redirect_to(category)
126
+ end
127
+ end
128
+
129
+ describe "with invalid params" do
130
+ it "assigns the category as @category" do
131
+ category = Category.create! valid_attributes
132
+ put :update, {:id => category.to_param, :category => invalid_attributes}, valid_session
133
+ expect(assigns(:category)).to eq(category)
134
+ end
135
+
136
+ it "re-renders the 'edit' template" do
137
+ category = Category.create! valid_attributes
138
+ put :update, {:id => category.to_param, :category => invalid_attributes}, valid_session
139
+ expect(response).to render_template("edit")
140
+ end
141
+ end
142
+ end
143
+
144
+ describe "DELETE destroy" do
145
+ it "destroys the requested category" do
146
+ category = Category.create! valid_attributes
147
+ expect {
148
+ delete :destroy, {:id => category.to_param}, valid_session
149
+ }.to change(Category, :count).by(-1)
150
+ end
151
+
152
+ it "redirects to the categories list" do
153
+ category = Category.create! valid_attributes
154
+ delete :destroy, {:id => category.to_param}, valid_session
155
+ expect(response).to redirect_to(categories_url)
156
+ end
157
+ end
158
+
159
+ end
@@ -0,0 +1,159 @@
1
+ require 'rails_helper'
2
+
3
+ # This spec was generated by rspec-rails when you ran the scaffold generator.
4
+ # It demonstrates how one might use RSpec to specify the controller code that
5
+ # was generated by Rails when you ran the scaffold generator.
6
+ #
7
+ # It assumes that the implementation code is generated by the rails scaffold
8
+ # generator. If you are using any extension libraries to generate different
9
+ # controller code, this generated spec may or may not pass.
10
+ #
11
+ # It only uses APIs available in rails and/or rspec-rails. There are a number
12
+ # of tools you can use to make these specs even more expressive, but we're
13
+ # sticking to rails and rspec-rails APIs to keep things simple and stable.
14
+ #
15
+ # Compared to earlier versions of this generator, there is very limited use of
16
+ # stubs and message expectations in this spec. Stubs are only used when there
17
+ # is no simpler way to get a handle on the object needed for the example.
18
+ # Message expectations are only used when there is no simpler way to specify
19
+ # that an instance is receiving a specific message.
20
+
21
+ RSpec.describe ProductsController, :type => :controller do
22
+
23
+ # This should return the minimal set of attributes required to create a valid
24
+ # Product. As you add validations to Product, be sure to
25
+ # adjust the attributes here as well.
26
+ let(:valid_attributes) {
27
+ skip("Add a hash of attributes valid for your model")
28
+ }
29
+
30
+ let(:invalid_attributes) {
31
+ skip("Add a hash of attributes invalid for your model")
32
+ }
33
+
34
+ # This should return the minimal set of values that should be in the session
35
+ # in order to pass any filters (e.g. authentication) defined in
36
+ # ProductsController. Be sure to keep this updated too.
37
+ let(:valid_session) { {} }
38
+
39
+ describe "GET index" do
40
+ it "assigns all products as @products" do
41
+ product = Product.create! valid_attributes
42
+ get :index, {}, valid_session
43
+ expect(assigns(:products)).to eq([product])
44
+ end
45
+ end
46
+
47
+ describe "GET show" do
48
+ it "assigns the requested product as @product" do
49
+ product = Product.create! valid_attributes
50
+ get :show, {:id => product.to_param}, valid_session
51
+ expect(assigns(:product)).to eq(product)
52
+ end
53
+ end
54
+
55
+ describe "GET new" do
56
+ it "assigns a new product as @product" do
57
+ get :new, {}, valid_session
58
+ expect(assigns(:product)).to be_a_new(Product)
59
+ end
60
+ end
61
+
62
+ describe "GET edit" do
63
+ it "assigns the requested product as @product" do
64
+ product = Product.create! valid_attributes
65
+ get :edit, {:id => product.to_param}, valid_session
66
+ expect(assigns(:product)).to eq(product)
67
+ end
68
+ end
69
+
70
+ describe "POST create" do
71
+ describe "with valid params" do
72
+ it "creates a new Product" do
73
+ expect {
74
+ post :create, {:product => valid_attributes}, valid_session
75
+ }.to change(Product, :count).by(1)
76
+ end
77
+
78
+ it "assigns a newly created product as @product" do
79
+ post :create, {:product => valid_attributes}, valid_session
80
+ expect(assigns(:product)).to be_a(Product)
81
+ expect(assigns(:product)).to be_persisted
82
+ end
83
+
84
+ it "redirects to the created product" do
85
+ post :create, {:product => valid_attributes}, valid_session
86
+ expect(response).to redirect_to(Product.last)
87
+ end
88
+ end
89
+
90
+ describe "with invalid params" do
91
+ it "assigns a newly created but unsaved product as @product" do
92
+ post :create, {:product => invalid_attributes}, valid_session
93
+ expect(assigns(:product)).to be_a_new(Product)
94
+ end
95
+
96
+ it "re-renders the 'new' template" do
97
+ post :create, {:product => invalid_attributes}, valid_session
98
+ expect(response).to render_template("new")
99
+ end
100
+ end
101
+ end
102
+
103
+ describe "PUT update" do
104
+ describe "with valid params" do
105
+ let(:new_attributes) {
106
+ skip("Add a hash of attributes valid for your model")
107
+ }
108
+
109
+ it "updates the requested product" do
110
+ product = Product.create! valid_attributes
111
+ put :update, {:id => product.to_param, :product => new_attributes}, valid_session
112
+ product.reload
113
+ skip("Add assertions for updated state")
114
+ end
115
+
116
+ it "assigns the requested product as @product" do
117
+ product = Product.create! valid_attributes
118
+ put :update, {:id => product.to_param, :product => valid_attributes}, valid_session
119
+ expect(assigns(:product)).to eq(product)
120
+ end
121
+
122
+ it "redirects to the product" do
123
+ product = Product.create! valid_attributes
124
+ put :update, {:id => product.to_param, :product => valid_attributes}, valid_session
125
+ expect(response).to redirect_to(product)
126
+ end
127
+ end
128
+
129
+ describe "with invalid params" do
130
+ it "assigns the product as @product" do
131
+ product = Product.create! valid_attributes
132
+ put :update, {:id => product.to_param, :product => invalid_attributes}, valid_session
133
+ expect(assigns(:product)).to eq(product)
134
+ end
135
+
136
+ it "re-renders the 'edit' template" do
137
+ product = Product.create! valid_attributes
138
+ put :update, {:id => product.to_param, :product => invalid_attributes}, valid_session
139
+ expect(response).to render_template("edit")
140
+ end
141
+ end
142
+ end
143
+
144
+ describe "DELETE destroy" do
145
+ it "destroys the requested product" do
146
+ product = Product.create! valid_attributes
147
+ expect {
148
+ delete :destroy, {:id => product.to_param}, valid_session
149
+ }.to change(Product, :count).by(-1)
150
+ end
151
+
152
+ it "redirects to the products list" do
153
+ product = Product.create! valid_attributes
154
+ delete :destroy, {:id => product.to_param}, valid_session
155
+ expect(response).to redirect_to(products_url)
156
+ end
157
+ end
158
+
159
+ end