]> source.dussan.org Git - redmine.git/commitdiff
Resourcified repositories for CRUD operations to prepare for multiple SCM per project...
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 15 Jan 2012 14:23:06 +0000 (14:23 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 15 Jan 2012 14:23:06 +0000 (14:23 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@8648 e93f8b46-1217-0410-a6f0-8f06a7374b81

68 files changed:
app/controllers/projects_controller.rb
app/controllers/repositories_controller.rb
app/helpers/projects_helper.rb
app/helpers/repositories_helper.rb
app/models/repository.rb
app/views/projects/settings/_repositories.html.erb [new file with mode: 0644]
app/views/repositories/_form.html.erb [new file with mode: 0644]
app/views/repositories/edit.html.erb [new file with mode: 0644]
app/views/repositories/new.html.erb [new file with mode: 0644]
config/locales/ar.yml
config/locales/bg.yml
config/locales/bs.yml
config/locales/ca.yml
config/locales/cs.yml
config/locales/da.yml
config/locales/de.yml
config/locales/el.yml
config/locales/en-GB.yml
config/locales/en.yml
config/locales/es.yml
config/locales/eu.yml
config/locales/fa.yml
config/locales/fi.yml
config/locales/fr.yml
config/locales/gl.yml
config/locales/he.yml
config/locales/hr.yml
config/locales/hu.yml
config/locales/id.yml
config/locales/it.yml
config/locales/ja.yml
config/locales/ko.yml
config/locales/lt.yml
config/locales/lv.yml
config/locales/mk.yml
config/locales/mn.yml
config/locales/nl.yml
config/locales/no.yml
config/locales/pl.yml
config/locales/pt-BR.yml
config/locales/pt.yml
config/locales/ro.yml
config/locales/ru.yml
config/locales/sk.yml
config/locales/sl.yml
config/locales/sr-YU.yml
config/locales/sr.yml
config/locales/sv.yml
config/locales/th.yml
config/locales/tr.yml
config/locales/uk.yml
config/locales/vi.yml
config/locales/zh-TW.yml
config/locales/zh.yml
config/routes.rb
lib/redmine.rb
lib/tasks/testing.rake
test/fixtures/enabled_modules.yml
test/functional/repositories_bazaar_controller_test.rb
test/functional/repositories_controller_test.rb
test/functional/repositories_cvs_controller_test.rb
test/functional/repositories_darcs_controller_test.rb
test/functional/repositories_filesystem_controller_test.rb
test/functional/repositories_git_controller_test.rb
test/functional/repositories_mercurial_controller_test.rb
test/functional/repositories_subversion_controller_test.rb
test/functional/sys_controller_test.rb
test/integration/routing/repositories_test.rb

index e934f7878f19ed286279341fd3497c79968a6838..44e77bc620ee449e68594e43d1fc95b06742eb00 100644 (file)
@@ -176,7 +176,6 @@ class ProjectsController < ApplicationController
     @issue_category ||= IssueCategory.new
     @member ||= @project.members.new
     @trackers = Tracker.all
-    @repository ||= @project.repository
     @wiki ||= @project.wiki
   end
 
index ad7d2df364f36385770143dd02de54d946971029..0a95c6adee45be0ce05486b4c8b4be2149aa4e30 100644 (file)
@@ -24,44 +24,45 @@ class InvalidRevisionParam < Exception; end
 
 class RepositoriesController < ApplicationController
   menu_item :repository
-  menu_item :settings, :only => :edit
+  menu_item :settings, :only => [:new, :create, :edit, :update, :destroy, :committers]
   default_search_scope :changesets
 
-  before_filter :find_repository, :except => :edit
-  before_filter :find_project, :only => :edit
+  before_filter :find_project_by_project_id, :only => [:new, :create]
+  before_filter :check_repository_uniqueness, :only => [:new, :create]
+  before_filter :find_repository, :only => [:edit, :update, :destroy, :committers]
+  before_filter :find_project_repository, :except => [:new, :create, :edit, :update, :destroy, :committers]
   before_filter :authorize
   accept_rss_auth :revisions
 
   rescue_from Redmine::Scm::Adapters::CommandFailed, :with => :show_error_command_failed
 
-  def edit
-    @repository = @project.repository
-    if !@repository && !params[:repository_scm].blank?
-      @repository = Repository.factory(params[:repository_scm])
-      @repository.project = @project if @repository
-    end
-    if request.post? && @repository
-      p1 = params[:repository]
-      p       = {}
-      p_extra = {}
-      p1.each do |k, v|
-        if k =~ /^extra_/
-          p_extra[k] = v
-        else
-          p[k] = v
-        end
-      end
-      @repository.attributes = p
-      @repository.merge_extra_info(p_extra)
-      @repository.save
+  def new
+    scm = params[:repository_scm] || Redmine::Scm::Base.all.first
+    @repository = Repository.factory(scm)
+    @repository.project = @project
+    render :layout => !request.xhr?
+  end
+
+  def create
+    @repository = Repository.factory(params[:repository_scm], params[:repository])
+    @repository.project = @project
+    if request.post? && @repository.save
+      redirect_to settings_project_path(@project, :tab => 'repositories')
+    else
+      render :action => 'new'
     end
-    render(:update) do |page|
-      page.replace_html "tab-content-repository",
-                        :partial => 'projects/settings/repository'
-      if @repository && !@project.repository
-        @project.reload # needed to reload association
-        page.replace_html "main-menu", render_main_menu(@project)
-      end
+  end
+
+  def edit
+  end
+
+  def update
+    @repository.attributes = params[:repository]
+    @repository.project = @project
+    if request.put? && @repository.save
+      redirect_to settings_project_path(@project, :tab => 'repositories')
+    else
+      render :action => 'edit'
     end
   end
 
@@ -76,16 +77,13 @@ class RepositoriesController < ApplicationController
       # Build a hash with repository usernames as keys and corresponding user ids as values
       @repository.committer_ids = params[:committers].values.inject({}) {|h, c| h[c.first] = c.last; h}
       flash[:notice] = l(:notice_successful_update)
-      redirect_to :action => 'committers', :id => @project
+      redirect_to settings_project_path(@project, :tab => 'repositories')
     end
   end
 
   def destroy
-    @repository.destroy
-    redirect_to :controller => 'projects',
-                :action     => 'settings',
-                :id         => @project,
-                :tab        => 'repository'
+    @repository.destroy if request.delete?
+    redirect_to settings_project_path(@project, :tab => 'repositories')
   end
 
   def show
@@ -250,9 +248,23 @@ class RepositoriesController < ApplicationController
 
   private
 
+  def find_repository
+    @repository = Repository.find(params[:id])
+    @project = @repository.project
+  rescue ActiveRecord::RecordNotFound
+    render_404
+  end
+
+  # TODO: remove it when multiple SCM support is added
+  def check_repository_uniqueness
+    if @project.repository
+      redirect_to settings_project_path(@project, :tab => 'repositories')
+    end
+  end
+
   REV_PARAM_RE = %r{\A[a-f0-9]*\Z}i
 
-  def find_repository
+  def find_project_repository
     @project = Project.find(params[:id])
     @repository = @project.repository
     (render_404; return false) unless @repository
index 70b12acce12d6816c528c0dda545f56a22e3c276..8b7e22fd81babdf80ecdb8f0858ec1074c2342f0 100644 (file)
@@ -30,7 +30,7 @@ module ProjectsHelper
             {:name => 'versions', :action => :manage_versions, :partial => 'projects/settings/versions', :label => :label_version_plural},
             {:name => 'categories', :action => :manage_categories, :partial => 'projects/settings/issue_categories', :label => :label_issue_category_plural},
             {:name => 'wiki', :action => :manage_wiki, :partial => 'projects/settings/wiki', :label => :label_wiki},
-            {:name => 'repository', :action => :manage_repository, :partial => 'projects/settings/repository', :label => :label_repository},
+            {:name => 'repositories', :action => :manage_repository, :partial => 'projects/settings/repositories', :label => :label_repository},
             {:name => 'boards', :action => :manage_boards, :partial => 'projects/settings/boards', :label => :label_board_plural},
             {:name => 'activities', :action => :manage_project_activities, :partial => 'projects/settings/activities', :label => :enumeration_activities}
             ]
index 2a4e65710dbc7da04bc3a71383eabaf5706d15d7..f3b229f2c88108eab2f2c96e00dddf3b8cab6d61 100644 (file)
@@ -139,13 +139,10 @@ module RepositoriesHelper
                options_for_select(scm_options, repository.class.name.demodulize),
                :disabled => (repository && !repository.new_record?),
                :onchange => remote_function(
-                  :url => {
-                      :controller => 'repositories',
-                      :action     => 'edit',
-                      :id         => @project
-                   },
-               :method => :get,
-               :with   => "Form.serialize(this.form)")
+                 :url => new_project_repository_path(@project),
+                 :method => :get,
+                 :update => 'content',
+                 :with   => "Form.serialize(this.form)")
              )
   end
 
index 5130cc22077c3e4182eb0072f9ee09ffc557b9a8..c231a8724068939d3cb14775d8bdc2d8e0bcd45a 100644 (file)
@@ -48,6 +48,26 @@ class Repository < ActiveRecord::Base
     super(attr_name, *args)
   end
 
+  alias :attributes_without_extra_info= :attributes=
+  def attributes=(new_attributes, guard_protected_attributes = true)
+    return if new_attributes.nil?
+    attributes = new_attributes.dup
+    attributes.stringify_keys!
+
+    p       = {}
+    p_extra = {}
+    attributes.each do |k, v|
+      if k =~ /^extra_/
+        p_extra[k] = v
+      else
+        p[k] = v
+      end
+    end
+
+    send :attributes_without_extra_info=, p, guard_protected_attributes
+    merge_extra_info(p_extra)
+  end
+
   # Removes leading and trailing whitespace
   def url=(arg)
     write_attribute(:url, arg ? arg.to_s.strip : nil)
diff --git a/app/views/projects/settings/_repositories.html.erb b/app/views/projects/settings/_repositories.html.erb
new file mode 100644 (file)
index 0000000..d74220b
--- /dev/null
@@ -0,0 +1,36 @@
+<% if @project.repository %>
+<table class="list">
+  <thead>
+       <tr>
+      <th><%= l(:label_scm) %></th>
+      <th><%= l(:label_repository) %></th>
+      <th></th>
+    </tr>
+       </thead>
+  <tbody>
+  <% repository = @project.repository %>
+         <tr class="<%= cycle 'odd', 'even' %>">
+               <td><%=h repository.scm_name %></td>
+                       <td><%=h repository.url %></td>
+                       <td class="buttons">
+                       <% if User.current.allowed_to?(:manage_repository, @project) %>
+                               <%= link_to(l(:label_user_plural), committers_repository_path(repository),
+             :class => 'icon icon-user') %>
+        <%= link_to(l(:button_edit), edit_repository_path(repository),
+             :class => 'icon icon-edit') %>
+        <%= link_to(l(:button_delete), repository_path(repository),
+            :confirm => l(:text_are_you_sure),
+            :method  => :delete,
+            :class   => 'icon icon-del') %>
+                       <% end %>
+                       </td>
+         </tr>
+  </tbody>
+</table>
+<% else %>
+<p class="nodata"><%= l(:label_no_data) %></p>
+<% end %>
+
+<% if @project.repository.nil? && User.current.allowed_to?(:manage_repository, @project) %>
+  <p><%= link_to l(:label_repository_new), new_project_repository_path(@project), :class => 'icon icon-add' %></p>
+<% end %>
diff --git a/app/views/repositories/_form.html.erb b/app/views/repositories/_form.html.erb
new file mode 100644 (file)
index 0000000..bd1f613
--- /dev/null
@@ -0,0 +1,22 @@
+<%= error_messages_for 'repository' %>
+
+<div class="box tabular">
+<p>
+<%= label_tag('repository_scm', l(:label_scm)) %><%= scm_select_tag(@repository) %>
+<% if @repository && ! @repository.class.scm_available %>
+  <br />
+  <em><%= content_tag 'span', l(:text_scm_command_not_available), :class => 'error' %></em>
+<% end %>
+</p>
+
+<% button_disabled = true %>
+<% if @repository %>
+<%   button_disabled = ! @repository.class.scm_available %>
+<%=    repository_field_tags(f, @repository)%>
+<% end %>
+</div>
+
+<p>
+  <%= submit_tag(@repository.new_record? ? l(:button_create) : l(:button_save), :disabled => button_disabled) %>
+       <%= link_to l(:button_cancel), settings_project_path(@project, :tab => 'repositories') %>
+</p>
\ No newline at end of file
diff --git a/app/views/repositories/edit.html.erb b/app/views/repositories/edit.html.erb
new file mode 100644 (file)
index 0000000..ffc42f3
--- /dev/null
@@ -0,0 +1,5 @@
+<h2><%= l(:label_repository) %></h2>
+
+<% labelled_form_for :repository, @repository, :url => repository_path(@path), :html => {:method => :put} do |f| %>
+  <%= render :partial => 'form', :locals => {:f => f} %>
+<% end %>
\ No newline at end of file
diff --git a/app/views/repositories/new.html.erb b/app/views/repositories/new.html.erb
new file mode 100644 (file)
index 0000000..9964042
--- /dev/null
@@ -0,0 +1,5 @@
+<h2><%= l(:label_repository_new) %></h2>
+
+<% labelled_form_for :repository, @repository, :url => project_repositories_path(@project) do |f| %>
+  <%= render :partial => 'form', :locals => {:f => f} %>
+<% end %>
index 93cf9615e5af24e25b59b7aaf611e3810b23b8c1..a96f10eeee50652b5dd78f2d4bc48acae1eb3207 100644 (file)
@@ -1011,3 +1011,4 @@ ar:
     zero:  0 قضية
     one:   1 قضية
     other: "%{count} قضايا"
+  label_repository_new: New repository
index e3239bda571ab165969f5e72598fd0a348e939b0..06d70e604555c2145ef8c91459be75c87a233105 100644 (file)
@@ -1009,3 +1009,4 @@ bg:
   description_date_range_interval: Изберете диапазон чрез задаване на начална и крайна дати
   description_date_from: Въведете начална дата
   description_date_to: Въведете крайна дата
+  label_repository_new: New repository
index eda2d82d3341ad9b694a6f4a02fd874df4f6e5f9..73e973f0da033a521849da2fb6193d73d255f442 100644 (file)
@@ -1025,3 +1025,4 @@ bs:
     zero:  0 aktivnost
     one:   1 aktivnost
     other: "%{count} aktivnosti"
+  label_repository_new: New repository
index 37fb14fd3de9d066a8406c55296307079f2ca0f1..605ca390088bfd3cb052ae10cf6417d2401402eb 100644 (file)
@@ -1013,3 +1013,4 @@ ca:
     zero:  0 assumpte
     one:   1 assumpte
     other: "%{count} assumptes"
+  label_repository_new: New repository
index 7e07ee384a419f6d65b1fd19f8939d7a4a89664a..0c9f9b646652760f11e90d04560cbc8df7a54b09 100644 (file)
@@ -1014,3 +1014,4 @@ cs:
     zero:  0 Úkol
     one:   1 Úkol
     other: "%{count} Úkoly"
+  label_repository_new: New repository
index 8cfa8a873c958ae8722b1716e7b94c273bc6b3b5..c4db5bfe98578171a3c303b9c03e921f88527b54 100644 (file)
@@ -1028,3 +1028,4 @@ da:
     zero:  0 sag
     one:   1 sag
     other: "%{count} sager"
+  label_repository_new: New repository
index 6e8ac78d50f7f194c90aaff57c576fb33d18cfaa..b5769d1ca9e9a0741d6b77b0050a165321673be7 100644 (file)
@@ -1031,3 +1031,4 @@ de:
     zero:  0 ticket
     one:   1 ticket
     other: "%{count} tickets"
+  label_repository_new: New repository
index 65fac0b0300f54ed09366d5c62ad7840a6ab9803..f2afb3361fdc89406a9317724f9abc7f61457bd0 100644 (file)
@@ -1011,3 +1011,4 @@ el:
     zero:  0 Θέμα
     one:   1 Θέμα
     other: "%{count} Θέματα"
+  label_repository_new: New repository
index fa5c945814aae4898e8a710e7f3d4cce3edd1ad9..c13ce907cfd26b03a97ab37b944ecc7d8531848f 100644 (file)
@@ -1013,3 +1013,4 @@ en-GB:
     zero:  0 issue
     one:   1 issue
     other: "%{count} issues"
+  label_repository_new: New repository
index d7e9b1e3d9c5a32c3a8d664bb5ae0712e4510298..489011886c33dcef262bb10fca507c24409db2af 100644 (file)
@@ -650,6 +650,7 @@ en:
   label_not_contains: doesn't contain
   label_day_plural: days
   label_repository: Repository
+  label_repository_new: New repository
   label_repository_plural: Repositories
   label_browse: Browse
   label_modification: "%{count} change"
index 83a8db9044ac6af6f0daff3c0c3b61643c3a3a6f..8402b28837bce0602e87c4cac3f883e4555fe294 100644 (file)
@@ -1048,3 +1048,4 @@ es:
     zero:  0 petición
     one:   1 petición
     other: "%{count} peticiones"
+  label_repository_new: New repository
index fae6cde5c3e4ca83bae45d10d5527197c2a40691..d00434c46e0bda76a56abb7beb52aa60b2c6641b 100644 (file)
@@ -1014,3 +1014,4 @@ eu:
     zero:  0 zeregina
     one:   1 zeregina
     other: "%{count} zereginak"
+  label_repository_new: New repository
index 56e2fdf758fc405de91b00121c9e646a9298576f..d0b6da5905a50ca159f3f55348a781ac11874631 100644 (file)
@@ -1013,3 +1013,4 @@ fa:
     zero:  0 پیامد
     one:   1 پیامد
     other: "%{count} پیامد"
+  label_repository_new: New repository
index fff5aa4d4d4e3aa1053c8fb375b835850da5f303..2de73b69dfd037dfb7ac6a279024410020e97aac 100644 (file)
@@ -1032,3 +1032,4 @@ fi:
     zero:  0 tapahtuma
     one:   1 tapahtuma
     other: "%{count} tapahtumat"
+  label_repository_new: New repository
index 4388317a630d0f79c5fe21968feaf9a4196b1286..7f04e5cb6e348178f8c79fecc3a9dd4fa72826de 100644 (file)
@@ -640,6 +640,7 @@ fr:
   label_not_contains: ne contient pas
   label_day_plural: jours
   label_repository: Dépôt
+  label_repository_new: Nouveau dépôt
   label_repository_plural: Dépôts
   label_browse: Parcourir
   label_modification: "%{count} modification"
index 10377c436b71dc1f094c118e1f7d39073168a381..ebed2cc836fcf6c684423dab02abc226e748cc3f 100644 (file)
@@ -1022,3 +1022,4 @@ gl:
     zero:  0 petición
     one:   1 petición
     other: "%{count} peticións"
+  label_repository_new: New repository
index 316e688deed09860c2df1623061297b3b5e6cf5c..c0950a1a6ca05451109624780692d621d25ae8b9 100644 (file)
@@ -1016,3 +1016,4 @@ he:
     zero:  0 נושא
     one:   1 נושא
     other: "%{count} נושאים"
+  label_repository_new: New repository
index 71c9f7e2d62a4cca964fdf43b1514ef8cc6d5799..8a47cc9a5aae05f86f91fbc9335d13883caf044d 100644 (file)
@@ -1017,3 +1017,4 @@ hr:
     zero:  0 predmet
     one:   1 predmet
     other: "%{count} predmeti"
+  label_repository_new: New repository
index 002fcd64b81739e776bf78aa0ccbed35d459663c..7916d1f9c8c8b7882040c0dd6f22bce64d5170e9 100644 (file)
     zero:  0 feladat
     one:   1 feladat
     other: "%{count} feladatok"
+  label_repository_new: New repository
index 79eabb4d82f1023bbed8804cf366848d46d20a6e..cf48cf3aa1d88a6222442b09a76e11d314c41d7d 100644 (file)
@@ -1017,3 +1017,4 @@ id:
     zero:  0 masalah
     one:   1 masalah
     other: "%{count} masalah"
+  label_repository_new: New repository
index 6b63a1367614b8a3270b7d906e710fe041f8a384..fe5aac4e2ca628cb21985ca272d43d7e9f39dd69 100644 (file)
@@ -1012,3 +1012,4 @@ it:
     zero:  0 segnalazione
     one:   1 segnalazione
     other: "%{count} segnalazioni"
+  label_repository_new: New repository
index 29d2cd1da1e0a9fad50c77caac351abe0b85c12a..ef4d7490ca10576a5fb9b8925f25239ed8fa67c4 100644 (file)
@@ -1041,3 +1041,4 @@ ja:
     zero:  0 チケット
     one:   1 チケット
     other: "%{count} チケット"
+  label_repository_new: New repository
index fa9d3347cce5ef21f64dd249e5dc016eb21d94bf..c2a9c61dd51c7ebaef04df89a71496a1e3f8c4c8 100644 (file)
@@ -1063,3 +1063,4 @@ ko:
     zero:  0 일감
     one:   1 일감
     other: "%{count} 일감"
+  label_repository_new: New repository
index e435abd06a20cb385b1dec686e2dc00a9063552b..00c1d6be46305d34b24938a379e430075b3a67fa 100644 (file)
@@ -1071,3 +1071,4 @@ lt:
     zero:  0 darbas
     one:   1 darbas
     other: "%{count} darbai"
+  label_repository_new: New repository
index 3a7a8e2e705a0de9fbb0b0693c551760b958691c..6ff0bbd5fb46d780b7f535f28757b58500c1ac68 100644 (file)
@@ -1005,3 +1005,4 @@ lv:
     zero:  0 uzdevums
     one:   1 uzdevums
     other: "%{count} uzdevumi"
+  label_repository_new: New repository
index 6eab875f3e5d3b4e8062cc8ee016888ccd494452..67742839b0fc81586cc8b63aa8ed9c9041d9464a 100644 (file)
@@ -1011,3 +1011,4 @@ mk:
     zero:  0 Задача
     one:   1 Задача
     other: "%{count} Задачи"
+  label_repository_new: New repository
index 6477849d4e66f946c9e5bacd81b90e85ecf80cd1..2352dd407313f966feca1b91d581d3d26c1ec7f7 100644 (file)
@@ -1011,3 +1011,4 @@ mn:
     zero:  0 Асуудал
     one:   1 Асуудал
     other: "%{count} Асуудлууд"
+  label_repository_new: New repository
index 547f2877b11cc9d3b7cfdc88f51f2bdcace063a0..6ad9ebcc2d92768b585ce302bfce967aebe50a29 100644 (file)
@@ -993,3 +993,4 @@ nl:
     zero:  0 issue
     one:   1 issue
     other: "%{count} issues"
+  label_repository_new: New repository
index ae17d9f04e30271fca8f376b517e29b6aff3ed48..b0d1d609010c9e8cfe9ba8ee497df41c46f52612 100644 (file)
     zero:  0 sak
     one:   1 sak
     other: "%{count} saker"
+  label_repository_new: New repository
index 5026294e54d34c57417a46e40176fa47570061c7..23339089054cba2416b69241b156443b0cd9cb14 100644 (file)
@@ -1028,3 +1028,4 @@ pl:
     zero:  0 zagadnienie
     one:   1 zagadnienie
     other: "%{count} zagadnienia"
+  label_repository_new: New repository
index f4fc9c6ed7f97cf07f3752e2906c61bbf421e5c9..907066ae01e8f75865a8153923bf8026ca50239a 100644 (file)
@@ -1034,3 +1034,4 @@ pt-BR:
     zero:  0 tarefa
     one:   1 tarefa
     other: "%{count} tarefas"
+  label_repository_new: New repository
index b1d84893c4b320340872845eb5ec1d04526e6d6c..839221637ba294b9387fc9163ff4192cd360a9c0 100644 (file)
@@ -1016,3 +1016,4 @@ pt:
     zero:  0 tarefa
     one:   1 tarefa
     other: "%{count} tarefas"
+  label_repository_new: New repository
index 4f77e2547a6ee6fec2ba86581ac42f0e810897c9..e33ab4cd819a4ffa8e6620e624b33957a701e723 100644 (file)
@@ -1003,3 +1003,4 @@ ro:
     zero:  0 tichet
     one:   1 tichet
     other: "%{count} tichete"
+  label_repository_new: New repository
index ada1264bd1cf0041396461bc80d8e1b6a43238e0..510e25ce9818593820f51df3a19fb1c79d2612a5 100644 (file)
@@ -1124,3 +1124,4 @@ ru:
     zero:  0 Задача
     one:   1 Задача
     other: "%{count} Задачи"
+  label_repository_new: New repository
index c96a31e5563068a8df1f87b707c152e1e86664db..2d13ff2d0eeff46e046849b3db57cdce56e8d211 100644 (file)
@@ -1006,3 +1006,4 @@ sk:
     zero:  0 Úloha
     one:   1 Úloha
     other: "%{count} Úlohy"
+  label_repository_new: New repository
index a45f30b207c03516ebf5fa2f0fbc12c1d2a0e9cd..bb48005422d80b803910b7cbd78fc5023a13340d 100644 (file)
@@ -1011,3 +1011,4 @@ sl:
     zero:  0 zahtevek
     one:   1 zahtevek
     other: "%{count} zahtevki"
+  label_repository_new: New repository
index 0a6e10dad146bf1a148ac33c43bfb93543a78999..c86a5b26fff26a420c7d089d203d7aacfb05ea74 100644 (file)
@@ -1011,3 +1011,4 @@ sr-YU:
     zero:  0 problem
     one:   1 problem
     other: "%{count} problemi"
+  label_repository_new: New repository
index d558097df8cb72002a3e3710dd4369936796161d..79145ddc92603ec5f14e2bbba9d629dd076cd7b7 100644 (file)
@@ -1012,3 +1012,4 @@ sr:
     zero:  0 Проблем
     one:   1 Проблем
     other: "%{count} Проблеми"
+  label_repository_new: New repository
index ca7c00bbf92f5aa3a1f2ac365977f8da27e11d8d..300ee5be83edacf70f14aee4352561445e433937 100644 (file)
@@ -1052,3 +1052,4 @@ sv:
     zero:  0 Ärende
     one:   1 Ärende
     other: "%{count} Ärenden"
+  label_repository_new: New repository
index dc91b9e5cc313647384186a151fd99ab328e8e2e..10237220b647b5a8ce3393282c414f1701caeaa1 100644 (file)
@@ -1008,3 +1008,4 @@ th:
     zero:  0 ปัญหา
     one:   1 ปัญหา
     other: "%{count} ปัญหา"
+  label_repository_new: New repository
index 946536161cb477599aceee1592c3893aba666f97..1203b4eefbac588b75c0ed252f4d641a6d9c3a7d 100644 (file)
@@ -1030,3 +1030,4 @@ tr:
     zero:  0 İş
     one:   1 İş
     other: "%{count} İşler"
+  label_repository_new: New repository
index 7f649f6fa0901d667398fa6e0b56cc459a2b06b8..aedb7a96a66e06fb00b443c8798822ae283255b0 100644 (file)
@@ -1008,3 +1008,4 @@ uk:
     zero:  0 Питання
     one:   1 Питання
     other: "%{count} Питання"
+  label_repository_new: New repository
index 3bad8d7503b003245d822668d86e02aabf87bcc8..d7d633909b64305f2b47decb2b1c757dd6e80bc2 100644 (file)
@@ -1062,3 +1062,4 @@ vi:
     zero:  0 vấn đề
     one:   1 vấn đề
     other: "%{count} vấn đề"
+  label_repository_new: New repository
index 9229fd3b946af9480925d432f38eae3a6a13bfb5..9283a548eb2147c4dbe1e0e4e160f61e16126407 100644 (file)
     zero:  0 問題
     one:   1 問題
     other: "%{count} 問題清單"
+  label_repository_new: New repository
index 407b35748a1da9652a7b6ea268e592c3a523baf4..52a0a81063c6dcfadafa29cdc0c5737d64427882 100644 (file)
@@ -1013,3 +1013,4 @@ zh:
     zero:  0 问题
     one:   1 问题
     other: "%{count} 问题"
+  label_repository_new: New repository
index 42e936c0fe7ec66f321e2d9e53b44282ba8c4a6c..64ba34d2faf0de3ef0d42d398c7750242442c462 100644 (file)
@@ -176,6 +176,8 @@ ActionController::Routing::Routes.draw do |map|
     project.resources :issue_categories, :shallow => true
     project.resources :documents, :shallow => true, :member => {:add_attachment => :post}
     project.resources :boards
+    project.resources :repositories, :shallow => true, :except => [:index, :show],
+                      :member => {:committers => [:get, :post]}
 
     project.wiki_start_page 'wiki', :controller => 'wiki', :action => 'show', :conditions => {:method => :get}
     project.wiki_index 'wiki/index', :controller => 'wiki', :action => 'index', :conditions => {:method => :get}
@@ -272,16 +274,6 @@ ActionController::Routing::Routes.draw do |map|
     repositories.connect 'projects/:id/repository/revision',
                          :action => 'revision',
                          :conditions => {:method => [:get, :post]}
-
-    repositories.connect 'projects/:id/repository/committers',
-                         :action => 'committers',
-                         :conditions => {:method => [:get, :post]}
-    repositories.connect 'projects/:id/repository/edit',
-                         :action => 'edit',
-                         :conditions => {:method => [:get, :post]}
-    repositories.connect 'projects/:id/repository/destroy',
-                         :action => 'destroy',
-                         :conditions => {:method => :post}
   end
 
   # additional routes for having the file name at the end of url
index b33b5847c24b268bda21902e4ab01153784baf0b..b43a53b71011fa5aa9037d34d344c8420593bb03 100644 (file)
@@ -124,7 +124,7 @@ Redmine::AccessControl.map do |map|
   end
 
   map.project_module :repository do |map|
-    map.permission :manage_repository, {:repositories => [:edit, :committers, :destroy]}, :require => :member
+    map.permission :manage_repository, {:repositories => [:new, :create, :edit, :update, :committers, :destroy]}, :require => :member
     map.permission :browse_repository, :repositories => [:show, :browse, :entry, :annotate, :changes, :diff, :stats, :graph]
     map.permission :view_changesets, :repositories => [:show, :revisions, :revision]
     map.permission :commit_access, {}
index 933962e10cfdae6b4a35939ef273b7c86cfc79f0..3d64c60351469fc9e49477a76cc3fa72248253d7 100644 (file)
@@ -51,8 +51,8 @@ namespace :test do
       (supported_scms - [:subversion, :mercurial]).each do |scm|
         desc "Creates a test #{scm} repository"
         task scm => :create_dir do
-          # system "gunzip < test/fixtures/repositories/#{scm}_repository.tar.gz | tar -xv -C tmp/test"
-          system "tar -xvz -C tmp/test -f test/fixtures/repositories/#{scm}_repository.tar.gz"
+           system "gunzip < test/fixtures/repositories/#{scm}_repository.tar.gz | tar -xv -C tmp/test"
+          #system "tar -xvz -C tmp/test -f test/fixtures/repositories/#{scm}_repository.tar.gz"
         end
       end
 
index 3b4eb7acedb341d78056182f376eac1a16e91cb9..d833c20b8fedf669c98a586afa937a26c0e4c311 100644 (file)
@@ -99,3 +99,7 @@ enabled_modules_025:
   name: news 
   project_id: 2
   id: 25
+enabled_modules_026: 
+  name: repository
+  project_id: 2
+  id: 26
index 0273ef8cd0f433813a5fd849c834c84bbc572e69..099c0508842749ef1cfa55e73682e68c4cc1d68e 100644 (file)
@@ -37,15 +37,14 @@ class RepositoriesBazaarControllerTest < ActionController::TestCase
   end
 
   if File.directory?(REPOSITORY_PATH)
-    def test_get_edit
+    def test_get_new
       @request.session[:user_id] = 1
       @project.repository.destroy
-      xhr :get, :edit, :id => 'subproject1', :repository_scm => 'Bazaar'
+      get :new, :project_id => 'subproject1', :repository_scm => 'Bazaar'
       assert_response :success
-      assert_equal 'text/javascript', @response.content_type
+      assert_template 'new'
       assert_kind_of Repository::Bazaar, assigns(:repository)
       assert assigns(:repository).new_record?
-      assert_select_rjs :replace_html, 'tab-content-repository'
     end
 
     def test_browse_root
@@ -157,10 +156,11 @@ class RepositoriesBazaarControllerTest < ActionController::TestCase
       @request.session[:user_id] = 1 # admin
       assert_equal 0, @repository.changesets.count
       @repository.fetch_changesets
-      @project.reload
       assert @repository.changesets.count > 0
 
-      get :destroy, :id => PRJ_ID
+      assert_difference 'Repository.count', -1 do
+        delete :destroy, :id => @repository.id
+      end
       assert_response 302
       @project.reload
       assert_nil @project.repository
@@ -168,26 +168,18 @@ class RepositoriesBazaarControllerTest < ActionController::TestCase
 
     def test_destroy_invalid_repository
       @request.session[:user_id] = 1 # admin
-      assert_equal 0, @repository.changesets.count
-      @repository.fetch_changesets
-      @project.reload
-      assert @repository.changesets.count > 0
-
-      get :destroy, :id => PRJ_ID
-      assert_response 302
-      @project.reload
-      assert_nil @project.repository
-
-      @repository = Repository::Bazaar.create(
+      @project.repository.destroy
+      @repository = Repository::Bazaar.create!(
                     :project      => @project,
                     :url          => "/invalid",
                     :log_encoding => 'UTF-8')
-      assert @repository
       @repository.fetch_changesets
       @repository.reload
       assert_equal 0, @repository.changesets.count
 
-      get :destroy, :id => PRJ_ID
+      assert_difference 'Repository.count', -1 do
+        delete :destroy, :id => @repository.id
+      end
       assert_response 302
       @project.reload
       assert_nil @project.repository
index 5fd82d103b539e4cfa97d0fe03f0a1c3386b705e..4310c76309e1b7db3e61d8c09296f9793c900938 100644 (file)
@@ -22,7 +22,7 @@ require 'repositories_controller'
 class RepositoriesController; def rescue_action(e) raise e end; end
 
 class RepositoriesControllerTest < ActionController::TestCase
-  fixtures :projects, :users, :roles, :members, :member_roles,
+  fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules,
            :repositories, :issues, :issue_statuses, :changesets, :changes,
            :issue_categories, :enumerations, :custom_fields, :custom_values, :trackers
 
@@ -33,6 +33,82 @@ class RepositoriesControllerTest < ActionController::TestCase
     User.current = nil
   end
 
+  def test_new
+    @request.session[:user_id] = 1
+    get :new, :project_id => 'subproject1'
+    assert_response :success
+    assert_template 'new'
+    assert_kind_of Repository::Subversion, assigns(:repository)
+    assert assigns(:repository).new_record?
+    assert_tag 'input', :attributes => {:name => 'repository[url]'}
+  end
+
+  # TODO: remove it when multiple SCM support is added
+  def test_new_with_existing_repository
+    @request.session[:user_id] = 1
+    get :new, :project_id => 'ecookbook'
+    assert_response 302
+  end
+
+  def test_create
+    @request.session[:user_id] = 1
+    assert_difference 'Repository.count' do
+      post :create, :project_id => 'subproject1',
+           :repository_scm => 'Subversion',
+           :repository => {:url => 'file:///test'}
+    end
+    assert_response 302
+    repository = Repository.first(:order => 'id DESC')
+    assert_kind_of Repository::Subversion, repository
+    assert_equal 'file:///test', repository.url
+  end
+
+  def test_create_with_failure
+    @request.session[:user_id] = 1
+    assert_no_difference 'Repository.count' do
+      post :create, :project_id => 'subproject1',
+           :repository_scm => 'Subversion',
+           :repository => {:url => 'invalid'}
+    end
+    assert_response :success
+    assert_template 'new'
+    assert_kind_of Repository::Subversion, assigns(:repository)
+    assert assigns(:repository).new_record?
+  end
+
+  def test_edit
+    @request.session[:user_id] = 1
+    get :edit, :id => 11
+    assert_response :success
+    assert_template 'edit'
+    assert_equal Repository.find(11), assigns(:repository)
+    assert_tag 'input', :attributes => {:name => 'repository[url]', :value => 'svn://localhost/test'}
+  end
+
+  def test_update
+    @request.session[:user_id] = 1
+    put :update, :id => 11, :repository => {:password => 'test_update'}
+    assert_response 302
+    assert_equal 'test_update', Repository.find(11).password
+  end
+
+  def test_update_with_failure
+    @request.session[:user_id] = 1
+    put :update, :id => 11, :repository => {:password => 'x'*260}
+    assert_response :success
+    assert_template 'edit'
+    assert_equal Repository.find(11), assigns(:repository)
+  end
+
+  def test_destroy
+    @request.session[:user_id] = 1
+    assert_difference 'Repository.count', -1 do
+      delete :destroy, :id => 11
+    end
+    assert_response 302
+    assert_nil Repository.find_by_id(11)
+  end
+
   def test_revisions
     get :revisions, :id => 1
     assert_response :success
@@ -71,7 +147,7 @@ class RepositoriesControllerTest < ActionController::TestCase
     assert_equal 'image/svg+xml', @response.content_type
   end
 
-  def test_committers
+  def test_get_committers
     @request.session[:user_id] = 2
     # add a commit with an unknown user
     Changeset.create!(
@@ -82,7 +158,7 @@ class RepositoriesControllerTest < ActionController::TestCase
         :comments => 'Committed by foo.'
      )
 
-    get :committers, :id => 1
+    get :committers, :id => 10
     assert_response :success
     assert_template 'committers'
 
@@ -99,7 +175,7 @@ class RepositoriesControllerTest < ActionController::TestCase
                                      :descendant => { :tag => 'option', :attributes => { :selected => 'selected' }}}
   end
 
-  def test_map_committers
+  def test_post_committers
     @request.session[:user_id] = 2
     # add a commit with an unknown user
     c = Changeset.create!(
@@ -110,8 +186,8 @@ class RepositoriesControllerTest < ActionController::TestCase
             :comments => 'Committed by foo.'
           )
     assert_no_difference "Changeset.count(:conditions => 'user_id = 3')" do
-      post :committers, :id => 1, :committers => { '0' => ['foo', '2'], '1' => ['dlopper', '3']}
-      assert_redirected_to '/projects/ecookbook/repository/committers'
+      post :committers, :id => 10, :committers => { '0' => ['foo', '2'], '1' => ['dlopper', '3']}
+      assert_response 302
       assert_equal User.find(2), c.reload.user
     end
   end
index a3de673dc724e647abcb4b1ed3a0e856787c71af..2ad9b856a58d271cc3b16dbc6edbd1939a773c22 100644 (file)
@@ -43,15 +43,14 @@ class RepositoriesCvsControllerTest < ActionController::TestCase
   end
 
   if File.directory?(REPOSITORY_PATH)
-    def test_get_edit
+    def test_get_new
       @request.session[:user_id] = 1
       @project.repository.destroy
-      xhr :get, :edit, :id => 'subproject1', :repository_scm => 'Cvs'
+      get :new, :project_id => 'subproject1', :repository_scm => 'Cvs'
       assert_response :success
-      assert_equal 'text/javascript', @response.content_type
+      assert_template 'new'
       assert_kind_of Repository::Cvs, assigns(:repository)
       assert assigns(:repository).new_record?
-      assert_select_rjs :replace_html, 'tab-content-repository'
     end
 
     def test_browse_root
@@ -247,7 +246,9 @@ class RepositoriesCvsControllerTest < ActionController::TestCase
       @project.reload
       assert_equal NUM_REV, @repository.changesets.count
 
-      get :destroy, :id => PRJ_ID
+      assert_difference 'Repository.count', -1 do
+        delete :destroy, :id => @repository.id
+      end
       assert_response 302
       @project.reload
       assert_nil @project.repository
@@ -255,28 +256,20 @@ class RepositoriesCvsControllerTest < ActionController::TestCase
 
     def test_destroy_invalid_repository
       @request.session[:user_id] = 1 # admin
-      assert_equal 0, @repository.changesets.count
-      @repository.fetch_changesets
-      @project.reload
-      assert_equal NUM_REV, @repository.changesets.count
-
-      get :destroy, :id => PRJ_ID
-      assert_response 302
-      @project.reload
-      assert_nil @project.repository
-
-      @repository  = Repository::Cvs.create(
+      @project.repository.destroy
+      @repository  = Repository::Cvs.create!(
                               :project      => Project.find(PRJ_ID),
                               :root_url     => "/invalid",
                               :url          => MODULE_NAME,
                               :log_encoding => 'UTF-8'
                               )
-      assert @repository
       @repository.fetch_changesets
       @project.reload
       assert_equal 0, @repository.changesets.count
 
-      get :destroy, :id => PRJ_ID
+      assert_difference 'Repository.count', -1 do
+        delete :destroy, :id => @repository.id
+      end
       assert_response 302
       @project.reload
       assert_nil @project.repository
index 07d845a210d6bcbc17b3663b724de6b8196dacac..64873fc15f0474efbdb0abdb5dbce9807979fa63 100644 (file)
@@ -39,15 +39,14 @@ class RepositoriesDarcsControllerTest < ActionController::TestCase
   end
 
   if File.directory?(REPOSITORY_PATH)
-    def test_get_edit
+    def test_get_new
       @request.session[:user_id] = 1
       @project.repository.destroy
-      xhr :get, :edit, :id => 'subproject1', :repository_scm => 'Darcs'
+      get :new, :project_id => 'subproject1', :repository_scm => 'Darcs'
       assert_response :success
-      assert_equal 'text/javascript', @response.content_type
+      assert_template 'new'
       assert_kind_of Repository::Darcs, assigns(:repository)
       assert assigns(:repository).new_record?
-      assert_select_rjs :replace_html, 'tab-content-repository'
     end
 
     def test_browse_root
@@ -130,7 +129,9 @@ class RepositoriesDarcsControllerTest < ActionController::TestCase
       @project.reload
       assert_equal NUM_REV, @repository.changesets.count
 
-      get :destroy, :id => PRJ_ID
+      assert_difference 'Repository.count', -1 do
+        delete :destroy, :id => @repository.id
+      end
       assert_response 302
       @project.reload
       assert_nil @project.repository
@@ -138,27 +139,19 @@ class RepositoriesDarcsControllerTest < ActionController::TestCase
 
     def test_destroy_invalid_repository
       @request.session[:user_id] = 1 # admin
-      assert_equal 0, @repository.changesets.count
-      @repository.fetch_changesets
-      @project.reload
-      assert_equal NUM_REV, @repository.changesets.count
-
-      get :destroy, :id => PRJ_ID
-      assert_response 302
-      @project.reload
-      assert_nil @project.repository
-
-      @repository = Repository::Darcs.create(
+      @project.repository.destroy
+      @repository = Repository::Darcs.create!(
                         :project      => @project,
                         :url          => "/invalid",
                         :log_encoding => 'UTF-8'
                         )
-      assert @repository
       @repository.fetch_changesets
       @project.reload
       assert_equal 0, @repository.changesets.count
 
-      get :destroy, :id => PRJ_ID
+      assert_difference 'Repository.count', -1 do
+        delete :destroy, :id => @repository.id
+      end
       assert_response 302
       @project.reload
       assert_nil @project.repository
index 2575378939a3b9f1a579a7bb365abbac36c0096c..0b10d8fe39092ab376f15726ce59e32a73b10f2c 100644 (file)
@@ -41,15 +41,14 @@ class RepositoriesFilesystemControllerTest < ActionController::TestCase
   end
 
   if File.directory?(REPOSITORY_PATH)
-    def test_get_edit
+    def test_get_new
       @request.session[:user_id] = 1
       @project.repository.destroy
-      xhr :get, :edit, :id => 'subproject1', :repository_scm => 'Filesystem'
+      get :new, :project_id => 'subproject1', :repository_scm => 'Filesystem'
       assert_response :success
-      assert_equal 'text/javascript', @response.content_type
+      assert_template 'new'
       assert_kind_of Repository::Filesystem, assigns(:repository)
       assert assigns(:repository).new_record?
-      assert_select_rjs :replace_html, 'tab-content-repository'
     end
 
     def test_browse_root
@@ -126,7 +125,9 @@ class RepositoriesFilesystemControllerTest < ActionController::TestCase
     def test_destroy_valid_repository
       @request.session[:user_id] = 1 # admin
 
-      get :destroy, :id => PRJ_ID
+      assert_difference 'Repository.count', -1 do
+        delete :destroy, :id => @repository.id
+      end
       assert_response 302
       @project.reload
       assert_nil @project.repository
@@ -134,20 +135,16 @@ class RepositoriesFilesystemControllerTest < ActionController::TestCase
 
     def test_destroy_invalid_repository
       @request.session[:user_id] = 1 # admin
-
-      get :destroy, :id => PRJ_ID
-      assert_response 302
-      @project.reload
-      assert_nil @project.repository
-
-      @repository = Repository::Filesystem.create(
-                      :project       => Project.find(PRJ_ID),
+      @project.repository.destroy
+      @repository = Repository::Filesystem.create!(
+                      :project       => @project,
                       :url           => "/invalid",
                       :path_encoding => ''
                       )
-      assert @repository
 
-      get :destroy, :id => PRJ_ID
+      assert_difference 'Repository.count', -1 do
+        delete :destroy, :id => @repository.id
+      end
       assert_response 302
       @project.reload
       assert_nil @project.repository
index 094a6e7f1d44d1784765bc4a38437785bf339d3a..33984fdf730d31fe4759e27e46834792ad91d5ea 100644 (file)
@@ -58,15 +58,14 @@ class RepositoriesGitControllerTest < ActionController::TestCase
   end
 
   if File.directory?(REPOSITORY_PATH)
-    def test_get_edit
+    def test_get_new
       @request.session[:user_id] = 1
       @project.repository.destroy
-      xhr :get, :edit, :id => 'subproject1', :repository_scm => 'Git'
+      get :new, :project_id => 'subproject1', :repository_scm => 'Git'
       assert_response :success
-      assert_equal 'text/javascript', @response.content_type
+      assert_template 'new'
       assert_kind_of Repository::Git, assigns(:repository)
       assert assigns(:repository).new_record?
-      assert_select_rjs :replace_html, 'tab-content-repository'
     end
 
     def test_browse_root
@@ -424,7 +423,9 @@ class RepositoriesGitControllerTest < ActionController::TestCase
       @project.reload
       assert_equal NUM_REV, @repository.changesets.count
 
-      get :destroy, :id => PRJ_ID
+      assert_difference 'Repository.count', -1 do
+        delete :destroy, :id => @repository.id
+      end
       assert_response 302
       @project.reload
       assert_nil @project.repository
@@ -432,27 +433,19 @@ class RepositoriesGitControllerTest < ActionController::TestCase
 
     def test_destroy_invalid_repository
       @request.session[:user_id] = 1 # admin
-      assert_equal 0, @repository.changesets.count
-      @repository.fetch_changesets
-      @project.reload
-      assert_equal NUM_REV, @repository.changesets.count
-
-      get :destroy, :id => PRJ_ID
-      assert_response 302
-      @project.reload
-      assert_nil @project.repository
-
-      @repository = Repository::Git.create(
+      @project.repository.destroy
+      @repository = Repository::Git.create!(
                       :project       => @project,
                       :url           => "/invalid",
                       :path_encoding => 'ISO-8859-1'
                       )
-      assert @repository
       @repository.fetch_changesets
       @repository.reload
       assert_equal 0, @repository.changesets.count
 
-      get :destroy, :id => PRJ_ID
+      assert_difference 'Repository.count', -1 do
+        delete :destroy, :id => @repository.id
+      end
       assert_response 302
       @project.reload
       assert_nil @project.repository
index 1a580a62da5daf9affa14b7120ae833a4dc8c277..2792a3fdbca3da5a9f9e2b96e4c4ea49d229b503 100644 (file)
@@ -60,15 +60,14 @@ class RepositoriesMercurialControllerTest < ActionController::TestCase
     def test_fake; assert true end
   elsif File.directory?(REPOSITORY_PATH)
 
-    def test_get_edit
+    def test_get_new
       @request.session[:user_id] = 1
       @project.repository.destroy
-      xhr :get, :edit, :id => 'subproject1', :repository_scm => 'Mercurial'
+      get :new, :project_id => 'subproject1', :repository_scm => 'Mercurial'
       assert_response :success
-      assert_equal 'text/javascript', @response.content_type
+      assert_template 'new'
       assert_kind_of Repository::Mercurial, assigns(:repository)
       assert assigns(:repository).new_record?
-      assert_select_rjs :replace_html, 'tab-content-repository'
     end
 
     def test_show_root
@@ -469,10 +468,11 @@ class RepositoriesMercurialControllerTest < ActionController::TestCase
       @request.session[:user_id] = 1 # admin
       assert_equal 0, @repository.changesets.count
       @repository.fetch_changesets
-      @project.reload
       assert_equal NUM_REV, @repository.changesets.count
 
-      get :destroy, :id => PRJ_ID
+      assert_difference 'Repository.count', -1 do
+        delete :destroy, :id => @repository.id
+      end
       assert_response 302
       @project.reload
       assert_nil @project.repository
@@ -480,27 +480,18 @@ class RepositoriesMercurialControllerTest < ActionController::TestCase
 
     def test_destroy_invalid_repository
       @request.session[:user_id] = 1 # admin
-      assert_equal 0, @repository.changesets.count
-      @repository.fetch_changesets
-      @project.reload
-      assert_equal NUM_REV, @repository.changesets.count
-
-      get :destroy, :id => PRJ_ID
-      assert_response 302
-      @project.reload
-      assert_nil @project.repository
-
-      @repository = Repository::Mercurial.create(
+      @project.repository.destroy
+      @repository = Repository::Mercurial.create!(
                       :project => Project.find(PRJ_ID),
                       :url     => "/invalid",
                       :path_encoding => 'ISO-8859-1'
                       )
-      assert @repository
       @repository.fetch_changesets
-      @project.reload
       assert_equal 0, @repository.changesets.count
 
-      get :destroy, :id => PRJ_ID
+      assert_difference 'Repository.count', -1 do
+        delete :destroy, :id => @repository.id
+      end
       assert_response 302
       @project.reload
       assert_nil @project.repository
index a47e8bc0b0397cf0b0d5f9ebd89ef19a20d11abc..0e0de2e3babfea8381ad79da35f24626eb10705a 100644 (file)
@@ -38,40 +38,14 @@ class RepositoriesSubversionControllerTest < ActionController::TestCase
   end
 
   if repository_configured?('subversion')
-    def test_get_edit
+    def test_new
       @request.session[:user_id] = 1
       @project.repository.destroy
-      xhr :get, :edit, :id => 'subproject1', :repository_scm => 'Subversion'
+      get :new, :project_id => 'subproject1', :repository_scm => 'Subversion'
       assert_response :success
-      assert_equal 'text/javascript', @response.content_type
+      assert_template 'new'
       assert_kind_of Repository::Subversion, assigns(:repository)
       assert assigns(:repository).new_record?
-      assert_select_rjs :replace_html, 'tab-content-repository'
-    end
-
-    def test_post_edit
-      @request.session[:user_id] = 1
-      @project.repository.destroy
-      assert_difference 'Repository.count' do
-        xhr :post, :edit, :id => 'subproject1', :repository_scm => 'Subversion', :repository => {:url => 'file:///svn/path'}
-      end
-      assert_response :success
-      assert_equal 'text/javascript', @response.content_type
-      assert_kind_of Repository::Subversion, assigns(:repository)
-      assert !assigns(:repository).new_record?
-      assert_select_rjs :replace_html, 'tab-content-repository'
-    end
-
-    def test_post_edit_existing_repository
-      @request.session[:user_id] = 1
-      assert_no_difference 'Repository.count' do
-        xhr :post, :edit, :id => 'subproject1', :repository_scm => 'Subversion', :repository => {:password => 'newpassword'}
-      end
-      assert_response :success
-      assert_equal 'text/javascript', @response.content_type
-      assert_kind_of Repository::Subversion, assigns(:repository)
-      assert_select_rjs :replace_html, 'tab-content-repository'
-      assert_equal 'newpassword', Project.find('subproject1').repository.password
     end
 
     def test_show
@@ -381,10 +355,11 @@ class RepositoriesSubversionControllerTest < ActionController::TestCase
       @request.session[:user_id] = 1 # admin
       assert_equal 0, @repository.changesets.count
       @repository.fetch_changesets
-      @project.reload
       assert_equal NUM_REV, @repository.changesets.count
 
-      get :destroy, :id => PRJ_ID
+      assert_difference 'Repository.count', -1 do
+        delete :destroy, :id => @repository.id
+      end
       assert_response 302
       @project.reload
       assert_nil @project.repository
@@ -392,25 +367,16 @@ class RepositoriesSubversionControllerTest < ActionController::TestCase
 
     def test_destroy_invalid_repository
       @request.session[:user_id] = 1 # admin
-      assert_equal 0, @repository.changesets.count
-      @repository.fetch_changesets
-      @project.reload
-      assert_equal NUM_REV, @repository.changesets.count
-
-      get :destroy, :id => PRJ_ID
-      assert_response 302
-      @project.reload
-      assert_nil @project.repository
-
-      @repository = Repository::Subversion.create(
+      @project.repository.destroy
+      @repository = Repository::Subversion.create!(
                        :project => @project,
                        :url     => "file:///invalid")
-      assert @repository
       @repository.fetch_changesets
-      @project.reload
       assert_equal 0, @repository.changesets.count
 
-      get :destroy, :id => PRJ_ID
+      assert_difference 'Repository.count', -1 do
+        delete :destroy, :id => @repository.id
+      end
       assert_response 302
       @project.reload
       assert_nil @project.repository
index e16c90c1d14af972b9f9f0e1b41e4d0d3e3aa200..97368b200bdc3b9e8cb0f21df39801c536acb678 100644 (file)
@@ -84,13 +84,13 @@ class SysControllerTest < ActionController::TestCase
   end
 
   def test_fetch_changesets
-    Repository::Subversion.any_instance.expects(:fetch_changesets).returns(true)
+    Repository::Subversion.any_instance.expects(:fetch_changesets).twice.returns(true)
     get :fetch_changesets
     assert_response :success
   end
 
   def test_fetch_changesets_one_project
-    Repository::Subversion.any_instance.expects(:fetch_changesets).returns(true)
+    Repository::Subversion.any_instance.expects(:fetch_changesets).once.returns(true)
     get :fetch_changesets, :id => 'ecookbook'
     assert_response :success
   end
index 9c1d6ff4e978ba88d0c74897b5172d32ee78017c..edc49e70bafa6090f961c095c5d81a08231f4e20 100644 (file)
@@ -24,19 +24,47 @@ class RoutingRepositoriesTest < ActionController::IntegrationTest
     assert_equal %w[path to file.c], @path_hash[:param]
   end
 
-  def test_repositories
+  def test_repositories_resources
     assert_routing(
         { :method => 'get',
-          :path => "/projects/redmine/repository" },
-        { :controller => 'repositories', :action => 'show', :id => 'redmine' }
+          :path => "/projects/redmine/repositories/new" },
+        { :controller => 'repositories', :action => 'new', :project_id => 'redmine' }
+      )
+    assert_routing(
+        { :method => 'post',
+          :path => "/projects/redmine/repositories" },
+        { :controller => 'repositories', :action => 'create', :project_id => 'redmine' }
+      )
+    assert_routing(
+        { :method => 'get',
+          :path => "/repositories/1/edit" },
+        { :controller => 'repositories', :action => 'edit', :id => '1' }
+      )
+    assert_routing(
+        { :method => 'put',
+          :path => "/repositories/1" },
+        { :controller => 'repositories', :action => 'update', :id => '1' }
+      )
+    assert_routing(
+        { :method => 'delete',
+          :path => "/repositories/1" },
+        { :controller => 'repositories', :action => 'destroy', :id => '1' }
       )
     ["get", "post"].each do |method|
       assert_routing(
           { :method => method,
-            :path => "/projects/redmine/repository/edit" },
-          { :controller => 'repositories', :action => 'edit', :id => 'redmine' }
+            :path => "/repositories/1/committers" },
+          { :controller => 'repositories', :action => 'committers', :id => '1' }
         )
     end
+  end
+
+  def test_repositories
+    assert_routing(
+        { :method => 'get',
+          :path => "/projects/redmine/repository" },
+        { :controller => 'repositories', :action => 'show', :id => 'redmine' }
+      )
     assert_routing(
         { :method => 'get',
           :path => "/projects/redmine/repository/statistics" },