|
| 1 | +require 'factory_bot_rails' |
| 2 | +require 'faker' |
| 3 | +Faker::Config.locale = :'pt-BR' |
| 4 | +Faker::UniqueGenerator.clear |
| 5 | + |
| 6 | +# Cria admin |
| 7 | +admin = FactoryBot.create(:user, full_name: 'Boninho da Globo', email: '[email protected]', password: '654321', role: 'admin') |
| 8 | + |
| 9 | +# Cria 40 usuários e pra cada um cria: |
| 10 | +# rand(2..7) experiências de trabalho |
| 11 | +# rand(2..7) experiências acadêmicas |
| 12 | +# rand(2..7) categorias de trabalho com descrição |
| 13 | +# 1 post com imagem |
| 14 | +# rand(1..3) posts somente texto |
| 15 | +# rand(2..5) seguidores |
| 16 | +# rand(0..10) comentários por posts |
| 17 | +# rand(0..10) likes em posts |
| 18 | +# rand(0..10) likes em comentários |
| 19 | + |
| 20 | + |
| 21 | +# Setup |
| 22 | +@number_of_users = 40 |
| 23 | + |
| 24 | + |
| 25 | +# 30 categorias de Trabalho |
| 26 | +[ |
| 27 | + 'Trabalho em equipe', 'Comunicação', 'Resolução de problemas', 'Liderança', 'Organização', |
| 28 | + 'Trabalhar sobre pressão', 'Confiança', 'Auto motivado', 'Habilidades de networking', 'Proatividade', |
| 29 | + 'Aprendizado rápido', 'Experiência com tecnologia', 'Desenvolvimento Web', 'Programação em Ruby', |
| 30 | + 'HTML', 'CSS', 'JavaScript', 'Resolução de Problemas', 'Comunicação Efetiva', 'Colaboração em Equipe', |
| 31 | + 'Resiliência', 'Gestão do Tempo', 'Gestão de Projetos', 'Experiência do Usuário (UX)', 'SEO', |
| 32 | + 'Análise de Dados', 'Redes Sociais', 'Marketing Digital', 'Liderança', 'Trabalho Remoto', 'Ruby on Rails' |
| 33 | +].each { |name| JobCategory.create(name:) } |
| 34 | + |
| 35 | +# 12 combinações de tags para posts |
| 36 | +tags = [ |
| 37 | + ['tdd', 'rubocop'], ['seeds', 'desafios'], ['boaspraticas', 'solid'], ['vue', 'zoom'], ["vue", "desafios"], |
| 38 | + ['codesaga', 'desafios', 'tdd'], ['rubocop', 'vue', 'seeds'], ['zoom', 'boaspraticas', 'solid'], |
| 39 | + ["tdd", "codesaga"], ["rubocop", "vue", "desafios"], ["seeds", "boaspraticas", "zoom"], ["solid", "codesaga"] |
| 40 | +] |
| 41 | + |
| 42 | +# 3 imagens para posts WIP |
| 43 | +images_for_posts = [ |
| 44 | + ActiveStorage::Blob.create_and_upload!( |
| 45 | + io: File.open(Rails.root.join('app', 'assets', 'images', 'seeds', |
| 46 | + 'turma_11.jpeg')), |
| 47 | + filename: 'turma11.jpeg' |
| 48 | + ), |
| 49 | + ActiveStorage::Blob.create_and_upload!( |
| 50 | + io: File.open(Rails.root.join('app', 'assets', 'images', 'seeds', |
| 51 | + 'git_github.jpg')), |
| 52 | + filename: 'git_github.jpg' |
| 53 | + ),ActiveStorage::Blob.create_and_upload!( |
| 54 | + io: File.open(Rails.root.join('app', 'assets', 'images', 'seeds', |
| 55 | + 'vue_js.jpg')), |
| 56 | + filename: 'vue_js.jpg' |
| 57 | + ) |
| 58 | +] |
| 59 | + |
| 60 | +# Adiciona usuários, perfis, informações pessoais |
| 61 | +@number_of_users.times do |
| 62 | + user = FactoryBot.create(:user, :seed) |
| 63 | + profile = FactoryBot.create(:profile, :seed, user:) |
| 64 | + profile.photo.attach(Rails.root.join('app', 'assets', 'images', 'avatars', "avatar#{user.id}.png")) |
| 65 | + personal_info = FactoryBot.create(:personal_info, :seed, profile:) |
| 66 | + |
| 67 | + # Adiciona experiências profissionais |
| 68 | + FactoryBot.create(:professional_info, :first_seed, profile:) |
| 69 | + rand(2..7).times do |
| 70 | + FactoryBot.create(:professional_info, :seed, profile:) |
| 71 | + end |
| 72 | + |
| 73 | + # Adiciona experiências acadêmicas |
| 74 | + FactoryBot.create(:education_info, :first_seed, profile:) |
| 75 | + rand(2..7).times do |
| 76 | + FactoryBot.create(:education_info, :seed, profile:) |
| 77 | + end |
| 78 | + |
| 79 | + # Cadastra e escreve descrição de categorias de trabalho |
| 80 | + rand(2..7).times do |
| 81 | + repeated_job_category = profile.profile_job_categories.pluck(:job_category_id) |
| 82 | + job_categories = JobCategory.all.reject { |job_category| repeated_job_category.include?(job_category.id) } |
| 83 | + FactoryBot.create(:profile_job_category, |
| 84 | + profile:, |
| 85 | + job_category: job_categories.sample, |
| 86 | + description: Faker::Lorem.paragraph) |
| 87 | + end |
| 88 | + |
| 89 | + # Cria um post com imagem e outros posts somente texto (WIP) |
| 90 | + html_post = %(<action-text-attachment sgid="#{images_for_posts.sample.attachable_sgid}"></action-text-attachment>) |
| 91 | + user.posts.create(title: Faker::Lorem.sentence, content: "#{Faker::Lorem.paragraph} #{html_post}", tag_list: [tags].sample) |
| 92 | + rand(1..3).times do |
| 93 | + user.posts.create(title: Faker::Lorem.sentence, content: "#{Faker::Lorem.paragraph}", tag_list: [tags].sample) |
| 94 | + end |
| 95 | +end |
| 96 | + |
| 97 | +# Adiciona followers aos perfis |
| 98 | +User.all.each do |user| |
| 99 | + rand(2..5).times do |
| 100 | + not_followed_profiles = Profile.all.reject { |profile| profile.following?(user.profile) } |
| 101 | + followed_profile = not_followed_profiles.sample if not_followed_profiles.any? |
| 102 | + Connection.create!(follower: user.profile, followed_profile:) unless followed_profile == user.profile |
| 103 | + end |
| 104 | +end |
| 105 | + |
| 106 | +# Adiciona comentários e likes |
| 107 | +Post.all.each do |post| |
| 108 | + rand(0..10).times do |
| 109 | + FactoryBot.create(:like, likeable: post, user: User.all.reject { |user| post.likes.pluck(:user_id).include?(user.id) }.sample) |
| 110 | + end |
| 111 | + rand(0..10).times do |
| 112 | + comment = FactoryBot.create(:comment, :seed, post:, user: User.all.sample) |
| 113 | + rand(0..10).times do |
| 114 | + FactoryBot.create(:like, likeable: comment, user: User.all.reject { |user| comment.likes.pluck(:user_id).include?(user.id) }.sample) |
| 115 | + end |
| 116 | + end |
| 117 | +end |
| 118 | + |
| 119 | +puts "Pronto! #{@number_of_users} usuários criados." |
| 120 | +puts "Admin: #{admin.email}, senha: #{admin.password}" |
0 commit comments