Class: Shopifydev::Test::OrderFixture
- Inherits:
-
Object
- Object
- Shopifydev::Test::OrderFixture
- Defined in:
- lib/shopifydev/test/order_fixture.rb
Instance Attribute Summary collapse
-
#address_defaults ⇒ Object
Returns the value of attribute address_defaults.
-
#order_defaults ⇒ Object
Returns the value of attribute order_defaults.
-
#shop ⇒ Object
Returns the value of attribute shop.
Instance Method Summary collapse
- #address_attrs(opts = nil) ⇒ Object
- #cad_address_attrs(opts = {}) ⇒ Object
- #create_order!(opts = {}) ⇒ Object
- #create_orders!(opts = {}) ⇒ Object
- #fulfill(orders) ⇒ Object
-
#initialize(shop = nil) ⇒ OrderFixture
constructor
Create a test fixture given a shop object.
- #line_item_attrs(opts = {}) ⇒ Object
- #line_items_attrs(opts = {}) ⇒ Object
- #new_order(opts = {}) ⇒ Object
- #order_attrs(opts = {}) ⇒ Object
- #orders ⇒ Object
- #products ⇒ Object
- #set_test_defaults! ⇒ Object
- #us_address_attrs(opts = {}) ⇒ Object
- #variants ⇒ Object
Constructor Details
#initialize(shop = nil) ⇒ OrderFixture
Create a test fixture given a shop object
9 10 11 12 13 14 |
# File 'lib/shopifydev/test/order_fixture.rb', line 9 def initialize(shop=nil) @shop = shop @shop ||= CurrentShop.new @address_defaults = {} @order_defaults = {} end |
Instance Attribute Details
#address_defaults ⇒ Object
Returns the value of attribute address_defaults.
6 7 8 |
# File 'lib/shopifydev/test/order_fixture.rb', line 6 def address_defaults @address_defaults end |
#order_defaults ⇒ Object
Returns the value of attribute order_defaults.
6 7 8 |
# File 'lib/shopifydev/test/order_fixture.rb', line 6 def order_defaults @order_defaults end |
#shop ⇒ Object
Returns the value of attribute shop.
6 7 8 |
# File 'lib/shopifydev/test/order_fixture.rb', line 6 def shop @shop end |
Instance Method Details
#address_attrs(opts = nil) ⇒ Object
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/shopifydev/test/order_fixture.rb', line 115 def address_attrs(opts=nil) case opts when 'cad', 'CAD', 'ca', 'CA', :cad cad_address_opts(opts) when 'us', 'US', :us cad_address_opts(opts) when Hash country = opts[:country] case country.downcase when 'ca', 'cad', 'canada' cad_address_attrs(opts) when 'us', 'united states' us_address_attrs(opts) else [cad_address_attrs(opts), us_address_attrs(opts)].sample end else [cad_address_attrs, us_address_attrs].sample end end |
#cad_address_attrs(opts = {}) ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/shopifydev/test/order_fixture.rb', line 96 def cad_address_attrs(opts={}) require_relative 'valid_postal_code' place = ValidPostalCode.valid_place first_name = ::FFaker::Name.first_name last_name = ::FFaker::Name.last_name attrs = { first_name: first_name, last_name: last_name, address1: ::FFaker::AddressCA.street_address, phone: ::FFaker::PhoneNumber.phone_number, city: place[:city], province: place[:province], country: "CA", zip: place[:postal_code] }.deep_merge(@address_defaults).deep_merge(opts) attrs[:name] = [attrs[:first_name], attrs[:last_name]].join(' ') attrs end |
#create_order!(opts = {}) ⇒ Object
186 187 188 189 190 191 192 193 194 |
# File 'lib/shopifydev/test/order_fixture.rb', line 186 def create_order!(opts={}) order = new_order(opts) shop.with_shopify_session do # still have to be in a session even if not saving, because of utter lameness saved = order.save raise order.errors..join("\n") unless saved end order end |
#create_orders!(opts = {}) ⇒ Object
196 197 198 199 200 201 202 203 204 205 |
# File 'lib/shopifydev/test/order_fixture.rb', line 196 def create_orders!(opts={}) num = opts.delete(:num) || 1 orders = [] num.times do order = create_order!(opts) orders << order opts[:created_at] = Time.parse(order.created_at) + rand(60) + 10 if opts[:created_at].present? end orders end |
#fulfill(orders) ⇒ Object
207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 |
# File 'lib/shopifydev/test/order_fixture.rb', line 207 def fulfill(orders) orders = [orders].flatten orders.each do |order| order_id = nil if order.is_a?(::ShopifyAPI::Order) next if order.fulfillment_status == "fulfilled" order_id = order.id else order_id = order.to_i end ::ShopifyAPI::Fulfillment.create({ tracking_number: nil, order_id: order_id }) end end |
#line_item_attrs(opts = {}) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/shopifydev/test/order_fixture.rb', line 37 def line_item_attrs(opts={}) product = nil variant = nil if opts[:product_id] product = products.find{|prod| prod.id.to_s == opts[:product_id].to_s} raise "don't know about a product with id #{opts[:product_id]}" if product.nil? end if opts[:variant_id] variant = variants.find{|v| v.id.to_s == opts[:variant_id].to_s} variant ||= product.variants.sample if product raise "don't know about a variant with id #{opts[:variant_id]}" if variant.nil? end variant ||= products.sample.variants.sample q = opts[:quantity] q ||= (rand() > 0.3) ? 1 : (rand(3) + 1) { price: variant.price, quantity: q, variant_id: variant.id } end |
#line_items_attrs(opts = {}) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/shopifydev/test/order_fixture.rb', line 61 def line_items_attrs(opts={}) num = opts.delete(:num_line_items) if line_item_opts = opts.delete(:line_items) num = line_item_opts.length end num ||= (rand() > 0.4) ? 1 : (rand(2) + 2) line_item_opts ||= [] while line_item_opts.length < num line_item_opts << {} end out = [] num.times { |i| out << line_item_attrs(line_item_opts[i]) } out end |
#new_order(opts = {}) ⇒ Object
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/shopifydev/test/order_fixture.rb', line 165 def new_order(opts={}) period = opts.delete(:in_period) case period when Range opts[:created_at] = period.first + rand(period.last - period.first) when Hash opts[:created_at] = period[:created_at_min] opts[:created_at] += rand(period[:created_at_max] - period[:created_at_min]) if period[:created_at_max].present? when Time, Date opts[:created_at] = period end opts[:fulfillment_status] = "fulfilled" if opts.delete(:fulfilled) opts = order_attrs(opts) order = nil shop.with_shopify_session do # still have to be in a session even if not saving, because of utter lameness order = ::ShopifyAPI::Order.new(opts) end order end |
#order_attrs(opts = {}) ⇒ Object
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/shopifydev/test/order_fixture.rb', line 136 def order_attrs(opts={}) address = opts.delete(:address) address = address_attrs(address) if address billing_address = opts.delete(:billing_address) billing_address = address_attrs(billing_address) if billing_address billing_address ||= address billing_address ||= address_attrs shipping_address = opts.delete(:shipping_address) shipping_address = address_attrs(shipping_address) if shipping_address shipping_address ||= address shipping_address ||= address_attrs opts.delete(:address) { line_items: line_items_attrs(opts), billing_address: billing_address, shipping_address: shipping_address, financial_status: 'paid', email: ::FFaker::Internet.email }.deep_merge(@order_defaults).deep_merge(opts) end |
#orders ⇒ Object
159 160 161 162 163 |
# File 'lib/shopifydev/test/order_fixture.rb', line 159 def orders @orders ||= shop.with_shopify_session do ::ShopifyAPI::Order.find(:all, params: {limit: false}) end end |
#products ⇒ Object
27 28 29 30 31 |
# File 'lib/shopifydev/test/order_fixture.rb', line 27 def products @products ||= shop.with_shopify_session do ::ShopifyAPI::Product.find(:all, params: {limit: false}) end end |
#set_test_defaults! ⇒ Object
17 18 19 20 21 22 23 24 25 |
# File 'lib/shopifydev/test/order_fixture.rb', line 17 def set_test_defaults! @address_defaults = { first_name: "Webify", last_name: "Test" } @order_defaults = { email: "[email protected]" } end |
#us_address_attrs(opts = {}) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/shopifydev/test/order_fixture.rb', line 77 def us_address_attrs(opts={}) require_relative 'valid_zip' place = ValidZip.valid_place first_name = ::FFaker::Name.first_name last_name = ::FFaker::Name.last_name attrs = { first_name: first_name, last_name: last_name, address1: ::FFaker::AddressUS.street_address, phone: ::FFaker::PhoneNumber.phone_number, city: place[:city], province: place[:state], country: "US", zip: place[:zip] }.deep_merge(@address_defaults).deep_merge(opts) attrs[:name] = [attrs[:first_name], attrs[:last_name]].join(' ') attrs end |
#variants ⇒ Object
33 34 35 |
# File 'lib/shopifydev/test/order_fixture.rb', line 33 def variants @variants ||= products.map(&:variants).flatten end |