diff --git a/app/controllers/previews_controller.rb b/app/controllers/previews_controller.rb
index 744daa7c8..7c7b3f172 100644
--- a/app/controllers/previews_controller.rb
+++ b/app/controllers/previews_controller.rb
@@ -47,7 +47,7 @@ class PreviewsController < ApplicationController
 
   def find_project
     project_id = (params[:issue] && params[:issue][:project_id]) || params[:project_id]
-    @project = Project.find(project_id)
+    @project = Project.find(project_id) if project_id.present?
   rescue ActiveRecord::RecordNotFound
     render_404
   end
diff --git a/test/functional/previews_controller_test.rb b/test/functional/previews_controller_test.rb
index 0dc537ccf..0ccc8f694 100644
--- a/test/functional/previews_controller_test.rb
+++ b/test/functional/previews_controller_test.rb
@@ -109,6 +109,30 @@ class PreviewsControllerTest < Redmine::ControllerTest
     assert_select 'p', :text => /News description/
   end
 
+  def test_preview_new_news_without_project_should_be_successful
+    @request.session[:user_id] = 2
+    post(
+      :news,
+      :params => {
+        :text => 'News description',
+      }
+    )
+    assert_response :success
+    assert_select 'p', :text => /News description/
+  end
+
+  def test_preview_news_with_invalid_project_should_return_404
+    @request.session[:user_id] = 2
+    post(
+      :news,
+      :params => {
+        :project_id => 'invalid',
+        :text => 'News description',
+      }
+    )
+    assert_response :not_found
+  end
+
   def test_preview_existing_news
     get(
       :news,
