From 39f80884db394decdb4b4a21a30bc1ecb3203944 Mon Sep 17 00:00:00 2001
From: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Date: Sat, 15 Mar 2014 11:39:35 +0200
Subject: [PATCH] Improve developer seeds

Return execution of observers in seeds.
Mute email sending to letter opening in you browser.
Added `rake dev` task to reset db and add seeds.

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
---
 db/fixtures/development/01_admin.rb          |   5 +-
 db/fixtures/development/04_project.rb        | 104 ++++++++++---------
 db/fixtures/development/05_users.rb          |   1 +
 db/fixtures/development/06_teams.rb          |   2 -
 db/fixtures/development/09_issues.rb         |   8 +-
 db/fixtures/development/10_merge_requests.rb |   7 +-
 db/fixtures/development/11_keys.rb           |   2 -
 db/fixtures/development/12_snippets.rb       |   2 -
 db/fixtures/development/13_comments.rb       |  26 +++--
 lib/gitlab/seeder.rb                         |  19 ++++
 lib/tasks/dev.rake                           |   6 +-
 11 files changed, 96 insertions(+), 86 deletions(-)

diff --git a/db/fixtures/development/01_admin.rb b/db/fixtures/development/01_admin.rb
index 3e76d76e838..42d18435340 100644
--- a/db/fixtures/development/01_admin.rb
+++ b/db/fixtures/development/01_admin.rb
@@ -8,8 +8,7 @@ User.seed(:id, [
     password_confirmation: "5iveL!fe",
     admin: true,
     projects_limit: 100,
-    theme_id: Gitlab::Theme::MARS
+    theme_id: Gitlab::Theme::MARS,
+    confirmed_at: DateTime.now
   }
 ])
-
-User.find(1).confirm!
diff --git a/db/fixtures/development/04_project.rb b/db/fixtures/development/04_project.rb
index d0d0774e0c8..9303ab93300 100644
--- a/db/fixtures/development/04_project.rb
+++ b/db/fixtures/development/04_project.rb
@@ -1,53 +1,55 @@
-project_urls = [
-  'https://github.com/documentcloud/underscore.git',
-  'https://github.com/diaspora/diaspora.git',
-  'https://github.com/diaspora/diaspora-project-site.git',
-  'https://github.com/diaspora/diaspora-client.git',
-  'https://github.com/brightbox/brightbox-cli.git',
-  'https://github.com/brightbox/puppet.git',
-  'https://github.com/gitlabhq/gitlabhq.git',
-  'https://github.com/gitlabhq/gitlab-ci.git',
-  'https://github.com/gitlabhq/gitlab-recipes.git',
-  'https://github.com/gitlabhq/gitlab-shell.git',
-  'https://github.com/gitlabhq/grack.git',
-  'https://github.com/gitlabhq/testme.git',
-  'https://github.com/twitter/flight.git',
-  'https://github.com/twitter/typeahead.js.git',
-  'https://github.com/h5bp/html5-boilerplate.git',
-  'https://github.com/h5bp/mobile-boilerplate.git',
-]
-
-project_urls.each_with_index do |url, i|
-  group_path, project_path = url.split('/')[-2..-1]
-
-  group = Group.find_by(path: group_path)
-
-  unless group
-    group = Group.new(
-      name: group_path.titleize,
-      path: group_path
-    )
-    group.description = Faker::Lorem.sentence
-    group.save
-
-    group.add_owner(User.first)
-  end
-
-  project_path.gsub!(".git", "")
-
-  params = {
-    import_url: url,
-    namespace_id: group.id,
-    name: project_path.titleize,
-    description: Faker::Lorem.sentence
-  }
-
-  project = Projects::CreateService.new(User.first, params).execute
-
-  if project.valid?
-    print '.'
-  else
-    puts project.errors.full_messages
-    print 'F'
+Gitlab::Seeder.quiet do
+  project_urls = [
+    'https://github.com/documentcloud/underscore.git',
+    'https://github.com/diaspora/diaspora.git',
+    'https://github.com/diaspora/diaspora-project-site.git',
+    'https://github.com/diaspora/diaspora-client.git',
+    'https://github.com/brightbox/brightbox-cli.git',
+    'https://github.com/brightbox/puppet.git',
+    'https://github.com/gitlabhq/gitlabhq.git',
+    'https://github.com/gitlabhq/gitlab-ci.git',
+    'https://github.com/gitlabhq/gitlab-recipes.git',
+    'https://github.com/gitlabhq/gitlab-shell.git',
+    'https://github.com/gitlabhq/grack.git',
+    'https://github.com/gitlabhq/testme.git',
+    'https://github.com/twitter/flight.git',
+    'https://github.com/twitter/typeahead.js.git',
+    'https://github.com/h5bp/html5-boilerplate.git',
+    'https://github.com/h5bp/mobile-boilerplate.git',
+  ]
+
+  project_urls.each_with_index do |url, i|
+    group_path, project_path = url.split('/')[-2..-1]
+
+    group = Group.find_by(path: group_path)
+
+    unless group
+      group = Group.new(
+        name: group_path.titleize,
+        path: group_path
+      )
+      group.description = Faker::Lorem.sentence
+      group.save
+
+      group.add_owner(User.first)
+    end
+
+    project_path.gsub!(".git", "")
+
+    params = {
+      import_url: url,
+      namespace_id: group.id,
+      name: project_path.titleize,
+      description: Faker::Lorem.sentence
+    }
+
+    project = Projects::CreateService.new(User.first, params).execute
+
+    if project.valid?
+      print '.'
+    else
+      puts project.errors.full_messages
+      print 'F'
+    end
   end
 end
diff --git a/db/fixtures/development/05_users.rb b/db/fixtures/development/05_users.rb
index 3440a645408..d736408dbf5 100644
--- a/db/fixtures/development/05_users.rb
+++ b/db/fixtures/development/05_users.rb
@@ -6,6 +6,7 @@ Gitlab::Seeder.quiet do
         username: Faker::Internet.user_name,
         name: Faker::Name.name,
         email: Faker::Internet.email,
+        confirmed_at: DateTime.now
       }])
       print '.'
     rescue ActiveRecord::RecordNotSaved
diff --git a/db/fixtures/development/06_teams.rb b/db/fixtures/development/06_teams.rb
index a1e01879db5..dfbe75fd20e 100644
--- a/db/fixtures/development/06_teams.rb
+++ b/db/fixtures/development/06_teams.rb
@@ -1,5 +1,3 @@
-ActiveRecord::Base.observers.disable :all
-
 Gitlab::Seeder.quiet do
   Group.all.each do |group|
     User.all.sample(4).each do |user|
diff --git a/db/fixtures/development/09_issues.rb b/db/fixtures/development/09_issues.rb
index 2b81d7a2597..635878622d0 100644
--- a/db/fixtures/development/09_issues.rb
+++ b/db/fixtures/development/09_issues.rb
@@ -1,5 +1,3 @@
-ActiveRecord::Base.observers.disable :all
-
 Gitlab::Seeder.quiet do
   (1..300).each  do |i|
     # Random Project
@@ -12,9 +10,7 @@ Gitlab::Seeder.quiet do
 
     user_id = user.id
 
-    begin
-      Thread.current[:current_user] = user
-
+    Gitlab::Seeder.by_user(user) do
       Issue.seed(:id, [{
         id: i,
         project_id: project.id,
@@ -25,8 +21,6 @@ Gitlab::Seeder.quiet do
         title: Faker::Lorem.sentence(6),
         description: Faker::Lorem.sentence
       }])
-    ensure
-      Thread.current[:current_user] = nil
     end
     print('.')
   end
diff --git a/db/fixtures/development/10_merge_requests.rb b/db/fixtures/development/10_merge_requests.rb
index 2b1f4160211..cb08a7c2537 100644
--- a/db/fixtures/development/10_merge_requests.rb
+++ b/db/fixtures/development/10_merge_requests.rb
@@ -1,5 +1,3 @@
-ActiveRecord::Base.observers.disable :all
-
 Gitlab::Seeder.quiet do
   (1..100).each  do |i|
     # Random Project
@@ -17,9 +15,8 @@ Gitlab::Seeder.quiet do
     next if branches.uniq.size < 2
 
     user_id = user.id
-    begin
-      Thread.current[:current_user] = user
 
+    Gitlab::Seeder.by_user(user) do
       MergeRequest.seed(:id, [{
         id: i,
         source_branch: branches.first,
@@ -31,8 +28,6 @@ Gitlab::Seeder.quiet do
         milestone: project.milestones.sample,
         title: Faker::Lorem.sentence(6)
       }])
-    ensure
-      Thread.current[:current_user] = nil
     end
     print('.')
   end
diff --git a/db/fixtures/development/11_keys.rb b/db/fixtures/development/11_keys.rb
index 4b53ff411f2..42171393d1b 100644
--- a/db/fixtures/development/11_keys.rb
+++ b/db/fixtures/development/11_keys.rb
@@ -1,5 +1,3 @@
-ActiveRecord::Base.observers.enable :all
-
 Gitlab::Seeder.quiet do
   User.first(30).each_with_index do |user, i|
     Key.seed(:id, [
diff --git a/db/fixtures/development/12_snippets.rb b/db/fixtures/development/12_snippets.rb
index 4ca8afe294e..dced2706264 100644
--- a/db/fixtures/development/12_snippets.rb
+++ b/db/fixtures/development/12_snippets.rb
@@ -1,5 +1,3 @@
-ActiveRecord::Base.observers.disable :all
-
 Gitlab::Seeder.quiet do
   contents = [
     `curl https://gist.github.com/randx/4275756/raw/da2f262920c96d1a970d48bf2e99147954b1f4bd/glus1204.sh`,
diff --git a/db/fixtures/development/13_comments.rb b/db/fixtures/development/13_comments.rb
index b133ec3146d..626aba200d1 100644
--- a/db/fixtures/development/13_comments.rb
+++ b/db/fixtures/development/13_comments.rb
@@ -1,13 +1,19 @@
-ActiveRecord::Base.observers.disable :all
+Gitlab::Seeder.quiet do
+  Issue.all.limit(10).each_with_index do |issue, i|
+    5.times do
+      user = issue.project.team.users.sample
 
-Issue.all.limit(10).each_with_index do |issue, i|
-  5.times do
-    Note.seed(:id, [{
-      project_id: issue.project.id,
-      author_id: issue.project.team.users.sample.id,
-      note: Faker::Lorem.sentence,
-      noteable_id: issue.id,
-      noteable_type: 'Issue'
-    }])
+      Gitlab::Seeder.by_user(user) do
+        Note.seed(:id, [{
+          project_id: issue.project.id,
+          author_id: user.id,
+          note: Faker::Lorem.sentence,
+          noteable_id: issue.id,
+          noteable_type: 'Issue'
+        }])
+
+        print '.'
+      end
+    end
   end
 end
diff --git a/lib/gitlab/seeder.rb b/lib/gitlab/seeder.rb
index 3aa3b2ba1e9..39de1223b18 100644
--- a/lib/gitlab/seeder.rb
+++ b/lib/gitlab/seeder.rb
@@ -1,10 +1,29 @@
 module Gitlab
   class Seeder
     def self.quiet
+      mute_mailer
       SeedFu.quiet = true
       yield
       SeedFu.quiet = false
       puts "\nOK".green
     end
+
+    def self.by_user(user)
+      begin
+        Thread.current[:current_user] = user
+        yield
+      ensure
+        Thread.current[:current_user] = nil
+      end
+    end
+
+    def self.mute_mailer
+      code = <<-eos
+def Notify.delay
+  self
+end
+      eos
+      eval(code)
+    end
   end
 end
diff --git a/lib/tasks/dev.rake b/lib/tasks/dev.rake
index 7d3602211c1..058c7417040 100644
--- a/lib/tasks/dev.rake
+++ b/lib/tasks/dev.rake
@@ -1,10 +1,10 @@
+task dev: ["dev:setup"]
+
 namespace :dev do
   desc "GITLAB | Setup developer environment (db, fixtures)"
   task :setup => :environment do
     ENV['force'] = 'yes'
-    Rake::Task["db:setup"].invoke
-    Rake::Task["db:seed_fu"].invoke
+    Rake::Task["gitlab:setup"].invoke
     Rake::Task["gitlab:shell:setup"].invoke
   end
 end
-
-- 
GitLab