Some checks failed
		
		
	
	Run unit tests / copyright_notice (pull_request) Successful in 57s
				
			Run unit tests / check-licenses (pull_request) Failing after 2m13s
				
			Run unit tests / rubocop (pull_request) Failing after 3m35s
				
			Run unit tests / unit_tests (pull_request) Failing after 5m6s
				
			Run unit tests / build-static-assets (pull_request) Has been skipped
				
			
		
			
				
	
	
		
			102 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| # Copyright (C) 2024-2025 LibreWeddingPlanner contributors
 | |
| 
 | |
| NUMBER_OF_GUESTS = 200
 | |
| 
 | |
| ActsAsTenant.without_tenant do
 | |
|   GroupAffinity.delete_all
 | |
|   Wedding.delete_all
 | |
| end
 | |
| 
 | |
| wedding = Wedding.create!(slug: :default)
 | |
| 
 | |
| ActsAsTenant.with_tenant(wedding) do
 | |
|   [
 | |
|     { name: 'Photographer', amount: 3000, pricing_type: 'fixed' },
 | |
|     { name: 'Country house', amount: 6000, pricing_type: 'fixed' },
 | |
|     { name: 'Catering', amount: 200, pricing_type: 'per_person' },
 | |
|     { name: 'Flowers', amount: 500, pricing_type: 'fixed' },
 | |
|     { name: 'Band', amount: 1000, pricing_type: 'fixed' },
 | |
|     { name: 'Wedding planner', amount: 2000, pricing_type: 'fixed' },
 | |
|     { name: 'Dress', amount: 1000, pricing_type: 'fixed' },
 | |
|     { name: 'Suit', amount: 500, pricing_type: 'fixed' },
 | |
|     { name: 'Rings', amount: 1000, pricing_type: 'fixed' },
 | |
|     { name: 'Makeup', amount: 200, pricing_type: 'fixed' },
 | |
|     { name: 'Hair', amount: 200, pricing_type: 'fixed' },
 | |
|     { name: 'Transportation', amount: 3000, pricing_type: 'fixed' },
 | |
|     { name: 'Invitations', amount: 200, pricing_type: 'fixed' },
 | |
|     { name: 'Cake', amount: 500, pricing_type: 'fixed' }
 | |
|   ].then { Expense.insert_all!(it) }
 | |
| 
 | |
|   Group.create!(name: "Jim's guests", icon: 'pi pi-heart').tap do |parent|
 | |
|     parent.children.create!(name: "Jim's family", icon: 'pi pi-users').tap do |family|
 | |
|       family.children.create!(name: "Jim's close family", icon: 'pi pi-home')
 | |
|       family.children.create!(name: "Jim's cousins", icon: 'pi pi-home')
 | |
|       family.children.create!(name: "Jim's relatives", icon: 'pi pi-home')
 | |
|     end
 | |
|     parent.children.create!(name: "Jim's friends", icon: 'pi pi-bullseye')
 | |
|     parent.children.create!(name: "Jim's work", icon: 'pi pi-desktop').tap do |work|
 | |
|       work.children.create!(name: "Jim's besties at work", icon: 'pi pi-briefcase')
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   Group.create!(name: "Pam's guests", icon: 'pi pi-heart-fill').tap do |parent|
 | |
|     parent.children.create!(name: "Pam's family", icon: 'pi pi-users').tap do |family|
 | |
|       family.children.create!(name: "Pam's close family", icon: 'pi pi-home')
 | |
|       family.children.create!(name: "Pam's cousins", icon: 'pi pi-home')
 | |
|       family.children.create!(name: "Pam's relatives", icon: 'pi pi-home')
 | |
|     end
 | |
|     parent.children.create!(name: "Pam's friends", icon: 'pi pi-bullseye')
 | |
|     parent.children.create!(name: "Pam's work", icon: 'pi pi-desktop').tap do |work|
 | |
|       work.children.create!(name: "Pam's besties at work", icon: 'pi pi-briefcase')
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   Group.create!(name: 'Common guests', icon: 'pi pi-users').tap do |parent|
 | |
|     parent.children.create!(name: 'College friends', icon: 'pi pi-calculator')
 | |
|     parent.children.create!(name: 'High school friends', icon: 'pi pi-crown')
 | |
|     parent.children.create!(name: 'Childhood friends', icon: 'pi pi-envelope')
 | |
|   end
 | |
| 
 | |
|   groups = Group.all
 | |
| 
 | |
|   NUMBER_OF_GUESTS.times.map do |i|
 | |
|     {
 | |
|       name: Faker::Name.name,
 | |
|       phone: Faker::PhoneNumber.cell_phone,
 | |
|       group_id: groups.sample.id,
 | |
|       status: Guest.statuses.keys.sample,
 | |
|     }
 | |
|   end.then { Guest.insert_all!(it) }
 | |
| 
 | |
|   Group.includes(:guests).each do |group|
 | |
|     guests = group.guests.potential.to_a
 | |
| 
 | |
|     while guests.any?
 | |
|       invitation = Invitation.create!
 | |
| 
 | |
|       guests.shift(rand(1..3)).each do |guest|
 | |
|         guest.update!(invitation:)
 | |
|       end
 | |
|       guests.shift(1) if rand < 0.3  # Leave a percentage of guests without an invitation
 | |
| 
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   # TODO: Clean up invitations with no guests
 | |
| 
 | |
|   ActiveJob.perform_all_later(3.times.map { TableSimulatorJob.new(wedding.id) })
 | |
| 
 | |
|   "red".dup.paint.palette.triad(as: :hex).zip(Group.roots).each { |(color, group)| group.update!(color: color.paint.desaturate(40)) }
 | |
| 
 | |
|   Group.roots.each(&:colorize_children)
 | |
| 
 | |
|   User.create!(
 | |
|     email: 'development@example.com',
 | |
|     confirmed_at: Time.zone.now,
 | |
|     password: 'supersecretpassword',
 | |
|     password_confirmation: 'supersecretpassword'
 | |
|   )
 | |
| end
 |