mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
As opposed the to sample users and enterprises that ease testing and development, the mail method is needed for the app to function in any environment.
210 lines
11 KiB
Ruby
210 lines
11 KiB
Ruby
|
|
namespace :openfoodnetwork do
|
|
|
|
namespace :dev do
|
|
|
|
desc 'load sample data'
|
|
task load_sample_data: :environment do
|
|
require_relative '../../spec/factories'
|
|
require_relative '../../spec/support/spree/init'
|
|
task_name = "openfoodnetwork:dev:load_sample_data"
|
|
|
|
spree_user = Spree::User.find_by_email('spree@example.com')
|
|
country = Spree::Country.find_by_iso(ENV.fetch('DEFAULT_COUNTRY_CODE'))
|
|
state = country.states.first
|
|
|
|
# -- Shipping / payment information
|
|
unless Spree::Zone.find_by_name 'Australia'
|
|
puts "[#{task_name}] Seeding shipping / payment information"
|
|
|
|
zone = FactoryGirl.create(:zone, name: 'Australia', zone_members: [])
|
|
Spree::ZoneMember.create(zone: zone, zoneable: country)
|
|
address = FactoryGirl.create(
|
|
:address,
|
|
address1: "15/1 Ballantyne Street",
|
|
zipcode: "3153",
|
|
city: "Thornbury",
|
|
country: country,
|
|
state: state
|
|
)
|
|
enterprise = FactoryGirl.create(:enterprise, address: address)
|
|
|
|
FactoryGirl.create(:shipping_method, zone: zone, distributors: [enterprise])
|
|
end
|
|
|
|
# -- Taxonomies
|
|
unless Spree::Taxonomy.find_by_name 'Products'
|
|
puts "[#{task_name}] Seeding taxonomies"
|
|
taxonomy = Spree::Taxonomy.find_by_name('Products') || FactoryGirl.create(:taxonomy, name: 'Products')
|
|
taxonomy_root = taxonomy.root
|
|
|
|
['Vegetables', 'Fruit', 'Oils', 'Preserves and Sauces', 'Dairy', 'Meat and Fish'].each do |taxon_name|
|
|
FactoryGirl.create(:taxon, name: taxon_name, parent_id: taxonomy_root.id)
|
|
end
|
|
end
|
|
|
|
# -- Addresses
|
|
unless Spree::Address.find_by_zipcode "3160"
|
|
puts "[#{task_name}] Seeding addresses"
|
|
|
|
FactoryGirl.create(:address, address1: "25 Myrtle Street", zipcode: "3153", city: "Bayswater", country: country, state: state)
|
|
FactoryGirl.create(:address, address1: "6 Rollings Road", zipcode: "3156", city: "Upper Ferntree Gully", country: country, state: state)
|
|
FactoryGirl.create(:address, address1: "72 Lake Road", zipcode: "3130", city: "Blackburn", country: country, state: state)
|
|
FactoryGirl.create(:address, address1: "7 Verbena Street", zipcode: "3195", city: "Mordialloc", country: country, state: state)
|
|
FactoryGirl.create(:address, address1: "20 Galvin Street", zipcode: "3018", city: "Altona", country: country, state: state)
|
|
FactoryGirl.create(:address, address1: "59 Websters Road", zipcode: "3106", city: "Templestowe", country: country, state: state)
|
|
FactoryGirl.create(:address, address1: "17 Torresdale Drive", zipcode: "3155", city: "Boronia", country: country, state: state)
|
|
FactoryGirl.create(:address, address1: "21 Robina CRT", zipcode: "3764", city: "Kilmore", country: country, state: state)
|
|
FactoryGirl.create(:address, address1: "25 Kendall Street", zipcode: "3134", city: "Ringwood", country: country, state: state)
|
|
FactoryGirl.create(:address, address1: "2 Mines Road", zipcode: "3135", city: "Ringwood East", country: country, state: state)
|
|
FactoryGirl.create(:address, address1: "183 Millers Road", zipcode: "3025", city: "Altona North", country: country, state: state)
|
|
FactoryGirl.create(:address, address1: "310 Pascoe Vale Road", zipcode: "3040", city: "Essendon", country: country, state: state)
|
|
FactoryGirl.create(:address, address1: "6 Martin Street", zipcode: "3160", city: "Belgrave", country: country, state: state)
|
|
end
|
|
|
|
# -- Enterprises
|
|
unless Enterprise.count > 1
|
|
puts "[#{task_name}] Seeding enterprises"
|
|
|
|
3.times { FactoryGirl.create(:supplier_enterprise, address: Spree::Address.find_by_zipcode("3160")) }
|
|
|
|
FactoryGirl.create(:distributor_enterprise, name: "Green Grass", address: Spree::Address.find_by_zipcode("3153"))
|
|
FactoryGirl.create(:distributor_enterprise, name: "AusFarmers United", address: Spree::Address.find_by_zipcode("3156"))
|
|
FactoryGirl.create(:distributor_enterprise, name: "Blackburn FreeGrossers", address: Spree::Address.find_by_zipcode("3130"))
|
|
FactoryGirl.create(:distributor_enterprise, name: "MegaFoods", address: Spree::Address.find_by_zipcode("3195"))
|
|
FactoryGirl.create(:distributor_enterprise, name: "Eco Butchers", address: Spree::Address.find_by_zipcode("3018"))
|
|
FactoryGirl.create(:distributor_enterprise, name: "Western Wines", address: Spree::Address.find_by_zipcode("3106"))
|
|
FactoryGirl.create(:distributor_enterprise, name: "QuickFresh", address: Spree::Address.find_by_zipcode("3155"))
|
|
FactoryGirl.create(:distributor_enterprise, name: "Fooderers", address: Spree::Address.find_by_zipcode("3764"))
|
|
FactoryGirl.create(:distributor_enterprise, name: "Food Local", address: Spree::Address.find_by_zipcode("3134"))
|
|
FactoryGirl.create(:distributor_enterprise, name: "Green Food Trading Corporation", address: Spree::Address.find_by_zipcode("3135"))
|
|
FactoryGirl.create(:distributor_enterprise, name: "Better Food", address: Spree::Address.find_by_zipcode("3025"))
|
|
FactoryGirl.create(:distributor_enterprise, name: "Gippsland Poultry", address: Spree::Address.find_by_zipcode("3040"))
|
|
end
|
|
|
|
# -- Enterprise users
|
|
unless Spree::User.count > 1
|
|
puts "[#{task_name}] Seeding enterprise users"
|
|
|
|
pw = "spree123"
|
|
|
|
u = FactoryGirl.create(:user, email: "sup@example.com", password: pw, password_confirmation: pw)
|
|
u.enterprises << Enterprise.is_primary_producer.first
|
|
u.enterprises << Enterprise.is_primary_producer.second
|
|
puts " Supplier User created: #{u.email}/#{pw} (" + u.enterprise_roles.map{ |er| er.enterprise.name}.join(", ") + ")"
|
|
|
|
u = FactoryGirl.create(:user, email: "dist@example.com", password: pw, password_confirmation: pw)
|
|
u.enterprises << Enterprise.is_distributor.first
|
|
u.enterprises << Enterprise.is_distributor.second
|
|
puts " Distributor User created: #{u.email}/#{pw} (" + u.enterprise_roles.map{ |er| er.enterprise.name}.join(", ") + ")"
|
|
end
|
|
|
|
# -- Enterprise fees
|
|
unless EnterpriseFee.count > 1
|
|
Enterprise.is_distributor.each do |distributor|
|
|
FactoryGirl.create(:enterprise_fee, enterprise: distributor)
|
|
end
|
|
end
|
|
|
|
# -- Enterprise Payment Methods
|
|
unless Spree::PaymentMethod.count > 1
|
|
Enterprise.is_distributor.each do |distributor|
|
|
FactoryGirl.create(:payment_method, distributors: [distributor], name: "Cheque (#{distributor.name})", environment: 'development')
|
|
end
|
|
end
|
|
|
|
# -- Products
|
|
unless Spree::Product.count > 0
|
|
puts "[#{task_name}] Seeding products"
|
|
|
|
prod1 = FactoryGirl.create(:product,
|
|
name: 'Garlic', price: 20.00,
|
|
supplier: Enterprise.is_primary_producer[0],
|
|
taxons: [Spree::Taxon.find_by_name('Vegetables')])
|
|
|
|
ProductDistribution.create(product: prod1,
|
|
distributor: Enterprise.is_distributor[0],
|
|
enterprise_fee: Enterprise.is_distributor[0].enterprise_fees.first)
|
|
|
|
|
|
prod2 = FactoryGirl.create(:product,
|
|
name: 'Fuji Apple', price: 5.00,
|
|
supplier: Enterprise.is_primary_producer[1],
|
|
taxons: [Spree::Taxon.find_by_name('Fruit')])
|
|
|
|
ProductDistribution.create(product: prod2,
|
|
distributor: Enterprise.is_distributor[1],
|
|
enterprise_fee: Enterprise.is_distributor[1].enterprise_fees.first)
|
|
|
|
prod3 = FactoryGirl.create(:product,
|
|
name: 'Beef - 5kg Trays', price: 50.00,
|
|
supplier: Enterprise.is_primary_producer[2],
|
|
taxons: [Spree::Taxon.find_by_name('Meat and Fish')])
|
|
|
|
ProductDistribution.create(product: prod3,
|
|
distributor: Enterprise.is_distributor[2],
|
|
enterprise_fee: Enterprise.is_distributor[2].enterprise_fees.first)
|
|
|
|
prod4 = FactoryGirl.create(:product,
|
|
name: 'Carrots', price: 3.00,
|
|
supplier: Enterprise.is_primary_producer[2],
|
|
taxons: [Spree::Taxon.find_by_name('Meat and Fish')])
|
|
|
|
ProductDistribution.create(product: prod4,
|
|
distributor: Enterprise.is_distributor[2],
|
|
enterprise_fee: Enterprise.is_distributor[2].enterprise_fees.first)
|
|
|
|
prod5 = FactoryGirl.create(:product,
|
|
name: 'Potatoes', price: 2.00,
|
|
supplier: Enterprise.is_primary_producer[2],
|
|
taxons: [Spree::Taxon.find_by_name('Meat and Fish')])
|
|
|
|
ProductDistribution.create(product: prod5,
|
|
distributor: Enterprise.is_distributor[2],
|
|
enterprise_fee: Enterprise.is_distributor[2].enterprise_fees.first)
|
|
|
|
prod6 = FactoryGirl.create(:product,
|
|
name: 'Tomatoes', price: 2.00,
|
|
supplier: Enterprise.is_primary_producer[2],
|
|
taxons: [Spree::Taxon.find_by_name('Meat and Fish')])
|
|
|
|
ProductDistribution.create(product: prod6,
|
|
distributor: Enterprise.is_distributor[2],
|
|
enterprise_fee: Enterprise.is_distributor[2].enterprise_fees.first)
|
|
|
|
prod7 = FactoryGirl.create(:product,
|
|
name: 'Potatoes', price: 2.00,
|
|
supplier: Enterprise.is_primary_producer[2],
|
|
taxons: [Spree::Taxon.find_by_name('Meat and Fish')])
|
|
|
|
ProductDistribution.create(product: prod7,
|
|
distributor: Enterprise.is_distributor[2],
|
|
enterprise_fee: Enterprise.is_distributor[2].enterprise_fees.first)
|
|
|
|
end
|
|
|
|
enterprise2 = Enterprise.find_by_name('Enterprise 2')
|
|
enterprise2.sells = 'any'
|
|
enterprise2.shipping_methods.build(
|
|
name: 'Pickup',
|
|
zone_id: 3,
|
|
require_ship_address: true,
|
|
calculator_type: 'OpenFoodNetwork::Calculator::Weight',
|
|
distributor_ids: [enterprise2.id]
|
|
)
|
|
enterprise2.payment_methods << Spree::PaymentMethod.last
|
|
enterprise2.save!
|
|
|
|
variants = Spree::Variant
|
|
.joins(:product)
|
|
.where('spree_products.supplier_id = ?', enterprise2.id)
|
|
|
|
CreateOrderCycle.new(enterprise2, variants).call
|
|
|
|
EnterpriseRole.create!(user: Spree::User.first, enterprise: enterprise2)
|
|
|
|
spree_user.confirm!
|
|
end
|
|
end
|
|
end
|