Advertisement
Guest User

Untitled

a guest
Aug 5th, 2017
499
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.78 KB | None | 0 0
  1. Failure/Error: reload.product.setup_membership_variants
  2.  
  3. NoMethodError:
  4. undefined method `setup_membership_variants' for nil:NilClass
  5. # ./app/models/spree/membership.rb:26:in `block in setup_product'
  6. # ./app/models/spree/membership.rb:18:in `setup_product'
  7. # /box/gems/factory_girl-4.8.0/lib/factory_girl/configuration.rb:18:in `block in initialize'
  8. # /box/gems/factory_girl-4.8.0/lib/factory_girl/evaluation.rb:15:in `create'
  9. # /box/gems/factory_girl-4.8.0/lib/factory_girl/strategy/create.rb:12:in `block in result'
  10. # /box/gems/factory_girl-4.8.0/lib/factory_girl/strategy/create.rb:9:in `tap'
  11. # /box/gems/factory_girl-4.8.0/lib/factory_girl/strategy/create.rb:9:in `result'
  12. # /box/gems/factory_girl-4.8.0/lib/factory_girl/factory.rb:42:in `run'
  13. # /box/gems/factory_girl-4.8.0/lib/factory_girl/factory_runner.rb:29:in `block in run'
  14. # /box/gems/factory_girl-4.8.0/lib/factory_girl/factory_runner.rb:28:in `run'
  15. # /box/gems/factory_girl-4.8.0/lib/factory_girl/strategy_syntax_method_registrar.rb:20:in `block in define_singular_strategy_method'
  16. # ./spec/controllers/spree/premium_controller_spec.rb:4:in `block (2 levels) in <top (required)>'
  17. # ./spec/controllers/spree/premium_controller_spec.rb:33:in `block (6 levels) in <top (required)>'
  18. # ./spec/controllers/spree/premium_controller_spec.rb:53:in `block (8 levels) in <top (required)>'
  19. # ./spec/controllers/spree/premium_controller_spec.rb:53:in `block (7 levels) in <top (required)>'
  20.  
  21. class Spree::Membership < Spree::Base
  22.  
  23. has_many :active_memberships, class_name: 'Spree::ActiveMembership', dependent: :destroy
  24.  
  25. has_one :membership_product, class_name: "Spree::MembershipProduct", dependent: :destroy
  26. has_one :product, through: :membership_product, source: :product
  27.  
  28. validates :name, presence: true
  29. validates :monthly_quota, presence: true
  30. validates :price, presence: true
  31.  
  32. after_save :setup_product
  33.  
  34. private
  35.  
  36. def setup_product
  37. if product.nil?
  38. ActiveRecord::Base.transaction do
  39. create_membership_product(
  40. product: Spree::Product.create(
  41. name: name,
  42. price: price,
  43. shipping_category: Spree::ShippingCategory.find_by(name: "Default")
  44. )
  45. )
  46. reload.product.setup_membership_variants
  47. end
  48. else
  49. product.update(name: name, price: price)
  50. end
  51. end
  52.  
  53. end
  54.  
  55. Spree::Product.class_eval do
  56. def setup_membership_variants
  57. ot = Spree::OptionType.find_or_create_by(name: "Membership")
  58. option_types << ot
  59.  
  60. if ot.option_values.empty?
  61. ["Monthly", "Yearly"].each do |freq|
  62. ot.option_values.create(name: freq, presentation: freq)
  63. end
  64. end
  65.  
  66.  
  67. month = variants.create(is_master: false, price: price, track_inventory: false)
  68. month.option_values << Spree::OptionValue.find_by(name: "Monthly")
  69. year = variants.create(is_master: false, price: price * 12, track_inventory: false)
  70. year.option_values << Spree::OptionValue.find_by(name: "Yearly")
  71. end
  72. end
  73.  
  74. FactoryGirl.define do
  75. factory :membership, class: Spree::Membership do
  76. name {FFaker::Lorem.word}
  77. monthly_quota { rand(10..200) }
  78. price { rand(10..200) }
  79.  
  80. trait :unnamed do
  81. name nil
  82. end
  83.  
  84. trait :without_quota do
  85. monthly_quota nil
  86. end
  87.  
  88. trait :priceless do
  89. price nil
  90. end
  91. end
  92. end
  93.  
  94. require 'rails_helper'
  95.  
  96. RSpec.describe Spree::PremiumController, type: :controller do
  97. let(:valid_membership) { create(:membership) }
  98. let(:variant) { create(:master_variant) }
  99.  
  100. context "#show" do
  101. it "returns http success" do
  102. get :show
  103. expect(response).to have_http_status(:success)
  104. end
  105. it "returns all memberships" do
  106. get :show
  107. expect(assigns[:memberships]).to include(valid_membership)
  108. end
  109. end
  110.  
  111. context "#create" do
  112. let!(:store) { create(:store) }
  113.  
  114. context "user not logged" do
  115.  
  116. context "valid attributes" do
  117. context "user doesn't exist in database" do
  118. subject do
  119. post(:create, params: {
  120. premium: {
  121. first_name: "Ondrej",
  122. last_name: "Kubala",
  123. email: "ondrej@bala.com",
  124. password: "test123",
  125. password_confirmation: "test123",
  126. membership_id: valid_membership.id,
  127. payment_frequency: "1", #monthly yearly is 2
  128. cc_number: "4111111111111111",
  129. cc_exp_date: "10/22",
  130. cvv: "123"
  131. }
  132. })
  133. end
  134.  
  135. it "creates user with valid attributes" do
  136. expect { subject }.to change { Spree::User.count }.from(0).to(1)
  137. end
  138.  
  139. it "logs in user" do
  140. expect(controller.warden).to receive(:set_user)
  141. subject
  142. end
  143.  
  144. context "create order with variant" do
  145. it "should handle population" do
  146. expect { subject }.to change { Spree::Order.count }.by(1)
  147. user = Spree::User.find_by email: "ondrej@bala.com"
  148.  
  149. order = user.orders.last
  150. expect(response).to redirect_to go_premium_path
  151.  
  152. expect(order.line_items.size).to eq(1)
  153. # line_item = order.line_items.first
  154. # expect(line_item.variant_id).to eq(valid_membership.reload.product.variants.)
  155. end
  156. it "charges credit card"
  157. it "should redirect to account page"
  158. end
  159. end
  160.  
  161. context "user already exists"
  162. end
  163.  
  164. context "wrong user attributes" do
  165.  
  166. end
  167.  
  168. context "wrong payment attributes" do
  169.  
  170. end
  171. end
  172.  
  173. context "user is logged in" do
  174. let(:user) { create(:user) }
  175.  
  176. before do
  177. allow(controller).to receive_messages try_spree_current_user: user
  178. allow(controller).to receive_messages spree_current_user: user
  179. end
  180.  
  181. it "doesn't create user"
  182. end
  183. end
  184. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement