Files
openfoodnetwork/lib/tasks/dev.rake
Pau Perez f27a624687 Create the mail method from db:seed
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.
2018-03-16 13:33:21 +01:00

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