diff --git a/db/seeds.rb b/db/seeds.rb index e89bab9b..612c2b9f 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -1,4 +1,5 @@ # frozen_string_literal: true + # rubocop:disable Rails/Output puts 'Generating seed data....' @@ -24,6 +25,8 @@ # fix this eventually so that we never generate empty suites Suite.where(size: 0).destroy_all -Generator.generate(model: 'draw', count: 3) +PreLotteryDrawGenerator.generate +LotteryDrawGenerator.generate +SuiteSelectionDrawGenerator.generate puts 'Finished!' diff --git a/lib/seed/draw_generator.rb b/lib/seed/draw_generator.rb index 33e984d0..47c73631 100644 --- a/lib/seed/draw_generator.rb +++ b/lib/seed/draw_generator.rb @@ -1,4 +1,5 @@ # frozen_string_literal: true + # Seed script generator for Draws class DrawGenerator def self.generate(**overrides) @@ -6,26 +7,26 @@ def self.generate(**overrides) end def initialize(overrides: {}) - gen_params(overrides: overrides) + gen_params(overrides) end def generate - DrawCreator.new(params).create![:object] + Draw.create(params) end private - attr_reader :params + attr_reader :params, :suites def gen_params(overrides: {}) check_member_existence - @params ||= { suites: Suite.all.sample(3), - students: User.where(role: 'student', draw_id: nil).sample(5), + @params ||= { suites: suites, name: "#{FFaker::Music.artist} Draw" }.merge(overrides) end def check_member_existence - 5.times { SuiteGenerator.generate } unless Suite.all.count >= 5 + @suites = Array.new(5) { SuiteGenerator.generate } + suites.each { |s| RoomGenerator.generate(suite: s) } 8.times { UserGenerator.generate } unless User.all.count >= 8 end end diff --git a/lib/seed/group_generator.rb b/lib/seed/group_generator.rb new file mode 100644 index 00000000..29f0923d --- /dev/null +++ b/lib/seed/group_generator.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +# Seed script generator for Suites +class GroupGenerator + def self.generate(**params) + new(**params).generate + end + + def initialize(draw:, overrides: {}) + gen_params(draw: draw, overrides: overrides) + end + + def generate + Group.create!(params) + end + + private + + attr_reader :params + + def gen_params(draw:, overrides: {}) + size = draw.suite_sizes.sample + members = Array.new(size) do |_d| + UserGenerator.generate(draw: draw, intent: 'on_campus') + end + @params ||= { leader: members.sample, + size: size, + members: members, + draw: draw }.merge!(overrides) + end +end diff --git a/lib/seed/lottery_draw_generator.rb b/lib/seed/lottery_draw_generator.rb new file mode 100644 index 00000000..350d3c9e --- /dev/null +++ b/lib/seed/lottery_draw_generator.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +# Seed script generator for Draws +class LotteryDrawGenerator + def self.generate(**overrides) + new(overrides: overrides).generate + end + + def initialize(overrides: {}); end + + def generate(overrides: {}) + create_draw_params(overrides: overrides) + make_lottery_draw(overrides: overrides) + end + + private + + attr_reader :params + + def create_draw_params(overrides: {}) + suites = Array.new(5) { SuiteGenerator.generate } + suites.each { |s| RoomGenerator.generate(suite: s) } + @params ||= { suites: suites, + name: "#{FFaker::Music.artist} Draw" }.merge!(overrides) + end + + def make_lottery_draw(overrides: {}) + Draw.create!(params).tap do |d| + d.update(status: 'pre_lottery') + groups = Array.new(3) do + GroupGenerator.generate(draw: d, overrides: overrides) + end + groups.each do |g| + GroupLocker.lock(group: g) + end + DrawLotteryStarter.start(draw: d) + end + end +end diff --git a/lib/seed/pre_lottery_draw_generator.rb b/lib/seed/pre_lottery_draw_generator.rb new file mode 100644 index 00000000..8314dea4 --- /dev/null +++ b/lib/seed/pre_lottery_draw_generator.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +# Seed script generator for Draws +class PreLotteryDrawGenerator + def self.generate(**overrides) + new(overrides: overrides).generate + end + + def initialize(overrides: {}); end + + def generate(overrides: {}) + DrawGenerator.generate(overrides: overrides).tap do |d| + 3.times { GroupGenerator.generate(draw: d, overrides: overrides) } + d.update(status: 'pre_lottery') + end + end +end diff --git a/lib/seed/suite_selection_draw_generator.rb b/lib/seed/suite_selection_draw_generator.rb new file mode 100644 index 00000000..b055aa79 --- /dev/null +++ b/lib/seed/suite_selection_draw_generator.rb @@ -0,0 +1,19 @@ +# frozen_string_literal: true + +# Seed script generator for Draws +class SuiteSelectionDrawGenerator + def self.generate(**overrides) + new(overrides: overrides).generate + end + + def initialize(overrides: {}); end + + def generate(overrides: {}) + LotteryDrawGenerator.generate(overrides: overrides).tap do |d| + d.groups.each do |g| + g.lottery_number = (g.id / 2).round + end + d.update(status: 'suite_selection') + end + end +end diff --git a/spec/lib/group_generator_spec.rb b/spec/lib/group_generator_spec.rb new file mode 100644 index 00000000..eaced2de --- /dev/null +++ b/spec/lib/group_generator_spec.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe GroupGenerator do + context 'creating' do + it 'makes a new group' do + draw = FactoryGirl.create(:draw) + draw.suites << FactoryGirl.create(:suite, size: 3) + expect { described_class.generate(draw: draw) }.to \ + change { Group.count }.by(1) + end + end +end diff --git a/spec/lib/lottery_draw_generator_spec.rb b/spec/lib/lottery_draw_generator_spec.rb new file mode 100644 index 00000000..740af07e --- /dev/null +++ b/spec/lib/lottery_draw_generator_spec.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe LotteryDrawGenerator do + context 'creating' do + it 'makes a new draw' do + expect { described_class.generate }.to \ + change { Draw.count }.by(1) + end + + it 'makes the draw be in pre-lottery' do + expect(described_class.generate).to be_lottery + end + end +end diff --git a/spec/lib/pre_lottery_draw_generator_spec.rb b/spec/lib/pre_lottery_draw_generator_spec.rb new file mode 100644 index 00000000..2b77b465 --- /dev/null +++ b/spec/lib/pre_lottery_draw_generator_spec.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe PreLotteryDrawGenerator do + context 'creating' do + it 'makes a new draw' do + expect { described_class.generate }.to \ + change { Draw.count }.by(1) + end + + it 'makes the draw be in pre-lottery' do + expect(described_class.generate).to be_pre_lottery + end + end +end diff --git a/spec/lib/suite_selection_draw_generator_spec.rb b/spec/lib/suite_selection_draw_generator_spec.rb new file mode 100644 index 00000000..d8962aef --- /dev/null +++ b/spec/lib/suite_selection_draw_generator_spec.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +require 'rails_helper' + +describe SuiteSelectionDrawGenerator do + context 'creating' do + it 'makes a new draw' do + expect { described_class.generate }.to \ + change { Draw.count }.by(1) + end + + it 'makes the draw be in pre-lottery' do + expect(described_class.generate).to \ + be_suite_selection + end + end +end