]> git.openstreetmap.org Git - rails.git/blob - lib/tasks/dev.rake
More graceful recovery from errors
[rails.git] / lib / tasks / dev.rake
1 # frozen_string_literal: true
2
3 require "active_support/testing/time_helpers"
4
5 def create_user(display_name:, password:, email:, admin: false)
6   user = User.find_or_create_by!(:display_name => display_name) do |record|
7     record.email = email
8     record.pass_crypt = password
9     record.pass_crypt_confirmation = password
10     record.tou_agreed = Time.now.utc
11     record.terms_seen = true
12     record.terms_agreed = Time.now.utc
13     record.email_valid = true
14     record.data_public = true
15     record.activate
16   end
17
18   if admin
19     user.roles.find_or_create_by!(:role => "administrator") do |record|
20       record.granter_id = user.id
21     end
22   end
23
24   initial_line = admin ? "Created admin user" : "Created user"
25   puts(
26     <<~MESSAGE
27       #{initial_line}:
28         - Display name: #{display_name}
29         - Email: #{email}
30         - Password: #{password}
31     MESSAGE
32   )
33 end
34
35 namespace :dev do
36   desc "Populate the development database with some fake data"
37   task :populate => :environment do
38     raise "This task can only be run in development mode" unless Rails.env.development?
39
40     include ActiveSupport::Testing::TimeHelpers
41
42     # Ensure that all dates (e.g. terms_agreed) are consistent
43     travel_to(Time.utc(2015, 10, 21, 12, 0, 0)) do
44       create_user(:display_name => "admin", :password => "password", :email => "admin@example.com", :admin => true)
45       create_user(:display_name => "mapper", :password => "password", :email => "mapper@example.com")
46     end
47
48     begin
49       # Empty line to separate the output of this
50       # from that of the above
51       puts
52       Oauth::Util.register_apps("admin")
53     rescue Oauth::Util::ExistingSettingsError
54       # Error here is no big deal
55     end
56   end
57 end