diff --git a/app/contexts/test_hook_context.rb b/app/contexts/test_hook_context.rb
deleted file mode 100644
index 63eda6c7d0603a6613dc9e54dfa5d0672bf1fdd7..0000000000000000000000000000000000000000
--- a/app/contexts/test_hook_context.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-class TestHookContext < BaseContext
-  def execute
-    hook = project.hooks.find(params[:id])
-    data = GitPushService.new.sample_data(project, current_user)
-    hook.execute(data)
-  end
-end
diff --git a/app/controllers/projects/hooks_controller.rb b/app/controllers/projects/hooks_controller.rb
index 314d87df034eec1bbb19e9b6d44e2a7e288215d0..a863b318324856dc9663f4a64422fe783a24327e 100644
--- a/app/controllers/projects/hooks_controller.rb
+++ b/app/controllers/projects/hooks_controller.rb
@@ -24,15 +24,20 @@ class Projects::HooksController < Projects::ApplicationController
   end
 
   def test
-    TestHookContext.new(project, current_user, params).execute
+    TestHookService.new.execute(hook, current_user)
 
     redirect_to :back
   end
 
   def destroy
-    @hook = @project.hooks.find(params[:id])
-    @hook.destroy
+    hook.destroy
 
     redirect_to project_hooks_path(@project)
   end
+
+  private
+
+  def hook
+    @hook ||= @project.hooks.find(params[:id])
+  end
 end
diff --git a/app/services/test_hook_service.rb b/app/services/test_hook_service.rb
new file mode 100644
index 0000000000000000000000000000000000000000..17d86a7a274d2b4d44212e5e8c73b1f4a29d05c1
--- /dev/null
+++ b/app/services/test_hook_service.rb
@@ -0,0 +1,6 @@
+class TestHookService
+  def execute(hook, current_user)
+    data = GitPushService.new.sample_data(hook.project, current_user)
+    hook.execute(data)
+  end
+end
diff --git a/spec/services/test_hook_service_spec.rb b/spec/services/test_hook_service_spec.rb
new file mode 100644
index 0000000000000000000000000000000000000000..fbe9066096d228719c6c467f3800c7b0aa7b43cf
--- /dev/null
+++ b/spec/services/test_hook_service_spec.rb
@@ -0,0 +1,14 @@
+require 'spec_helper'
+
+describe TestHookService do
+  let (:user)    { create :user }
+  let (:project) { create :project_with_code }
+  let (:hook)    { create :project_hook, project: project }
+
+  describe :execute do
+    it "should execute successfully" do
+      stub_request(:post, hook.url).to_return(status: 200)
+      TestHookService.new.execute(hook, user).should be_true
+    end
+  end
+end