diff options
| -rw-r--r-- | app/models/ability.rb | 5 | ||||
| -rw-r--r-- | spec/services/git_push_service_spec.rb | 15 | 
2 files changed, 13 insertions, 7 deletions
| diff --git a/app/models/ability.rb b/app/models/ability.rb index f34554d557c..fe9e0aab717 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -9,6 +9,7 @@ class Ability        when CommitStatus then commit_status_abilities(user, subject)        when Project then project_abilities(user, subject)        when Issue then issue_abilities(user, subject) +      when ExternalIssue then external_issue_abilities(user, subject)        when Note then note_abilities(user, subject)        when ProjectSnippet then project_snippet_abilities(user, subject)        when PersonalSnippet then personal_snippet_abilities(user, subject) @@ -424,6 +425,10 @@ class Ability        end      end +    def external_issue_abilities(user, subject) +      project_abilities(user, subject.project) +    end +      private      def named_abilities(name) diff --git a/spec/services/git_push_service_spec.rb b/spec/services/git_push_service_spec.rb index f5c51e46e8b..82813cee227 100644 --- a/spec/services/git_push_service_spec.rb +++ b/spec/services/git_push_service_spec.rb @@ -271,22 +271,24 @@ describe GitPushService, services: true do        allow(project.repository).to receive(:commits_between).          and_return([closing_commit]) + +      project.team << [commit_author, :master]      end      context "to default branches" do        it "closes issues" do -        execute_service(project, user, @oldrev, @newrev, @ref ) +        execute_service(project, commit_author, @oldrev, @newrev, @ref )          expect(Issue.find(issue.id)).to be_closed        end        it "adds a note indicating that the issue is now closed" do          expect(SystemNoteService).to receive(:change_status).with(issue, project, commit_author, "closed", closing_commit) -        execute_service(project, user, @oldrev, @newrev, @ref ) +        execute_service(project, commit_author, @oldrev, @newrev, @ref )        end        it "doesn't create additional cross-reference notes" do          expect(SystemNoteService).not_to receive(:cross_reference) -        execute_service(project, user, @oldrev, @newrev, @ref ) +        execute_service(project, commit_author, @oldrev, @newrev, @ref )        end        it "doesn't close issues when external issue tracker is in use" do @@ -294,7 +296,7 @@ describe GitPushService, services: true do          # The push still shouldn't create cross-reference notes.          expect do -          execute_service(project, user, @oldrev, @newrev,  'refs/heads/hurf' ) +          execute_service(project, commit_author, @oldrev, @newrev,  'refs/heads/hurf' )          end.not_to change { Note.where(project_id: project.id, system: true).count }        end      end @@ -316,7 +318,6 @@ describe GitPushService, services: true do        end      end -    # EE-only tests      context "for jira issue tracker" do        include JiraServiceHelper @@ -366,7 +367,7 @@ describe GitPushService, services: true do              }            }.to_json -          execute_service(project, user, @oldrev, @newrev, @ref ) +          execute_service(project, commit_author, @oldrev, @newrev, @ref )            expect(WebMock).to have_requested(:post, jira_api_transition_url).with(              body: transition_body            ).once @@ -377,7 +378,7 @@ describe GitPushService, services: true do              body: "Issue solved with [#{closing_commit.id}|http://localhost/#{project.path_with_namespace}/commit/#{closing_commit.id}]."            }.to_json -          execute_service(project, user, @oldrev, @newrev, @ref ) +          execute_service(project, commit_author, @oldrev, @newrev, @ref )            expect(WebMock).to have_requested(:post, jira_api_comment_url).with(              body: comment_body            ).once | 
