diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index b68c4a67826209c015d4a526f604120ac55f53aa..1eaa32de27fed0737fae3d5f93d68dcf009b04d4 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -80,11 +80,9 @@ the remaining issues on the GitHub issue tracker.
 ## I want to contribute!
 
 If you want to contribute to GitLab, but are not sure where to start,
-look for [issues with the label `up-for-grabs`][up-for-grabs]. These issues
-will be of reasonable size and challenge, for anyone to start contributing to
-GitLab.
-
-This was inspired by [an article by Kent C. Dodds][medium-up-for-grabs].
+look for [issues with the label `Accepting Merge Requests` and weight < 5][accepting-mrs-weight].
+These issues will be of reasonable size and challenge, for anyone to start
+contributing to GitLab.
 
 ## Implement design & UI elements
 
@@ -214,16 +212,19 @@ associated with in the description of the issue.
 ## Merge requests
 
 We welcome merge requests with fixes and improvements to GitLab code, tests,
-and/or documentation. The features we would really like a merge request for are
-listed with the label [`Accepting Merge Requests` on our issue tracker for CE][accepting-mrs-ce]
-and [EE][accepting-mrs-ee] but other improvements are also welcome. Please note
-that if an issue is marked for the current milestone either before or while you
-are working on it, a team member may take over the merge request in order to
-ensure the work is finished before the release date.
+and/or documentation. The issues that are specifically suitable for
+community contributions are listed with the label
+[`Accepting Merge Requests` on our issue tracker for CE][accepting-mrs-ce]
+and [EE][accepting-mrs-ee], but you are free to contribute to any other issue
+you want.
+
+Please note that if an issue is marked for the current milestone either before
+or while you are working on it, a team member may take over the merge request
+in order to ensure the work is finished before the release date.
 
 If you want to add a new feature that is not labeled it is best to first create
 a feedback issue (if there isn't one already) and leave a comment asking for it
-to be marked as `Accepting merge requests`. Please include screenshots or
+to be marked as `Accepting Merge Requests`. Please include screenshots or
 wireframes if the feature will also change the UI.
 
 Merge requests should be opened at [GitLab.com][gitlab-mr-tracker].
@@ -450,8 +451,7 @@ available at [http://contributor-covenant.org/version/1/1/0/](http://contributor
 [core team]: https://about.gitlab.com/core-team/
 [getting-help]: https://about.gitlab.com/getting-help/
 [codetriage]: http://www.codetriage.com/gitlabhq/gitlabhq
-[up-for-grabs]: https://gitlab.com/gitlab-org/gitlab-ce/issues?label_name=up-for-grabs
-[medium-up-for-grabs]: https://medium.com/@kentcdodds/first-timers-only-78281ea47455
+[accepting-mrs-weight]: https://gitlab.com/gitlab-org/gitlab-ce/issues?assignee_id=0&label_name[]=Accepting%20Merge%20Requests&sort=weight_asc
 [ce-tracker]: https://gitlab.com/gitlab-org/gitlab-ce/issues
 [ee-tracker]: https://gitlab.com/gitlab-org/gitlab-ee/issues
 [google-group]: https://groups.google.com/forum/#!forum/gitlabhq
diff --git a/app/models/concerns/taskable.rb b/app/models/concerns/taskable.rb
index 68385dc47eb2db4cf89c9ffa55097c7e3f077cc6..25e2d8ea24e10ca3857b73f90ddc1f399a114b9e 100644
--- a/app/models/concerns/taskable.rb
+++ b/app/models/concerns/taskable.rb
@@ -11,10 +11,10 @@ module Taskable
   INCOMPLETE   = 'incomplete'.freeze
   ITEM_PATTERN = /
     ^
-    \s*(?:[-+*]|(?:\d+\.))? # optional list prefix
-    \s*                     # optional whitespace prefix
-    (\[\s\]|\[[xX]\])       # checkbox
-    (\s.+)                  # followed by whitespace and some text.
+    \s*(?:[-+*]|(?:\d+\.)) # list prefix required - task item has to be always in a list
+    \s+                       # whitespace prefix has to be always presented for a list item
+    (\[\s\]|\[[xX]\])         # checkbox
+    (\s.+)                    # followed by whitespace and some text.
   /x
 
   def self.get_tasks(content)
diff --git a/app/views/projects/_merge_request_merge_settings.html.haml b/app/views/projects/_merge_request_merge_settings.html.haml
index afe2fd7fd7b0bb1a486823da43a8eb72daa52d08..1a1327fb53c886dd7e2a267e76e825f9aab3d797 100644
--- a/app/views/projects/_merge_request_merge_settings.html.haml
+++ b/app/views/projects/_merge_request_merge_settings.html.haml
@@ -8,7 +8,7 @@
       %br
       %span.descr
         Builds need to be configured to enable this feature.
-        = link_to icon('question-circle'), help_page_path('user/project/merge_requests/merge_when_build_succeeds', anchor: 'only-allow-merge-requests-to-be-merged-if-the-build-succeeds')
+        = link_to icon('question-circle'), help_page_path('user/project/merge_requests/merge_when_pipeline_succeeds', anchor: 'only-allow-merge-requests-to-be-merged-if-the-pipeline-succeeds')
   .checkbox
     = form.label :only_allow_merge_if_all_discussions_are_resolved do
       = form.check_box :only_allow_merge_if_all_discussions_are_resolved
diff --git a/app/views/projects/ci/pipelines/_pipeline.html.haml b/app/views/projects/ci/pipelines/_pipeline.html.haml
index dfdaeb048690cfede0d806c2f9ded87b6aa7964e..818a70f38f15ebd891e96329173925ea47509062 100644
--- a/app/views/projects/ci/pipelines/_pipeline.html.haml
+++ b/app/views/projects/ci/pipelines/_pipeline.html.haml
@@ -78,7 +78,7 @@
         .btn-group.inline
           - if actions.any?
             .btn-group
-              %button.dropdown-toggle.btn.btn-default.has-tooltip.js-pipeline-dropdown-manual-actions{ type: 'button', title: 'Manual build', data: { toggle: 'dropdown', placement: 'top' }, 'aria-label': 'Manual build' }
+              %button.dropdown-toggle.btn.btn-default.has-tooltip.js-pipeline-dropdown-manual-actions{ type: 'button', title: 'Manual build', data: { toggle: 'dropdown', placement: 'top' }, 'aria-label' => 'Manual build' }
                 = custom_icon('icon_play')
                 = icon('caret-down', 'aria-hidden' => 'true')
               %ul.dropdown-menu.dropdown-menu-align-right
@@ -89,7 +89,7 @@
                       %span= build.name
           - if artifacts.present?
             .btn-group
-              %button.dropdown-toggle.btn.btn-default.build-artifacts.has-tooltip.js-pipeline-dropdown-download{ type: 'button', title: 'Artifacts', data: { toggle: 'dropdown', placement: 'top' }, 'aria-label': 'Artifacts' }
+              %button.dropdown-toggle.btn.btn-default.build-artifacts.has-tooltip.js-pipeline-dropdown-download{ type: 'button', title: 'Artifacts', data: { toggle: 'dropdown', placement: 'top' }, 'aria-label' => 'Artifacts' }
                 = icon("download")
                 = icon('caret-down')
               %ul.dropdown-menu.dropdown-menu-align-right
@@ -102,8 +102,8 @@
       - if can?(current_user, :update_pipeline, pipeline.project)
         .cancel-retry-btns.inline
           - if pipeline.retryable?
-            = link_to retry_namespace_project_pipeline_path(pipeline.project.namespace, pipeline.project, pipeline.id), class: 'btn has-tooltip', title: 'Retry', data: { toggle: 'dropdown', placement: 'top' }, 'aria-label': 'Retry' , method: :post do
+            = link_to retry_namespace_project_pipeline_path(pipeline.project.namespace, pipeline.project, pipeline.id), class: 'btn has-tooltip', title: 'Retry', data: { toggle: 'dropdown', placement: 'top' }, 'aria-label' => 'Retry' , method: :post do
               = icon("repeat")
           - if pipeline.cancelable?
-            = link_to cancel_namespace_project_pipeline_path(pipeline.project.namespace, pipeline.project, pipeline.id), class: 'btn btn-remove has-tooltip', title: 'Cancel', data: { toggle: 'dropdown', placement: 'top' }, 'aria-label': 'Cancel' , method: :post do
+            = link_to cancel_namespace_project_pipeline_path(pipeline.project.namespace, pipeline.project, pipeline.id), class: 'btn btn-remove has-tooltip', title: 'Cancel', data: { toggle: 'dropdown', placement: 'top' }, 'aria-label' => 'Cancel' , method: :post do
               = icon("remove")
diff --git a/changelogs/unreleased/26068_tasklist_issue.yml b/changelogs/unreleased/26068_tasklist_issue.yml
new file mode 100644
index 0000000000000000000000000000000000000000..c938351b8a739dca2fb4a3293788f32e249d7f87
--- /dev/null
+++ b/changelogs/unreleased/26068_tasklist_issue.yml
@@ -0,0 +1,4 @@
+---
+title: Don’t count tasks that are not defined as list items correctly
+merge_request: 8526
+author:
diff --git a/changelogs/unreleased/27178-update-builds-link-in-project-settings.yml b/changelogs/unreleased/27178-update-builds-link-in-project-settings.yml
new file mode 100644
index 0000000000000000000000000000000000000000..52406bba46456667998bb0591cad777b827e1493
--- /dev/null
+++ b/changelogs/unreleased/27178-update-builds-link-in-project-settings.yml
@@ -0,0 +1,4 @@
+---
+title: Updated builds info link on the project settings page
+merge_request:
+author: Ryan Harris
diff --git a/features/steps/project/merge_requests/revert.rb b/features/steps/project/merge_requests/revert.rb
index 3cc4fe9dafbed44e4864fd3bb5cdfd76ac31626c..31f95b524b3c46be32fb06e0dbaa5b36ad124326 100644
--- a/features/steps/project/merge_requests/revert.rb
+++ b/features/steps/project/merge_requests/revert.rb
@@ -30,14 +30,13 @@ class Spinach::Features::RevertMergeRequests < Spinach::FeatureSteps
   end
 
   step 'I am signed in as a developer of the project' do
+    @user = create(:user) { |u| @project.add_developer(u) }
     login_as(@user)
   end
 
   step 'There is an open Merge Request' do
-    @user = create(:user)
-    @project = create(:project, :public, :repository)
-    @project_member = create(:project_member, :developer, user: @user, project: @project)
-    @merge_request = create(:merge_request, :with_diffs, :simple, source_project: @project)
+    @merge_request = create(:merge_request, :with_diffs, :simple)
+    @project = @merge_request.source_project
   end
 
   step 'I should see a revert error' do
diff --git a/spec/controllers/admin/groups_controller_spec.rb b/spec/controllers/admin/groups_controller_spec.rb
index 602de72d23f23daafbc85bf6268da7cf97f76d89..84db26a958a165ea5cf8d1f5e6e7ebee64c6315e 100644
--- a/spec/controllers/admin/groups_controller_spec.rb
+++ b/spec/controllers/admin/groups_controller_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe Admin::GroupsController do
   let(:group) { create(:group) }
-  let(:project) { create(:project, namespace: group) }
+  let(:project) { create(:empty_project, namespace: group) }
   let(:admin) { create(:admin) }
 
   before do
diff --git a/spec/controllers/admin/projects_controller_spec.rb b/spec/controllers/admin/projects_controller_spec.rb
index 8eaacef2024c1ea7a527d950181b6fd402b6bb4f..2c35d394b74f90bcf1f46e01c228d1dd9512ea48 100644
--- a/spec/controllers/admin/projects_controller_spec.rb
+++ b/spec/controllers/admin/projects_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Admin::ProjectsController do
-  let!(:project) { create(:project, visibility_level: Gitlab::VisibilityLevel::PUBLIC) }
+  let!(:project) { create(:empty_project, :public) }
 
   before do
     sign_in(create(:admin))
diff --git a/spec/controllers/autocomplete_controller_spec.rb b/spec/controllers/autocomplete_controller_spec.rb
index ea2fd90a9b013d02983d24cc7135794709a10b87..7d2f6dd9d0a5f0eadb682441f1ad87afb1247ab7 100644
--- a/spec/controllers/autocomplete_controller_spec.rb
+++ b/spec/controllers/autocomplete_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe AutocompleteController do
-  let!(:project) { create(:project) }
+  let!(:project) { create(:empty_project) }
   let!(:user) { create(:user) }
 
   context 'GET users' do
diff --git a/spec/controllers/blob_controller_spec.rb b/spec/controllers/blob_controller_spec.rb
index 465013231f9de7b3ca1596601f2f7ce13bb1ddbd..2fcb4a6a528db118be19a0f3c35ae62aa2a66eeb 100644
--- a/spec/controllers/blob_controller_spec.rb
+++ b/spec/controllers/blob_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::BlobController do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:user)    { create(:user) }
 
   before do
diff --git a/spec/controllers/ci/projects_controller_spec.rb b/spec/controllers/ci/projects_controller_spec.rb
index 5022a3e2c80fc31fd81a95a3975172de6de065a0..86f01f437a2b071adcc0036239fbb0ebdc214e63 100644
--- a/spec/controllers/ci/projects_controller_spec.rb
+++ b/spec/controllers/ci/projects_controller_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe Ci::ProjectsController do
   let(:visibility) { :public }
-  let!(:project) { create(:project, visibility, ci_id: 1) }
+  let!(:project) { create(:empty_project, visibility, ci_id: 1) }
   let(:ci_id) { project.ci_id }
 
   describe '#index' do
diff --git a/spec/controllers/dashboard/todos_controller_spec.rb b/spec/controllers/dashboard/todos_controller_spec.rb
index 19fbc2f7748d297a80f266166ebdde89e08c9e37..79ef3a1adadab1c60ed30520d93af697e1a1c6b3 100644
--- a/spec/controllers/dashboard/todos_controller_spec.rb
+++ b/spec/controllers/dashboard/todos_controller_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe Dashboard::TodosController do
   let(:user) { create(:user) }
-  let(:project) { create(:project) }
+  let(:project) { create(:empty_project) }
   let(:todo_service) { TodoService.new }
 
   describe 'GET #index' do
diff --git a/spec/controllers/groups/milestones_controller_spec.rb b/spec/controllers/groups/milestones_controller_spec.rb
index 8c52f615b8ba06076e11ba44d56882bbe39a47ae..6e4b5f78e334773ace89d943e7a5449cdb7c3df3 100644
--- a/spec/controllers/groups/milestones_controller_spec.rb
+++ b/spec/controllers/groups/milestones_controller_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe Groups::MilestonesController do
   let(:group) { create(:group) }
-  let(:project) { create(:project, group: group) }
+  let(:project) { create(:empty_project, group: group) }
   let(:project2) { create(:empty_project, group: group) }
   let(:user)    { create(:user) }
   let(:title) { '肯定不是中文的问题' }
diff --git a/spec/controllers/groups_controller_spec.rb b/spec/controllers/groups_controller_spec.rb
index 98dfb3e52165fe35777f509171c4f7194de66989..cad82a34fb0e92d1e127dda7361b6fed9773f25f 100644
--- a/spec/controllers/groups_controller_spec.rb
+++ b/spec/controllers/groups_controller_spec.rb
@@ -3,7 +3,7 @@ require 'rails_helper'
 describe GroupsController do
   let(:user) { create(:user) }
   let(:group) { create(:group) }
-  let(:project) { create(:project, namespace: group) }
+  let(:project) { create(:empty_project, namespace: group) }
   let!(:group_member) { create(:group_member, group: group, user: user) }
 
   describe 'GET #index' do
diff --git a/spec/controllers/import/bitbucket_controller_spec.rb b/spec/controllers/import/bitbucket_controller_spec.rb
index ce7c0b334ee071358b935322165ed9874c6bdc2d..fa4cc0ebbe0ca9ff7af1f3265740e9c4ef4eaf95 100644
--- a/spec/controllers/import/bitbucket_controller_spec.rb
+++ b/spec/controllers/import/bitbucket_controller_spec.rb
@@ -52,7 +52,7 @@ describe Import::BitbucketController do
     end
 
     it "assigns variables" do
-      @project = create(:project, import_type: 'bitbucket', creator_id: user.id)
+      @project = create(:empty_project, import_type: 'bitbucket', creator_id: user.id)
       allow_any_instance_of(Bitbucket::Client).to receive(:repos).and_return([@repo])
 
       get :status
@@ -63,7 +63,7 @@ describe Import::BitbucketController do
     end
 
     it "does not show already added project" do
-      @project = create(:project, import_type: 'bitbucket', creator_id: user.id, import_source: 'asd/vim')
+      @project = create(:empty_project, import_type: 'bitbucket', creator_id: user.id, import_source: 'asd/vim')
       allow_any_instance_of(Bitbucket::Client).to receive(:repos).and_return([@repo])
 
       get :status
diff --git a/spec/controllers/import/fogbugz_controller_spec.rb b/spec/controllers/import/fogbugz_controller_spec.rb
index 5f0f6dea82107ef42aec875c79fae55801284f6b..fffbc805335e39fb20302342fadb94db21c547fa 100644
--- a/spec/controllers/import/fogbugz_controller_spec.rb
+++ b/spec/controllers/import/fogbugz_controller_spec.rb
@@ -16,7 +16,7 @@ describe Import::FogbugzController do
     end
 
     it 'assigns variables' do
-      @project = create(:project, import_type: 'fogbugz', creator_id: user.id)
+      @project = create(:empty_project, import_type: 'fogbugz', creator_id: user.id)
       stub_client(repos: [@repo])
 
       get :status
@@ -26,7 +26,7 @@ describe Import::FogbugzController do
     end
 
     it 'does not show already added project' do
-      @project = create(:project, import_type: 'fogbugz', creator_id: user.id, import_source: 'vim')
+      @project = create(:empty_project, import_type: 'fogbugz', creator_id: user.id, import_source: 'vim')
       stub_client(repos: [@repo])
 
       get :status
diff --git a/spec/controllers/import/gitlab_controller_spec.rb b/spec/controllers/import/gitlab_controller_spec.rb
index 6f75ebb16c818f61ff5f80d45123fe55ac430b8e..3f73ea000ae6618d5984f1b20a972de7b9e22d0a 100644
--- a/spec/controllers/import/gitlab_controller_spec.rb
+++ b/spec/controllers/import/gitlab_controller_spec.rb
@@ -36,7 +36,7 @@ describe Import::GitlabController do
     end
 
     it "assigns variables" do
-      @project = create(:project, import_type: 'gitlab', creator_id: user.id)
+      @project = create(:empty_project, import_type: 'gitlab', creator_id: user.id)
       stub_client(projects: [@repo])
 
       get :status
@@ -46,7 +46,7 @@ describe Import::GitlabController do
     end
 
     it "does not show already added project" do
-      @project = create(:project, import_type: 'gitlab', creator_id: user.id, import_source: 'asd/vim')
+      @project = create(:empty_project, import_type: 'gitlab', creator_id: user.id, import_source: 'asd/vim')
       stub_client(projects: [@repo])
 
       get :status
diff --git a/spec/controllers/import/google_code_controller_spec.rb b/spec/controllers/import/google_code_controller_spec.rb
index 4241db6e771a83e9ff0322e57871e7fe3161de28..c96fb90f70e81ea970a560a7ee968d0b1483118e 100644
--- a/spec/controllers/import/google_code_controller_spec.rb
+++ b/spec/controllers/import/google_code_controller_spec.rb
@@ -27,7 +27,7 @@ describe Import::GoogleCodeController do
     end
 
     it "assigns variables" do
-      @project = create(:project, import_type: 'google_code', creator_id: user.id)
+      @project = create(:empty_project, import_type: 'google_code', creator_id: user.id)
       stub_client(repos: [@repo], incompatible_repos: [])
 
       get :status
@@ -38,7 +38,7 @@ describe Import::GoogleCodeController do
     end
 
     it "does not show already added project" do
-      @project = create(:project, import_type: 'google_code', creator_id: user.id, import_source: 'vim')
+      @project = create(:empty_project, import_type: 'google_code', creator_id: user.id, import_source: 'vim')
       stub_client(repos: [@repo], incompatible_repos: [])
 
       get :status
diff --git a/spec/controllers/notification_settings_controller_spec.rb b/spec/controllers/notification_settings_controller_spec.rb
index 79b819a137706e4d6584481b3319426aba6ba1c7..9e3a31e1a6b9fb2c3ec8dbda0260e797cd873674 100644
--- a/spec/controllers/notification_settings_controller_spec.rb
+++ b/spec/controllers/notification_settings_controller_spec.rb
@@ -93,7 +93,7 @@ describe NotificationSettingsController do
     end
 
     context 'not authorized' do
-      let(:private_project) { create(:project, :private) }
+      let(:private_project) { create(:empty_project, :private) }
       before { sign_in(user) }
 
       it 'returns 404' do
diff --git a/spec/controllers/projects/avatars_controller_spec.rb b/spec/controllers/projects/avatars_controller_spec.rb
index f5ea097af8b5a22fb67690d93a4150c3da0ce4f2..8b71d6518bb09eb533ea0dc03cbc19bae0b4ac9c 100644
--- a/spec/controllers/projects/avatars_controller_spec.rb
+++ b/spec/controllers/projects/avatars_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::AvatarsController do
-  let(:project) { create(:project, avatar: fixture_file_upload(Rails.root + "spec/fixtures/dk.png", "image/png")) }
+  let(:project) { create(:empty_project, avatar: fixture_file_upload(Rails.root + "spec/fixtures/dk.png", "image/png")) }
   let(:user)    { create(:user) }
 
   before do
diff --git a/spec/controllers/projects/blame_controller_spec.rb b/spec/controllers/projects/blame_controller_spec.rb
index 4402ca43c65ccbb4bfed5d129494f2b76498eec9..addc5e7ec33c3fbe51b91214e00d45b5cbdfe146 100644
--- a/spec/controllers/projects/blame_controller_spec.rb
+++ b/spec/controllers/projects/blame_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::BlameController do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:user)    { create(:user) }
 
   before do
diff --git a/spec/controllers/projects/blob_controller_spec.rb b/spec/controllers/projects/blob_controller_spec.rb
index f35c5d992d95a64b9c28a5feca1528de36892c81..b36d0e6933091ca9e7ae4259d6a057d7ce1ae2e2 100644
--- a/spec/controllers/projects/blob_controller_spec.rb
+++ b/spec/controllers/projects/blob_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'rails_helper'
 
 describe Projects::BlobController do
-  let(:project) { create(:project, :public) }
+  let(:project) { create(:project, :public, :repository) }
   let(:user)    { create(:user) }
 
   before do
diff --git a/spec/controllers/projects/branches_controller_spec.rb b/spec/controllers/projects/branches_controller_spec.rb
index b88586b8678352b0016991ade107d9636dd4fe54..9de038767553aa035f92a2b2a27e33613aa4ecde 100644
--- a/spec/controllers/projects/branches_controller_spec.rb
+++ b/spec/controllers/projects/branches_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::BranchesController do
-  let(:project)   { create(:project) }
+  let(:project)   { create(:project, :repository) }
   let(:user)      { create(:user) }
   let(:developer) { create(:user) }
 
diff --git a/spec/controllers/projects/commit_controller_spec.rb b/spec/controllers/projects/commit_controller_spec.rb
index 0fa06a38d2a02b3fc2f0e3c60d22ef33aa8a8a04..a95cfc5c6bee4468aa44a49ccacd1be384cd9013 100644
--- a/spec/controllers/projects/commit_controller_spec.rb
+++ b/spec/controllers/projects/commit_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::CommitController do
-  let(:project)  { create(:project) }
+  let(:project)  { create(:project, :repository) }
   let(:user)     { create(:user) }
   let(:commit)   { project.commit("master") }
   let(:pipeline) { create(:ci_pipeline, project: project, commit: commit) }
diff --git a/spec/controllers/projects/commits_controller_spec.rb b/spec/controllers/projects/commits_controller_spec.rb
index 1ac7e03a2db1022e5bdc740a160af7202a9c5df6..54b8d1108a56e773a329d3efd6d188520e11c5b5 100644
--- a/spec/controllers/projects/commits_controller_spec.rb
+++ b/spec/controllers/projects/commits_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::CommitsController do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:user) { create(:user) }
 
   before do
diff --git a/spec/controllers/projects/compare_controller_spec.rb b/spec/controllers/projects/compare_controller_spec.rb
index b03c4b52de67c451a9c6266ab0967c714570732f..e811c76fb31f21fd7cd156140f9cdb1c81df8938 100644
--- a/spec/controllers/projects/compare_controller_spec.rb
+++ b/spec/controllers/projects/compare_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::CompareController do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:user) { create(:user) }
   let(:ref_from) { "improve%2Fawesome" }
   let(:ref_to) { "feature" }
diff --git a/spec/controllers/projects/cycle_analytics_controller_spec.rb b/spec/controllers/projects/cycle_analytics_controller_spec.rb
index a971adf0539017c7e9ff96562e8bdc442320e99c..6a6d71a16ee77f76b65ee7a26bcf86c88bbb01cb 100644
--- a/spec/controllers/projects/cycle_analytics_controller_spec.rb
+++ b/spec/controllers/projects/cycle_analytics_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::CycleAnalyticsController do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:user) { create(:user) }
 
   before do
diff --git a/spec/controllers/projects/discussions_controller_spec.rb b/spec/controllers/projects/discussions_controller_spec.rb
index ff617fea8476f23b636c0e5c6e68fb2ecf5156fa..79ab364a6f338e1f953ef099ea583878cde45256 100644
--- a/spec/controllers/projects/discussions_controller_spec.rb
+++ b/spec/controllers/projects/discussions_controller_spec.rb
@@ -1,9 +1,9 @@
 require 'spec_helper'
 
 describe Projects::DiscussionsController do
-  let(:user)    { create(:user) }
-  let(:project) { create(:project) }
-  let(:merge_request) { create(:merge_request, source_project: project) }
+  let(:user) { create(:user) }
+  let(:merge_request) { create(:merge_request) }
+  let(:project) { merge_request.source_project }
   let(:note) { create(:diff_note_on_merge_request, noteable: merge_request, project: project) }
   let(:discussion) { note.discussion }
 
diff --git a/spec/controllers/projects/find_file_controller_spec.rb b/spec/controllers/projects/find_file_controller_spec.rb
index 038dfeb846698ac9ceb56581e8dd095c536b53fc..a4884256c928fa0f13b7a58c4048553dcd74812f 100644
--- a/spec/controllers/projects/find_file_controller_spec.rb
+++ b/spec/controllers/projects/find_file_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::FindFileController do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:user)    { create(:user) }
 
   before do
diff --git a/spec/controllers/projects/forks_controller_spec.rb b/spec/controllers/projects/forks_controller_spec.rb
index 028ea067a97bee639765e10835d49553fcb9f18d..a867668d97b4b037feb72c81a2b39749a04e4540 100644
--- a/spec/controllers/projects/forks_controller_spec.rb
+++ b/spec/controllers/projects/forks_controller_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe Projects::ForksController do
   let(:user) { create(:user) }
-  let(:project) { create(:project, :public) }
+  let(:project) { create(:project, :public, :repository) }
   let(:forked_project) { Projects::ForkService.new(project, user).execute }
   let(:group) { create(:group, owner: forked_project.creator) }
 
diff --git a/spec/controllers/projects/graphs_controller_spec.rb b/spec/controllers/projects/graphs_controller_spec.rb
index 74e6603b0cb5a5bf75e4229f78b5630007a1c2b3..bbe8e4bf6b243e507d9ad010df46d9de37649e82 100644
--- a/spec/controllers/projects/graphs_controller_spec.rb
+++ b/spec/controllers/projects/graphs_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::GraphsController do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:user)    { create(:user) }
 
   before do
diff --git a/spec/controllers/projects/group_links_controller_spec.rb b/spec/controllers/projects/group_links_controller_spec.rb
index 17dc101b7ee63a4e9be6db33d3b77b999d2d8d64..a976a9c27abb67f246f6ab50a978b38b51aa5048 100644
--- a/spec/controllers/projects/group_links_controller_spec.rb
+++ b/spec/controllers/projects/group_links_controller_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Projects::GroupLinksController do
   let(:group) { create(:group, :private) }
   let(:group2) { create(:group, :private) }
-  let(:project) { create(:project, :private, group: group2) }
+  let(:project) { create(:empty_project, :private, group: group2) }
   let(:user) { create(:user) }
 
   before do
diff --git a/spec/controllers/projects/issues_controller_spec.rb b/spec/controllers/projects/issues_controller_spec.rb
index b5987a83df0affcea451c4d78e8b718d97eda9af..5f27f336f7213220b61bd6950fd46f0ab2173d2a 100644
--- a/spec/controllers/projects/issues_controller_spec.rb
+++ b/spec/controllers/projects/issues_controller_spec.rb
@@ -98,7 +98,7 @@ describe Projects::IssuesController do
       end
 
       it 'fills in an issue for a merge request' do
-        project_with_repository = create(:project)
+        project_with_repository = create(:project, :repository)
         project_with_repository.team << [user, :developer]
         mr = create(:merge_request_with_diff_notes, source_project: project_with_repository)
 
@@ -124,7 +124,7 @@ describe Projects::IssuesController do
 
   describe 'PUT #update' do
     context 'when moving issue to another private project' do
-      let(:another_project) { create(:project, :private) }
+      let(:another_project) { create(:empty_project, :private) }
 
       before do
         sign_in(user)
@@ -466,7 +466,7 @@ describe Projects::IssuesController do
     context "when the user is owner" do
       let(:owner)     { create(:user) }
       let(:namespace) { create(:namespace, owner: owner) }
-      let(:project)   { create(:project, namespace: namespace) }
+      let(:project)   { create(:empty_project, namespace: namespace) }
 
       before { sign_in(owner) }
 
diff --git a/spec/controllers/projects/milestones_controller_spec.rb b/spec/controllers/projects/milestones_controller_spec.rb
index 6d30d085056de1631e006dbdd8720c23c1358a53..14207bf6b7af6690e4bee1d6dc320f817b5d90f6 100644
--- a/spec/controllers/projects/milestones_controller_spec.rb
+++ b/spec/controllers/projects/milestones_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::MilestonesController do
-  let(:project) { create(:project) }
+  let(:project) { create(:empty_project) }
   let(:user)    { create(:user) }
   let(:milestone) { create(:milestone, project: project) }
   let(:issue) { create(:issue, project: project, milestone: milestone) }
diff --git a/spec/controllers/projects/notes_controller_spec.rb b/spec/controllers/projects/notes_controller_spec.rb
index 9f6d4ec65371306fe896654272f7123412381b2e..dc597202050fe6d157bca87c97ca1f390232bd18 100644
--- a/spec/controllers/projects/notes_controller_spec.rb
+++ b/spec/controllers/projects/notes_controller_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe Projects::NotesController do
   let(:user)    { create(:user) }
-  let(:project) { create(:project) }
+  let(:project) { create(:empty_project) }
   let(:issue)   { create(:issue, project: project) }
   let(:note)    { create(:note, noteable: issue, project: project) }
 
@@ -16,6 +16,7 @@ describe Projects::NotesController do
 
   describe 'POST create' do
     let(:merge_request) { create(:merge_request) }
+    let(:project) { merge_request.source_project }
     let(:request_params) do
       {
         note: { note: 'some note', noteable_id: merge_request.id, noteable_type: 'MergeRequest' },
@@ -88,6 +89,7 @@ describe Projects::NotesController do
   end
 
   describe "resolving and unresolving" do
+    let(:project) { create(:project, :repository) }
     let(:merge_request) { create(:merge_request, source_project: project) }
     let(:note) { create(:diff_note_on_merge_request, noteable: merge_request, project: project) }
 
diff --git a/spec/controllers/projects/project_members_controller_spec.rb b/spec/controllers/projects/project_members_controller_spec.rb
index 442f81187dc2def2a9fc9046154b91f98795e834..416eaa0037ebd7d395886d7d7d23c780f2679737 100644
--- a/spec/controllers/projects/project_members_controller_spec.rb
+++ b/spec/controllers/projects/project_members_controller_spec.rb
@@ -143,7 +143,7 @@ describe Projects::ProjectMembersController do
       end
 
       context 'and is an owner' do
-        let(:project) { create(:project, namespace: user.namespace) }
+        let(:project) { create(:empty_project, namespace: user.namespace) }
 
         before { project.team << [user, :master] }
 
@@ -234,7 +234,7 @@ describe Projects::ProjectMembersController do
   end
 
   describe 'POST apply_import' do
-    let(:another_project) { create(:project, :private) }
+    let(:another_project) { create(:empty_project, :private) }
     let(:member) { create(:user) }
 
     before do
diff --git a/spec/controllers/projects/raw_controller_spec.rb b/spec/controllers/projects/raw_controller_spec.rb
index 04bd9a01f7b71f259082f7569072b90a4fe544a6..b23d6e257babee8d13f052d1aa0a7e54967af242 100644
--- a/spec/controllers/projects/raw_controller_spec.rb
+++ b/spec/controllers/projects/raw_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::RawController do
-  let(:public_project) { create(:project, :public) }
+  let(:public_project) { create(:project, :public, :repository) }
 
   describe "#show" do
     context 'regular filename' do
diff --git a/spec/controllers/projects/refs_controller_spec.rb b/spec/controllers/projects/refs_controller_spec.rb
index abd45a74e2d7d85a0ad65fddb1c481ba72734f56..d8fb4667c674ebe2b88191da60f404fa701d51bc 100644
--- a/spec/controllers/projects/refs_controller_spec.rb
+++ b/spec/controllers/projects/refs_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::RefsController do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:user)    { create(:user) }
 
   before do
diff --git a/spec/controllers/projects/releases_controller_spec.rb b/spec/controllers/projects/releases_controller_spec.rb
index 9fd5c3b85f627ae4ecc9a9c4e59f1e9b91b3d67e..69fcc26c77e4729232f261e1e66601098d9d6692 100644
--- a/spec/controllers/projects/releases_controller_spec.rb
+++ b/spec/controllers/projects/releases_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::ReleasesController do
-  let!(:project) { create(:project) }
+  let!(:project) { create(:project, :repository) }
   let!(:user)    { create(:user) }
   let!(:release) { create(:release, project: project) }
   let!(:tag)     { release.tag }
diff --git a/spec/controllers/projects/repositories_controller_spec.rb b/spec/controllers/projects/repositories_controller_spec.rb
index 38e02a466266be1adcc99ce7e7dadd3629ca128a..04e88879fb8403d686918b57773daeaf8e2fa09f 100644
--- a/spec/controllers/projects/repositories_controller_spec.rb
+++ b/spec/controllers/projects/repositories_controller_spec.rb
@@ -1,7 +1,7 @@
 require "spec_helper"
 
 describe Projects::RepositoriesController do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
 
   describe "GET archive" do
     context 'as a guest' do
diff --git a/spec/controllers/projects/services_controller_spec.rb b/spec/controllers/projects/services_controller_spec.rb
index a6e708c01e4a08910173d3abaae449440ac02d35..16365642a34b3c8b0edfbbd58bf0896a87d34804 100644
--- a/spec/controllers/projects/services_controller_spec.rb
+++ b/spec/controllers/projects/services_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::ServicesController do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:user)    { create(:user) }
   let(:service) { create(:service, project: project) }
 
diff --git a/spec/controllers/projects/settings/integrations_controller_spec.rb b/spec/controllers/projects/settings/integrations_controller_spec.rb
index e0f9a5b24a689f13bfe95ef76fb657f0dc66ca86..65f7bb34f4a40c44590c9735dd918d307b881983 100644
--- a/spec/controllers/projects/settings/integrations_controller_spec.rb
+++ b/spec/controllers/projects/settings/integrations_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::Settings::IntegrationsController do
-  let(:project) { create(:project, :public) }
+  let(:project) { create(:empty_project, :public) }
   let(:user) { create(:user) }
 
   before do
diff --git a/spec/controllers/projects/tags_controller_spec.rb b/spec/controllers/projects/tags_controller_spec.rb
index 5e661c2c41df35d8314b7579649650eb067d97bb..c36a5fdd66cab0835c36241f26dc12801bd3443f 100644
--- a/spec/controllers/projects/tags_controller_spec.rb
+++ b/spec/controllers/projects/tags_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::TagsController do
-  let(:project) { create(:project, :public) }
+  let(:project) { create(:project, :public, :repository) }
   let!(:release) { create(:release, project: project) }
   let!(:invalid_release) { create(:release, project: project, tag: 'does-not-exist') }
 
diff --git a/spec/controllers/projects/templates_controller_spec.rb b/spec/controllers/projects/templates_controller_spec.rb
index 78e54e92a5612fa72db0288c80f64af85f004b0a..80f84a388ceef2a55bc0c5a6d1ea6baee2bb9f81 100644
--- a/spec/controllers/projects/templates_controller_spec.rb
+++ b/spec/controllers/projects/templates_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::TemplatesController do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:user) { create(:user) }
   let(:user2) { create(:user) }
   let(:file_path_1) { '.gitlab/issue_templates/bug.md' }
diff --git a/spec/controllers/projects/tree_controller_spec.rb b/spec/controllers/projects/tree_controller_spec.rb
index 1cc050247c66d221a05c652eaad23dddd9e14d43..b81645a3d2d069e114122a2f7dd8e1dd83fd2696 100644
--- a/spec/controllers/projects/tree_controller_spec.rb
+++ b/spec/controllers/projects/tree_controller_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Projects::TreeController do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:user)    { create(:user) }
 
   before do
diff --git a/spec/controllers/projects/uploads_controller_spec.rb b/spec/controllers/projects/uploads_controller_spec.rb
index 71d0e4be834fb99462cb5d9b0708647488df3f9a..f1c8891e87ab9a833adbb8691b1109c2a792c750 100644
--- a/spec/controllers/projects/uploads_controller_spec.rb
+++ b/spec/controllers/projects/uploads_controller_spec.rb
@@ -1,7 +1,7 @@
 require('spec_helper')
 
 describe Projects::UploadsController do
-  let(:project) { create(:project) }
+  let(:project) { create(:empty_project) }
   let(:user)    { create(:user) }
   let(:jpg)     { fixture_file_upload(Rails.root + 'spec/fixtures/rails_sample.jpg', 'image/jpg') }
   let(:txt)     { fixture_file_upload(Rails.root + 'spec/fixtures/doc_sample.txt', 'text/plain') }
diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb
index d0a63aa9403a5e0220d65daa5ff45cccf5792e54..9323f723bdb70f485bb975c9e62767c8f7e8a981 100644
--- a/spec/controllers/projects_controller_spec.rb
+++ b/spec/controllers/projects_controller_spec.rb
@@ -1,11 +1,11 @@
 require('spec_helper')
 
 describe ProjectsController do
-  let(:project) { create(:project) }
-  let(:public_project) { create(:project, :public) }
-  let(:user)    { create(:user) }
-  let(:jpg)     { fixture_file_upload(Rails.root + 'spec/fixtures/rails_sample.jpg', 'image/jpg') }
-  let(:txt)     { fixture_file_upload(Rails.root + 'spec/fixtures/doc_sample.txt', 'text/plain') }
+  let(:project) { create(:empty_project) }
+  let(:public_project) { create(:empty_project, :public) }
+  let(:user) { create(:user) }
+  let(:jpg) { fixture_file_upload(Rails.root + 'spec/fixtures/rails_sample.jpg', 'image/jpg') }
+  let(:txt) { fixture_file_upload(Rails.root + 'spec/fixtures/doc_sample.txt', 'text/plain') }
 
   describe 'GET index' do
     context 'as a user' do
@@ -32,7 +32,7 @@ describe ProjectsController do
       before { sign_in(user) }
 
       context "user does not have access to project" do
-        let(:private_project) { create(:project, :private) }
+        let(:private_project) { create(:empty_project, :private) }
 
         it "does not initialize notification setting" do
           get :show, namespace_id: private_project.namespace.path, id: private_project.path
@@ -146,6 +146,8 @@ describe ProjectsController do
     end
 
     context "rendering default project view" do
+      let(:public_project) { create(:project, :public, :repository) }
+
       render_views
 
       it "renders the activity view" do
@@ -190,25 +192,11 @@ describe ProjectsController do
           expect(assigns(:project)).to eq(public_project)
           expect(response).to redirect_to("/#{public_project.path_with_namespace}")
         end
-
-        # MySQL queries are case insensitive by default, so this spec would fail.
-        if Gitlab::Database.postgresql?
-          context "when there is also a match with the same casing" do
-            let!(:other_project) { create(:project, :public, namespace: public_project.namespace, path: public_project.path.upcase) }
-
-            it "loads the exactly matched project" do
-              get :show, namespace_id: public_project.namespace.path, id: public_project.path.upcase
-
-              expect(assigns(:project)).to eq(other_project)
-              expect(response).to have_http_status(200)
-            end
-          end
-        end
       end
     end
 
     context "when the url contains .atom" do
-      let(:public_project_with_dot_atom) { build(:project, :public, name: 'my.atom', path: 'my.atom') }
+      let(:public_project_with_dot_atom) { build(:empty_project, :public, name: 'my.atom', path: 'my.atom') }
 
       it 'expects an error creating the project' do
         expect(public_project_with_dot_atom).not_to be_valid
@@ -217,7 +205,7 @@ describe ProjectsController do
 
     context 'when the project is pending deletions' do
       it 'renders a 404 error' do
-        project = create(:project, pending_delete: true)
+        project = create(:empty_project, pending_delete: true)
         sign_in(user)
 
         get :show, namespace_id: project.namespace.path, id: project.path
@@ -233,6 +221,7 @@ describe ProjectsController do
     let(:admin) { create(:admin) }
 
     it "sets the repository to the right path after a rename" do
+      project = create(:project, :repository)
       new_path = 'renamed_path'
       project_params = { path: new_path }
       controller.instance_variable_set(:@project, project)
@@ -384,6 +373,8 @@ describe ProjectsController do
   end
 
   describe "GET refs" do
+    let(:public_project) { create(:project, :public) }
+
     it "gets a list of branches and tags" do
       get :refs, namespace_id: public_project.namespace.path, id: public_project.path
 
diff --git a/spec/controllers/uploads_controller_spec.rb b/spec/controllers/uploads_controller_spec.rb
index 69124ab06bfac740b15aa86cd429a3a7cafc66b9..570d9fa43f85c048c0da7024105cfe336eccd474 100644
--- a/spec/controllers/uploads_controller_spec.rb
+++ b/spec/controllers/uploads_controller_spec.rb
@@ -41,7 +41,7 @@ describe UploadsController do
     end
 
     context "when viewing a project avatar" do
-      let!(:project) { create(:project, avatar: fixture_file_upload(Rails.root + "spec/fixtures/dk.png", "image/png")) }
+      let!(:project) { create(:empty_project, avatar: fixture_file_upload(Rails.root + "spec/fixtures/dk.png", "image/png")) }
 
       context "when the project is public" do
         before do
diff --git a/spec/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb
index 19a8b1fe52459db34174427a4e9644a14bef9065..bbe9aaf737fa8c860d77d9cb12ba3b04790f8c53 100644
--- a/spec/controllers/users_controller_spec.rb
+++ b/spec/controllers/users_controller_spec.rb
@@ -73,7 +73,7 @@ describe UsersController do
     end
 
     context 'forked project' do
-      let(:project) { create(:project) }
+      let(:project) { create(:empty_project) }
       let(:forked_project) { Projects::ForkService.new(project, user).execute }
 
       before do
@@ -91,7 +91,7 @@ describe UsersController do
   end
 
   describe 'GET #calendar_activities' do
-    let!(:project) { create(:project) }
+    let!(:project) { create(:empty_project) }
     let!(:user) { create(:user) }
 
     before do
diff --git a/spec/factories/deploy_keys_projects.rb b/spec/factories/deploy_keys_projects.rb
index 27cece487bd87924574545ffda60d6946b6c19bd..75f8982ecd938c1252551016e5c3c7beff64b7ed 100644
--- a/spec/factories/deploy_keys_projects.rb
+++ b/spec/factories/deploy_keys_projects.rb
@@ -1,6 +1,6 @@
 FactoryGirl.define do
   factory :deploy_keys_project do
     deploy_key
-    project
+    project factory: :empty_project
   end
 end
diff --git a/spec/factories/events.rb b/spec/factories/events.rb
index 8820d527c6195601538bd354c526e148a753dac2..bfe41f71b5759985b01958c1202cc70368b46f82 100644
--- a/spec/factories/events.rb
+++ b/spec/factories/events.rb
@@ -1,6 +1,6 @@
 FactoryGirl.define do
   factory :event do
-    project
+    project factory: :empty_project
     author factory: :user
 
     factory :closed_issue_event do
diff --git a/spec/factories/file_uploader.rb b/spec/factories/file_uploader.rb
index 1b36e21f2b0f842253f0fa58d680c6b45ed4019b..bc74aeecc3bcc9d199d99b11844619fa430c56ea 100644
--- a/spec/factories/file_uploader.rb
+++ b/spec/factories/file_uploader.rb
@@ -1,6 +1,6 @@
 FactoryGirl.define do
   factory :file_uploader do
-    project
+    project factory: :empty_project
     secret nil
 
     transient do
diff --git a/spec/factories/issues.rb b/spec/factories/issues.rb
index 2b4670be4689ae6fc8c03e0d31b1c22060f82706..7e09f1ba8ea7069de242ad299f8e14ca9b25a4fd 100644
--- a/spec/factories/issues.rb
+++ b/spec/factories/issues.rb
@@ -6,7 +6,7 @@ FactoryGirl.define do
   factory :issue do
     title
     author
-    project
+    project factory: :empty_project
 
     trait :confidential do
       confidential true
diff --git a/spec/factories/labels.rb b/spec/factories/labels.rb
index 3e8822faf972cff162261650b4f06f51a48ddeb6..5ba8443c62c7c51453a662fc64e251d5cadfbee6 100644
--- a/spec/factories/labels.rb
+++ b/spec/factories/labels.rb
@@ -2,7 +2,7 @@ FactoryGirl.define do
   factory :label, class: ProjectLabel do
     sequence(:title) { |n| "label#{n}" }
     color "#990000"
-    project
+    project factory: :empty_project
 
     transient do
       priority nil
diff --git a/spec/factories/merge_requests.rb b/spec/factories/merge_requests.rb
index 37eb49c94df104885d82cd3f1b6cf66da5163dad..22f84150bb39f15636f52df8ec45047b0596e538 100644
--- a/spec/factories/merge_requests.rb
+++ b/spec/factories/merge_requests.rb
@@ -2,7 +2,7 @@ FactoryGirl.define do
   factory :merge_request do
     title
     author
-    source_project factory: :project
+    association :source_project, :repository, factory: :project
     target_project { source_project }
 
     # $ git log --pretty=oneline feature..master
diff --git a/spec/factories/milestones.rb b/spec/factories/milestones.rb
index 84da71ed6dcce196a759e92d6e14fd73911a874a..841ab3c73b86c43593c6d890e3033f4d279b5ff1 100644
--- a/spec/factories/milestones.rb
+++ b/spec/factories/milestones.rb
@@ -1,7 +1,7 @@
 FactoryGirl.define do
   factory :milestone do
     title
-    project
+    project factory: :empty_project
 
     trait :active do
       state "active"
diff --git a/spec/factories/notes.rb b/spec/factories/notes.rb
index 476f2a377931621e66ba83d25939fb45b7634bfe..a21da7074f9f1fd95ee38612b9e9e713626004b1 100644
--- a/spec/factories/notes.rb
+++ b/spec/factories/notes.rb
@@ -4,7 +4,7 @@ include ActionDispatch::TestProcess
 
 FactoryGirl.define do
   factory :note do
-    project
+    project factory: :empty_project
     note "Note"
     author
     on_issue
@@ -16,10 +16,16 @@ FactoryGirl.define do
     factory :note_on_personal_snippet,   traits: [:on_personal_snippet]
     factory :system_note,                traits: [:system]
 
-    factory :legacy_diff_note_on_commit, traits: [:on_commit, :legacy_diff_note], class: LegacyDiffNote
-    factory :legacy_diff_note_on_merge_request, traits: [:on_merge_request, :legacy_diff_note], class: LegacyDiffNote
+    factory :legacy_diff_note_on_commit, traits: [:on_commit, :legacy_diff_note], class: LegacyDiffNote do
+      association :project, :repository
+    end
+
+    factory :legacy_diff_note_on_merge_request, traits: [:on_merge_request, :legacy_diff_note], class: LegacyDiffNote do
+      association :project, :repository
+    end
 
     factory :diff_note_on_merge_request, traits: [:on_merge_request], class: DiffNote do
+      association :project, :repository
       position do
         Gitlab::Diff::Position.new(
           old_path: "files/ruby/popen.rb",
@@ -37,6 +43,7 @@ FactoryGirl.define do
     end
 
     factory :diff_note_on_commit, traits: [:on_commit], class: DiffNote do
+      association :project, :repository
       position do
         Gitlab::Diff::Position.new(
           old_path: "files/ruby/popen.rb",
@@ -49,6 +56,7 @@ FactoryGirl.define do
     end
 
     trait :on_commit do
+      association :project, :repository
       noteable nil
       noteable_type 'Commit'
       noteable_id nil
diff --git a/spec/factories/project_group_links.rb b/spec/factories/project_group_links.rb
index e73cc05f9d7c0ada3af25d5ce1dc4ad0cfdf186d..50341d943f513e7cd2830f95b78344f36d0d5c4c 100644
--- a/spec/factories/project_group_links.rb
+++ b/spec/factories/project_group_links.rb
@@ -1,6 +1,6 @@
 FactoryGirl.define do
   factory :project_group_link do
-    project
+    project factory: :empty_project
     group
   end
 end
diff --git a/spec/factories/project_members.rb b/spec/factories/project_members.rb
index c21927640d10736e71710c3e2d50293ab8e97507..d62799a5a4737db2efba0b65f785b0b6e9c3e0e5 100644
--- a/spec/factories/project_members.rb
+++ b/spec/factories/project_members.rb
@@ -1,7 +1,7 @@
 FactoryGirl.define do
   factory :project_member do
     user
-    project
+    project factory: :empty_project
     master
 
     trait(:guest)     { access_level ProjectMember::GUEST }
diff --git a/spec/factories/project_snippets.rb b/spec/factories/project_snippets.rb
index d681a2c8483d55ae3aa53def3c11c8dd5cd1a566..e0fe1b36fd35329cf220422f8afc58c374b7cf11 100644
--- a/spec/factories/project_snippets.rb
+++ b/spec/factories/project_snippets.rb
@@ -1,5 +1,5 @@
 FactoryGirl.define do
   factory :project_snippet, parent: :snippet, class: :ProjectSnippet do
-    project
+    project factory: :empty_project
   end
 end
diff --git a/spec/factories/releases.rb b/spec/factories/releases.rb
index 74497dc82c030bb3744ef144784910c767b8609c..6a6d6fa171f8483a813df759196b16279975ab07 100644
--- a/spec/factories/releases.rb
+++ b/spec/factories/releases.rb
@@ -2,6 +2,6 @@ FactoryGirl.define do
   factory :release do
     tag "v1.1.0"
     description "Awesome release"
-    project
+    project factory: :empty_project
   end
 end
diff --git a/spec/factories/sent_notifications.rb b/spec/factories/sent_notifications.rb
index 78eb929c6e7d2ed51fbfa073e79d929bcc393f62..6287c40afe91fe4a63a683cb05357db7679cef43 100644
--- a/spec/factories/sent_notifications.rb
+++ b/spec/factories/sent_notifications.rb
@@ -1,6 +1,6 @@
 FactoryGirl.define do
   factory :sent_notification do
-    project
+    project factory: :empty_project
     recipient factory: :user
     noteable factory: :issue
     reply_key "0123456789abcdef" * 2
diff --git a/spec/factories/services.rb b/spec/factories/services.rb
index 9de78d68280c6bff620c09a146604d32906dc092..a14a46c803e623b0c6e786d1897fa8d6760563c8 100644
--- a/spec/factories/services.rb
+++ b/spec/factories/services.rb
@@ -1,5 +1,5 @@
 FactoryGirl.define do
   factory :service do
-    project
+    project factory: :empty_project
   end
 end
diff --git a/spec/factories/todos.rb b/spec/factories/todos.rb
index 85a8c2636432a70d30b097e7539ad89637d35fe5..91d6f39a5bf3f578bc541cf9b0bad45823172496 100644
--- a/spec/factories/todos.rb
+++ b/spec/factories/todos.rb
@@ -1,6 +1,6 @@
 FactoryGirl.define do
   factory :todo do
-    project
+    project factory: :empty_project
     author
     user
     target factory: :issue
diff --git a/spec/finders/branches_finder_spec.rb b/spec/finders/branches_finder_spec.rb
index db60c01db0d8591b3a5cce8f15a965d39bb71a79..91f34973ba5ddc7bf0d74435b2122e3f68016f79 100644
--- a/spec/finders/branches_finder_spec.rb
+++ b/spec/finders/branches_finder_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe BranchesFinder do
   let(:user) { create(:user) }
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:repository) { project.repository }
 
   describe '#execute' do
diff --git a/spec/finders/contributed_projects_finder_spec.rb b/spec/finders/contributed_projects_finder_spec.rb
index 65d7f14c72143258e9cc634dbc8bc555e43ced49..ad2d456529a858be018ca0dfc02633b0e6aaebc7 100644
--- a/spec/finders/contributed_projects_finder_spec.rb
+++ b/spec/finders/contributed_projects_finder_spec.rb
@@ -6,8 +6,8 @@ describe ContributedProjectsFinder do
 
   let(:finder) { described_class.new(source_user) }
 
-  let!(:public_project) { create(:project, :public) }
-  let!(:private_project) { create(:project, :private) }
+  let!(:public_project) { create(:empty_project, :public) }
+  let!(:private_project) { create(:empty_project, :private) }
 
   before do
     private_project.team << [source_user, Gitlab::Access::MASTER]
diff --git a/spec/finders/group_projects_finder_spec.rb b/spec/finders/group_projects_finder_spec.rb
index 00eec3f3f4c9887661e39b067804cde508cb0a62..ef97b061ca7b5398078dcec79b1621905d0cf720 100644
--- a/spec/finders/group_projects_finder_spec.rb
+++ b/spec/finders/group_projects_finder_spec.rb
@@ -6,11 +6,11 @@ describe GroupProjectsFinder do
 
   let(:finder) { described_class.new(source_user) }
 
-  let!(:public_project) { create(:project, :public, group: group, path: '1') }
-  let!(:private_project) { create(:project, :private, group: group, path: '2') }
-  let!(:shared_project_1) { create(:project, :public, path: '3') }
-  let!(:shared_project_2) { create(:project, :private, path: '4') }
-  let!(:shared_project_3) { create(:project, :internal, path: '5') }
+  let!(:public_project) { create(:empty_project, :public, group: group, path: '1') }
+  let!(:private_project) { create(:empty_project, :private, group: group, path: '2') }
+  let!(:shared_project_1) { create(:empty_project, :public, path: '3') }
+  let!(:shared_project_2) { create(:empty_project, :private, path: '4') }
+  let!(:shared_project_3) { create(:empty_project, :internal, path: '5') }
 
   before do
     shared_project_1.project_group_links.create(group_access: Gitlab::Access::MASTER, group: group)
diff --git a/spec/finders/joined_groups_finder_spec.rb b/spec/finders/joined_groups_finder_spec.rb
index 29a47e005a669313151a1be73d5b71fae22562e9..4c389746252beb09d309ce5b00dea29e7402e7d5 100644
--- a/spec/finders/joined_groups_finder_spec.rb
+++ b/spec/finders/joined_groups_finder_spec.rb
@@ -42,7 +42,7 @@ describe JoinedGroupsFinder do
 
       context 'if profile visitor is in one of the private group projects' do
         before do
-          project = create(:project, :private, group: private_group, name: 'B', path: 'B')
+          project = create(:empty_project, :private, group: private_group, name: 'B', path: 'B')
           project.add_user(profile_visitor, Gitlab::Access::DEVELOPER)
         end
 
diff --git a/spec/finders/merge_requests_finder_spec.rb b/spec/finders/merge_requests_finder_spec.rb
index e4ba1d2f1c2bb5f8185b4d6c9ca2ef8e9dafea41..3dcd7781e5b73d08b3ae349c8d2103007a78f61b 100644
--- a/spec/finders/merge_requests_finder_spec.rb
+++ b/spec/finders/merge_requests_finder_spec.rb
@@ -4,9 +4,9 @@ describe MergeRequestsFinder do
   let(:user)  { create :user }
   let(:user2) { create :user }
 
-  let(:project1) { create(:project) }
-  let(:project2) { create(:project, forked_from_project: project1) }
-  let(:project3) { create(:project, :archived, forked_from_project: project1) }
+  let(:project1) { create(:empty_project) }
+  let(:project2) { create(:empty_project, forked_from_project: project1) }
+  let(:project3) { create(:empty_project, :archived, forked_from_project: project1) }
 
   let!(:merge_request1) { create(:merge_request, :simple, author: user, source_project: project2, target_project: project1) }
   let!(:merge_request2) { create(:merge_request, :simple, author: user, source_project: project2, target_project: project1, state: 'closed') }
diff --git a/spec/finders/notes_finder_spec.rb b/spec/finders/notes_finder_spec.rb
index 4d21254323c78d104a5dbced40dd20f5c141e083..bac653ea451b7e66315a5fa6ec4244d7d8b9ff4d 100644
--- a/spec/finders/notes_finder_spec.rb
+++ b/spec/finders/notes_finder_spec.rb
@@ -28,7 +28,7 @@ describe NotesFinder do
     end
 
     it "excludes notes on commits the author can't download" do
-      project = create(:project, :private)
+      project = create(:project, :private, :repository)
       note = create(:note_on_commit, project: project)
       params = { target_type: 'commit', target_id: note.noteable.id }
 
@@ -76,7 +76,7 @@ describe NotesFinder do
     end
 
     context 'for target' do
-      let(:project) { create(:project) }
+      let(:project) { create(:project, :repository) }
       let(:note1) { create :note_on_commit, project: project }
       let(:note2) { create :note_on_commit, project: project }
       let(:commit) { note1.noteable }
diff --git a/spec/finders/personal_projects_finder_spec.rb b/spec/finders/personal_projects_finder_spec.rb
index a4681fe59d899bcd75c8a6ccf7c9f1692d61743a..e0e17af681a19877770c4d1fc6ae06ecc89ea9d3 100644
--- a/spec/finders/personal_projects_finder_spec.rb
+++ b/spec/finders/personal_projects_finder_spec.rb
@@ -4,14 +4,14 @@ describe PersonalProjectsFinder do
   let(:source_user)     { create(:user) }
   let(:current_user)    { create(:user) }
   let(:finder)          { described_class.new(source_user) }
-  let!(:public_project) { create(:project, :public, namespace: source_user.namespace) }
+  let!(:public_project) { create(:empty_project, :public, namespace: source_user.namespace) }
 
   let!(:private_project) do
-    create(:project, :private, namespace: source_user.namespace, path: 'mepmep')
+    create(:empty_project, :private, namespace: source_user.namespace, path: 'mepmep')
   end
 
   let!(:internal_project) do
-    create(:project, :internal, namespace: source_user.namespace, path: 'C')
+    create(:empty_project, :internal, namespace: source_user.namespace, path: 'C')
   end
 
   before do
diff --git a/spec/finders/pipelines_finder_spec.rb b/spec/finders/pipelines_finder_spec.rb
index b0811d134faa2ccc60ba70fb2bda82cbb13d72c3..fdc8215aa47114d3160ffe0303a4b86eaab9e98e 100644
--- a/spec/finders/pipelines_finder_spec.rb
+++ b/spec/finders/pipelines_finder_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe PipelinesFinder do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
 
   let!(:tag_pipeline)    { create(:ci_pipeline, project: project, ref: 'v1.0.0') }
   let!(:branch_pipeline) { create(:ci_pipeline, project: project) }
diff --git a/spec/finders/projects_finder_spec.rb b/spec/finders/projects_finder_spec.rb
index 13bda5f7c5ad5ea79f6544cfcc14b293f3b60fcb..e44e7434c800db99c03e7f4e6143ece234d7b13a 100644
--- a/spec/finders/projects_finder_spec.rb
+++ b/spec/finders/projects_finder_spec.rb
@@ -6,19 +6,19 @@ describe ProjectsFinder do
     let(:group) { create(:group, :public) }
 
     let!(:private_project) do
-      create(:project, :private, name: 'A', path: 'A')
+      create(:empty_project, :private, name: 'A', path: 'A')
     end
 
     let!(:internal_project) do
-      create(:project, :internal, group: group, name: 'B', path: 'B')
+      create(:empty_project, :internal, group: group, name: 'B', path: 'B')
     end
 
     let!(:public_project) do
-      create(:project, :public, group: group, name: 'C', path: 'C')
+      create(:empty_project, :public, group: group, name: 'C', path: 'C')
     end
 
     let!(:shared_project) do
-      create(:project, :private, name: 'D', path: 'D')
+      create(:empty_project, :private, name: 'D', path: 'D')
     end
 
     let(:finder) { described_class.new }
diff --git a/spec/finders/tags_finder_spec.rb b/spec/finders/tags_finder_spec.rb
index 98b42e264dc23a768c380ee9a9eff550c3d974b1..460e278e2d37ca193dd176cc3e9952d655277461 100644
--- a/spec/finders/tags_finder_spec.rb
+++ b/spec/finders/tags_finder_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe TagsFinder do
   let(:user) { create(:user) }
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:repository) { project.repository }
 
   describe '#execute' do
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index 92053e5a7c64dcd4a5da7df935ec65c06802a566..8b201f348f19d2fc181b3b5544e52df2954ebee7 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/spec/helpers/application_helper_spec.rb
@@ -55,7 +55,7 @@ describe ApplicationHelper do
 
   describe 'project_icon' do
     it 'returns an url for the avatar' do
-      project = create(:project, avatar: File.open(uploaded_image_temp_path))
+      project = create(:empty_project, avatar: File.open(uploaded_image_temp_path))
 
       avatar_url = "http://#{Gitlab.config.gitlab.host}/uploads/project/avatar/#{project.id}/banana_sample.gif"
       expect(helper.project_icon("#{project.namespace.to_param}/#{project.to_param}").to_s).
@@ -63,7 +63,7 @@ describe ApplicationHelper do
     end
 
     it 'gives uploaded icon when present' do
-      project = create(:project)
+      project = create(:empty_project)
 
       allow_any_instance_of(Project).to receive(:avatar_in_git).and_return(true)
 
diff --git a/spec/helpers/blob_helper_spec.rb b/spec/helpers/blob_helper_spec.rb
index a43a7238c708b1ac9a5ba87d02e6e9ba5f61602a..fa516f9903ecc9a83c1730959d4a49394446b01b 100644
--- a/spec/helpers/blob_helper_spec.rb
+++ b/spec/helpers/blob_helper_spec.rb
@@ -70,7 +70,7 @@ describe BlobHelper do
 
   describe "#edit_blob_link" do
     let(:namespace) { create(:namespace, name: 'gitlab' )}
-    let(:project) { create(:project, namespace: namespace) }
+    let(:project) { create(:project, :repository, namespace: namespace) }
 
     before do
       allow(self).to receive(:current_user).and_return(double)
diff --git a/spec/helpers/gitlab_markdown_helper_spec.rb b/spec/helpers/gitlab_markdown_helper_spec.rb
index 810311e2b1a2ff2d06ebbc5b49dd9be1ee05c4d6..b8ec3521edb9892e9f0a56baa0c4a0ff9ac3402f 100644
--- a/spec/helpers/gitlab_markdown_helper_spec.rb
+++ b/spec/helpers/gitlab_markdown_helper_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe GitlabMarkdownHelper do
   include ApplicationHelper
 
-  let!(:project) { create(:project) }
+  let!(:project) { create(:project, :repository) }
 
   let(:user)          { create(:user, username: 'gfm') }
   let(:commit)        { project.commit }
@@ -55,18 +55,18 @@ describe GitlabMarkdownHelper do
   end
 
   describe '#link_to_gfm' do
-    let(:commit_path) { namespace_project_commit_path(project.namespace, project, commit) }
-    let(:issues)      { create_list(:issue, 2, project: project) }
+    let(:link)    { '/commits/0a1b2c3d' }
+    let(:issues)  { create_list(:issue, 2, project: project) }
 
     it 'handles references nested in links with all the text' do
-      actual = helper.link_to_gfm("This should finally fix #{issues[0].to_reference} and #{issues[1].to_reference} for real", commit_path)
+      actual = helper.link_to_gfm("This should finally fix #{issues[0].to_reference} and #{issues[1].to_reference} for real", link)
       doc = Nokogiri::HTML.parse(actual)
 
       # Make sure we didn't create invalid markup
       expect(doc.errors).to be_empty
 
       # Leading commit link
-      expect(doc.css('a')[0].attr('href')).to eq commit_path
+      expect(doc.css('a')[0].attr('href')).to eq link
       expect(doc.css('a')[0].text).to eq 'This should finally fix '
 
       # First issue link
@@ -75,7 +75,7 @@ describe GitlabMarkdownHelper do
       expect(doc.css('a')[1].text).to eq issues[0].to_reference
 
       # Internal commit link
-      expect(doc.css('a')[2].attr('href')).to eq commit_path
+      expect(doc.css('a')[2].attr('href')).to eq link
       expect(doc.css('a')[2].text).to eq ' and '
 
       # Second issue link
@@ -84,12 +84,12 @@ describe GitlabMarkdownHelper do
       expect(doc.css('a')[3].text).to eq issues[1].to_reference
 
       # Trailing commit link
-      expect(doc.css('a')[4].attr('href')).to eq commit_path
+      expect(doc.css('a')[4].attr('href')).to eq link
       expect(doc.css('a')[4].text).to eq ' for real'
     end
 
     it 'forwards HTML options' do
-      actual = helper.link_to_gfm("Fixed in #{commit.id}", commit_path, class: 'foo')
+      actual = helper.link_to_gfm("Fixed in #{commit.id}", link, class: 'foo')
       doc = Nokogiri::HTML.parse(actual)
 
       expect(doc.css('a')).to satisfy do |v|
@@ -100,7 +100,7 @@ describe GitlabMarkdownHelper do
 
     it "escapes HTML passed in as the body" do
       actual = "This is a <h1>test</h1> - see #{issues[0].to_reference}"
-      expect(helper.link_to_gfm(actual, commit_path)).
+      expect(helper.link_to_gfm(actual, link)).
         to match('&lt;h1&gt;test&lt;/h1&gt;')
     end
 
diff --git a/spec/helpers/graph_helper_spec.rb b/spec/helpers/graph_helper_spec.rb
index 51c49f0e5871b8c912f123d024229df3f77ae7b6..400635abdde451c5315b32c3757f13d17ba62442 100644
--- a/spec/helpers/graph_helper_spec.rb
+++ b/spec/helpers/graph_helper_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe GraphHelper do
   describe '#get_refs' do
-    let(:project) { create(:project) }
+    let(:project) { create(:project, :repository) }
     let(:commit)  { project.commit("master") }
     let(:graph) { Network::Graph.new(project, 'master', commit, '') }
 
diff --git a/spec/helpers/issues_helper_spec.rb b/spec/helpers/issues_helper_spec.rb
index 9c7e0ee2fe02d4b866059c9997c448b49ae8669f..13fb9c1f1a7eacf7b47e3c394b66e3e49c6bf20a 100644
--- a/spec/helpers/issues_helper_spec.rb
+++ b/spec/helpers/issues_helper_spec.rb
@@ -1,7 +1,7 @@
 require "spec_helper"
 
 describe IssuesHelper do
-  let(:project) { create :project }
+  let(:project) { create(:empty_project) }
   let(:issue) { create :issue, project: project }
   let(:ext_project) { create :redmine_project }
 
diff --git a/spec/helpers/members_helper_spec.rb b/spec/helpers/members_helper_spec.rb
index 33934cdf8b1387f98c0e7184822db3078c0f0b27..2b455571d524589efe19496e0ccec544f7ff3019 100644
--- a/spec/helpers/members_helper_spec.rb
+++ b/spec/helpers/members_helper_spec.rb
@@ -46,7 +46,7 @@ describe MembersHelper do
   end
 
   describe '#leave_confirmation_message' do
-    let(:project) { build_stubbed(:project) }
+    let(:project) { build_stubbed(:empty_project) }
     let(:group) { build_stubbed(:group) }
     let(:user) { build_stubbed(:user) }
 
diff --git a/spec/helpers/merge_requests_helper_spec.rb b/spec/helpers/merge_requests_helper_spec.rb
index 1f221487393fbf94ff215643593116d1a27069ea..550b4a66a6a63806568cda02dcd9cd473871395f 100644
--- a/spec/helpers/merge_requests_helper_spec.rb
+++ b/spec/helpers/merge_requests_helper_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe MergeRequestsHelper do
   describe 'ci_build_details_path' do
-    let(:project) { create :project }
+    let(:project) { create(:empty_project) }
     let(:merge_request) { MergeRequest.new }
     let(:ci_service) { CiService.new }
     let(:last_commit) { Ci::Pipeline.new({}) }
@@ -30,7 +30,7 @@ describe MergeRequestsHelper do
     it { is_expected.to eq('#1, #2, and #3') }
 
     context 'for JIRA issues' do
-      let(:project) { create(:project) }
+      let(:project) { create(:empty_project) }
       let(:issues) do
         [
           ExternalIssue.new('JIRA-123', project),
@@ -52,8 +52,8 @@ describe MergeRequestsHelper do
     end
 
     describe 'within different projects' do
-      let(:project) { create(:project) }
-      let(:fork_project) { create(:project, forked_from_project: project) }
+      let(:project) { create(:empty_project) }
+      let(:fork_project) { create(:empty_project, forked_from_project: project) }
       let(:merge_request) { create(:merge_request, source_project: fork_project, target_project: project) }
       subject { format_mr_branch_names(merge_request) }
       let(:source_title) { "#{fork_project.path_with_namespace}:#{merge_request.source_branch}" }
@@ -64,8 +64,8 @@ describe MergeRequestsHelper do
   end
 
   describe 'mr_widget_refresh_url' do
+    let(:project)       { create(:empty_project) }
     let(:merge_request) { create(:merge_request, source_project: project) }
-    let(:project)       { create(:project) }
 
     it 'returns correct url for MR' do
       expected_url = "#{project.path_with_namespace}/merge_requests/#{merge_request.iid}/merge_widget_refresh"
diff --git a/spec/helpers/milestones_helper_spec.rb b/spec/helpers/milestones_helper_spec.rb
index ea744dbb62951edea829ddbed5368dfd25464c7c..14a95479339e936a6942ef448a737514f6a5e00a 100644
--- a/spec/helpers/milestones_helper_spec.rb
+++ b/spec/helpers/milestones_helper_spec.rb
@@ -21,24 +21,22 @@ describe MilestonesHelper do
   end
 
   describe '#milestone_counts' do
-    let(:project) { FactoryGirl.create(:project) }
+    let(:project) { create(:empty_project) }
     let(:counts) { helper.milestone_counts(project.milestones) }
 
     context 'when there are milestones' do
-      let!(:milestone_1) { FactoryGirl.create(:active_milestone, project: project) }
-      let!(:milestone_2) { FactoryGirl.create(:active_milestone, project: project) }
-      let!(:milestone_3) { FactoryGirl.create(:closed_milestone, project: project) }
-
       it 'returns the correct counts' do
+        create_list(:active_milestone, 2, project: project)
+        create(:closed_milestone, project: project)
+
         expect(counts).to eq(opened: 2, closed: 1, all: 3)
       end
     end
 
     context 'when there are only milestones of one type' do
-      let!(:milestone_1) { FactoryGirl.create(:active_milestone, project: project) }
-      let!(:milestone_2) { FactoryGirl.create(:active_milestone, project: project) }
-
       it 'returns the correct counts' do
+        create_list(:active_milestone, 2, project: project)
+
         expect(counts).to eq(opened: 2, closed: 0, all: 2)
       end
     end
diff --git a/spec/helpers/preferences_helper_spec.rb b/spec/helpers/preferences_helper_spec.rb
index 77841e85223a54b9c96756ff730bcd49750ebb95..1f02e06e312580890e222cced2e9dce09052c696 100644
--- a/spec/helpers/preferences_helper_spec.rb
+++ b/spec/helpers/preferences_helper_spec.rb
@@ -110,7 +110,7 @@ describe PreferencesHelper do
       end
 
       context 'when repository is not empty' do
-        let(:project) { create(:project, :public) }
+        let(:project) { create(:project, :public, :repository) }
 
         it 'returns readme if user has repository access' do
           allow(helper).to receive(:can?).with(nil, :download_code, project).and_return(true)
diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb
index 8113742923b05969c4af4d22338f2e8317548938..8d1570aa6f355daf2c2a588361a886c51cb2edb3 100644
--- a/spec/helpers/projects_helper_spec.rb
+++ b/spec/helpers/projects_helper_spec.rb
@@ -10,7 +10,7 @@ describe ProjectsHelper do
   end
 
   describe "can_change_visibility_level?" do
-    let(:project) { create(:project) }
+    let(:project) { create(:project, :repository) }
     let(:user) { create(:project_member, :reporter, user: create(:user), project: project).user }
     let(:fork_project) { Projects::ForkService.new(project, user).execute }
 
@@ -97,7 +97,7 @@ describe ProjectsHelper do
   end
 
   describe '#license_short_name' do
-    let(:project) { create(:project) }
+    let(:project) { create(:empty_project) }
 
     context 'when project.repository has a license_key' do
       it 'returns the nickname of the license if present' do
diff --git a/spec/helpers/search_helper_spec.rb b/spec/helpers/search_helper_spec.rb
index 4b2ca3514f8effb288728470ea594375fe996795..e51720f10ed444879204c0a8e3c35daaaf8e1cc8 100644
--- a/spec/helpers/search_helper_spec.rb
+++ b/spec/helpers/search_helper_spec.rb
@@ -42,7 +42,7 @@ describe SearchHelper do
       end
 
       it "includes the user's projects" do
-        project = create(:project, namespace: create(:namespace, owner: user))
+        project = create(:empty_project, namespace: create(:namespace, owner: user))
         expect(search_autocomplete_opts(project.name).size).to eq(1)
       end
 
@@ -52,7 +52,9 @@ describe SearchHelper do
       end
 
       context "with a current project" do
-        before { @project = create(:project) }
+        before do
+          @project = create(:project, :repository)
+        end
 
         it "includes project-specific sections" do
           expect(search_autocomplete_opts("Files").size).to eq(1)
diff --git a/spec/helpers/submodule_helper_spec.rb b/spec/helpers/submodule_helper_spec.rb
index 37ac6a2699d2d8aebe1997bba0f3dfa45c7c4658..4da1569e59f0dbe25b0b7dffae5adc3ec740f73a 100644
--- a/spec/helpers/submodule_helper_spec.rb
+++ b/spec/helpers/submodule_helper_spec.rb
@@ -116,7 +116,7 @@ describe SubmoduleHelper do
 
     context 'submodules with relative links' do
       let(:group) { create(:group, name: "Master Project", path: "master-project") }
-      let(:project) { create(:project, group: group) }
+      let(:project) { create(:empty_project, group: group) }
       let(:commit_id) { sample_commit[:id] }
 
       before do
@@ -145,7 +145,7 @@ describe SubmoduleHelper do
 
       context 'personal project' do
         let(:user) { create(:user) }
-        let(:project) { create(:project, namespace: user.namespace) }
+        let(:project) { create(:empty_project, namespace: user.namespace) }
 
         it 'one level down with personal project' do
           result = relative_self_links('../test.git', commit_id)
diff --git a/spec/helpers/tree_helper_spec.rb b/spec/helpers/tree_helper_spec.rb
index 8d6537ba4b54b6eced05bac9a9faa4ea84846a18..9523d0f4aa6c9bed593be5161704a2681eac12e9 100644
--- a/spec/helpers/tree_helper_spec.rb
+++ b/spec/helpers/tree_helper_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe TreeHelper do
   describe 'flatten_tree' do
-    let(:project) { create(:project) }
+    let(:project) { create(:project, :repository) }
 
     before do
       @repository = project.repository
diff --git a/spec/helpers/visibility_level_helper_spec.rb b/spec/helpers/visibility_level_helper_spec.rb
index db3ad1b99e97b4e26422ae414a7cd56e4b3d7cbd..8942b00b128219918015fb2a6ca36b0e44ff9f0c 100644
--- a/spec/helpers/visibility_level_helper_spec.rb
+++ b/spec/helpers/visibility_level_helper_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe VisibilityLevelHelper do
-  let(:project)          { build(:project) }
+  let(:project)          { build(:empty_project) }
   let(:group)            { build(:group) }
   let(:personal_snippet) { build(:personal_snippet) }
   let(:project_snippet)  { build(:project_snippet) }
@@ -60,8 +60,8 @@ describe VisibilityLevelHelper do
 
   describe "skip_level?" do
     describe "forks" do
-      let(:project)       { create(:project, :internal) }
-      let(:fork_project)  { create(:project, forked_from_project: project) }
+      let(:project)       { create(:empty_project, :internal) }
+      let(:fork_project)  { create(:empty_project, forked_from_project: project) }
 
       it "skips levels" do
         expect(skip_level?(fork_project, Gitlab::VisibilityLevel::PUBLIC)).to be_truthy
@@ -71,7 +71,7 @@ describe VisibilityLevelHelper do
     end
 
     describe "non-forked project" do
-      let(:project) { create(:project, :internal) }
+      let(:project) { create(:empty_project, :internal) }
 
       it "skips levels" do
         expect(skip_level?(project, Gitlab::VisibilityLevel::PUBLIC)).to be_falsey
diff --git a/spec/lib/banzai/filter/commit_range_reference_filter_spec.rb b/spec/lib/banzai/filter/commit_range_reference_filter_spec.rb
index 9703e2315b8d1fac3dfe6ace3c976b4a067f3659..deadc36524cc72ba76069231d7c8f00bd195c290 100644
--- a/spec/lib/banzai/filter/commit_range_reference_filter_spec.rb
+++ b/spec/lib/banzai/filter/commit_range_reference_filter_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Banzai::Filter::CommitRangeReferenceFilter, lib: true do
   include FilterSpecHelper
 
-  let(:project) { create(:project, :public) }
+  let(:project) { create(:project, :public, :repository) }
   let(:commit1) { project.commit("HEAD~2") }
   let(:commit2) { project.commit }
 
@@ -99,7 +99,7 @@ describe Banzai::Filter::CommitRangeReferenceFilter, lib: true do
   end
 
   context 'cross-project / cross-namespace complete reference' do
-    let(:project2)  { create(:project, :public) }
+    let(:project2)  { create(:project, :public, :repository) }
     let(:reference) { "#{project2.path_with_namespace}@#{commit1.id}...#{commit2.id}" }
 
     it 'links to a valid reference' do
@@ -133,8 +133,8 @@ describe Banzai::Filter::CommitRangeReferenceFilter, lib: true do
 
   context 'cross-project / same-namespace complete reference' do
     let(:namespace)         { create(:namespace) }
-    let(:project)           { create(:project, :public, namespace: namespace) }
-    let(:project2)          { create(:project, :public, path: "same-namespace", namespace: namespace) }
+    let(:project)           { create(:project, :public, :repository, namespace: namespace) }
+    let(:project2)          { create(:project, :public, :repository, path: "same-namespace", namespace: namespace) }
     let(:reference)         { "#{project2.path}@#{commit1.id}...#{commit2.id}" }
 
     it 'links to a valid reference' do
@@ -168,8 +168,8 @@ describe Banzai::Filter::CommitRangeReferenceFilter, lib: true do
 
   context 'cross-project shorthand reference' do
     let(:namespace)         { create(:namespace) }
-    let(:project)           { create(:project, :public, namespace: namespace) }
-    let(:project2)          { create(:project, :public, path: "same-namespace", namespace: namespace) }
+    let(:project)           { create(:project, :public, :repository, namespace: namespace) }
+    let(:project2)          { create(:project, :public, :repository, path: "same-namespace", namespace: namespace) }
     let(:reference)         { "#{project2.path}@#{commit1.id}...#{commit2.id}" }
 
     it 'links to a valid reference' do
@@ -203,7 +203,7 @@ describe Banzai::Filter::CommitRangeReferenceFilter, lib: true do
 
   context 'cross-project URL reference' do
     let(:namespace) { create(:namespace) }
-    let(:project2)  { create(:project, :public, namespace: namespace) }
+    let(:project2)  { create(:project, :public, :repository, namespace: namespace) }
     let(:range)  { CommitRange.new("#{commit1.id}...master", project) }
     let(:reference) { urls.namespace_project_compare_url(project2.namespace, project2, from: commit1.id, to: 'master') }
 
diff --git a/spec/lib/banzai/filter/commit_reference_filter_spec.rb b/spec/lib/banzai/filter/commit_reference_filter_spec.rb
index 2e6dcc3a434bc23314a2e41a4e2cae932699ccec..a19aac61229cd2d08e4027e65a96a64a8c425747 100644
--- a/spec/lib/banzai/filter/commit_reference_filter_spec.rb
+++ b/spec/lib/banzai/filter/commit_reference_filter_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Banzai::Filter::CommitReferenceFilter, lib: true do
   include FilterSpecHelper
 
-  let(:project) { create(:project, :public) }
+  let(:project) { create(:project, :public, :repository) }
   let(:commit)  { project.commit }
 
   it 'requires project context' do
@@ -96,7 +96,7 @@ describe Banzai::Filter::CommitReferenceFilter, lib: true do
 
   context 'cross-project / cross-namespace complete reference' do
     let(:namespace) { create(:namespace) }
-    let(:project2)  { create(:project, :public, namespace: namespace) }
+    let(:project2)  { create(:project, :public, :repository, namespace: namespace) }
     let(:commit)    { project2.commit }
     let(:reference) { "#{project2.path_with_namespace}@#{commit.short_id}" }
 
@@ -122,7 +122,7 @@ describe Banzai::Filter::CommitReferenceFilter, lib: true do
   context 'cross-project / same-namespace complete reference' do
     let(:namespace) { create(:namespace) }
     let(:project)   { create(:empty_project, namespace: namespace) }
-    let(:project2)  { create(:project, :public, namespace: namespace) }
+    let(:project2)  { create(:project, :public, :repository, namespace: namespace) }
     let(:commit)    { project2.commit }
     let(:reference) { "#{project2.path_with_namespace}@#{commit.short_id}" }
 
@@ -148,7 +148,7 @@ describe Banzai::Filter::CommitReferenceFilter, lib: true do
   context 'cross-project shorthand reference' do
     let(:namespace) { create(:namespace) }
     let(:project)   { create(:empty_project, namespace: namespace) }
-    let(:project2)  { create(:project, :public, namespace: namespace) }
+    let(:project2)  { create(:project, :public, :repository, namespace: namespace) }
     let(:commit)    { project2.commit }
     let(:reference) { "#{project2.path_with_namespace}@#{commit.short_id}" }
 
@@ -173,7 +173,7 @@ describe Banzai::Filter::CommitReferenceFilter, lib: true do
 
   context 'cross-project URL reference' do
     let(:namespace) { create(:namespace) }
-    let(:project2)  { create(:project, :public, namespace: namespace) }
+    let(:project2)  { create(:project, :public, :repository, namespace: namespace) }
     let(:commit)    { project2.commit }
     let(:reference) { urls.namespace_project_commit_url(project2.namespace, project2, commit.id) }
 
diff --git a/spec/lib/banzai/filter/gollum_tags_filter_spec.rb b/spec/lib/banzai/filter/gollum_tags_filter_spec.rb
index fe2ce092e6b421f99a5a8fe83b0565fa7609966f..082c0d4dd0df8f11f69d50f219c5a0e8239e1326 100644
--- a/spec/lib/banzai/filter/gollum_tags_filter_spec.rb
+++ b/spec/lib/banzai/filter/gollum_tags_filter_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Banzai::Filter::GollumTagsFilter, lib: true do
   include FilterSpecHelper
 
-  let(:project) { create(:project) }
+  let(:project) { create(:empty_project) }
   let(:user) { double }
   let(:project_wiki) { ProjectWiki.new(project, user) }
 
diff --git a/spec/lib/banzai/filter/merge_request_reference_filter_spec.rb b/spec/lib/banzai/filter/merge_request_reference_filter_spec.rb
index 275010c1a2c9dac41bcee44726f2213da8f913c9..3d3d36061f4d3fee00f4818e5bff99a96fcdbd52 100644
--- a/spec/lib/banzai/filter/merge_request_reference_filter_spec.rb
+++ b/spec/lib/banzai/filter/merge_request_reference_filter_spec.rb
@@ -188,7 +188,7 @@ describe Banzai::Filter::MergeRequestReferenceFilter, lib: true do
 
   context 'cross-project URL reference' do
     let(:namespace) { create(:namespace, name: 'cross-reference') }
-    let(:project2)  { create(:project, :public, namespace: namespace) }
+    let(:project2)  { create(:empty_project, :public, namespace: namespace) }
     let(:merge)     { create(:merge_request, source_project: project2, target_project: project2) }
     let(:reference) { urls.namespace_project_merge_request_url(project2.namespace, project2, merge) + '/diffs#note_123' }
 
diff --git a/spec/lib/banzai/filter/milestone_reference_filter_spec.rb b/spec/lib/banzai/filter/milestone_reference_filter_spec.rb
index 73b5edb99b37e28e09332f3f13e09f9add59fa8d..a317c751d3275ebc5034e61bc38c9c2b2161e3f8 100644
--- a/spec/lib/banzai/filter/milestone_reference_filter_spec.rb
+++ b/spec/lib/banzai/filter/milestone_reference_filter_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Banzai::Filter::MilestoneReferenceFilter, lib: true do
   include FilterSpecHelper
 
-  let(:project)   { create(:project, :public) }
+  let(:project)   { create(:empty_project, :public) }
   let(:milestone) { create(:milestone, project: project) }
   let(:reference) { milestone.to_reference }
 
diff --git a/spec/lib/banzai/filter/relative_link_filter_spec.rb b/spec/lib/banzai/filter/relative_link_filter_spec.rb
index df2dd173b5786d5d8b93e2433c8d8e7bd098ba4c..1957ba739e267edc14b454f2f7ced2adf7b8b661 100644
--- a/spec/lib/banzai/filter/relative_link_filter_spec.rb
+++ b/spec/lib/banzai/filter/relative_link_filter_spec.rb
@@ -25,7 +25,7 @@ describe Banzai::Filter::RelativeLinkFilter, lib: true do
     %(<a href="#{path}">#{path}</a>)
   end
 
-  let(:project)        { create(:project) }
+  let(:project)        { create(:project, :repository) }
   let(:project_path)   { project.path_with_namespace }
   let(:ref)            { 'markdown' }
   let(:commit)         { project.commit(ref) }
diff --git a/spec/lib/banzai/filter/upload_link_filter_spec.rb b/spec/lib/banzai/filter/upload_link_filter_spec.rb
index 8b76c1d73c993b5824821e14435f71483a2cbf12..639cac6406aa9ede6440ddbc9077433d5910b8a7 100644
--- a/spec/lib/banzai/filter/upload_link_filter_spec.rb
+++ b/spec/lib/banzai/filter/upload_link_filter_spec.rb
@@ -29,7 +29,7 @@ describe Banzai::Filter::UploadLinkFilter, lib: true do
     %(<div><a href="#{path}">#{path}</a></div>)
   end
 
-  let(:project) { create(:project) }
+  let(:project) { create(:empty_project) }
 
   shared_examples :preserve_unchanged do
     it 'does not modify any relative URL in anchor' do
diff --git a/spec/lib/banzai/filter/video_link_filter_spec.rb b/spec/lib/banzai/filter/video_link_filter_spec.rb
index 6ab1be9ccb70e879d0c23369cf1c2bd7812411e1..00494f545a325f2db612cfed843840e24e175091 100644
--- a/spec/lib/banzai/filter/video_link_filter_spec.rb
+++ b/spec/lib/banzai/filter/video_link_filter_spec.rb
@@ -13,7 +13,7 @@ describe Banzai::Filter::VideoLinkFilter, lib: true do
     %(<img src="#{path}" />)
   end
 
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
 
   context 'when the element src has a video extension' do
     UploaderHelper::VIDEO_EXT.each do |ext|
diff --git a/spec/lib/banzai/reference_parser/user_parser_spec.rb b/spec/lib/banzai/reference_parser/user_parser_spec.rb
index fafc2cec5461ec13e9cba54bd037664e62579b7c..31ca9d27b0bded68dfa987cd1b351d793801f5ad 100644
--- a/spec/lib/banzai/reference_parser/user_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/user_parser_spec.rb
@@ -147,7 +147,7 @@ describe Banzai::ReferenceParser::UserParser, lib: true do
   describe '#nodes_user_can_reference' do
     context 'when the link has a data-author attribute' do
       it 'returns the nodes when the user is a member of the project' do
-        other_project = create(:project)
+        other_project = create(:empty_project)
         other_project.team << [user, :developer]
 
         link['data-project'] = other_project.id.to_s
@@ -164,7 +164,7 @@ describe Banzai::ReferenceParser::UserParser, lib: true do
       end
 
       it 'returns an empty Array when the user could not be found' do
-        other_project = create(:project)
+        other_project = create(:empty_project)
 
         link['data-project'] = other_project.id.to_s
         link['data-author'] = ''
@@ -173,7 +173,7 @@ describe Banzai::ReferenceParser::UserParser, lib: true do
       end
 
       it 'returns an empty Array when the user is not a team member' do
-        other_project = create(:project)
+        other_project = create(:empty_project)
 
         link['data-project'] = other_project.id.to_s
         link['data-author'] = user.id.to_s
diff --git a/spec/lib/constraints/project_url_constrainer_spec.rb b/spec/lib/constraints/project_url_constrainer_spec.rb
index 94266f6653b016c5abb32ed15ff8d7a12388328a..a5251e9a8c25cded8c7dc5b052cc79627b7c56d3 100644
--- a/spec/lib/constraints/project_url_constrainer_spec.rb
+++ b/spec/lib/constraints/project_url_constrainer_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe ProjectUrlConstrainer, lib: true do
-  let!(:project) { create(:project) }
+  let!(:project) { create(:empty_project) }
   let!(:namespace) { project.namespace }
 
   describe '#matches?' do
diff --git a/spec/lib/event_filter_spec.rb b/spec/lib/event_filter_spec.rb
index ec2f66b11367a461602c548e42bf11b99ffe6157..e3066311b7dcaad6d40d87cef9eaf49a31fd8885 100644
--- a/spec/lib/event_filter_spec.rb
+++ b/spec/lib/event_filter_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe EventFilter, lib: true do
   describe '#apply_filter' do
     let(:source_user) { create(:user) }
-    let!(:public_project) { create(:project, :public) }
+    let!(:public_project) { create(:empty_project, :public) }
 
     let!(:push_event) { create(:event, action: Event::PUSHED, project: public_project, target: public_project, author: source_user) }
     let!(:merged_event) { create(:event, action: Event::MERGED, project: public_project, target: public_project, author: source_user) }
diff --git a/spec/lib/extracts_path_spec.rb b/spec/lib/extracts_path_spec.rb
index 0e85e302f292700270c59bb4f8f39defffa877e7..29c07655ae8e12a515e0454163802a221613bf99 100644
--- a/spec/lib/extracts_path_spec.rb
+++ b/spec/lib/extracts_path_spec.rb
@@ -24,7 +24,7 @@ describe ExtractsPath, lib: true do
     let(:params) { { path: sample_commit[:line_code_path], ref: ref } }
 
     before do
-      @project = create(:project)
+      @project = create(:project, :repository)
     end
 
     it "log tree path has no escape sequences" do
diff --git a/spec/lib/gitlab/badge/build/metadata_spec.rb b/spec/lib/gitlab/badge/build/metadata_spec.rb
index d678e52272100948308aa3e920c0540a82dcbe49..9df96ea04eb6be95d6d56c77657cb9d7a7ea8e1a 100644
--- a/spec/lib/gitlab/badge/build/metadata_spec.rb
+++ b/spec/lib/gitlab/badge/build/metadata_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 require 'lib/gitlab/badge/shared/metadata'
 
 describe Gitlab::Badge::Build::Metadata do
-  let(:badge) { double(project: create(:project), ref: 'feature') }
+  let(:badge) { double(project: create(:empty_project), ref: 'feature') }
   let(:metadata) { described_class.new(badge) }
 
   it_behaves_like 'badge metadata'
diff --git a/spec/lib/gitlab/badge/build/status_spec.rb b/spec/lib/gitlab/badge/build/status_spec.rb
index 70f03021d361f1cc965cf6b4eda6ad93fcde2b56..3c5414701a7e7dccebe7e2495ff651f4d9de84f5 100644
--- a/spec/lib/gitlab/badge/build/status_spec.rb
+++ b/spec/lib/gitlab/badge/build/status_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Gitlab::Badge::Build::Status do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:sha) { project.commit.sha }
   let(:branch) { 'master' }
   let(:badge) { described_class.new(project, branch) }
diff --git a/spec/lib/gitlab/badge/coverage/metadata_spec.rb b/spec/lib/gitlab/badge/coverage/metadata_spec.rb
index 74eaf7eaf8bdac93c5ed46749e3c31d4423a3ceb..5e93935ea37a00a2cdd7de310547ce5641b7d3b0 100644
--- a/spec/lib/gitlab/badge/coverage/metadata_spec.rb
+++ b/spec/lib/gitlab/badge/coverage/metadata_spec.rb
@@ -3,7 +3,7 @@ require 'lib/gitlab/badge/shared/metadata'
 
 describe Gitlab::Badge::Coverage::Metadata do
   let(:badge) do
-    double(project: create(:project), ref: 'feature', job: 'test')
+    double(project: create(:empty_project), ref: 'feature', job: 'test')
   end
 
   let(:metadata) { described_class.new(badge) }
diff --git a/spec/lib/gitlab/bitbucket_import/importer_spec.rb b/spec/lib/gitlab/bitbucket_import/importer_spec.rb
index 72b1ba36b58b417db60925b14dbb86befcb2de5a..0a2fe5af2c372becaea35c2e1e5ba60830e54da2 100644
--- a/spec/lib/gitlab/bitbucket_import/importer_spec.rb
+++ b/spec/lib/gitlab/bitbucket_import/importer_spec.rb
@@ -52,7 +52,7 @@ describe Gitlab::BitbucketImport::Importer, lib: true do
 
   let(:project) do
     create(
-      :project,
+      :empty_project,
       import_source: project_identifier,
       import_data: ProjectImportData.new(credentials: data)
     )
diff --git a/spec/lib/gitlab/blame_spec.rb b/spec/lib/gitlab/blame_spec.rb
index 89245761b6f8d37f29ad1fe41e707b5964c3c890..26b1baf75be3a89eb469dd0256acf5da8791a9f1 100644
--- a/spec/lib/gitlab/blame_spec.rb
+++ b/spec/lib/gitlab/blame_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Gitlab::Blame, lib: true do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:path) { 'files/ruby/popen.rb' }
   let(:commit) { project.commit('master') }
   let(:blob) { project.repository.blob_at(commit.id, path) }
diff --git a/spec/lib/gitlab/chat_commands/command_spec.rb b/spec/lib/gitlab/chat_commands/command_spec.rb
index a2d84977f585780617d02c101d7d9fbd39f1ed57..1e81eaef18cf553326cd3582c9ec446d22f251e4 100644
--- a/spec/lib/gitlab/chat_commands/command_spec.rb
+++ b/spec/lib/gitlab/chat_commands/command_spec.rb
@@ -11,7 +11,7 @@ describe Gitlab::ChatCommands::Command, service: true do
 
     context 'when no command is available' do
       let(:params) { { text: 'issue show 1' } }
-      let(:project) { create(:project, has_external_issue_tracker: true) }
+      let(:project) { create(:empty_project, has_external_issue_tracker: true) }
 
       it 'displays 404 messages' do
         expect(subject[:response_type]).to be(:ephemeral)
diff --git a/spec/lib/gitlab/checks/change_access_spec.rb b/spec/lib/gitlab/checks/change_access_spec.rb
index 98effecdbbc8deae5a8dae74a7db2cac29451e63..cadfbadca10c18917122e4133aee5f1dfa8651ea 100644
--- a/spec/lib/gitlab/checks/change_access_spec.rb
+++ b/spec/lib/gitlab/checks/change_access_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Gitlab::Checks::ChangeAccess, lib: true do
   describe '#exec' do
     let(:user) { create(:user) }
-    let(:project) { create(:project) }
+    let(:project) { create(:project, :repository) }
     let(:user_access) { Gitlab::UserAccess.new(user, project: project) }
     let(:changes) do
       {
diff --git a/spec/lib/gitlab/checks/force_push_spec.rb b/spec/lib/gitlab/checks/force_push_spec.rb
index f6288011494be13af46e00feeb1c02a379c5220b..7a84bbebd0231912f97ead4719a6ae2d9bd2e070 100644
--- a/spec/lib/gitlab/checks/force_push_spec.rb
+++ b/spec/lib/gitlab/checks/force_push_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Gitlab::Checks::ChangeAccess, lib: true do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
 
   context "exit code checking" do
     it "does not raise a runtime error if the `popen` call to git returns a zero exit code" do
diff --git a/spec/lib/gitlab/closing_issue_extractor_spec.rb b/spec/lib/gitlab/closing_issue_extractor_spec.rb
index 1bbaca0739af5d18d06dccc1e3b10443335e0b11..97af1c2523dc3caf0075eb90d413875ef0b60152 100644
--- a/spec/lib/gitlab/closing_issue_extractor_spec.rb
+++ b/spec/lib/gitlab/closing_issue_extractor_spec.rb
@@ -1,11 +1,11 @@
 require 'spec_helper'
 
 describe Gitlab::ClosingIssueExtractor, lib: true do
-  let(:project)   { create(:project) }
-  let(:project2)   { create(:project) }
+  let(:project) { create(:empty_project) }
+  let(:project2) { create(:empty_project) }
   let(:forked_project) { Projects::ForkService.new(project, project.creator).execute }
-  let(:issue)     { create(:issue, project: project) }
-  let(:issue2)     { create(:issue, project: project2) }
+  let(:issue) { create(:issue, project: project) }
+  let(:issue2) { create(:issue, project: project2) }
   let(:reference) { issue.to_reference }
   let(:cross_reference) { issue2.to_reference(project) }
   let(:fork_cross_reference) { issue.to_reference(forked_project) }
diff --git a/spec/lib/gitlab/conflict/file_spec.rb b/spec/lib/gitlab/conflict/file_spec.rb
index 648d342ecf8e7d20f3c6e329c465f61968e37293..fbf679c521554e727272edb59ccb3274dd4fdc0e 100644
--- a/spec/lib/gitlab/conflict/file_spec.rb
+++ b/spec/lib/gitlab/conflict/file_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Gitlab::Conflict::File, lib: true do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:repository) { project.repository }
   let(:rugged) { repository.rugged }
   let(:their_commit) { rugged.branches['conflict-start'].target }
diff --git a/spec/lib/gitlab/cycle_analytics/stage_summary_spec.rb b/spec/lib/gitlab/cycle_analytics/stage_summary_spec.rb
index fb6b6c4a8d282090148156b5d21970fef4235fa7..3dd76ba5b8a060103354202af0eca0a56b7bfe2a 100644
--- a/spec/lib/gitlab/cycle_analytics/stage_summary_spec.rb
+++ b/spec/lib/gitlab/cycle_analytics/stage_summary_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Gitlab::CycleAnalytics::StageSummary, models: true do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:from) { 1.day.ago }
   let(:user) { create(:user, :admin) }
   subject { described_class.new(project, from: Time.now, current_user: user).data }
@@ -15,7 +15,7 @@ describe Gitlab::CycleAnalytics::StageSummary, models: true do
     end
 
     it "doesn't find issues from other projects" do
-      Timecop.freeze(5.days.from_now) { create(:issue, project: create(:project)) }
+      Timecop.freeze(5.days.from_now) { create(:issue, project: create(:empty_project)) }
 
       expect(subject.first[:value]).to eq(0)
     end
@@ -30,7 +30,7 @@ describe Gitlab::CycleAnalytics::StageSummary, models: true do
     end
 
     it "doesn't find commits from other projects" do
-      Timecop.freeze(5.days.from_now) { create_commit("Test message", create(:project), user, 'master') }
+      Timecop.freeze(5.days.from_now) { create_commit("Test message", create(:project, :repository), user, 'master') }
 
       expect(subject.second[:value]).to eq(0)
     end
@@ -51,7 +51,9 @@ describe Gitlab::CycleAnalytics::StageSummary, models: true do
     end
 
     it "doesn't find commits from other projects" do
-      Timecop.freeze(5.days.from_now) { create(:deployment, project: create(:project)) }
+      Timecop.freeze(5.days.from_now) do
+        create(:deployment, project: create(:project, :repository))
+      end
 
       expect(subject.third[:value]).to eq(0)
     end
diff --git a/spec/lib/gitlab/data_builder/note_spec.rb b/spec/lib/gitlab/data_builder/note_spec.rb
index 9a4dec91e56389a837c0aebfcb05391da8da64fd..04ec34492e1809ed7d9a052b72a8f0e3b1a9ce17 100644
--- a/spec/lib/gitlab/data_builder/note_spec.rb
+++ b/spec/lib/gitlab/data_builder/note_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Gitlab::DataBuilder::Note, lib: true do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:user) { create(:user) }
   let(:data) { described_class.build(note, user) }
   let(:fixed_time) { Time.at(1425600000) } # Avoid time precision errors
diff --git a/spec/lib/gitlab/data_builder/pipeline_spec.rb b/spec/lib/gitlab/data_builder/pipeline_spec.rb
index a68f5943a6a91015338a69a24789480f6d259363..f13041e498c46510d92d50f3a7481e7fe8b2395b 100644
--- a/spec/lib/gitlab/data_builder/pipeline_spec.rb
+++ b/spec/lib/gitlab/data_builder/pipeline_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe Gitlab::DataBuilder::Pipeline do
   let(:user) { create(:user) }
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
 
   let(:pipeline) do
     create(:ci_pipeline,
diff --git a/spec/lib/gitlab/data_builder/push_spec.rb b/spec/lib/gitlab/data_builder/push_spec.rb
index a379f798a16c0227604a461ccde9aa616bba89ac..dbcfb9b7400ad7c4ca525cf1b1658d9e9fc5e198 100644
--- a/spec/lib/gitlab/data_builder/push_spec.rb
+++ b/spec/lib/gitlab/data_builder/push_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Gitlab::DataBuilder::Push, lib: true do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:user) { create(:user) }
 
   describe '.build_sample' do
diff --git a/spec/lib/gitlab/diff/file_spec.rb b/spec/lib/gitlab/diff/file_spec.rb
index 38475792d933773a3cf1edf8619ca3165f3d13c8..050689b7c9ae14174299a080162571d34016b979 100644
--- a/spec/lib/gitlab/diff/file_spec.rb
+++ b/spec/lib/gitlab/diff/file_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Gitlab::Diff::File, lib: true do
   include RepoHelpers
 
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:commit) { project.commit(sample_commit.id) }
   let(:diff) { commit.raw_diffs.first }
   let(:diff_file) { Gitlab::Diff::File.new(diff, diff_refs: commit.diff_refs, repository: project.repository) }
diff --git a/spec/lib/gitlab/diff/highlight_spec.rb b/spec/lib/gitlab/diff/highlight_spec.rb
index 1c2ddeed6922afc45e58649be1f3512f5c052738..1e21270d9289991f4c19bc8529969b6714de9245 100644
--- a/spec/lib/gitlab/diff/highlight_spec.rb
+++ b/spec/lib/gitlab/diff/highlight_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Gitlab::Diff::Highlight, lib: true do
   include RepoHelpers
 
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:commit) { project.commit(sample_commit.id) }
   let(:diff) { commit.raw_diffs.first }
   let(:diff_file) { Gitlab::Diff::File.new(diff, diff_refs: commit.diff_refs, repository: project.repository) }
diff --git a/spec/lib/gitlab/diff/line_mapper_spec.rb b/spec/lib/gitlab/diff/line_mapper_spec.rb
index 4b943fa382d02e1b73073d57fae5ffb075e72080..2c7ecd1907ec6cbe8bce3be3f29907a2e4808fe3 100644
--- a/spec/lib/gitlab/diff/line_mapper_spec.rb
+++ b/spec/lib/gitlab/diff/line_mapper_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Gitlab::Diff::LineMapper, lib: true do
   include RepoHelpers
 
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:repository) { project.repository }
   let(:commit) { project.commit(sample_commit.id) }
   let(:diffs) { commit.raw_diffs }
diff --git a/spec/lib/gitlab/diff/parallel_diff_spec.rb b/spec/lib/gitlab/diff/parallel_diff_spec.rb
index af18d3c25a674808771e654ab647432646bc74ba..fe5fa0484134140a5414dc61cdf0cb6234c030c0 100644
--- a/spec/lib/gitlab/diff/parallel_diff_spec.rb
+++ b/spec/lib/gitlab/diff/parallel_diff_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Gitlab::Diff::ParallelDiff, lib: true do
   include RepoHelpers
 
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:repository) { project.repository }
   let(:commit) { project.commit(sample_commit.id) }
   let(:diffs) { commit.raw_diffs }
diff --git a/spec/lib/gitlab/diff/position_spec.rb b/spec/lib/gitlab/diff/position_spec.rb
index 6e8fff6f5163c43589a580ca4a2440cbea0df8cb..cdf0af6d7ef7521c84644721d3d2b8732a5b899b 100644
--- a/spec/lib/gitlab/diff/position_spec.rb
+++ b/spec/lib/gitlab/diff/position_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Gitlab::Diff::Position, lib: true do
   include RepoHelpers
 
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
 
   describe "position for an added file" do
     let(:commit) { project.commit("2ea1f3dec713d940208fb5ce4a38765ecb5d3f73") }
diff --git a/spec/lib/gitlab/diff/position_tracer_spec.rb b/spec/lib/gitlab/diff/position_tracer_spec.rb
index f77ab016e9be0f31032b53ff6caa94d50028a8d2..ffb9ba86fbb40bde469c1d1c461393de85fe6cd0 100644
--- a/spec/lib/gitlab/diff/position_tracer_spec.rb
+++ b/spec/lib/gitlab/diff/position_tracer_spec.rb
@@ -51,7 +51,7 @@ describe Gitlab::Diff::PositionTracer, lib: true do
 
   include RepoHelpers
 
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:current_user) { project.owner }
   let(:repository) { project.repository }
   let(:file_name) { "test-file" }
diff --git a/spec/lib/gitlab/email/handler/create_issue_handler_spec.rb b/spec/lib/gitlab/email/handler/create_issue_handler_spec.rb
index 08897a4c310f1680986de81ee2436a7e10d0b9f6..4a9c9a7fe345357937185cc476445ce8d4c3e376 100644
--- a/spec/lib/gitlab/email/handler/create_issue_handler_spec.rb
+++ b/spec/lib/gitlab/email/handler/create_issue_handler_spec.rb
@@ -13,7 +13,7 @@ describe Gitlab::Email::Handler::CreateIssueHandler, lib: true do
   let(:email_raw) { fixture_file('emails/valid_new_issue.eml') }
   let(:namespace) { create(:namespace, path: 'gitlabhq') }
 
-  let!(:project)  { create(:project, :public, namespace: namespace) }
+  let!(:project)  { create(:project, :public, :repository, namespace: namespace) }
   let!(:user) do
     create(
       :user,
diff --git a/spec/lib/gitlab/email/handler/create_note_handler_spec.rb b/spec/lib/gitlab/email/handler/create_note_handler_spec.rb
index cebbeff50cfb9c2704913d1796418729b8da18b8..17a4ef25210c6a711c8c1ade3bbd21ab993350ab 100644
--- a/spec/lib/gitlab/email/handler/create_note_handler_spec.rb
+++ b/spec/lib/gitlab/email/handler/create_note_handler_spec.rb
@@ -11,7 +11,7 @@ describe Gitlab::Email::Handler::CreateNoteHandler, lib: true do
   end
 
   let(:email_raw) { fixture_file('emails/valid_reply.eml') }
-  let(:project)   { create(:project, :public) }
+  let(:project)   { create(:project, :public, :repository) }
   let(:user)      { create(:user) }
   let(:note)      { create(:diff_note_on_merge_request, project: project) }
   let(:noteable)  { note.noteable }
diff --git a/spec/lib/gitlab/email/handler/unsubscribe_handler_spec.rb b/spec/lib/gitlab/email/handler/unsubscribe_handler_spec.rb
index a444257754b58a3637339664908bd225da578edd..0939e6c45145a707a805d97cab5db128679f3c99 100644
--- a/spec/lib/gitlab/email/handler/unsubscribe_handler_spec.rb
+++ b/spec/lib/gitlab/email/handler/unsubscribe_handler_spec.rb
@@ -10,7 +10,7 @@ describe Gitlab::Email::Handler::UnsubscribeHandler, lib: true do
   end
 
   let(:email_raw) { fixture_file('emails/valid_reply.eml').gsub(mail_key, "#{mail_key}+unsubscribe") }
-  let(:project) { create(:project, :public) }
+  let(:project) { create(:empty_project, :public) }
   let(:user) { create(:user) }
   let(:noteable) { create(:issue, project: project) }
 
diff --git a/spec/lib/gitlab/email/message/repository_push_spec.rb b/spec/lib/gitlab/email/message/repository_push_spec.rb
index 5b966bddb6a6733a19b6db6800479a1713001c55..7b3291b83154b1b7a5cb600b86f55cfa730d2143 100644
--- a/spec/lib/gitlab/email/message/repository_push_spec.rb
+++ b/spec/lib/gitlab/email/message/repository_push_spec.rb
@@ -4,7 +4,7 @@ describe Gitlab::Email::Message::RepositoryPush do
   include RepoHelpers
 
   let!(:group) { create(:group, name: 'my_group') }
-  let!(:project) { create(:project, name: 'my_project', namespace: group) }
+  let!(:project) { create(:project, :repository, name: 'my_project', namespace: group) }
   let!(:author) { create(:author, name: 'Author') }
 
   let(:message) do
diff --git a/spec/lib/gitlab/gfm/reference_rewriter_spec.rb b/spec/lib/gitlab/gfm/reference_rewriter_spec.rb
index f4703dc704f565ca1ca3c09db00d010bbce58328..5d416c9eec3204c1394a903f1af64d5bca768c69 100644
--- a/spec/lib/gitlab/gfm/reference_rewriter_spec.rb
+++ b/spec/lib/gitlab/gfm/reference_rewriter_spec.rb
@@ -2,8 +2,8 @@ require 'spec_helper'
 
 describe Gitlab::Gfm::ReferenceRewriter do
   let(:text) { 'some text' }
-  let(:old_project) { create(:project, name: 'old') }
-  let(:new_project) { create(:project, name: 'new') }
+  let(:old_project) { create(:empty_project, name: 'old-project') }
+  let(:new_project) { create(:empty_project, name: 'new-project') }
   let(:user) { create(:user) }
 
   before { old_project.team << [user, :reporter] }
diff --git a/spec/lib/gitlab/gfm/uploads_rewriter_spec.rb b/spec/lib/gitlab/gfm/uploads_rewriter_spec.rb
index 6eca33f9fee300ea4537d257829874d6dfff3801..c3016f63ebf8a24b79728b65d8ac74ad9dbb613e 100644
--- a/spec/lib/gitlab/gfm/uploads_rewriter_spec.rb
+++ b/spec/lib/gitlab/gfm/uploads_rewriter_spec.rb
@@ -2,8 +2,8 @@ require 'spec_helper'
 
 describe Gitlab::Gfm::UploadsRewriter do
   let(:user) { create(:user) }
-  let(:old_project) { create(:project) }
-  let(:new_project) { create(:project) }
+  let(:old_project) { create(:empty_project) }
+  let(:new_project) { create(:empty_project) }
   let(:rewriter) { described_class.new(text, old_project, user) }
 
   context 'text contains links to uploads' do
diff --git a/spec/lib/gitlab/git/hook_spec.rb b/spec/lib/gitlab/git/hook_spec.rb
index d1f947b68500940e51248da3b45039c40720c329..3f279c2186546a1b08c19b5c25457d1d19caf870 100644
--- a/spec/lib/gitlab/git/hook_spec.rb
+++ b/spec/lib/gitlab/git/hook_spec.rb
@@ -3,7 +3,7 @@ require 'fileutils'
 
 describe Gitlab::Git::Hook, lib: true do
   describe "#trigger" do
-    let(:project) { create(:project) }
+    let(:project) { create(:project, :repository) }
     let(:user) { create(:user) }
 
     def create_hook(name)
diff --git a/spec/lib/gitlab/git/rev_list_spec.rb b/spec/lib/gitlab/git/rev_list_spec.rb
index 1f9c987be0bc8b17d223d075ccdae0072427151b..d48629a296d57a11de1d04041dfd9ffd506882fb 100644
--- a/spec/lib/gitlab/git/rev_list_spec.rb
+++ b/spec/lib/gitlab/git/rev_list_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Gitlab::Git::RevList, lib: true do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
 
   context "validations" do
     described_class::ALLOWED_VARIABLES.each do |var|
diff --git a/spec/lib/gitlab/git_access_spec.rb b/spec/lib/gitlab/git_access_spec.rb
index 7823fd2c21987e87f0a588f23b85512c3e0f5909..116ab16ae74d2a339464cb546c23d0d0d485e291 100644
--- a/spec/lib/gitlab/git_access_spec.rb
+++ b/spec/lib/gitlab/git_access_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe Gitlab::GitAccess, lib: true do
   let(:access) { Gitlab::GitAccess.new(actor, project, 'web', authentication_abilities: authentication_abilities) }
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:user) { create(:user) }
   let(:actor) { user }
   let(:authentication_abilities) do
@@ -88,7 +88,7 @@ describe Gitlab::GitAccess, lib: true do
       end
 
       context 'when project is public' do
-        let(:public_project) { create(:project, :public) }
+        let(:public_project) { create(:project, :public, :repository) }
         let(:guest_access) { Gitlab::GitAccess.new(nil, public_project, 'web', authentication_abilities: []) }
         subject { guest_access.check('git-upload-pack', '_any') }
 
@@ -124,19 +124,19 @@ describe Gitlab::GitAccess, lib: true do
 
         context 'when unauthorized' do
           context 'from public project' do
-            let(:project) { create(:project, :public) }
+            let(:project) { create(:project, :public, :repository) }
 
             it { expect(subject).to be_allowed }
           end
 
           context 'from internal project' do
-            let(:project) { create(:project, :internal) }
+            let(:project) { create(:project, :internal, :repository) }
 
             it { expect(subject).not_to be_allowed }
           end
 
           context 'from private project' do
-            let(:project) { create(:project, :private) }
+            let(:project) { create(:project, :private, :repository) }
 
             it { expect(subject).not_to be_allowed }
           end
@@ -148,7 +148,7 @@ describe Gitlab::GitAccess, lib: true do
       let(:authentication_abilities) { build_authentication_abilities }
 
       describe 'owner' do
-        let(:project) { create(:project, namespace: user.namespace) }
+        let(:project) { create(:project, :repository, namespace: user.namespace) }
 
         context 'pull code' do
           it { expect(subject).to be_allowed }
@@ -370,19 +370,19 @@ describe Gitlab::GitAccess, lib: true do
 
     context 'when unauthorized' do
       context 'to public project' do
-        let(:project) { create(:project, :public) }
+        let(:project) { create(:project, :public, :repository) }
 
         it { expect(subject).not_to be_allowed }
       end
 
       context 'to internal project' do
-        let(:project) { create(:project, :internal) }
+        let(:project) { create(:project, :internal, :repository) }
 
         it { expect(subject).not_to be_allowed }
       end
 
       context 'to private project' do
-        let(:project) { create(:project) }
+        let(:project) { create(:project, :private, :repository) }
 
         it { expect(subject).not_to be_allowed }
       end
diff --git a/spec/lib/gitlab/git_access_wiki_spec.rb b/spec/lib/gitlab/git_access_wiki_spec.rb
index a5d172233cc33aa99241fe82ef1663b2d5c7bd25..4a0cdc6887ec1c3175635b7761b89791cdcd0fbd 100644
--- a/spec/lib/gitlab/git_access_wiki_spec.rb
+++ b/spec/lib/gitlab/git_access_wiki_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe Gitlab::GitAccessWiki, lib: true do
   let(:access) { Gitlab::GitAccessWiki.new(user, project, 'web', authentication_abilities: authentication_abilities) }
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:user) { create(:user) }
   let(:authentication_abilities) do
     [
diff --git a/spec/lib/gitlab/github_import/branch_formatter_spec.rb b/spec/lib/gitlab/github_import/branch_formatter_spec.rb
index 462caa5b5fe8a6bd4c23f1c12b46508fa308f8a7..36e7d739f7ec632a17db26508cc9391b9a6f06f0 100644
--- a/spec/lib/gitlab/github_import/branch_formatter_spec.rb
+++ b/spec/lib/gitlab/github_import/branch_formatter_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Gitlab::GithubImport::BranchFormatter, lib: true do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:commit) { create(:commit, project: project) }
   let(:repo) { double }
   let(:raw) do
diff --git a/spec/lib/gitlab/github_import/comment_formatter_spec.rb b/spec/lib/gitlab/github_import/comment_formatter_spec.rb
index c520a9c53ad7d4253b9acf6acecd6d2037e3e3e6..e6e33d3686af94167fa8629f93c73d6796ae1a5d 100644
--- a/spec/lib/gitlab/github_import/comment_formatter_spec.rb
+++ b/spec/lib/gitlab/github_import/comment_formatter_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Gitlab::GithubImport::CommentFormatter, lib: true do
-  let(:project) { create(:project) }
+  let(:project) { create(:empty_project) }
   let(:octocat) { double(id: 123456, login: 'octocat') }
   let(:created_at) { DateTime.strptime('2013-04-10T20:09:31Z') }
   let(:updated_at) { DateTime.strptime('2014-03-03T18:58:10Z') }
diff --git a/spec/lib/gitlab/github_import/issue_formatter_spec.rb b/spec/lib/gitlab/github_import/issue_formatter_spec.rb
index e31ed9c1fa06d9c6415499739ee9550d9d73dc7b..eec1fabab547d8033985001f6e677178bd06e2f3 100644
--- a/spec/lib/gitlab/github_import/issue_formatter_spec.rb
+++ b/spec/lib/gitlab/github_import/issue_formatter_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Gitlab::GithubImport::IssueFormatter, lib: true do
-  let!(:project) { create(:project, namespace: create(:namespace, path: 'octocat')) }
+  let!(:project) { create(:empty_project, namespace: create(:namespace, path: 'octocat')) }
   let(:octocat) { double(id: 123456, login: 'octocat') }
   let(:created_at) { DateTime.strptime('2011-01-26T19:01:12Z') }
   let(:updated_at) { DateTime.strptime('2011-01-27T19:01:12Z') }
diff --git a/spec/lib/gitlab/github_import/label_formatter_spec.rb b/spec/lib/gitlab/github_import/label_formatter_spec.rb
index 8098754d735f775b321b88710528ca8933fd2024..10449ef5fcbbee3eed699a528d41335eaefb8e62 100644
--- a/spec/lib/gitlab/github_import/label_formatter_spec.rb
+++ b/spec/lib/gitlab/github_import/label_formatter_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Gitlab::GithubImport::LabelFormatter, lib: true do
-  let(:project) { create(:project) }
+  let(:project) { create(:empty_project) }
   let(:raw) { double(name: 'improvements', color: 'e6e6e6') }
 
   subject { described_class.new(project, raw) }
diff --git a/spec/lib/gitlab/github_import/pull_request_formatter_spec.rb b/spec/lib/gitlab/github_import/pull_request_formatter_spec.rb
index 2b3256edcb239dac62ad450eac9d7225afd685de..90947ff4707d375a21e14d265b3adbba8545fc05 100644
--- a/spec/lib/gitlab/github_import/pull_request_formatter_spec.rb
+++ b/spec/lib/gitlab/github_import/pull_request_formatter_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Gitlab::GithubImport::PullRequestFormatter, lib: true do
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:source_sha) { create(:commit, project: project).id }
   let(:target_sha) { create(:commit, project: project, git_commit: RepoHelpers.another_sample_commit).id }
   let(:repository) { double(id: 1, fork: false) }
diff --git a/spec/lib/gitlab/github_import/release_formatter_spec.rb b/spec/lib/gitlab/github_import/release_formatter_spec.rb
index 793128c6ab92b271ec401950f9b786fd8d5a6e9b..13b15e669ab5af6a0fbd58932c0e22bb409182c2 100644
--- a/spec/lib/gitlab/github_import/release_formatter_spec.rb
+++ b/spec/lib/gitlab/github_import/release_formatter_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Gitlab::GithubImport::ReleaseFormatter, lib: true do
-  let!(:project) { create(:project, namespace: create(:namespace, path: 'octocat')) }
+  let!(:project) { create(:empty_project, namespace: create(:namespace, path: 'octocat')) }
   let(:octocat) { double(id: 123456, login: 'octocat') }
   let(:created_at) { DateTime.strptime('2011-01-26T19:01:12Z') }
 
diff --git a/spec/lib/gitlab/google_code_import/importer_spec.rb b/spec/lib/gitlab/google_code_import/importer_spec.rb
index 097861fd34db95f76b64710e5e1acc351fb527be..ccaa88a5c798f8b55e511cc1c2179afff83f3742 100644
--- a/spec/lib/gitlab/google_code_import/importer_spec.rb
+++ b/spec/lib/gitlab/google_code_import/importer_spec.rb
@@ -10,7 +10,7 @@ describe Gitlab::GoogleCodeImport::Importer, lib: true do
       'user_map' => { 'thilo...' => "@#{mapped_user.username}" }
     }
   end
-  let(:project) { create(:project) }
+  let(:project) { create(:empty_project) }
 
   subject { described_class.new(project) }
 
diff --git a/spec/lib/gitlab/graphs/commits_spec.rb b/spec/lib/gitlab/graphs/commits_spec.rb
index f5c064303ad11292f9323967d05120b61a8b9061..abb5a26060f72c7ec303786c5e8b13f4dc2ea13f 100644
--- a/spec/lib/gitlab/graphs/commits_spec.rb
+++ b/spec/lib/gitlab/graphs/commits_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Gitlab::Graphs::Commits, lib: true do
-  let!(:project) { create(:project, :public, :empty_repo) }
+  let!(:project) { create(:empty_project, :public) }
 
   let!(:commit1) { create(:commit, git_commit: RepoHelpers.sample_commit, project: project, committed_date: Time.now) }
   let!(:commit1_yesterday) { create(:commit, git_commit: RepoHelpers.sample_commit, project: project, committed_date: 1.day.ago)}
diff --git a/spec/lib/gitlab/highlight_spec.rb b/spec/lib/gitlab/highlight_spec.rb
index fc021416d92472f38def5cbe5c21fc39ab0958e7..fadfe4d378ee61ec4edfef7fcc1be130d47bf21c 100644
--- a/spec/lib/gitlab/highlight_spec.rb
+++ b/spec/lib/gitlab/highlight_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Gitlab::Highlight, lib: true do
   include RepoHelpers
 
-  let(:project) { create(:project) }
+  let(:project) { create(:project, :repository) }
   let(:repository) { project.repository }
   let(:commit) { project.commit(sample_commit.id) }
 
diff --git a/spec/lib/gitlab/import_export/import_export_spec.rb b/spec/lib/gitlab/import_export/import_export_spec.rb
index d6409a2955086b6ac6e78f9d1ececdb0223a6fe8..53f7d244d88bd81b5d9f18518cf60d4cb1ba9d32 100644
--- a/spec/lib/gitlab/import_export/import_export_spec.rb
+++ b/spec/lib/gitlab/import_export/import_export_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe Gitlab::ImportExport, services: true do
   describe 'export filename' do
-    let(:project) { create(:project, :public, path: 'project-path') }
+    let(:project) { create(:empty_project, :public, path: 'project-path') }
 
     it 'contains the project path' do
       expect(described_class.export_filename(project: project)).to include(project.path)
diff --git a/spec/lib/gitlab/import_export/members_mapper_spec.rb b/spec/lib/gitlab/import_export/members_mapper_spec.rb
index b069696b5c7533160fcc485eb524c5ab58797537..0b7984d6ca94f9391e2f6647ccd9f5178ba2b3ac 100644
--- a/spec/lib/gitlab/import_export/members_mapper_spec.rb
+++ b/spec/lib/gitlab/import_export/members_mapper_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Gitlab::ImportExport::MembersMapper, services: true do
   describe 'map members' do
     let(:user) { create(:admin, authorized_projects_populated: true) }
-    let(:project) { create(:project, :public, name: 'searchable_project') }
+    let(:project) { create(:empty_project, :public, name: 'searchable_project') }
     let(:user2) { create(:user, authorized_projects_populated: true) }
     let(:exported_user_id) { 99 }
     let(:exported_members) do
diff --git a/spec/lib/gitlab/import_export/project_tree_saver_spec.rb b/spec/lib/gitlab/import_export/project_tree_saver_spec.rb
index c8bba553558e50d656c97770d47ab194bd850a76..d480c3821ec1ef7df0808302bae40f89ec3c401d 100644
--- a/spec/lib/gitlab/import_export/project_tree_saver_spec.rb
+++ b/spec/lib/gitlab/import_export/project_tree_saver_spec.rb
@@ -151,6 +151,7 @@ describe Gitlab::ImportExport::ProjectTreeSaver, services: true do
 
     project = create(:project,
                      :public,
+                     :repository,
                      issues: [issue],
                      snippets: [snippet],
                      releases: [release],
diff --git a/spec/lib/gitlab/import_export/repo_bundler_spec.rb b/spec/lib/gitlab/import_export/repo_bundler_spec.rb
index 135e99bc95322ef299bb5391cc0a562ecbe6e4a4..d39ea60ff7f779e11568bbfdb73ad4c43ec4e760 100644
--- a/spec/lib/gitlab/import_export/repo_bundler_spec.rb
+++ b/spec/lib/gitlab/import_export/repo_bundler_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Gitlab::ImportExport::RepoSaver, services: true do
   describe 'bundle a project Git repo' do
     let(:user) { create(:user) }
-    let!(:project) { create(:project, :public, name: 'searchable_project') }
+    let!(:project) { create(:empty_project, :public, name: 'searchable_project') }
     let(:export_path) { "#{Dir::tmpdir}/project_tree_saver_spec" }
     let(:shared) { Gitlab::ImportExport::Shared.new(relative_path: project.path_with_namespace) }
     let(:bundler) { described_class.new(project: project, shared: shared) }
diff --git a/spec/lib/gitlab/import_export/wiki_repo_bundler_spec.rb b/spec/lib/gitlab/import_export/wiki_repo_bundler_spec.rb
index b628da0f3e87a2aa39ff2448bd46179412946263..47d5d2fc150ed3f0d9f9bcdf6a31c1ec0bb191ea 100644
--- a/spec/lib/gitlab/import_export/wiki_repo_bundler_spec.rb
+++ b/spec/lib/gitlab/import_export/wiki_repo_bundler_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Gitlab::ImportExport::WikiRepoSaver, services: true do
   describe 'bundle a wiki Git repo' do
     let(:user) { create(:user) }
-    let!(:project) { create(:project, :public, name: 'searchable_project') }
+    let!(:project) { create(:empty_project, :public, name: 'searchable_project') }
     let(:export_path) { "#{Dir::tmpdir}/project_tree_saver_spec" }
     let(:shared) { Gitlab::ImportExport::Shared.new(relative_path: project.path_with_namespace) }
     let(:wiki_bundler) { described_class.new(project: project, shared: shared) }
diff --git a/spec/lib/gitlab/project_search_results_spec.rb b/spec/lib/gitlab/project_search_results_spec.rb
index d94eb52f83835db79126ad7a56c4231baec87577..92e3624a8d8258395a1b01bf996b9b894edf69e5 100644
--- a/spec/lib/gitlab/project_search_results_spec.rb
+++ b/spec/lib/gitlab/project_search_results_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe Gitlab::ProjectSearchResults, lib: true do
   let(:user) { create(:user) }
-  let(:project) { create(:project) }
+  let(:project) { create(:empty_project) }
   let(:query) { 'hello world' }
 
   describe 'initialize with empty ref' do
@@ -22,6 +22,7 @@ describe Gitlab::ProjectSearchResults, lib: true do
   end
 
   describe 'blob search' do
+    let(:project) { create(:project, :repository) }
     let(:results) { described_class.new(user, project, 'files').objects('blobs') }
 
     it 'finds by name' do
@@ -74,6 +75,7 @@ describe Gitlab::ProjectSearchResults, lib: true do
   end
 
   describe 'confidential issues' do
+    let(:project) { create(:empty_project) }
     let(:query) { 'issue' }
     let(:author) { create(:user) }
     let(:assignee) { create(:user) }
@@ -187,7 +189,7 @@ describe Gitlab::ProjectSearchResults, lib: true do
   #
   shared_examples 'access restricted commits' do
     context 'when project is internal' do
-      let(:project) { create(:project, :internal) }
+      let(:project) { create(:project, :internal, :repository) }
 
       it 'does not search if user is not authenticated' do
         commits = described_class.new(nil, project, search_phrase).objects('commits')
@@ -204,7 +206,7 @@ describe Gitlab::ProjectSearchResults, lib: true do
 
     context 'when project is private' do
       let!(:creator) { create(:user, username: 'private-project-author') }
-      let!(:private_project) { create(:project, :private, creator: creator, namespace: creator.namespace) }
+      let!(:private_project) { create(:project, :private, :repository, creator: creator, namespace: creator.namespace) }
       let(:team_master) do
         user = create(:user, username: 'private-project-master')
         private_project.team << [user, :master]
@@ -246,7 +248,7 @@ describe Gitlab::ProjectSearchResults, lib: true do
 
   describe 'commit search' do
     context 'by commit message' do
-      let(:project) { create(:project, :public) }
+      let(:project) { create(:project, :public, :repository) }
       let(:commit) { project.repository.commit('59e29889be61e6e0e5e223bfa9ac2721d31605b8') }
       let(:message) { 'Sorry, I did a mistake' }
 
@@ -269,7 +271,7 @@ describe Gitlab::ProjectSearchResults, lib: true do
     end
 
     context 'by commit hash' do
-      let(:project) { create(:project, :public) }
+      let(:project) { create(:project, :public, :repository) }
       let(:commit) { project.repository.commit('0b4bc9a') }
       commit_hashes = { short: '0b4bc9a', full: '0b4bc9a49b562e85de7cc9e834518ea6828729b9' }
 
diff --git a/spec/lib/gitlab/reference_extractor_spec.rb b/spec/lib/gitlab/reference_extractor_spec.rb
index bf0ab9635fd308d49f29f17b6cc0d9d361eb5bf2..6b689c41ef656175d65165678b998379c2d680a0 100644
--- a/spec/lib/gitlab/reference_extractor_spec.rb
+++ b/spec/lib/gitlab/reference_extractor_spec.rb
@@ -1,9 +1,11 @@
 require 'spec_helper'
 
 describe Gitlab::ReferenceExtractor, lib: true do
-  let(:project) { create(:project) }
+  let(:project) { create(:empty_project) }
 
-  before { project.team << [project.creator, :developer] }
+  before do
+    project.team << [project.creator, :developer]
+  end
 
   subject { Gitlab::ReferenceExtractor.new(project, project.creator) }
 
@@ -78,22 +80,27 @@ describe Gitlab::ReferenceExtractor, lib: true do
   end
 
   it 'accesses valid commits' do
+    project = create(:project, :repository) { |p| p.add_developer(p.creator) }
     commit = project.commit('master')
 
-    subject.analyze("this references commits #{commit.sha[0..6]} and 012345")
-    extracted = subject.commits
+    extractor = described_class.new(project, project.creator)
+    extractor.analyze("this references commits #{commit.sha[0..6]} and 012345")
+    extracted = extractor.commits
+
     expect(extracted.size).to eq(1)
     expect(extracted[0].sha).to eq(commit.sha)
     expect(extracted[0].message).to eq(commit.message)
   end
 
   it 'accesses valid commit ranges' do
+    project = create(:project, :repository) { |p| p.add_developer(p.creator) }
     commit = project.commit('master')
     earlier_commit = project.commit('master~2')
 
-    subject.analyze("this references commits #{earlier_commit.sha[0..6]}...#{commit.sha[0..6]}")
+    extractor = described_class.new(project, project.creator)
+    extractor.analyze("this references commits #{earlier_commit.sha[0..6]}...#{commit.sha[0..6]}")
+    extracted = extractor.commit_ranges
 
-    extracted = subject.commit_ranges
     expect(extracted.size).to eq(1)
     expect(extracted.first).to be_kind_of(CommitRange)
     expect(extracted.first.commit_from).to eq earlier_commit
@@ -102,7 +109,6 @@ describe Gitlab::ReferenceExtractor, lib: true do
 
   context 'with an external issue tracker' do
     let(:project) { create(:jira_project) }
-    subject { described_class.new(project, project.creator) }
 
     it 'returns JIRA issues for a JIRA-integrated project' do
       subject.analyze('JIRA-123 and FOOBAR-4567')
@@ -112,7 +118,7 @@ describe Gitlab::ReferenceExtractor, lib: true do
   end
 
   context 'with a project with an underscore' do
-    let(:other_project) { create(:project, path: 'test_project') }
+    let(:other_project) { create(:empty_project, path: 'test_project') }
     let(:issue) { create(:issue, project: other_project) }
 
     before do
diff --git a/spec/lib/gitlab/search_results_spec.rb b/spec/lib/gitlab/search_results_spec.rb
index 9614aad3e73f9d11f7c67b823e48f4bd62b96d92..847fb977400157c5118c43d70277dee64a580425 100644
--- a/spec/lib/gitlab/search_results_spec.rb
+++ b/spec/lib/gitlab/search_results_spec.rb
@@ -2,7 +2,7 @@ require 'spec_helper'
 
 describe Gitlab::SearchResults do
   let(:user) { create(:user) }
-  let!(:project) { create(:project, name: 'foo') }
+  let!(:project) { create(:empty_project, name: 'foo') }
   let!(:issue) { create(:issue, project: project, title: 'foo') }
 
   let!(:merge_request) do
diff --git a/spec/lib/gitlab/template/issue_template_spec.rb b/spec/lib/gitlab/template/issue_template_spec.rb
index 4275fda5c7450f04f7451b6e262fe1a476ac008c..1335a2b8f3534261a63ae8c1edbb1c5a9ff0dc5a 100644
--- a/spec/lib/gitlab/template/issue_template_spec.rb
+++ b/spec/lib/gitlab/template/issue_template_spec.rb
@@ -7,6 +7,7 @@ describe Gitlab::Template::IssueTemplate do
 
   let(:project) do
     create(:project,
+      :repository,
       create_template: {
         user: user,
         access: Gitlab::Access::MASTER,
diff --git a/spec/lib/gitlab/template/merge_request_template_spec.rb b/spec/lib/gitlab/template/merge_request_template_spec.rb
index 708bb084eef3a19b1da28370729293fdce2346e9..320b870309a1ce33c882082c997a6c33c43dcfca 100644
--- a/spec/lib/gitlab/template/merge_request_template_spec.rb
+++ b/spec/lib/gitlab/template/merge_request_template_spec.rb
@@ -7,6 +7,7 @@ describe Gitlab::Template::MergeRequestTemplate do
 
   let(:project) do
     create(:project,
+      :repository,
       create_template: {
         user: user,
         access: Gitlab::Access::MASTER,
diff --git a/spec/lib/gitlab/url_builder_spec.rb b/spec/lib/gitlab/url_builder_spec.rb
index a826b24419a8b8998c9142b1a94e5f9a99b99490..3fe8cf43934d0e988ea475515c52ce4c74a4ea4e 100644
--- a/spec/lib/gitlab/url_builder_spec.rb
+++ b/spec/lib/gitlab/url_builder_spec.rb
@@ -99,7 +99,7 @@ describe Gitlab::UrlBuilder, lib: true do
 
       context 'on another object' do
         it 'returns a proper URL' do
-          project = build_stubbed(:project)
+          project = build_stubbed(:empty_project)
 
           expect { described_class.build(project) }.
             to raise_error(NotImplementedError, 'No URL builder defined for Project')
diff --git a/spec/lib/gitlab/workhorse_spec.rb b/spec/lib/gitlab/workhorse_spec.rb
index 4b1cd466677d1966df68fcacde63332ac5d7e44c..7dd4d76d1a39e27a7b32ad8f3e72f99051d21c6f 100644
--- a/spec/lib/gitlab/workhorse_spec.rb
+++ b/spec/lib/gitlab/workhorse_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe Gitlab::Workhorse, lib: true do
-  let(:project)    { create(:project) }
+  let(:project)    { create(:project, :repository) }
   let(:repository) { project.repository }
 
   def decode_workhorse_header(array)
diff --git a/spec/lib/light_url_builder_spec.rb b/spec/lib/light_url_builder_spec.rb
index a826b24419a8b8998c9142b1a94e5f9a99b99490..3fe8cf43934d0e988ea475515c52ce4c74a4ea4e 100644
--- a/spec/lib/light_url_builder_spec.rb
+++ b/spec/lib/light_url_builder_spec.rb
@@ -99,7 +99,7 @@ describe Gitlab::UrlBuilder, lib: true do
 
       context 'on another object' do
         it 'returns a proper URL' do
-          project = build_stubbed(:project)
+          project = build_stubbed(:empty_project)
 
           expect { described_class.build(project) }.
             to raise_error(NotImplementedError, 'No URL builder defined for Project')
diff --git a/spec/lib/repository_cache_spec.rb b/spec/lib/repository_cache_spec.rb
index f227926f39c83bbddcc8fb111bf958685fa35195..5892f3481a4f5a4db90cd174d1de98bc4bb44224 100644
--- a/spec/lib/repository_cache_spec.rb
+++ b/spec/lib/repository_cache_spec.rb
@@ -1,7 +1,7 @@
 require 'spec_helper'
 
 describe RepositoryCache, lib: true do
-  let(:project) { create(:project) }
+  let(:project) { create(:empty_project) }
   let(:backend) { double('backend').as_null_object }
   let(:cache) { RepositoryCache.new('example', project.id, backend) }
 
diff --git a/spec/models/issue_spec.rb b/spec/models/issue_spec.rb
index bfa36d92ac3812f37f82f9a1c97e9837c5ad1f62..61d729257366bd982593bb5d9508c936a1b9995d 100644
--- a/spec/models/issue_spec.rb
+++ b/spec/models/issue_spec.rb
@@ -217,7 +217,7 @@ describe Issue, models: true do
   end
 
   it_behaves_like 'an editable mentionable' do
-    subject { create(:issue) }
+    subject { create(:issue, project: create(:project, :repository)) }
 
     let(:backref_text) { "issue #{subject.to_reference}" }
     let(:set_mentionable_text) { ->(txt){ subject.description = txt } }
diff --git a/spec/models/note_spec.rb b/spec/models/note_spec.rb
index 1b8ae356f1ff5cd6f10f1633dd8785265e4dfb19..6f9ae655fedca0b8e362113659a753fde8fa3997 100644
--- a/spec/models/note_spec.rb
+++ b/spec/models/note_spec.rb
@@ -138,7 +138,7 @@ describe Note, models: true do
   it_behaves_like 'an editable mentionable' do
     subject { create :note, noteable: issue, project: issue.project }
 
-    let(:issue) { create :issue }
+    let(:issue) { create(:issue, project: create(:project, :repository)) }
     let(:backref_text) { issue.gfm_reference }
     let(:set_mentionable_text) { ->(txt) { subject.note = txt } }
   end
diff --git a/spec/support/taskable_shared_examples.rb b/spec/support/taskable_shared_examples.rb
index 1b6c33248c98f80f4f4826dc33e7398884d1329c..4056ff06b8475940b79eee4dde02bb029d05330b 100644
--- a/spec/support/taskable_shared_examples.rb
+++ b/spec/support/taskable_shared_examples.rb
@@ -72,6 +72,25 @@ shared_examples 'a Taskable' do
     end
   end
 
+  describe 'with tasks that are not formatted correctly' do
+    before do
+      subject.description = <<-EOT.strip_heredoc
+        [ ] task 1
+        [ ] task 2
+
+        - [ ]task 1
+        -[ ] task 2
+      EOT
+    end
+
+    it 'returns the correct task status' do
+      expect(subject.task_status).to match('0 of')
+      expect(subject.task_status).to match('0 tasks completed')
+      expect(subject.task_status_short).to match('0/')
+      expect(subject.task_status_short).to match('0 task')
+    end
+  end
+
   describe 'with a complete task' do
     before do
       subject.description = <<-EOT.strip_heredoc