]> source.dussan.org Git - redmine.git/commitdiff
Project identifier is now used in URLs (instead of project id).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 17 Dec 2007 21:00:56 +0000 (21:00 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Mon, 17 Dec 2007 21:00:56 +0000 (21:00 +0000)
URLs with a project id will still be recognized.

git-svn-id: http://redmine.rubyforge.org/svn/trunk@1007 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/project.rb
test/fixtures/projects.yml
test/functional/issues_controller_test.rb
test/functional/projects_controller_test.rb
test/functional/repositories_controller_test.rb
test/functional/versions_controller_test.rb
test/functional/wiki_controller_test.rb
test/functional/wikis_controller_test.rb
test/integration/issues_test.rb

index 84eeefee40342def6451fe4e936089abad069287..60a7a84a46b04123c1d530fa6b8fc2bfde6b7ff3 100644 (file)
@@ -111,6 +111,20 @@ class Project < ActiveRecord::Base
     end
   end
   
+  def self.find(*args)
+    if args.first && args.first.is_a?(String) && !args.first.match(/^\d*$/)
+      project = find_by_identifier(*args)
+      raise ActiveRecord::RecordNotFound, "Couldn't find Project with identifier=#{args.first}" if project.nil?
+      project
+    else
+      super
+    end
+  end
+  def to_param
+    identifier
+  end
+  
   def active?
     self.status == STATUS_ACTIVE
   end
index d3758c9e38abf70ed97cd3b19d0ba40bd7057923..ad5cf4aa2624b06de9667d086824031cfe48f66e 100644 (file)
@@ -41,5 +41,5 @@ projects_004:
   description: eCookbook Subproject 2\r
   homepage: ""\r
   is_public: true\r
-  identifier: subproject1\r
+  identifier: subproject2\r
   parent_id: 1\r
index 638362dbe9e3106113097f1b55c808664261535b..ebcf78f2403e7238341d771253492d0f07895d59 100644 (file)
@@ -144,7 +144,7 @@ class IssuesControllerTest < Test::Unit::TestCase
   def test_destroy
     @request.session[:user_id] = 2
     post :destroy, :id => 1
-    assert_redirected_to 'projects/1/issues'
+    assert_redirected_to 'projects/ecookbook/issues'
     assert_nil Issue.find_by_id(1)
   end
 
index b6ac59141c42858c2af2b868de60b7982bdc1276..556d5d40763f486d2464d8140a6287c1dce0bcc7 100644 (file)
@@ -47,12 +47,20 @@ class ProjectsControllerTest < Test::Unit::TestCase
     assert assigns(:project_tree)[Project.find(1)].include?(Project.find(3))
   end\r
   \r
-  def test_show\r
+  def test_show_by_id\r
     get :show, :id => 1\r
     assert_response :success
     assert_template 'show'\r
     assert_not_nil assigns(:project)\r
   end
+
+  def test_show_by_identifier
+    get :show, :id => 'ecookbook'
+    assert_response :success
+    assert_template 'show'
+    assert_not_nil assigns(:project)
+    assert_equal Project.find_by_identifier('ecookbook'), assigns(:project)
+  end
   
   def test_settings
     @request.session[:user_id] = 2 # manager
@@ -64,7 +72,7 @@ class ProjectsControllerTest < Test::Unit::TestCase
   def test_edit
     @request.session[:user_id] = 2 # manager
     post :edit, :id => 1, :project => {:name => 'Test changed name'}
-    assert_redirected_to 'projects/settings/1'
+    assert_redirected_to 'projects/settings/ecookbook'
     project = Project.find(1)
     assert_equal 'Test changed name', project.name
   end
@@ -104,7 +112,7 @@ class ProjectsControllerTest < Test::Unit::TestCase
   def test_move_issues_to_another_project
     @request.session[:user_id] = 1
     post :move_issues, :id => 1, :issue_ids => [1, 2], :new_project_id => 2
-    assert_redirected_to 'projects/1/issues'
+    assert_redirected_to 'projects/ecookbook/issues'
     assert_equal 2, Issue.find(1).project_id
     assert_equal 2, Issue.find(2).project_id
   end
@@ -112,7 +120,7 @@ class ProjectsControllerTest < Test::Unit::TestCase
   def test_move_issues_to_another_tracker
     @request.session[:user_id] = 1
     post :move_issues, :id => 1, :issue_ids => [1, 2], :new_tracker_id => 3
-    assert_redirected_to 'projects/1/issues'
+    assert_redirected_to 'projects/ecookbook/issues'
     assert_equal 3, Issue.find(1).tracker_id
     assert_equal 3, Issue.find(2).tracker_id
   end
@@ -242,7 +250,7 @@ class ProjectsControllerTest < Test::Unit::TestCase
     assert_response :success
     assert_template 'add_issue'
     post :add_issue, :id => 1, :issue => {:tracker_id => 1, :subject => 'This is the test_add_issue issue', :description => 'This is the description', :priority_id => 5}
-    assert_redirected_to 'projects/1/issues'
+    assert_redirected_to 'projects/ecookbook/issues'
     assert Issue.find_by_subject('This is the test_add_issue issue')
   end
   
index 2f04595059fdb9ff3372ef2a2d9e7fc762931719..47455dc55e1330f6e1a689d847e1d72db6c4e3b1 100644 (file)
@@ -43,10 +43,10 @@ class RepositoriesControllerTest < Test::Unit::TestCase
     assert_response :success
     assert_template 'revision'
     assert_no_tag :tag => "div", :attributes => { :class => "contextual" },
-      :child => { :tag => "a", :attributes => { :href => '/repositories/revision/1?rev=0'}
+      :child => { :tag => "a", :attributes => { :href => '/repositories/revision/ecookbook?rev=0'}
     }
     assert_tag :tag => "div", :attributes => { :class => "contextual" },
-        :child => { :tag => "a", :attributes => { :href => '/repositories/revision/1?rev=2'}
+        :child => { :tag => "a", :attributes => { :href => '/repositories/revision/ecookbook?rev=2'}
     }
   end
 
index 17ebd35181e25d509af2ad6b374f254e96df13f3..3477c5edd55113f60aa75640f83e1185214ff810 100644 (file)
@@ -52,7 +52,7 @@ class VersionsControllerTest < Test::Unit::TestCase
     post :edit, :id => 2, 
                 :version => { :name => 'New version name', 
                               :effective_date => Date.today.strftime("%Y-%m-%d")}
-    assert_redirected_to 'projects/settings/1'
+    assert_redirected_to 'projects/settings/ecookbook'
     version = Version.find(2)
     assert_equal 'New version name', version.name
     assert_equal Date.today, version.effective_date
@@ -61,7 +61,7 @@ class VersionsControllerTest < Test::Unit::TestCase
   def test_destroy
     @request.session[:user_id] = 2
     post :destroy, :id => 2
-    assert_redirected_to 'projects/settings/1'
+    assert_redirected_to 'projects/settings/ecookbook'
     assert_nil Version.find_by_id(2)
   end
   
index 6ee5ab276d22180741993655e2d554dcf47ef5f0..043b0e805408154cfe9c56a1e4f575d48a1f5aaa 100644 (file)
@@ -64,7 +64,7 @@ class WikiControllerTest < Test::Unit::TestCase
                 :content => {:comments => 'Created the page',
                              :text => "h1. New page\n\nThis is a new page",
                              :version => 0}
-    assert_redirected_to 'wiki/1/New_page'
+    assert_redirected_to 'wiki/ecookbook/New_page'
     page = Project.find(1).wiki.find_page('New page')
     assert !page.new_record?
     assert_not_nil page.content
@@ -103,7 +103,7 @@ class WikiControllerTest < Test::Unit::TestCase
     post :rename, :id => 1, :page => 'Another_page',
                             :wiki_page => { :title => 'Another renamed page',
                                             :redirect_existing_links => 1 }
-    assert_redirected_to 'wiki/1/Another_renamed_page'
+    assert_redirected_to 'wiki/ecookbook/Another_renamed_page'
     wiki = Project.find(1).wiki
     # Check redirects
     assert_not_nil wiki.find_page('Another page')
@@ -115,7 +115,7 @@ class WikiControllerTest < Test::Unit::TestCase
     post :rename, :id => 1, :page => 'Another_page',
                             :wiki_page => { :title => 'Another renamed page',
                                             :redirect_existing_links => "0" }
-    assert_redirected_to 'wiki/1/Another_renamed_page'
+    assert_redirected_to 'wiki/ecookbook/Another_renamed_page'
     wiki = Project.find(1).wiki
     # Check that there's no redirects
     assert_nil wiki.find_page('Another page')
@@ -124,17 +124,17 @@ class WikiControllerTest < Test::Unit::TestCase
   def test_destroy
     @request.session[:user_id] = 2
     post :destroy, :id => 1, :page => 'CookBook_documentation'
-    assert_redirected_to 'wiki/1/Page_index/special'
+    assert_redirected_to 'wiki/ecookbook/Page_index/special'
   end
   
   def test_page_index
-    get :special, :id => 1, :page => 'Page_index'
+    get :special, :id => 'ecookbook', :page => 'Page_index'
     assert_response :success
     assert_template 'special_page_index'
     pages = assigns(:pages)
     assert_not_nil pages
     assert_equal 2, pages.size
-    assert_tag :tag => 'a', :attributes => { :href => '/wiki/1/CookBook_documentation' },
+    assert_tag :tag => 'a', :attributes => { :href => '/wiki/ecookbook/CookBook_documentation' },
                             :content => /CookBook documentation/
   end
   
index 93ad7e32dd96d5368138eeff1b67586489a12337..3e51314a58d1ab51462fe39895e5b95a58f7acf1 100644 (file)
@@ -44,7 +44,7 @@ class WikisControllerTest < Test::Unit::TestCase
   def test_destroy
     @request.session[:user_id] = 1
     post :destroy, :id => 1, :confirm => 1
-    assert_redirected_to 'projects/settings/1'
+    assert_redirected_to 'projects/settings/ecookbook'
     assert_nil Project.find(1).wiki
   end
   
index eac407b1b46c685ecd0562aff8b6b6bfd651c572..702fbc02654d325a39fb6c015b47a04f6ef038ab 100644 (file)
@@ -24,7 +24,7 @@ class IssuesTest < ActionController::IntegrationTest
     assert_kind_of Issue, issue
 
     # check redirection
-    assert_redirected_to "projects/1/issues"
+    assert_redirected_to "projects/ecookbook/issues"
     follow_redirect!
     assert assigns(:issues).include?(issue)