From 73f91da8b19be5b98b5c4e11cf27ceb50eb6c20b Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> Date: Tue, 17 Jun 2014 23:49:17 +0300 Subject: [PATCH] Fix project deletion and tests --- app/controllers/projects_controller.rb | 3 +-- app/services/projects/destroy_service.rb | 5 +++-- spec/models/event_spec.rb | 22 ------------------- spec/models/system_hook_spec.rb | 7 +++--- spec/services/projects/create_service_spec.rb | 16 +++++--------- 5 files changed, 13 insertions(+), 40 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 9e14af62048..2dcc19bed07 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -98,8 +98,7 @@ class ProjectsController < ApplicationController def destroy return access_denied! unless can?(current_user, :remove_project, project) - project.team.truncate - project.destroy + ::Projects::DestroyService.new(@project, current_user, {}).execute respond_to do |format| format.html { redirect_to root_path } diff --git a/app/services/projects/destroy_service.rb b/app/services/projects/destroy_service.rb index 9f05f390076..7e1d753b021 100644 --- a/app/services/projects/destroy_service.rb +++ b/app/services/projects/destroy_service.rb @@ -1,8 +1,9 @@ module Projects - class UpdateService < BaseService - def execute(role = :default) + class DestroyService < BaseService + def execute return false unless can?(current_user, :remove_project, project) + project.team.truncate project.repository.expire_cache unless project.empty_repo? if project.destroy diff --git a/spec/models/event_spec.rb b/spec/models/event_spec.rb index f415e750dd5..1fdd959da9d 100644 --- a/spec/models/event_spec.rb +++ b/spec/models/event_spec.rb @@ -65,26 +65,4 @@ describe Event do it { @event.branch_name.should == "master" } it { @event.author.should == @user } end - - describe 'Team events' do - let(:user_project) { double.as_null_object } - let(:observer) { UsersProjectObserver.instance } - - before { - Event.should_receive :create - observer.stub(notification: double.as_null_object) - } - - describe "Joined project team" do - it "should create event" do - observer.after_create user_project - end - end - - describe "Left project team" do - it "should create event" do - observer.after_destroy user_project - end - end - end end diff --git a/spec/models/system_hook_spec.rb b/spec/models/system_hook_spec.rb index 51aaccf2267..2b98acdeb6c 100644 --- a/spec/models/system_hook_spec.rb +++ b/spec/models/system_hook_spec.rb @@ -25,13 +25,14 @@ describe SystemHook do end it "project_create hook" do - project = create(:project) + Projects::CreateService.new(create(:user), name: 'empty').execute WebMock.should have_requested(:post, @system_hook.url).with(body: /project_create/).once end it "project_destroy hook" do - project = create(:project) - project.destroy + user = create(:user) + project = create(:empty_project, namespace: user.namespace) + Projects::DestroyService.new(project, user, {}).execute WebMock.should have_requested(:post, @system_hook.url).with(body: /project_destroy/).once end diff --git a/spec/services/projects/create_service_spec.rb b/spec/services/projects/create_service_spec.rb index 3dac0539031..74c23418a28 100644 --- a/spec/services/projects/create_service_spec.rb +++ b/spec/services/projects/create_service_spec.rb @@ -63,11 +63,8 @@ describe Projects::CreateService do @settings.stub(:merge_requests) { true } @settings.stub(:wiki) { true } @settings.stub(:snippets) { true } - stub_const("Settings", Class.new) - @restrictions = double("restrictions") - @restrictions.stub(:restricted_visibility_levels) { [] } - Settings.stub_chain(:gitlab).and_return(@restrictions) - Settings.stub_chain(:gitlab, :default_projects_features).and_return(@settings) + Gitlab.config.gitlab.stub(restricted_visibility_levels: []) + Gitlab.config.gitlab.stub(:default_projects_features).and_return(@settings) end context 'should be public when setting is public' do @@ -106,11 +103,9 @@ describe Projects::CreateService do @settings.stub(:wiki) { true } @settings.stub(:snippets) { true } @settings.stub(:visibility_level) { Gitlab::VisibilityLevel::PRIVATE } - stub_const("Settings", Class.new) - @restrictions = double("restrictions") - @restrictions.stub(:restricted_visibility_levels) { [ Gitlab::VisibilityLevel::PUBLIC ] } - Settings.stub_chain(:gitlab).and_return(@restrictions) - Settings.stub_chain(:gitlab, :default_projects_features).and_return(@settings) + @restrictions = [ Gitlab::VisibilityLevel::PUBLIC ] + Gitlab.config.gitlab.stub(restricted_visibility_levels: @restrictions) + Gitlab.config.gitlab.stub(:default_projects_features).and_return(@settings) end context 'should be private when option is public' do @@ -155,4 +150,3 @@ describe Projects::CreateService do Projects::CreateService.new(user, opts).execute end end - -- GitLab