cloudrider 0.1.2 → 0.1.3

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 (144) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -1
  3. data/cloudrider.gemspec +0 -3
  4. data/generica/app/assets/javascripts/adapters/admin/taxon.js.em +2 -0
  5. data/generica/app/assets/javascripts/components/hero-splash.js.em +1 -15
  6. data/generica/app/assets/javascripts/components/products-showcase.js.em +6 -0
  7. data/generica/app/assets/javascripts/components/select-locale.js.em +2 -2
  8. data/generica/app/assets/javascripts/components/tr-span.js.em +1 -0
  9. data/generica/app/assets/javascripts/components/tree/taxon-li.js.em +27 -2
  10. data/generica/app/assets/javascripts/components/tree/taxon-wrapper.js.em +5 -18
  11. data/generica/app/assets/javascripts/config/i18n-translations.js.ls +6 -2
  12. data/generica/app/assets/javascripts/config/router.js.ls +4 -1
  13. data/generica/app/assets/javascripts/controllers/admin/messages/index_controller.js.em +10 -0
  14. data/generica/app/assets/javascripts/controllers/admin/product/edit_controller.js.em +10 -1
  15. data/generica/app/assets/javascripts/controllers/admin/products/new_controller.js.em +6 -0
  16. data/generica/app/assets/javascripts/controllers/admin/taxon/edit_controller.js.em +17 -0
  17. data/generica/app/assets/javascripts/controllers/admin/taxons/new_controller.js.em +25 -0
  18. data/generica/app/assets/javascripts/controllers/messages/new_controller.js.em +16 -0
  19. data/generica/app/assets/javascripts/controllers/products/index_controller.js.em +5 -8
  20. data/generica/app/assets/javascripts/helpers/hash_ex.js.ls +6 -0
  21. data/generica/app/assets/javascripts/helpers/string_ex.js.ls +1 -1
  22. data/generica/app/assets/javascripts/models/admin/product.js.em +2 -0
  23. data/generica/app/assets/javascripts/models/admin/taxon.js.em +4 -1
  24. data/generica/app/assets/javascripts/models/message.js.em +7 -0
  25. data/generica/app/assets/javascripts/models/product.js.em +7 -2
  26. data/generica/app/assets/javascripts/models/taxon.js.em +3 -5
  27. data/generica/app/assets/javascripts/routes/admin/messages/index_route.js.em +1 -0
  28. data/generica/app/assets/javascripts/routes/admin/taxon_route.js.em +3 -0
  29. data/generica/app/assets/javascripts/routes/admin/taxons/index_route.js.em +1 -1
  30. data/generica/app/assets/javascripts/routes/admin/taxons/new_route.js.em +2 -0
  31. data/generica/app/assets/javascripts/routes/index_route.js.em +3 -2
  32. data/generica/app/assets/javascripts/routes/products/index_route.js.em +1 -1
  33. data/generica/app/assets/javascripts/templates/admin.emblem +17 -5
  34. data/generica/app/assets/javascripts/templates/admin/messages/index.emblem +19 -0
  35. data/generica/app/assets/javascripts/templates/admin/messages/slice.emblem +12 -0
  36. data/generica/app/assets/javascripts/templates/admin/product/edit.emblem +23 -6
  37. data/generica/app/assets/javascripts/templates/admin/products/new.emblem +17 -0
  38. data/generica/app/assets/javascripts/templates/admin/products/slice.emblem +6 -1
  39. data/generica/app/assets/javascripts/templates/admin/taxon/edit.emblem +36 -0
  40. data/generica/app/assets/javascripts/templates/admin/taxons/index.emblem +1 -1
  41. data/generica/app/assets/javascripts/templates/admin/taxons/new.emblem +40 -0
  42. data/generica/app/assets/javascripts/templates/admin/translations/index.emblem +1 -1
  43. data/generica/app/assets/javascripts/templates/components/product-display.emblem +4 -0
  44. data/generica/app/assets/javascripts/templates/components/product-listing.emblem +9 -0
  45. data/generica/app/assets/javascripts/templates/components/search-and-filter.emblem +1 -1
  46. data/generica/app/assets/javascripts/templates/components/site-nav/_top-nav.emblem +1 -1
  47. data/generica/app/assets/javascripts/templates/components/table-booths.emblem +3 -65
  48. data/generica/app/assets/javascripts/templates/components/tree-taxon-li.emblem +11 -3
  49. data/generica/app/assets/javascripts/templates/components/tree-taxon-ul.emblem +6 -7
  50. data/generica/app/assets/javascripts/templates/components/tree-taxon-wrapper.emblem +2 -2
  51. data/generica/app/assets/javascripts/templates/employees/index.emblem +32 -0
  52. data/generica/app/assets/javascripts/templates/index.emblem +2 -1
  53. data/generica/app/assets/javascripts/templates/messages/new.emblem +43 -0
  54. data/generica/app/assets/javascripts/templates/products/product/show.emblem +8 -0
  55. data/generica/app/assets/javascripts/transforms/form_data_transformer.js.ls +4 -0
  56. data/generica/app/assets/stylesheets/apiv1/_admin.css.scss +1 -0
  57. data/generica/app/assets/stylesheets/apiv1/admin/messages/_index.css.scss +34 -0
  58. data/generica/app/assets/stylesheets/apiv1/components/_product-display.css.scss +24 -0
  59. data/generica/app/assets/stylesheets/apiv1/components/_product-listing.css.scss +27 -2
  60. data/generica/app/assets/stylesheets/apiv1/components/_table-booths.css.scss +10 -0
  61. data/generica/app/assets/stylesheets/apiv1/components/_tree-taxon-wrapper.css.scss +37 -22
  62. data/generica/app/assets/stylesheets/apiv1/products/product/_show.css.scss +24 -0
  63. data/generica/app/assets/stylesheets/apiv1/shared/_constants.css.scss +2 -2
  64. data/generica/app/controllers/admin/taxons/create_controller.rb +26 -0
  65. data/generica/app/controllers/apiv1/i18n_translations/index_controller.rb +9 -5
  66. data/generica/app/controllers/apiv1/messages/create_controller.rb +17 -0
  67. data/generica/app/controllers/apiv1/messages/index_controller.rb +18 -0
  68. data/generica/app/controllers/apiv1/products/index_controller.rb +1 -1
  69. data/generica/app/controllers/apiv1/taxons/destroy_controller.rb +9 -0
  70. data/generica/app/controllers/apiv1/taxons/index_controller.rb +1 -0
  71. data/generica/app/controllers/apiv1/taxons/update_controller.rb +28 -0
  72. data/generica/app/controllers/apiv1/translations/create_controller.rb +5 -4
  73. data/generica/app/controllers/apiv1/translations/update_controller.rb +2 -2
  74. data/generica/app/models/admin/product_modifier.rb +16 -3
  75. data/generica/app/models/admin/taxon_factory.rb +23 -0
  76. data/generica/app/models/admin/taxon_relationships_factory.rb +32 -0
  77. data/generica/app/models/apiv1/employee.rb +1 -2
  78. data/generica/app/models/apiv1/message.rb +24 -0
  79. data/generica/app/models/apiv1/messages_machine.rb +31 -0
  80. data/generica/app/models/apiv1/product.rb +33 -13
  81. data/generica/app/models/apiv1/products_machine.rb +9 -1
  82. data/generica/app/models/apiv1/taxon.rb +8 -2
  83. data/generica/app/models/apiv1/translation.rb +73 -14
  84. data/generica/app/models/i18n/backend/active_record.rb +49 -0
  85. data/generica/app/varissets/javascripts/templates/components/introductory-lobby.emblem.erb +15 -1
  86. data/generica/app/varissets/javascripts/templates/components/table-booths.emblem.erb +39 -0
  87. data/generica/app/varissets/stylesheets/apiv1/components/_introductory-lobby.css.scss.erb +15 -1
  88. data/generica/app/varissets/stylesheets/apiv1/components/_table-booths.css.scss.erb +71 -0
  89. data/generica/config/initializers/i18n_backend.rb +7 -0
  90. data/generica/config/routes.rb +5 -2
  91. data/generica/db/migrate/20141010215459_create_apiv1_translations.rb +3 -1
  92. data/generica/db/migrate/20141105231548_add_showcase_priority_to_apiv1_products.rb +5 -0
  93. data/generica/db/migrate/20141107174821_create_apiv1_messages.rb +12 -0
  94. data/generica/db/schema.rb +11 -16
  95. data/generica/lib/tasks/production.rake +2 -1
  96. data/generica/spec/controllers/admin/taxons/create_controller_spec.rb +44 -0
  97. data/generica/spec/controllers/apiv1/messages/index_controller_spec.rb +5 -0
  98. data/generica/spec/controllers/apiv1/taxons/index_controller_spec.rb +59 -0
  99. data/generica/spec/controllers/apiv1/taxons/update_controller_spec.rb +54 -0
  100. data/generica/spec/controllers/apiv1/translations/create_controller_spec.rb +50 -0
  101. data/generica/spec/controllers/apiv1/translations/update_controller_spec.rb +54 -0
  102. data/generica/spec/factories/apiv1/product_factory.rb +12 -11
  103. data/generica/spec/models/admin/product_modifier_spec.rb +32 -0
  104. data/generica/spec/models/admin/taxon_relationships_factory_spec.rb +49 -0
  105. data/generica/spec/models/apiv1/message_spec.rb +16 -0
  106. data/generica/spec/models/apiv1/product_spec.rb +13 -12
  107. data/generica/spec/models/apiv1/translation_spec.rb +41 -0
  108. data/generica/spec/models/i18n/backend/active_record_spec.rb +27 -0
  109. data/lib/cloudrider/apiv1/base.rb +4 -4
  110. data/lib/cloudrider/apiv1/introductory_lobby_component.rb +1 -0
  111. data/lib/cloudrider/apiv1/introductory_lobby_sass.rb +9 -0
  112. data/lib/cloudrider/apiv1/table_booths_component.rb +6 -0
  113. data/lib/cloudrider/master_context.rb +105 -0
  114. data/lib/cloudrider/version.rb +1 -1
  115. metadata +43 -31
  116. data/generica/app/assets/javascripts/components/products-showcase.js.ls +0 -5
  117. data/generica/config/locales/ar.yml +0 -78
  118. data/generica/config/locales/ca.yml +0 -78
  119. data/generica/config/locales/cs.yml +0 -78
  120. data/generica/config/locales/da.yml +0 -78
  121. data/generica/config/locales/de.yml +0 -78
  122. data/generica/config/locales/el.yml +0 -78
  123. data/generica/config/locales/en.yml +0 -78
  124. data/generica/config/locales/es.yml +0 -78
  125. data/generica/config/locales/fi.yml +0 -78
  126. data/generica/config/locales/fr.yml +0 -78
  127. data/generica/config/locales/hu.yml +0 -78
  128. data/generica/config/locales/id.yml +0 -78
  129. data/generica/config/locales/is.yml +0 -78
  130. data/generica/config/locales/it.yml +0 -78
  131. data/generica/config/locales/ja.yml +0 -78
  132. data/generica/config/locales/ko.yml +0 -78
  133. data/generica/config/locales/ms.yml +0 -78
  134. data/generica/config/locales/nl.yml +0 -78
  135. data/generica/config/locales/no.yml +0 -78
  136. data/generica/config/locales/pl.yml +0 -78
  137. data/generica/config/locales/pt.yml +0 -78
  138. data/generica/config/locales/ru.yml +0 -78
  139. data/generica/config/locales/sv.yml +0 -78
  140. data/generica/config/locales/th.yml +0 -78
  141. data/generica/config/locales/tr.yml +0 -78
  142. data/generica/config/locales/zh-CN.yml +0 -78
  143. data/generica/config/locales/zh-TW.yml +0 -78
  144. data/lib/cloudrider/file_orders_maker.rb +0 -24
@@ -1,7 +1,8 @@
1
1
  namespace :production do
2
2
  desc "These tasks should be run once on a virgin fresh installation"
3
3
  task virgin: :environment do
4
-
4
+ Rake::Task["db:create"].invoke
5
+ Rake::Task["db:migrate"].invoke
5
6
  end
6
7
 
7
8
  desc "These tasks should be run everytime you restart the server"
@@ -0,0 +1,44 @@
1
+ require 'rails_helper'
2
+
3
+ describe Admin::Taxons::CreateController do
4
+ let(:user) { Admin::UserFactory.mock }
5
+ let(:create) { post :create, admin_taxon: @taxon_params }
6
+ before do
7
+ @taxon_params = {
8
+ taxon_name: "husky",
9
+ explanation: "cold weather dog"
10
+ }
11
+ end
12
+ before { controller.auto_login user }
13
+ context 'successful' do
14
+ subject { -> { create } }
15
+ specify { should change(Apiv1::Taxon, :count).by 1 }
16
+ end
17
+ context 'status' do
18
+ before { create }
19
+ subject { response.status }
20
+ specify { should eq 200 }
21
+ end
22
+ context 'body' do
23
+ before { create }
24
+ subject { response.body }
25
+ specify { should match /root_genus/ }
26
+ end
27
+ context 'errors' do
28
+ before do
29
+ @taxon_params = { dog: 1 }
30
+ create
31
+ end
32
+ subject { response.status }
33
+ specify { should eq 417 }
34
+ end
35
+ context 'errors' do
36
+ before do
37
+ @taxon_params = { dog: 1 }
38
+ create
39
+ end
40
+ subject { response.body }
41
+ specify { should match /can't be blank/ }
42
+ end
43
+ end
44
+
@@ -0,0 +1,5 @@
1
+ require 'rails_helper'
2
+
3
+ describe Apiv1::Messages::IndexController do
4
+
5
+ end
@@ -0,0 +1,59 @@
1
+ require 'rails_helper'
2
+
3
+ describe Apiv1::Taxons::IndexController do
4
+ before do
5
+ @place = Apiv1::Taxon.create! taxon_name: "place"
6
+ @material = Apiv1::Taxon.create! taxon_name: "material"
7
+ @place.children.create! taxon_name: "West Coast"
8
+ @place.children.create! taxon_name: "East Coast"
9
+ @place.children.create! taxon_name: "China"
10
+ @fish = @material.children.create! taxon_name: "fish"
11
+ @material.children.create! taxon_name: "plastic"
12
+ @fish.children.create! taxon_name: "shellfish"
13
+ @fish.children.create! taxon_name: "regular fish"
14
+ end
15
+ context 'everything' do
16
+ before { get :index }
17
+ context 'type' do
18
+ subject { JSON.parse(response.body)["taxons"] }
19
+ specify { should be_a Array }
20
+ end
21
+ context 'count' do
22
+ subject { JSON.parse(response.body)["taxons"].count }
23
+ specify { should eq Apiv1::Taxon.count }
24
+ end
25
+ end
26
+ context 'roots' do
27
+ before { get :index, parent_id: nil }
28
+ context 'count' do
29
+ subject { JSON.parse(response.body)["taxons"].count }
30
+ specify { should eq 2 }
31
+ end
32
+ context 'ids' do
33
+ subject { JSON.parse(response.body)["taxons"].map { |h| h["id"] } }
34
+ specify { should eq [@place.id, @material.id] }
35
+ end
36
+ end
37
+ context 'all of a root genus' do
38
+ before { get :index, root_genus: "place" }
39
+ context 'count' do
40
+ subject { JSON.parse(response.body)["taxons"].count }
41
+ specify { should eq 4 }
42
+ end
43
+ context 'ids' do
44
+ subject { JSON.parse(response.body)["taxons"].map { |h| h["id"] } }
45
+ specify { should eq [@place.id] + @place.children.map(&:id) }
46
+ end
47
+ end
48
+ context 'children of parent' do
49
+ before { get :index, parent_id: @material.id }
50
+ context 'count' do
51
+ subject { JSON.parse(response.body)["taxons"].count }
52
+ specify { should eq 2 }
53
+ end
54
+ context 'ids' do
55
+ subject { JSON.parse(response.body)["taxons"].map { |h| h["id"] } }
56
+ specify { should eq @material.children.map(&:id) }
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,54 @@
1
+ require 'rails_helper'
2
+
3
+ describe Apiv1::Taxons::UpdateController do
4
+ let(:taxon) { Apiv1::Taxon.create! taxon_name: "dog" }
5
+ let(:update) { put :update, id: taxon.id, taxon: @taxon_params }
6
+ let(:user) { Admin::UserFactory.mock }
7
+ before { controller.auto_login user }
8
+ context "success" do
9
+ before do
10
+ @taxon_params = { taxon_name: "cat" }
11
+ update
12
+ end
13
+ context 'status' do
14
+ subject { response.status }
15
+ specify { should eq 200 }
16
+ end
17
+ context 'response' do
18
+ subject { response.body }
19
+ specify { should match /taxon/ }
20
+ specify { should match /cat/ }
21
+ end
22
+ end
23
+ context 'failure' do
24
+ before do
25
+ @taxon_params = { taxon_name: "", explanation: "should not be valid" }
26
+ update
27
+ end
28
+ context 'status' do
29
+ subject { response.status }
30
+ specify { should eq 417 }
31
+ end
32
+ context 'response' do
33
+ subject { response.body }
34
+ specify { should match /can't be blank/ }
35
+ end
36
+ end
37
+ end
38
+
39
+
40
+
41
+ describe Apiv1::Taxons::UpdateController do
42
+ let(:taxon) { Apiv1::Taxon.create! taxon_name: "dog" }
43
+ let(:update) { put :update, id: taxon.id, taxon: @taxon_params }
44
+ context "not authorized" do
45
+ before do
46
+ @taxon_params = { taxon_name: "cat" }
47
+ update
48
+ end
49
+ context 'status' do
50
+ subject { response.status }
51
+ specify { should eq 401 }
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,50 @@
1
+ require "rails_helper"
2
+
3
+ describe Apiv1::Translations::CreateController do
4
+ let(:user) { Admin::UserFactory.mock }
5
+ before { controller.auto_login user }
6
+ let(:create) { post :create, translation: @translation_params }
7
+ context 'success' do
8
+ before do
9
+ @translation_params = {
10
+ key: "itsuka_kieteshimau_sozen",
11
+ translated_text: "konna fuu ni warau you ni",
12
+ locale: "en"
13
+ }
14
+ end
15
+ context 'creation' do
16
+ subject { -> { create } }
17
+ specify { should change(Apiv1::Translation, :count).by 1 }
18
+ end
19
+ context 'responses' do
20
+ before { create }
21
+ context 'status' do
22
+ subject { response.status }
23
+ specify { should eq 200 }
24
+ end
25
+ context 'body' do
26
+ subject { response.body }
27
+ specify { should match /konna fuu/ }
28
+ specify { should match /itsuka_ki/ }
29
+ end
30
+ end
31
+ end
32
+ context 'invalid' do
33
+ before { @translation_params = { locale: "ja" } }
34
+ context 'creation' do
35
+ subject { -> { create } }
36
+ specify { should_not change(Apiv1::Translation, :count) }
37
+ end
38
+ context 'responses' do
39
+ before { create }
40
+ context 'status' do
41
+ subject { response.status }
42
+ specify { should eq 417 }
43
+ end
44
+ context 'body' do
45
+ subject { response.body }
46
+ specify { should match /can't be blank/ }
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,54 @@
1
+ require 'rails_helper'
2
+
3
+ describe Apiv1::Translations::UpdateController do
4
+ let(:translation) { Apiv1::Translation.create! locale: "en", key: "tsuyosa_ni_kawaru_kara", value: "tsuyosa ni kawaru kara" }
5
+ let(:update) { put :update, id: translation.id, translation: @translation_params }
6
+ let(:user) { Admin::UserFactory.mock }
7
+ before { controller.auto_login user }
8
+ context "success" do
9
+ before do
10
+ @translation_params = { value: "because it becomes my strength" }
11
+ update
12
+ end
13
+ context 'status' do
14
+ subject { response.status }
15
+ specify { should eq 200 }
16
+ end
17
+ context 'response' do
18
+ subject { response.body }
19
+ specify { should match /tsuyosa/ }
20
+ specify { should match /strength/ }
21
+ end
22
+ end
23
+ context 'failure' do
24
+ before do
25
+ @translation_params = { value: "", key: "" }
26
+ update
27
+ end
28
+ context 'status' do
29
+ subject { response.status }
30
+ specify { should eq 417 }
31
+ end
32
+ context 'response' do
33
+ subject { response.body }
34
+ specify { should match /can't be blank/ }
35
+ end
36
+ end
37
+ end
38
+
39
+
40
+
41
+ describe Apiv1::Translations::UpdateController do
42
+ let(:translation) { Apiv1::Translation.create! locale: "en", key: "tsuyosa_ni_kawaru_kara", value: "tsuyosa ni kawaru kara" }
43
+ let(:update) { put :update, id: translation.id, translation: @translation_params }
44
+ context "not authorized" do
45
+ before do
46
+ @translation_params = { value: "because it becomes my strength" }
47
+ update
48
+ end
49
+ context 'status' do
50
+ subject { response.status }
51
+ specify { should eq 401 }
52
+ end
53
+ end
54
+ end
@@ -2,17 +2,18 @@
2
2
  #
3
3
  # Table name: apiv1_products
4
4
  #
5
- # id :integer not null, primary key
6
- # permalink :string(255)
7
- # sku :string(255)
8
- # material :string(255)
9
- # quality :string(255)
10
- # price :string(255)
11
- # amount :string(255)
12
- # place :string(255)
13
- # others :text
14
- # created_at :datetime
15
- # updated_at :datetime
5
+ # id :integer not null, primary key
6
+ # permalink :string(255)
7
+ # sku :string(255)
8
+ # material :string(255)
9
+ # quality :string(255)
10
+ # price :string(255)
11
+ # amount :string(255)
12
+ # place :string(255)
13
+ # others :text
14
+ # created_at :datetime
15
+ # updated_at :datetime
16
+ # showcase_order :integer
16
17
  #
17
18
 
18
19
  class Apiv1::ProductFactory
@@ -4,6 +4,7 @@ describe Admin::ProductModifier do
4
4
  let(:modifier) { described_class.new product, @params }
5
5
  let(:product) { Apiv1::ProductFactory.new.create }
6
6
  let(:picture) { Apiv1::PictureFactory.rack_file }
7
+ let(:taxon) { Apiv1::Taxon.create! taxon_name: "fish" }
7
8
  describe "success" do
8
9
  before do
9
10
  @picture_params = { 0 => picture }
@@ -18,6 +19,37 @@ describe Admin::ProductModifier do
18
19
  pictures: @picture_params
19
20
  }
20
21
  end
22
+ context 'with taxons' do
23
+ before do
24
+ @taxon_params = { 0 => taxon.id }
25
+ @params = @params.merge taxons: @taxon_params
26
+ end
27
+ context '#satisfy_specifications?' do
28
+ subject { modifier }
29
+ specify { should be_satisfy_specifications }
30
+ end
31
+ context '_good_relationships' do
32
+ subject { modifier.send('_good_relationships').count }
33
+ specify { should eq 1 }
34
+ end
35
+ context '_bad_relationships' do
36
+ subject { modifier.send('_bad_relationships').count }
37
+ specify { should eq 2 }
38
+ end
39
+ context 'update' do
40
+ before { modifier.satisfy_specifications? && modifier.update! }
41
+ context 'taxons' do
42
+ before { product.reload }
43
+ subject { product.taxons.count }
44
+ specify { should eq 1 }
45
+ end
46
+ context 'taxon' do
47
+ before { product.reload }
48
+ subject { product.taxons }
49
+ specify { should eq [taxon] }
50
+ end
51
+ end
52
+ end
21
53
  context '#satisfy_specifications?' do
22
54
  subject { modifier }
23
55
  specify { should be_satisfy_specifications }
@@ -0,0 +1,49 @@
1
+ require 'rails_helper'
2
+
3
+ describe Admin::TaxonRelationshipsFactory do
4
+ let(:product) { Apiv1::ProductFactory.new.create }
5
+ let(:factory) { described_class.new product, @relationship_params }
6
+ let(:taxon) { Apiv1::Taxon.create! taxon_name: "detective" }
7
+ before { @relationship_params = { 0 => taxon.id } }
8
+ describe 'taxons' do
9
+ subject { product.taxons.count }
10
+ specify { should eq 2 }
11
+ end
12
+ describe 'bad_relationships' do
13
+ subject { factory.bad_relationships }
14
+ specify { should eq product.taxon_relationships }
15
+ end
16
+ describe '_existing_relationship' do
17
+ subject { factory.send '_existing_relationship', taxon.id }
18
+ specify { should be_blank }
19
+ end
20
+ describe '_bad_taxon_ids' do
21
+ subject { factory.send '_bad_taxon_ids' }
22
+ specify { should eq product.taxons.map(&:id) }
23
+ end
24
+ describe 'good_relationships' do
25
+ subject { factory.good_relationships.count }
26
+ specify { should eq 1 }
27
+ end
28
+ describe 'good_relationships.taxon' do
29
+ subject { factory.good_relationships.first.taxon }
30
+ specify { should eq taxon }
31
+ end
32
+ describe 'usage' do
33
+ before { factory.bad_relationships.each(&:destroy) }
34
+ subject { -> { factory.good_relationships; product.save! } }
35
+ specify { should change(Apiv1::Listings::TaxonRelationship, :count).by 1 }
36
+ specify { should_not change(Apiv1::Taxon, :count) }
37
+ specify { should_not change(Apiv1::Product, :count) }
38
+ end
39
+ describe 'relationship' do
40
+ before do
41
+ factory.bad_relationships.each(&:destroy)
42
+ factory.good_relationships
43
+ product.save!
44
+ product.reload
45
+ end
46
+ subject { product.taxons }
47
+ specify { should eq [taxon] }
48
+ end
49
+ end
@@ -0,0 +1,16 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe Apiv1::Message, :type => :model do
4
+ let(:message) { Apiv1::Message.new @message_params }
5
+ before { @message_params = { from_company: ""} }
6
+ context 'validation' do
7
+ subject { message }
8
+ specify { should_not be_valid }
9
+ end
10
+ context 'errors' do
11
+ let(:expected) { { from_company: "can't be blank", sender_email: "can't be blank", subject_text: "can't be blank", message: "can't be blank" } }
12
+ before { message.valid? }
13
+ subject { message.errors.to_h }
14
+ specify { should eq expected }
15
+ end
16
+ end
@@ -2,17 +2,18 @@
2
2
  #
3
3
  # Table name: apiv1_products
4
4
  #
5
- # id :integer not null, primary key
6
- # permalink :string(255)
7
- # sku :string(255)
8
- # material :string(255)
9
- # quality :string(255)
10
- # price :string(255)
11
- # amount :string(255)
12
- # place :string(255)
13
- # others :text
14
- # created_at :datetime
15
- # updated_at :datetime
5
+ # id :integer not null, primary key
6
+ # permalink :string(255)
7
+ # sku :string(255)
8
+ # material :string(255)
9
+ # quality :string(255)
10
+ # price :string(255)
11
+ # amount :string(255)
12
+ # place :string(255)
13
+ # others :text
14
+ # created_at :datetime
15
+ # updated_at :datetime
16
+ # showcase_order :integer
16
17
  #
17
18
 
18
19
  require 'rails_helper'
@@ -58,4 +59,4 @@ describe Apiv1::Product do
58
59
  specify { should change(Apiv1::Product, :count).by -1 }
59
60
  specify { should change(Apiv1::Picture, :count).by -2 }
60
61
  end
61
- end
62
+ end