Browse Source

Add task to generate test data

master
Andrey Chernih 5 years ago
parent
commit
9e849de0f7
3 changed files with 43 additions and 0 deletions
  1. +1
    -0
      Gemfile
  2. +3
    -0
      Gemfile.lock
  3. +39
    -0
      lib/tasks/fake_data.rake

+ 1
- 0
Gemfile View File

@@ -42,4 +42,5 @@ group :test, :development do
gem "rspec-rails", "~> 2.6"
gem "machinist"
gem "sqlite3"
gem "faker"
end

+ 3
- 0
Gemfile.lock View File

@@ -34,6 +34,8 @@ GEM
exception_notification (2.6.1)
actionmailer (>= 3.0.4)
execjs (2.0.2)
faker (1.4.1)
i18n (~> 0.5)
hike (1.2.3)
htmlentities (4.3.1)
i18n (0.6.9)
@@ -126,6 +128,7 @@ DEPENDENCIES
bcrypt-ruby (~> 3.1.2)
dynamic_form
exception_notification (= 2.6.1)
faker
htmlentities
jquery-rails
machinist


+ 39
- 0
lib/tasks/fake_data.rake View File

@@ -0,0 +1,39 @@
class FakeDataGenerator
def initialize(users_count, stories_count)
@users_count = users_count
@stories_count = stories_count
end

def generate
users = 0.upto(@users_count).map do |i|
name = Faker::Name.name
password = Faker::Internet.password
user_name = Faker::Internet.user_name(name, %w(_))
User.create! email: Faker::Internet.email(name),
password: password,
password_confirmation: password,
username: user_name
end

@stories_count.times do
user = users[Random.rand(users.length-1)]
title = Faker::Lorem.sentence(3)
tag = Tag.find_or_create_by! tag: title.split(' ').first.downcase
Story.create! user: user, title: title, url: Faker::Internet.url, tags_a: [tag.tag]
end
end
end

desc 'Generates fake data for testing purposes'
task fake_data: :environment do
fail "It's not intended to be run outside development environment" unless Rails.env.development?
unless (User.count + Tag.count + Story.count) == 0
fail "Please ensure that you're running it on clean database because it will destroy all data"
end

User.destroy_all
Tag.destroy_all
Story.destroy_all

FakeDataGenerator.new(10, 1_000).generate
end

Loading…
Cancel
Save