diff --git a/Gemfile b/Gemfile index ac98bc7..a37e55e 100644 --- a/Gemfile +++ b/Gemfile @@ -1,10 +1,12 @@ -gem 'deface', '> 1.0.0' +gem 'acts_as_list' +gem 'deface', '>= 1.5.3' gem 'hashie' +gem 'protected_attributes_continued' group :development do gem 'diffy' end group :test do - gem 'factory_girl_rails' + gem 'factory_bot_rails' end diff --git a/README.md b/README.md index bbe20c2..e7e8f93 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ When accessing a remote or local repository, UndevGit clones it and then works w ## Compatibility -This plugin version is compatible only with Redmine 3.3.1 and later. +This plugin version is compatible with Redmine 6.x ## Installation diff --git a/app/controllers/global_hooks_controller.rb b/app/controllers/global_hooks_controller.rb index cf7869f..2f7dd3b 100644 --- a/app/controllers/global_hooks_controller.rb +++ b/app/controllers/global_hooks_controller.rb @@ -1,6 +1,6 @@ class GlobalHooksController < ApplicationController - before_filter :authorize_global + before_action :authorize_global layout 'admin' @@ -35,10 +35,21 @@ def edit def update @hook = GlobalHook.find(params[:id]) if @hook.update_attributes(global_hook_params) - flash[:notice] = l(:notice_successful_update) - redirect_to action: 'index' + respond_to do |format| + format.html do + flash[:notice] = l(:notice_successful_update) + redirect_to action: 'index' + end + format.js {head :ok} + end else - render action: 'edit' + respond_to do |format| + format.html do + edit + render :action => 'edit' + end + format.js {head :unprocessable_content} + end end end @@ -55,6 +66,6 @@ def destroy def global_hook_params params.required(:global_hook). permit(:branches, :keywords, :status_id, :done_ratio, :assignee_type, - :assigned_to_id, :move_to) + :assigned_to_id, :position) end end diff --git a/app/controllers/project_hooks_controller.rb b/app/controllers/project_hooks_controller.rb index b109434..e98d965 100644 --- a/app/controllers/project_hooks_controller.rb +++ b/app/controllers/project_hooks_controller.rb @@ -1,7 +1,7 @@ class ProjectHooksController < ApplicationController - before_filter :find_project_by_project_id - before_filter :authorize + before_action :find_project_by_project_id + before_action :authorize helper :sort include SortHelper @@ -14,7 +14,7 @@ def new def create @hook = @project.hooks.build(project_hook_params) - cfv = params[:project_hook][:custom_field_values] + cfv = params[:project_hook][:custom_field_values] if cfv @hook.reset_custom_values! @hook.custom_field_values = cfv @@ -30,10 +30,21 @@ def create def update @hook = @project.hooks.find(params[:id]) if @hook.update_attributes(project_hook_params_with_cfv) - flash[:notice] = l(:notice_successful_update) - redirect_to_settings_in_projects + respond_to do |format| + format.html do + flash[:notice] = l(:notice_successful_update) + redirect_to_settings_in_projects + end + format.js { head :ok } + end else - render action: 'edit' + respond_to do |format| + format.html do + edit + render :action => 'edit' + end + format.js { head :unprocessable_content } + end end end @@ -58,12 +69,12 @@ def redirect_to_settings_in_projects def project_hook_params params.required(:project_hook). permit(:branches, :keywords, :status_id, :done_ratio, :assignee_type, - :assigned_to_id, :move_to, :repository_id) + :assigned_to_id, :position, :repository_id) end def project_hook_params_with_cfv params.required(:project_hook). permit(:branches, :keywords, :status_id, :done_ratio, :assignee_type, - :assigned_to_id, :custom_field_values, :move_to, :repository_id) + :assigned_to_id, :custom_field_values, :position, :repository_id) end end diff --git a/app/controllers/remote_committers_controller.rb b/app/controllers/remote_committers_controller.rb index 47daac2..36bd5f5 100644 --- a/app/controllers/remote_committers_controller.rb +++ b/app/controllers/remote_committers_controller.rb @@ -1,7 +1,7 @@ class RemoteCommittersController < ApplicationController layout 'admin' - before_filter :require_admin + before_action :require_admin helper_method :remote_repo_site helper_method :committers @@ -11,7 +11,7 @@ def index end def create - if params[:committers].is_a?(Hash) + if params[:committers].present? params[:committers].values.each do |email, user_id| remote_repo_site.update_user_mapping(email, user_id) end diff --git a/app/controllers/remote_repo_sites_controller.rb b/app/controllers/remote_repo_sites_controller.rb index 3ce4e9e..0650b7c 100644 --- a/app/controllers/remote_repo_sites_controller.rb +++ b/app/controllers/remote_repo_sites_controller.rb @@ -1,7 +1,7 @@ class RemoteRepoSitesController < ApplicationController layout 'admin' - before_filter :require_admin + before_action :require_admin helper_method :remote_repo_sites diff --git a/app/controllers/remote_repos_controller.rb b/app/controllers/remote_repos_controller.rb index 277b0df..0c48db2 100644 --- a/app/controllers/remote_repos_controller.rb +++ b/app/controllers/remote_repos_controller.rb @@ -1,7 +1,7 @@ class RemoteReposController < ApplicationController layout 'admin' - before_filter :require_admin + before_action :require_admin def refetch Workers::RemoteRepoFetcher.defer(remote_repo.id, :refetch) diff --git a/app/controllers/undev_git_hooks_controller.rb b/app/controllers/undev_git_hooks_controller.rb index 28a6e98..08f7e16 100644 --- a/app/controllers/undev_git_hooks_controller.rb +++ b/app/controllers/undev_git_hooks_controller.rb @@ -1,5 +1,7 @@ class UndevGitHooksController < ActionController::Base + skip_before_action :verify_authenticity_token, only: [:gitlab_push, :github_push, :bitbucket_push] + def gitlab_push RedmineUndevGit::Services::Gitlab.handle_request(request) head :ok diff --git a/app/helpers/undev_git_helper.rb b/app/helpers/undev_git_helper.rb index 45acb93..89dfe92 100644 --- a/app/helpers/undev_git_helper.rb +++ b/app/helpers/undev_git_helper.rb @@ -76,7 +76,7 @@ def links_to_remote_branches(revision) def undev_git_field_tags(form, repository) [ undev_git_url_tag(form, repository), - undev_git_extra_report_last_commit_tag(form, repository), + undev_git_report_last_commit(form, repository), undev_git_use_init_hooks_tag(form, repository), undev_git_use_init_refs_tag(form, repository), undev_git_fetch_by_web_hook_tag(form, repository) @@ -92,9 +92,9 @@ def undev_git_url_tag(form, repository) disabled: repository.persisted?)) end - def undev_git_extra_report_last_commit_tag(form, repository) + def undev_git_report_last_commit(form, repository) content_tag('p', form.check_box( - :extra_report_last_commit, + :report_last_commit, label: l(:label_git_report_last_commit))) end diff --git a/app/models/fetch_event.rb b/app/models/fetch_event.rb index 338a727..c185699 100644 --- a/app/models/fetch_event.rb +++ b/app/models/fetch_event.rb @@ -1,4 +1,4 @@ -class FetchEvent < ActiveRecord::Base +class FetchEvent < ApplicationRecord belongs_to :repository after_commit :cleanup_fetch_events, on: :create diff --git a/app/models/global_hook.rb b/app/models/global_hook.rb index 687c7cb..9ec7662 100644 --- a/app/models/global_hook.rb +++ b/app/models/global_hook.rb @@ -1,5 +1,5 @@ class GlobalHook < HookBase - acts_as_list + acts_as_list scope: "(type = '#{:GlobalHook}')" # Users/groups issues can be assigned to def assignable_users diff --git a/app/models/hook_base.rb b/app/models/hook_base.rb index 6bb3018..042e294 100644 --- a/app/models/hook_base.rb +++ b/app/models/hook_base.rb @@ -1,4 +1,4 @@ -class HookBase < ActiveRecord::Base +class HookBase < ApplicationRecord self.table_name = 'hooks' NOBODY = 'nobody' @@ -10,7 +10,7 @@ class HookBase < ActiveRecord::Base acts_as_customizable - serialize :custom_field_values, Hash + serialize :custom_field_values, type: Hash safe_attributes %w{branches keywords status_id done_ratio assigned_to_id custom_field_values} diff --git a/app/models/project_hook.rb b/app/models/project_hook.rb index 0aa5f79..07e78bc 100644 --- a/app/models/project_hook.rb +++ b/app/models/project_hook.rb @@ -1,6 +1,6 @@ class ProjectHook < HookBase - acts_as_list scope: '(project_id = #{project_id} AND repository_id #{repository_id ? "= #{repository_id}" : "IS NULL"})' + acts_as_list scope: '(type = "#{:ProjectHook}" AND project_id = #{project_id} AND repository_id #{repository_id ? "= #{repository_id}" : "IS NULL"})' safe_attributes %w{project_id repository_id} diff --git a/app/models/remote_repo.rb b/app/models/remote_repo.rb index 6ffe138..0734bfa 100644 --- a/app/models/remote_repo.rb +++ b/app/models/remote_repo.rb @@ -1,4 +1,4 @@ -class RemoteRepo < ActiveRecord::Base +class RemoteRepo < ApplicationRecord belongs_to :site, class_name: 'RemoteRepoSite', foreign_key: 'remote_repo_site_id' has_many :revisions, class_name: 'RemoteRepoRevision', @@ -10,7 +10,7 @@ class RemoteRepo < ActiveRecord::Base validates :site, presence: true - serialize :tail_revisions, Array + serialize :tail_revisions, type: Array scope :related_to_project, ->(project) { joins(revisions: :related_issues).where("#{Issue.table_name}.project_id = ?", project.id).uniq diff --git a/app/models/remote_repo_hook.rb b/app/models/remote_repo_hook.rb index 24eabb1..04170b5 100644 --- a/app/models/remote_repo_hook.rb +++ b/app/models/remote_repo_hook.rb @@ -1,4 +1,4 @@ -class RemoteRepoHook < ActiveRecord::Base +class RemoteRepoHook < ApplicationRecord belongs_to :revision, class_name: 'RemoteRepoRevision', foreign_key: 'remote_repo_revision_id' belongs_to :hook, class_name: 'HookBase' belongs_to :issue diff --git a/app/models/remote_repo_ref.rb b/app/models/remote_repo_ref.rb index 0a6b96b..3711fbb 100644 --- a/app/models/remote_repo_ref.rb +++ b/app/models/remote_repo_ref.rb @@ -1,4 +1,4 @@ -class RemoteRepoRef < ActiveRecord::Base +class RemoteRepoRef < ApplicationRecord belongs_to :repo, class_name: 'RemoteRepo', foreign_key: 'remote_repo_id' has_many :applied_hooks, class_name: 'RemoteRepoHook', dependent: :nullify diff --git a/app/models/remote_repo_refs_rev.rb b/app/models/remote_repo_refs_rev.rb index 332b324..40c723e 100644 --- a/app/models/remote_repo_refs_rev.rb +++ b/app/models/remote_repo_refs_rev.rb @@ -1,4 +1,4 @@ -class RemoteRepoRefsRev < ActiveRecord::Base +class RemoteRepoRefsRev < ApplicationRecord belongs_to :revision, class_name: 'RemoteRepoRevision', foreign_key: 'remote_repo_revision_id' belongs_to :ref, class_name: 'RemoteRepoRef', foreign_key: 'remote_repo_ref_id' end diff --git a/app/models/remote_repo_revision.rb b/app/models/remote_repo_revision.rb index 4f2cbfd..43c545e 100644 --- a/app/models/remote_repo_revision.rb +++ b/app/models/remote_repo_revision.rb @@ -1,4 +1,4 @@ -class RemoteRepoRevision < ActiveRecord::Base +class RemoteRepoRevision < ApplicationRecord belongs_to :repo, class_name: 'RemoteRepo', foreign_key: 'remote_repo_id' belongs_to :author, class_name: 'User' belongs_to :committer, class_name: 'User' diff --git a/app/models/remote_repo_site.rb b/app/models/remote_repo_site.rb index bb7f668..1e52101 100644 --- a/app/models/remote_repo_site.rb +++ b/app/models/remote_repo_site.rb @@ -1,6 +1,6 @@ # remote repository storage service like github.com, gitlab.com, bitbucket.com, etc -class RemoteRepoSite < ActiveRecord::Base +class RemoteRepoSite < ApplicationRecord has_many :repos, class_name: 'RemoteRepo', @@ -34,7 +34,7 @@ def uri end def all_committers_with_mappings - unmapped = revisions.where(committer_id: nil).uniq.pluck(:committer_email) + unmapped = revisions.where(committer_id: nil).pluck(:committer_email).uniq mapped = user_mappings.to_a unmapped = unmapped - mapped.map(&:email) unmapped.map! { |e| [e, nil] } diff --git a/app/models/remote_repo_site/bitbucket.rb b/app/models/remote_repo_site/bitbucket.rb new file mode 100644 index 0000000..da99733 --- /dev/null +++ b/app/models/remote_repo_site/bitbucket.rb @@ -0,0 +1,2 @@ +class RemoteRepoSite::Bitbucket < RemoteRepoSite +end diff --git a/app/models/remote_repo_site_user.rb b/app/models/remote_repo_site_user.rb index 4deb3a9..5396e61 100644 --- a/app/models/remote_repo_site_user.rb +++ b/app/models/remote_repo_site_user.rb @@ -1,4 +1,4 @@ -class RemoteRepoSiteUser < ActiveRecord::Base +class RemoteRepoSiteUser < ApplicationRecord belongs_to :site, class_name: 'RemoteRepoSite', foreign_key: 'remote_repo_site_id' belongs_to :user diff --git a/app/models/repository/remote_git.rb b/app/models/repository/remote_git.rb index 4a42e8f..6834ee2 100644 --- a/app/models/repository/remote_git.rb +++ b/app/models/repository/remote_git.rb @@ -1,7 +1,7 @@ -require_dependency 'redmine/scm/adapters/undev_git_adapter' -require_dependency 'redmine_undev_git/includes/repo_store' -require_dependency 'redmine_undev_git/includes/repo_fetch' -require_dependency 'redmine_undev_git/includes/repo_validate' +#require_dependency 'redmine/scm/adapters/undev_git_adapter' +#require_dependency 'redmine_undev_git/includes/repo_store' +#require_dependency 'redmine_undev_git/includes/repo_fetch' +#require_dependency 'redmine_undev_git/includes/repo_validate' class Repository::RemoteGit < Repository diff --git a/app/models/repository/undev_git.rb b/app/models/repository/undev_git.rb index 17bce8c..1409435 100644 --- a/app/models/repository/undev_git.rb +++ b/app/models/repository/undev_git.rb @@ -1,4 +1,4 @@ -require_dependency 'redmine/scm/adapters/undev_git_adapter' +#require_dependency 'redmine/scm/adapters/undev_git_adapter' class Repository::UndevGit < Repository @@ -7,7 +7,7 @@ class Repository::UndevGit < Repository include RedmineUndevGit::Includes::RepoFetch include RedmineUndevGit::Includes::RepoHooks - safe_attributes 'use_init_hooks', 'use_init_refs', 'fetch_by_web_hook' + safe_attributes 'use_init_hooks', 'use_init_refs', 'fetch_by_web_hook', 'report_last_commit' has_many :hooks, class_name: 'ProjectHook', @@ -16,6 +16,28 @@ class Repository::UndevGit < Repository validates :project, presence: true + def self.scm_adapter_class + Redmine::Scm::Adapters::UndevGitAdapter + end + + def self.scm_name + 'UndevGit' + end + + def report_last_commit + return false if extra_info.nil? + + v = extra_info["extra_report_last_commit"] + return false if v.nil? + + v.to_s != '0' + end + + def report_last_commit=(arg) + puts "report_last_commit: #{arg}" + merge_extra_info "extra_report_last_commit" => arg + end + def supports_directory_revisions? true end diff --git a/app/overrides/issues/_changesets.rb b/app/overrides/issues/_changesets.rb deleted file mode 100644 index 70f1c91..0000000 --- a/app/overrides/issues/_changesets.rb +++ /dev/null @@ -1,9 +0,0 @@ -Deface::Override.new( - virtual_path: 'issues/_changesets', - name: 'branches_for_assoc', - insert_after: 'erb:contains("link_to_revision")', - text: < -<%= link_to_repository(changeset.repository) %> -INCLUDES -) diff --git a/app/overrides/issues/show.rb b/app/overrides/issues/show.rb deleted file mode 100644 index e47c030..0000000 --- a/app/overrides/issues/show.rb +++ /dev/null @@ -1,20 +0,0 @@ -Deface::Override.new( - virtual_path: 'issues/show', - name: 'related_remote_repo_revisions', - replace: 'erb:contains("if @changesets.present?")', - closing_selector: 'erb:contains("end")', - text: < -
- <% if @changesets.present? %> -

<%=l(:label_associated_revisions)%>

- <%= render partial: 'changesets', locals: { changesets: @changesets} %> - <% end %> - <% if remote_revisions.present? %> -

<%=l(:label_associated_remote_revisions)%>

- <%= render partial: 'remote_revisions', locals: { remote_revisions: remote_revisions} %> - <% end %> -
-<% end %> -INCLUDES -) diff --git a/app/overrides/issues/tabs/_changesets.rb b/app/overrides/issues/tabs/_changesets.rb new file mode 100644 index 0000000..19e95dc --- /dev/null +++ b/app/overrides/issues/tabs/_changesets.rb @@ -0,0 +1,16 @@ +module Issues + module Tabs + module Changesets + Deface::Override.new( + virtual_path: 'issues/tabs/_changesets', + name: 'branches_for_assoc', + :original => '8517551ea080196491724e180de939f340061640', + insert_after: 'erb:contains("link_to_revision")', + text: < +<%= link_to_repository(changeset.repository) %> +INCLUDES + ) + end + end +end \ No newline at end of file diff --git a/app/overrides/projects/settings/_repositories.rb b/app/overrides/projects/settings/_repositories.rb index 34f6e23..a29cb9f 100644 --- a/app/overrides/projects/settings/_repositories.rb +++ b/app/overrides/projects/settings/_repositories.rb @@ -1,11 +1,19 @@ -Deface::Override.new( - virtual_path: 'projects/settings/_repositories', - name: 'fetch_events_status_th', - insert_after: 'erb:contains("l(:label_repository)")', - text: '<%= l(:label_fetch_status) %>') +module Projects + module Settings + module Repositories + Deface::Override.new( + virtual_path: 'projects/settings/_repositories', + name: 'fetch_events_status_th', + insert_after: 'erb:contains("l(:label_repository)")', + text: '<%= l(:label_fetch_status) %>', + :original => '747d13f6fa795b443503b8f91525a93d5d3b685d') -Deface::Override.new( - virtual_path: 'projects/settings/_repositories', - name: 'fetch_events_status_td', - insert_after: 'erb:contains("repository.url")', - text: '<%= status_image_tag(repository) %>') + Deface::Override.new( + virtual_path: 'projects/settings/_repositories', + name: 'fetch_events_status_td', + insert_after: 'erb:contains("repository.url")', + text: '<%= status_image_tag(repository) %>', + :original => '0e9938f78740917b0f1a73bf64f1e5dfdeb10ac3') + end + end +end diff --git a/app/overrides/repositories/revision.rb b/app/overrides/repositories/revision.rb index 6b9810e..b1e2177 100644 --- a/app/overrides/repositories/revision.rb +++ b/app/overrides/repositories/revision.rb @@ -1,8 +1,10 @@ -Deface::Override.new( - virtual_path: 'repositories/_changeset', - name: 'revision_rebased_to', - insert_after: 'h2 erb:contains(\'format_revision(@changeset)\')', - text: <<-REBASE_INFO +module Repositories + module Revision + Deface::Override.new( + virtual_path: 'repositories/_changeset', + name: 'revision_rebased_to', + insert_after: 'h2 erb:contains(\'format_revision(@changeset)\')', + text: <<-REBASE_INFO <% if @changeset.rebased_to %> @@ -34,11 +36,14 @@ <% end %> -REBASE_INFO -) + REBASE_INFO + ) + + Deface::Override.new( + virtual_path: 'repositories/_changeset', + name: 'branches_for_revision', + insert_bottom: 'table.revision-info', + text: '<%= l(:label_branches) %><%= changeset_branches(@changeset, 0) %>') + end +end -Deface::Override.new( - virtual_path: 'repositories/_changeset', - name: 'branches_for_revision', - insert_bottom: 'table.revision-info', - text: '<%= l(:label_branches) %><%= changeset_branches(@changeset, 0) %>') diff --git a/app/overrides/repositories/revisions.rb b/app/overrides/repositories/revisions.rb index b9e6f7f..1ae0920 100644 --- a/app/overrides/repositories/revisions.rb +++ b/app/overrides/repositories/revisions.rb @@ -1,14 +1,16 @@ -Deface::Override.new( - virtual_path: 'repositories/_revisions', - name: 'rebase_info_th', - insert_before: 'table.list.changesets th:contains(\'l(:label_date)\')', - text: '') - -Deface::Override.new( - virtual_path: 'repositories/_revisions', - name: 'rebase_info_td', - insert_before: 'table.list.changesets td.committed_on', - text: <<-REBASE_INFO_TD +module Repositories + module Revisions + Deface::Override.new( + virtual_path: 'repositories/_revisions', + name: 'rebase_info_th', + insert_before: 'table.list.changesets th:contains(\'l(:label_date)\')', + text: '') + + Deface::Override.new( + virtual_path: 'repositories/_revisions', + name: 'rebase_info_td', + insert_before: 'table.list.changesets td.committed_on', + text: <<-REBASE_INFO_TD <% if changeset.rebased_to %> @@ -38,5 +40,8 @@ <% end %> -REBASE_INFO_TD -) + REBASE_INFO_TD + ) + + end +end \ No newline at end of file diff --git a/app/views/global_hooks/index.html.erb b/app/views/global_hooks/index.html.erb index f928b27..07188b4 100644 --- a/app/views/global_hooks/index.html.erb +++ b/app/views/global_hooks/index.html.erb @@ -5,7 +5,7 @@

<%= l(:label_hooks_plural) %>

<% if @hooks.any? %> - +
@@ -14,7 +14,6 @@ - @@ -34,14 +33,8 @@

<% end -%> - - diff --git a/app/views/project_hooks/_hooks.html.erb b/app/views/project_hooks/_hooks.html.erb index 4a8341b..bde4bbc 100644 --- a/app/views/project_hooks/_hooks.html.erb +++ b/app/views/project_hooks/_hooks.html.erb @@ -15,15 +15,8 @@

<% end -%> - <% end %> + +<%= javascript_tag do %> + $(function() { $("table.project-hooks tbody").positionedItems(); }); +<% end %> \ No newline at end of file diff --git a/app/views/project_hooks/_index.html.erb b/app/views/project_hooks/_index.html.erb index 6022f1e..6b876bf 100644 --- a/app/views/project_hooks/_index.html.erb +++ b/app/views/project_hooks/_index.html.erb @@ -1,6 +1,6 @@ <% if @project.hooks.any? || GlobalHook.any? %> -
<%= l(:field_branches) %><%= l(:field_done_ratio) %> <%= l(:field_assigned_to) %> <%= l(:label_custom_field_plural) %><%= l(:button_sort) %>
- <%= reorder_links('global_hook', { - controller: 'global_hooks', - action: 'update', - id: hook - }, :put) %> - + <%= reorder_handle(hook) %> <%= link_to(l(:button_edit), edit_global_hook_path(hook), class: 'icon icon-edit') %> <%= link_to(l(:button_delete), global_hook_path(hook), @@ -56,3 +49,7 @@ <% else %>

<%= l(:label_no_data) %>

<% end %> + +<%= javascript_tag do %> + $(function() { $("table.global-hooks tbody").positionedItems(); }); +<% end %> \ No newline at end of file diff --git a/app/views/issues/_remote_revisions.html.erb b/app/views/issues/_remote_revisions.html.erb index 3d8c4c9..814566f 100644 --- a/app/views/issues/_remote_revisions.html.erb +++ b/app/views/issues/_remote_revisions.html.erb @@ -1,5 +1,5 @@ <% remote_revisions.each do |revision| %> -
+

<%= link_to_remote_revision(revision) %>
<%= authoring(revision.committer_date, revision.committer || revision.committer_string) %> diff --git a/app/views/project_hooks/_header.html.erb b/app/views/project_hooks/_header.html.erb index 14c0a1d..95005c9 100644 --- a/app/views/project_hooks/_header.html.erb +++ b/app/views/project_hooks/_header.html.erb @@ -6,6 +6,5 @@

<%= l(:field_done_ratio) %> <%= l(:field_assigned_to) %> <%= l(:label_custom_field_plural) %>
- <%= reorder_links('project_hook', { - controller: 'project_hooks', - action: 'update', - project_id: project.id, - id: hook.id - }, :put) %> - + <%= reorder_handle(hook, {:url => project_hook_path(hook.project.id, hook)}) %> <%= link_to_if_authorized(l(:button_edit), { controller: 'project_hooks', @@ -46,3 +39,7 @@
+
<% if GlobalHook.any? %> @@ -44,4 +44,4 @@ project_id: @project.id }, class: 'icon icon-add' %> -

+

\ No newline at end of file diff --git a/assets/images/icons.svg b/assets/images/icons.svg new file mode 100644 index 0000000..8018b5e --- /dev/null +++ b/assets/images/icons.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/server_link.png b/assets/images/server_link.png deleted file mode 100644 index e8821df..0000000 Binary files a/assets/images/server_link.png and /dev/null differ diff --git a/assets/images/transmit.png b/assets/images/transmit.png deleted file mode 100755 index f54bf73..0000000 Binary files a/assets/images/transmit.png and /dev/null differ diff --git a/assets/stylesheets/redmine_undev_git.css b/assets/stylesheets/redmine_undev_git.css index 50c71c6..86001d2 100644 --- a/assets/stylesheets/redmine_undev_git.css +++ b/assets/stylesheets/redmine_undev_git.css @@ -1,11 +1,3 @@ -.global_hooks_label { - background-image: url(/plugin_assets/redmine_undev_git/images/transmit.png); -} - -.remote_repo_sites_label { - background-image: url(/plugin_assets/redmine_undev_git/images/server_link.png); -} - table.list.changesets td.rebase-info { width: 15px; } @@ -32,11 +24,11 @@ tr.hooks-header { font-weight: bolder; } -.icon-white { background-image: url(/plugin_assets/redmine_undev_git/images/bullet_white.png); } -.icon-green { background-image: url(/plugin_assets/redmine_undev_git/images/bullet_green.png); } -.icon-yellow { background-image: url(/plugin_assets/redmine_undev_git/images/bullet_yellow.png); } -.icon-red { background-image: url(/plugin_assets/redmine_undev_git/images/bullet_red.png); } -.icon-black { background-image: url(/plugin_assets/redmine_undev_git/images/bullet_black.png); } +.icon-white { background-image: url(../images/bullet_white.png); } +.icon-green { background-image: url(../images/bullet_green.png); } +.icon-yellow { background-image: url(../images/bullet_yellow.png); } +.icon-red { background-image: url(../images/bullet_red.png); } +.icon-black { background-image: url(../images/bullet_black.png); } .right-bottom-buttons { float: right; diff --git a/config/icon_source.yml b/config/icon_source.yml new file mode 100644 index 0000000..d961243 --- /dev/null +++ b/config/icon_source.yml @@ -0,0 +1,10 @@ +# This file is used by icons rake task to download SVG icons from Tabler +# Keys description: +# - name: destination icon name (used in sprite_icon) +# svg: source icon name from Tabler Icons +# style: outline (default) or filled + +- name: home-link + svg: home-link +- name: antenna + svg: antenna diff --git a/config/locales/en.yml b/config/locales/en.yml index 7fa437b..1b5d178 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -46,6 +46,7 @@ en: text_commit_was_rebased_from: "This revision was rebased from %{rebased_from}" text_commit_was_rebased_to: "This revision was rebased to %{rebased_to}" text_remote_user_mappings: "Select or update the Redmine users mapped to each email found in the remote repository when issues are changed or linked to.\nUsers with the same Redmine and repository email are automatically mapped." + text_remote_user_mappings_updated: "Users mapping updated" notice_refetch_started: Repository will be refetched soon diff --git a/db/migrate/20130227120125_add_branches_to_changeset.rb b/db/migrate/20130227120125_add_branches_to_changeset.rb index d49c638..ac6ba39 100644 --- a/db/migrate/20130227120125_add_branches_to_changeset.rb +++ b/db/migrate/20130227120125_add_branches_to_changeset.rb @@ -1,4 +1,4 @@ -class AddBranchesToChangeset < ActiveRecord::Migration +class AddBranchesToChangeset < ActiveRecord::Migration[4.2] def change add_column :changesets, :branches, :text unless column_exists? :changesets, :branches end diff --git a/db/migrate/20130227120324_add_patch_id_to_changeset.rb b/db/migrate/20130227120324_add_patch_id_to_changeset.rb index 93a4904..669bbec 100644 --- a/db/migrate/20130227120324_add_patch_id_to_changeset.rb +++ b/db/migrate/20130227120324_add_patch_id_to_changeset.rb @@ -1,4 +1,4 @@ -class AddPatchIdToChangeset < ActiveRecord::Migration +class AddPatchIdToChangeset < ActiveRecord::Migration[4.2] def change add_column :changesets, :patch_id, :string unless column_exists? :changesets, :patch_id end diff --git a/db/migrate/20130227120415_add_authored_on_to_changeset.rb b/db/migrate/20130227120415_add_authored_on_to_changeset.rb index bfacaa7..bcf6694 100644 --- a/db/migrate/20130227120415_add_authored_on_to_changeset.rb +++ b/db/migrate/20130227120415_add_authored_on_to_changeset.rb @@ -1,4 +1,4 @@ -class AddAuthoredOnToChangeset < ActiveRecord::Migration +class AddAuthoredOnToChangeset < ActiveRecord::Migration[4.2] def change add_column :changesets, :authored_on, :datetime unless column_exists? :changesets, :authored_on end diff --git a/db/migrate/20130301084626_create_hooks.rb b/db/migrate/20130301084626_create_hooks.rb index 7fa5675..9def1e9 100644 --- a/db/migrate/20130301084626_create_hooks.rb +++ b/db/migrate/20130301084626_create_hooks.rb @@ -1,4 +1,4 @@ -class CreateHooks < ActiveRecord::Migration +class CreateHooks < ActiveRecord::Migration[4.2] def change create_table :hooks, force: true do |t| t.string :type, null: false diff --git a/db/migrate/20130304164549_add_rebased_from_to_changeset.rb b/db/migrate/20130304164549_add_rebased_from_to_changeset.rb index 587ace4..c09ee8b 100644 --- a/db/migrate/20130304164549_add_rebased_from_to_changeset.rb +++ b/db/migrate/20130304164549_add_rebased_from_to_changeset.rb @@ -1,4 +1,4 @@ -class AddRebasedFromToChangeset < ActiveRecord::Migration +class AddRebasedFromToChangeset < ActiveRecord::Migration[4.2] def change add_column :changesets, :rebased_from_id, :integer add_index :changesets, :rebased_from_id diff --git a/db/migrate/20130902134241_add_assignee_to_hooks.rb b/db/migrate/20130902134241_add_assignee_to_hooks.rb index 004be01..f94063e 100644 --- a/db/migrate/20130902134241_add_assignee_to_hooks.rb +++ b/db/migrate/20130902134241_add_assignee_to_hooks.rb @@ -1,4 +1,4 @@ -class AddAssigneeToHooks < ActiveRecord::Migration +class AddAssigneeToHooks < ActiveRecord::Migration[4.2] def change add_column :hooks, :new_assigned_to_id, :integer end diff --git a/db/migrate/20130904101809_remove_prefix_new_from_hooks_columns.rb b/db/migrate/20130904101809_remove_prefix_new_from_hooks_columns.rb index eddb530..b14dd51 100644 --- a/db/migrate/20130904101809_remove_prefix_new_from_hooks_columns.rb +++ b/db/migrate/20130904101809_remove_prefix_new_from_hooks_columns.rb @@ -1,4 +1,4 @@ -class RemovePrefixNewFromHooksColumns < ActiveRecord::Migration +class RemovePrefixNewFromHooksColumns < ActiveRecord::Migration[4.2] def change rename_column :hooks, :new_status_id, :status_id rename_column :hooks, :new_done_ratio, :done_ratio diff --git a/db/migrate/20130909085812_change_repositories_extra_info_limit.rb b/db/migrate/20130909085812_change_repositories_extra_info_limit.rb index f9d8f2c..c2df9ac 100644 --- a/db/migrate/20130909085812_change_repositories_extra_info_limit.rb +++ b/db/migrate/20130909085812_change_repositories_extra_info_limit.rb @@ -1,4 +1,4 @@ -class ChangeRepositoriesExtraInfoLimit < ActiveRecord::Migration +class ChangeRepositoriesExtraInfoLimit < ActiveRecord::Migration[4.2] def change if defined?(ActiveRecord::ConnectionAdapters::MysqlAdapter) && ActiveRecord::Base.connection.instance_of?( diff --git a/db/migrate/20140411145701_add_assignee_type_to_hooks.rb b/db/migrate/20140411145701_add_assignee_type_to_hooks.rb index 0c30767..135f527 100644 --- a/db/migrate/20140411145701_add_assignee_type_to_hooks.rb +++ b/db/migrate/20140411145701_add_assignee_type_to_hooks.rb @@ -1,4 +1,4 @@ -class AddAssigneeTypeToHooks < ActiveRecord::Migration +class AddAssigneeTypeToHooks < ActiveRecord::Migration[4.2] def up add_column :hooks, :assignee_type, :string, default: HookBase::NOBODY update "UPDATE hooks SET assignee_type='#{HookBase::NOBODY}' WHERE assignee_type IS NULL AND assigned_to_id IS NULL" diff --git a/db/migrate/20140609090423_create_fetch_events.rb b/db/migrate/20140609090423_create_fetch_events.rb index 77257b5..6ae946d 100644 --- a/db/migrate/20140609090423_create_fetch_events.rb +++ b/db/migrate/20140609090423_create_fetch_events.rb @@ -1,4 +1,4 @@ -class CreateFetchEvents < ActiveRecord::Migration +class CreateFetchEvents < ActiveRecord::Migration[4.2] def change create_table :fetch_events do |t| t.references :repository diff --git a/db/migrate/20141021111906_create_remote_repo_sites.rb b/db/migrate/20141021111906_create_remote_repo_sites.rb index 537996f..11f3971 100644 --- a/db/migrate/20141021111906_create_remote_repo_sites.rb +++ b/db/migrate/20141021111906_create_remote_repo_sites.rb @@ -1,4 +1,4 @@ -class CreateRemoteRepoSites < ActiveRecord::Migration +class CreateRemoteRepoSites < ActiveRecord::Migration[4.2] def change create_table :remote_repo_sites do |t| t.string :type diff --git a/db/migrate/20141021121817_create_remote_repos.rb b/db/migrate/20141021121817_create_remote_repos.rb index 924ebde..ae9ccf2 100644 --- a/db/migrate/20141021121817_create_remote_repos.rb +++ b/db/migrate/20141021121817_create_remote_repos.rb @@ -1,4 +1,4 @@ -class CreateRemoteRepos < ActiveRecord::Migration +class CreateRemoteRepos < ActiveRecord::Migration[4.2] def change create_table :remote_repos do |t| t.references :remote_repo_site diff --git a/db/migrate/20141029092201_create_remote_repo_revisions.rb b/db/migrate/20141029092201_create_remote_repo_revisions.rb index 99a6548..31acc17 100644 --- a/db/migrate/20141029092201_create_remote_repo_revisions.rb +++ b/db/migrate/20141029092201_create_remote_repo_revisions.rb @@ -1,4 +1,4 @@ -class CreateRemoteRepoRevisions < ActiveRecord::Migration +class CreateRemoteRepoRevisions < ActiveRecord::Migration[4.2] def change create_table :remote_repo_revisions do |t| t.references :remote_repo diff --git a/db/migrate/20141029092202_create_remote_repo_refs.rb b/db/migrate/20141029092202_create_remote_repo_refs.rb index 6117c2e..f419185 100644 --- a/db/migrate/20141029092202_create_remote_repo_refs.rb +++ b/db/migrate/20141029092202_create_remote_repo_refs.rb @@ -1,4 +1,4 @@ -class CreateRemoteRepoRefs < ActiveRecord::Migration +class CreateRemoteRepoRefs < ActiveRecord::Migration[4.2] def change create_table :remote_repo_refs do |t| t.references :remote_repo diff --git a/db/migrate/20141029092203_create_remote_repo_hooks.rb b/db/migrate/20141029092203_create_remote_repo_hooks.rb index 184d8eb..98116e4 100644 --- a/db/migrate/20141029092203_create_remote_repo_hooks.rb +++ b/db/migrate/20141029092203_create_remote_repo_hooks.rb @@ -1,4 +1,4 @@ -class CreateRemoteRepoHooks < ActiveRecord::Migration +class CreateRemoteRepoHooks < ActiveRecord::Migration[4.2] def change create_table :remote_repo_hooks do |t| t.references :remote_repo_revision diff --git a/db/migrate/20141029092204_create_remote_repo_related_issues.rb b/db/migrate/20141029092204_create_remote_repo_related_issues.rb index 5d89eeb..8e680ca 100644 --- a/db/migrate/20141029092204_create_remote_repo_related_issues.rb +++ b/db/migrate/20141029092204_create_remote_repo_related_issues.rb @@ -1,4 +1,4 @@ -class CreateRemoteRepoRelatedIssues < ActiveRecord::Migration +class CreateRemoteRepoRelatedIssues < ActiveRecord::Migration[4.2] def change create_table :remote_repo_related_issues do |t| t.references :remote_repo_revision diff --git a/db/migrate/20141029092205_create_remote_repo_refs_revs.rb b/db/migrate/20141029092205_create_remote_repo_refs_revs.rb index c1227a1..71a0525 100644 --- a/db/migrate/20141029092205_create_remote_repo_refs_revs.rb +++ b/db/migrate/20141029092205_create_remote_repo_refs_revs.rb @@ -1,4 +1,4 @@ -class CreateRemoteRepoRefsRevs < ActiveRecord::Migration +class CreateRemoteRepoRefsRevs < ActiveRecord::Migration[4.2] def change create_table :remote_repo_refs_revs do |t| t.references :remote_repo_revision diff --git a/db/migrate/20141114095037_create_remote_repo_site_users.rb b/db/migrate/20141114095037_create_remote_repo_site_users.rb index 1ad92fc..5895a00 100644 --- a/db/migrate/20141114095037_create_remote_repo_site_users.rb +++ b/db/migrate/20141114095037_create_remote_repo_site_users.rb @@ -1,4 +1,4 @@ -class CreateRemoteRepoSiteUsers < ActiveRecord::Migration +class CreateRemoteRepoSiteUsers < ActiveRecord::Migration[4.2] def change create_table :remote_repo_site_users do |t| t.references :remote_repo_site diff --git a/db/migrate/20141126131451_add_remote_repo_hook_id_to_remote_repo_hooks.rb b/db/migrate/20141126131451_add_remote_repo_hook_id_to_remote_repo_hooks.rb index a33a949..796c9dc 100644 --- a/db/migrate/20141126131451_add_remote_repo_hook_id_to_remote_repo_hooks.rb +++ b/db/migrate/20141126131451_add_remote_repo_hook_id_to_remote_repo_hooks.rb @@ -1,4 +1,4 @@ -class AddRemoteRepoHookIdToRemoteRepoHooks < ActiveRecord::Migration +class AddRemoteRepoHookIdToRemoteRepoHooks < ActiveRecord::Migration[4.2] def change add_column :remote_repo_hooks, :remote_repo_ref_id, :integer end diff --git a/db/migrate/20141202101016_add_remote_repo_revision_id_to_time_entries.rb b/db/migrate/20141202101016_add_remote_repo_revision_id_to_time_entries.rb index 6ba026b..b48cf82 100644 --- a/db/migrate/20141202101016_add_remote_repo_revision_id_to_time_entries.rb +++ b/db/migrate/20141202101016_add_remote_repo_revision_id_to_time_entries.rb @@ -1,4 +1,4 @@ -class AddRemoteRepoRevisionIdToTimeEntries < ActiveRecord::Migration +class AddRemoteRepoRevisionIdToTimeEntries < ActiveRecord::Migration[4.2] def change add_column :time_entries, :remote_repo_revision_id, :integer end diff --git a/db/migrate/20141210111245_add_author_to_remote_repo_hook.rb b/db/migrate/20141210111245_add_author_to_remote_repo_hook.rb index 297ea6b..3023c30 100644 --- a/db/migrate/20141210111245_add_author_to_remote_repo_hook.rb +++ b/db/migrate/20141210111245_add_author_to_remote_repo_hook.rb @@ -1,4 +1,4 @@ -class AddAuthorToRemoteRepoHook < ActiveRecord::Migration +class AddAuthorToRemoteRepoHook < ActiveRecord::Migration[4.2] def change add_column :remote_repo_hooks, :author_string, :string add_column :remote_repo_hooks, :author_date, :datetime diff --git a/db/migrate/20141211133054_add_committer_email_to_remote_repo_revision.rb b/db/migrate/20141211133054_add_committer_email_to_remote_repo_revision.rb index 6a2e4d9..ea1f45a 100644 --- a/db/migrate/20141211133054_add_committer_email_to_remote_repo_revision.rb +++ b/db/migrate/20141211133054_add_committer_email_to_remote_repo_revision.rb @@ -1,4 +1,4 @@ -class AddCommitterEmailToRemoteRepoRevision < ActiveRecord::Migration +class AddCommitterEmailToRemoteRepoRevision < ActiveRecord::Migration[4.2] def change remove_column :remote_repo_revisions, :committer_string remove_column :remote_repo_revisions, :author_string diff --git a/db/migrate/20141211140624_add_author_email_to_remote_repo_hooks.rb b/db/migrate/20141211140624_add_author_email_to_remote_repo_hooks.rb index 7d929a9..185b082 100644 --- a/db/migrate/20141211140624_add_author_email_to_remote_repo_hooks.rb +++ b/db/migrate/20141211140624_add_author_email_to_remote_repo_hooks.rb @@ -1,4 +1,4 @@ -class AddAuthorEmailToRemoteRepoHooks < ActiveRecord::Migration +class AddAuthorEmailToRemoteRepoHooks < ActiveRecord::Migration[4.2] def change remove_column :remote_repo_hooks, :author_string add_column :remote_repo_hooks, :author_email, :string diff --git a/init.rb b/init.rb index 5c4794f..98c580f 100644 --- a/init.rb +++ b/init.rb @@ -13,37 +13,43 @@ requires_redmine version_or_higher: '3.1' + plugin_id = 'redmine_undev_git' + # Global hooks menu :admin_menu, - :global_hooks, - { controller: 'global_hooks', action: 'index' }, - html: { class: 'global_hooks_label' } + :global_hooks, + { controller: 'global_hooks', action: 'index' }, + :icon => 'antenna', + :plugin => plugin_id, + html: { class: 'icon icon-antenna' } permission :edit_global_hooks, - { global_hooks: [:index, :new, :create, :edit, :update, :destroy] }, - require: :admin + { global_hooks: [:index, :new, :create, :edit, :update, :destroy] }, + require: :admin # Project hooks project_module :hooks do permission :edit_hooks, - { project_hooks: [:new, :create, :edit, :update, :destroy] }, - require: :member + { project_hooks: [:new, :create, :edit, :update, :destroy] }, + require: :member end # Plugin settings settings partial: 'settings/undev_git_settings', - default: { - max_branches_in_assoc: 5, - fetch_by_web_hook: '0' - } + default: { + max_branches_in_assoc: 5, + fetch_by_web_hook: '0' + } # Remote repositories menu :admin_menu, - :remote_repo_sites, - { controller: 'remote_repo_sites', action: 'index' }, - html: { class: 'remote_repo_sites_label' } + :remote_repo_sites, + { controller: 'remote_repo_sites', action: 'index' }, + :icon => 'home-link', + :plugin => plugin_id, + html: { class: 'icon icon-home-link' } permission :edit_remote_repo_sites, - { remote_repo_sites: [:index, :show] }, - require: :admin + { remote_repo_sites: [:index, :show] }, + require: :admin # permission for custom buttons the same as :edit_issues Redmine::AccessControl.permission(:manage_related_issues).actions.push *%w{ @@ -52,7 +58,23 @@ end -require 'redmine_undev_git' - # Add UndevGit SCM adapter and repository Redmine::Scm::Base.add 'UndevGit' + +# Apply patches +RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::ProjectPatch, Project +RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::IssuePatch, Issue +RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::ChangesetPatch, Changeset +RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::TimeEntryPatch, TimeEntry +RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::RepositoryPatch, Repository +RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::UndevGitHelperInclude, + IssuesController, RepositoriesController +RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::ProjectsControllerPatch, ProjectsController +RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::IssuesControllerPatch, IssuesController +RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::IssuesHelperPatch, IssuesHelper +RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::RepositoriesControllerPatch, RepositoriesController +RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::ProjectsHelperPatch, + CalendarsController, GanttsController, IssuesController, VersionsController, ProjectsController +RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::RedmineScmBasePatch, Redmine::Scm::Base +RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::CustomFieldPatch, CustomField +RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::CustomFieldValuePatch, CustomFieldValue \ No newline at end of file diff --git a/lib/redmine/scm/adapters/undev_git_adapter.rb b/lib/redmine/scm/adapters/undev_git_adapter.rb index ff4a922..6888aa6 100644 --- a/lib/redmine/scm/adapters/undev_git_adapter.rb +++ b/lib/redmine/scm/adapters/undev_git_adapter.rb @@ -1,5 +1,5 @@ -require_dependency 'redmine/scm/adapters/git_adapter' -require_dependency 'redmine/scm/adapters/undev_git_revision' +#require_dependency 'redmine/scm/adapters/git_adapter' +#require_dependency 'redmine/scm/adapters/undev_git_revision' module Redmine::Scm::Adapters class UndevGitAdapter < AbstractAdapter @@ -50,7 +50,7 @@ def scm_command_version end def scm_version_from_command_line - shell_out("#{sq_bin} --version --no-color") { |stdin, stdout| return stdout.read.to_s } + shellout("#{sq_bin} --version") { |io| io.read }.to_s end end @@ -101,8 +101,8 @@ def default_branch return nil if bras.nil? default_bras = bras.select { |x| x.is_default == true } return default_bras.first.to_s unless default_bras.empty? - master_bras = bras.select { |x| x.to_s == 'master' } - master_bras.empty? ? bras.first.to_s : 'master' + master_bras = bras.select { |x| x.to_s == 'master' || x.to_s == 'main'} + master_bras.empty? ? bras.first.to_s : 'main' end def entry(path = nil, identifier = nil) @@ -210,7 +210,7 @@ def annotate(path, identifier = nil) blame = Annotate.new content = git_binread(cmd_args) # git annotates binary files - return nil if content.is_binary_data? + return nil if Redmine::Scm::Adapters::ScmData.binary?(content) identifier = '' # git shows commit author on the first occurrence only authors_by_commit = {} @@ -406,6 +406,20 @@ def clone_repository raise(Redmine::Scm::Adapters::CommandFailed, errors) if existstatus != 0 end + def valid_name?(name) + return false unless name.is_a?(String) + + return false if name.start_with?('-', '/', 'refs/heads/', 'refs/remotes/') + return false if name == 'HEAD' + + git_cmd ['show-ref', '--heads', '--tags', '--quiet', '--', name] + true + rescue ScmCommandAborted + false + rescue Redmine::Scm::Adapters::CommandFailed + false + end + private # execute git command and yield block for every chunk @@ -423,7 +437,7 @@ def chunked_git_log(path, options, &block) chunk_size = [options[:limit] - skip, chunk_size].min end - cmd_args = %w{log --date=iso --date-order --name-status --no-color} + cmd_args = %w{log --date=iso --date-order --name-status --no-color --no-renames} cmd_args << "--format=#{options[:format]}" cmd_args << '--all' if revisions.empty? && options[:all] diff --git a/lib/redmine/scm/adapters/undev_git_revision.rb b/lib/redmine/scm/adapters/undev_git_revision.rb index 22a6cf5..ed9fa45 100644 --- a/lib/redmine/scm/adapters/undev_git_revision.rb +++ b/lib/redmine/scm/adapters/undev_git_revision.rb @@ -26,59 +26,4 @@ def looks_like_rebased? time != authored_on end end - - class UndevGitRevisions < Hash - def initialize(*args) - super - @delayed_drags = [] - end - - def drag_branches_to_parents!(rev) - return nil if rev.parents.empty? - - # for merge commit insert branches to the parent on the same branch - # and append to others - if rev.parents.length > 1 - - # parent on same branch - apply_branches!(rev.parents[0], rev.branches, false) - - parents = rev.parents[1..-1] - parents.each do |parent_sha| - # parents from merged branches - apply_branches!(parent_sha, rev.branches, true) - end - - else - - # just append branches to parent commit - apply_branches!(rev.parents[0], rev.branches, true) - end - end - - def delayed_drags? - @delayed_drags.any? - end - - def delayed_drags - delayed_drags? ? @delayed_drags.dup : nil - end - - def apply_delayed_drags!(_delayed_drags) - _delayed_drags.each { |p| apply_branches!(*p) } - end - - private - - def apply_branches!(sha, branches, append) - rev = self[sha] - if rev - # if revision does not contain applied branches then drag them to rev's parents - drag_branches_to_parents!(rev) if rev.add_branches(branches, append) - else - # revision is out of boundary - store operation - @delayed_drags << [sha, branches, append] - end - end - end end diff --git a/lib/redmine/scm/adapters/undev_git_revisions.rb b/lib/redmine/scm/adapters/undev_git_revisions.rb new file mode 100644 index 0000000..a864d4c --- /dev/null +++ b/lib/redmine/scm/adapters/undev_git_revisions.rb @@ -0,0 +1,56 @@ +module Redmine::Scm::Adapters + class UndevGitRevisions < Hash + def initialize(*args) + super + @delayed_drags = [] + end + + def drag_branches_to_parents!(rev) + return nil if rev.parents.empty? + + # for merge commit insert branches to the parent on the same branch + # and append to others + if rev.parents.length > 1 + + # parent on same branch + apply_branches!(rev.parents[0], rev.branches, false) + + parents = rev.parents[1..-1] + parents.each do |parent_sha| + # parents from merged branches + apply_branches!(parent_sha, rev.branches, true) + end + + else + + # just append branches to parent commit + apply_branches!(rev.parents[0], rev.branches, true) + end + end + + def delayed_drags? + @delayed_drags.any? + end + + def delayed_drags + delayed_drags? ? @delayed_drags.dup : nil + end + + def apply_delayed_drags!(_delayed_drags) + _delayed_drags.each { |p| apply_branches!(*p) } + end + + private + + def apply_branches!(sha, branches, append) + rev = self[sha] + if rev + # if revision does not contain applied branches then drag them to rev's parents + drag_branches_to_parents!(rev) if rev.add_branches(branches, append) + else + # revision is out of boundary - store operation + @delayed_drags << [sha, branches, append] + end + end + end +end \ No newline at end of file diff --git a/lib/redmine_undev_git.rb b/lib/redmine_undev_git.rb index f48b7c6..01f8a3a 100644 --- a/lib/redmine_undev_git.rb +++ b/lib/redmine_undev_git.rb @@ -1,5 +1,4 @@ module RedmineUndevGit - def self.max_branches_in_assoc Setting.plugin_redmine_undev_git[:max_branches_in_assoc].to_i end @@ -32,23 +31,4 @@ def self.prepend_patch(patch, *targets) # Require all dependencies Dir[File.join(__dir__, 'redmine_undev_git/**/*.rb')].each do |fn| require_dependency fn -end - -# Apply patches -ActionDispatch::Callbacks.to_prepare do - RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::ProjectPatch, Project - RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::IssuePatch, Issue - RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::ChangesetPatch, Changeset - RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::TimeEntryPatch, TimeEntry - RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::RepositoryPatch, Repository - RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::UndevGitHelperInclude, - IssuesController, RepositoriesController - RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::ProjectsControllerPatch, ProjectsController - RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::IssuesControllerPatch, IssuesController - RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::RepositoriesControllerPatch, RepositoriesController - RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::ProjectsHelperPatch, - CalendarsController, GanttsController, IssuesController, VersionsController, ProjectsController - RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::RedmineScmBasePatch, Redmine::Scm::Base - RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::CustomFieldPatch, CustomField - RedmineUndevGit.prepend_patch RedmineUndevGit::Patches::CustomFieldValuePatch, CustomFieldValue -end +end \ No newline at end of file diff --git a/lib/redmine_undev_git/patches/changeset_patch.rb b/lib/redmine_undev_git/patches/changeset_patch.rb index 3982ad6..e7a0130 100644 --- a/lib/redmine_undev_git/patches/changeset_patch.rb +++ b/lib/redmine_undev_git/patches/changeset_patch.rb @@ -7,7 +7,7 @@ module ChangesetPatch def self.prepended(base) base.class_eval do - serialize :branches, Array + serialize :branches, type: Array belongs_to :rebased_from, class_name: 'Changeset' diff --git a/lib/redmine_undev_git/patches/issues_controller_patch.rb b/lib/redmine_undev_git/patches/issues_controller_patch.rb index 1275cfe..a21f14c 100644 --- a/lib/redmine_undev_git/patches/issues_controller_patch.rb +++ b/lib/redmine_undev_git/patches/issues_controller_patch.rb @@ -7,19 +7,29 @@ module IssuesControllerPatch def self.prepended(base) base.class_eval do - helper_method :remote_revisions + # helper_method :remote_revisions # authorize remote_revision after find project and issue - skip_before_filter :authorize, only: [:remove_remote_revision] - before_filter only: [:remove_remote_revision] { find_issue } - before_filter only: [:remove_remote_revision] { authorize } + skip_before_action :authorize, only: [:remove_remote_revision] + before_action(only: %i[remove_remote_revision]) { find_issue } + before_action(only: %i[remove_remote_revision]) { authorize } + + end + end + + def issue_tab + super + tab = params[:name] + case tab + when 'remote-changesets' + render :partial => 'issues/remote_revisions', :locals => { :changesets => @changesets, :project => @project } end end def remove_remote_revision remote_repo = RemoteRepo.find(params[:remote_repo_id]) - rev = remote_repo.find_revision(params[:sha]) || raise(ActiveRecord::RecordNotFound) + rev = remote_repo.find_revision(params[:sha]) || raise(ActiveRecord::RecordNotFound) if rev.related_issues.include?(@issue) rev.related_issues.delete(@issue) flash[:notice] = l(:notice_successful_update) @@ -28,14 +38,6 @@ def remove_remote_revision rescue ActiveRecord::RecordNotFound render_404 end - - private - - def remote_revisions - @remote_revisions ||= - User.current.allowed_to?(:view_changesets, @issue.project) ? @issue.remote_revisions.all : nil - end - end end end diff --git a/lib/redmine_undev_git/patches/issues_helper_patch.rb b/lib/redmine_undev_git/patches/issues_helper_patch.rb new file mode 100644 index 0000000..aa2671a --- /dev/null +++ b/lib/redmine_undev_git/patches/issues_helper_patch.rb @@ -0,0 +1,34 @@ +require_dependency 'issues_controller' + +module RedmineUndevGit + module Patches + module IssuesHelperPatch + + def issue_history_tabs + remote_revisions + tabs = super + + if !@has_changesets && @remote_revisions.present? + tabs << { + :name => 'remote-changesets', + :label => :label_associated_remote_revisions, + :remote => true, + :onclick => + "getRemoteTab('remote-changesets', " \ + "'#{tab_issue_path(@issue, :name => 'remote-changesets')}', " \ + "'#{issue_path(@issue, :tab => 'remote-changesets')}')" + } + end + tabs + end + + private + + def remote_revisions + @remote_revisions ||= + User.current.allowed_to?(:view_changesets, @issue.project) ? @issue.remote_revisions.all : nil + end + + end + end +end diff --git a/lib/redmine_undev_git/patches/repository_patch.rb b/lib/redmine_undev_git/patches/repository_patch.rb index 40450a1..269bb6e 100644 --- a/lib/redmine_undev_git/patches/repository_patch.rb +++ b/lib/redmine_undev_git/patches/repository_patch.rb @@ -1,6 +1,6 @@ require_dependency 'repository' -class Repository < ActiveRecord::Base +class Repository < ApplicationRecord KEEP_FETCH_EVENTS = 100 RED_STATUS_THRESHOLD = 3 end diff --git a/lib/redmine_undev_git/services/bitbucket.rb b/lib/redmine_undev_git/services/bitbucket.rb index c46ec13..8c5d0d7 100644 --- a/lib/redmine_undev_git/services/bitbucket.rb +++ b/lib/redmine_undev_git/services/bitbucket.rb @@ -20,7 +20,7 @@ def repository_url end def web_hook - @web_hook ||= JSON.parse(@request.params[:payload]) + @web_hook ||= JSON.parse(@request.raw_post) end def url_parts diff --git a/lib/redmine_undev_git/services/errors.rb b/lib/redmine_undev_git/services/errors.rb.bak similarity index 100% rename from lib/redmine_undev_git/services/errors.rb rename to lib/redmine_undev_git/services/errors.rb.bak diff --git a/lib/redmine_undev_git/services/service_error.rb b/lib/redmine_undev_git/services/service_error.rb new file mode 100644 index 0000000..791f0f6 --- /dev/null +++ b/lib/redmine_undev_git/services/service_error.rb @@ -0,0 +1,2 @@ +class RedmineUndevGit::Services::ServiceError < StandardError +end \ No newline at end of file diff --git a/lib/redmine_undev_git/services/wrong_repo_url.rb b/lib/redmine_undev_git/services/wrong_repo_url.rb new file mode 100644 index 0000000..cbecff2 --- /dev/null +++ b/lib/redmine_undev_git/services/wrong_repo_url.rb @@ -0,0 +1,2 @@ +class RedmineUndevGit::Services::WrongRepoUrl < RedmineUndevGit::Services::ServiceError +end diff --git a/test/factories/redmine/enabled_module.rb b/test/factories/redmine/enabled_module.rb index 21cb735..457c964 100644 --- a/test/factories/redmine/enabled_module.rb +++ b/test/factories/redmine/enabled_module.rb @@ -1,4 +1,4 @@ -FactoryGirl.define do +FactoryBot.define do factory :enabled_module do name project diff --git a/test/factories/redmine/enumeration.rb b/test/factories/redmine/enumeration.rb index edf7f44..c09a4b7 100644 --- a/test/factories/redmine/enumeration.rb +++ b/test/factories/redmine/enumeration.rb @@ -1,21 +1,21 @@ -FactoryGirl.define do +FactoryBot.define do factory :enumeration do name factory :enum_document_category do - type 'DocumentCategory' + type { 'DocumentCategory' } end factory :enum_issue_priority do - type 'IssuePriority' + type { 'IssuePriority' } end factory :enum_time_entry_activity do - type 'TimeEntryActivity' + type { 'TimeEntryActivity' } end factory :enum_enumeration do - type 'Enumeration' + type { 'Enumeration' } end end end diff --git a/test/factories/redmine/issue.rb b/test/factories/redmine/issue.rb index 8554f1d..0764778 100644 --- a/test/factories/redmine/issue.rb +++ b/test/factories/redmine/issue.rb @@ -1,4 +1,4 @@ -FactoryGirl.define do +FactoryBot.define do factory :issue do subject { generate(:name) } priority diff --git a/test/factories/redmine/issue_category.rb b/test/factories/redmine/issue_category.rb index ee246fb..67953be 100644 --- a/test/factories/redmine/issue_category.rb +++ b/test/factories/redmine/issue_category.rb @@ -1,4 +1,4 @@ -FactoryGirl.define do +FactoryBot.define do factory :issue_category do name end diff --git a/test/factories/redmine/issue_priority.rb b/test/factories/redmine/issue_priority.rb index 8b95bdd..e9a8576 100644 --- a/test/factories/redmine/issue_priority.rb +++ b/test/factories/redmine/issue_priority.rb @@ -1,4 +1,4 @@ -FactoryGirl.define do +FactoryBot.define do factory :issue_priority, aliases: [:priority] do name end diff --git a/test/factories/redmine/issue_status.rb b/test/factories/redmine/issue_status.rb index 8c5af12..9eb079e 100644 --- a/test/factories/redmine/issue_status.rb +++ b/test/factories/redmine/issue_status.rb @@ -1,4 +1,4 @@ -FactoryGirl.define do +FactoryBot.define do factory :issue_status, aliases: [:status] do name end diff --git a/test/factories/redmine/member.rb b/test/factories/redmine/member.rb index 2c9eb6d..ea5c5f1 100644 --- a/test/factories/redmine/member.rb +++ b/test/factories/redmine/member.rb @@ -1,4 +1,4 @@ -FactoryGirl.define do +FactoryBot.define do factory :member do pricipal end diff --git a/test/factories/redmine/member_role.rb b/test/factories/redmine/member_role.rb index 11f2da5..42b3640 100644 --- a/test/factories/redmine/member_role.rb +++ b/test/factories/redmine/member_role.rb @@ -1,4 +1,4 @@ -FactoryGirl.define do +FactoryBot.define do factory :member_role do member role diff --git a/test/factories/redmine/principal.rb b/test/factories/redmine/principal.rb index 18efa8a..444bed6 100644 --- a/test/factories/redmine/principal.rb +++ b/test/factories/redmine/principal.rb @@ -1,4 +1,4 @@ -FactoryGirl.define do +FactoryBot.define do factory :principal do name end diff --git a/test/factories/redmine/project.rb b/test/factories/redmine/project.rb index 641583a..ae25157 100644 --- a/test/factories/redmine/project.rb +++ b/test/factories/redmine/project.rb @@ -1,4 +1,4 @@ -FactoryGirl.define do +FactoryBot.define do factory :project do name identifier diff --git a/test/factories/redmine/role.rb b/test/factories/redmine/role.rb index 9dd4c45..1095255 100644 --- a/test/factories/redmine/role.rb +++ b/test/factories/redmine/role.rb @@ -1,4 +1,4 @@ -FactoryGirl.define do +FactoryBot.define do factory :role do name end diff --git a/test/factories/redmine/tracker.rb b/test/factories/redmine/tracker.rb index 51ab7b3..9676230 100644 --- a/test/factories/redmine/tracker.rb +++ b/test/factories/redmine/tracker.rb @@ -1,4 +1,4 @@ -FactoryGirl.define do +FactoryBot.define do factory :tracker do name association :default_status, factory: :issue_status diff --git a/test/factories/redmine/user.rb b/test/factories/redmine/user.rb index bcab7d7..0b7b1cc 100644 --- a/test/factories/redmine/user.rb +++ b/test/factories/redmine/user.rb @@ -1,10 +1,10 @@ -FactoryGirl.define do +FactoryBot.define do factory :user, aliases: [:author, :committer], class: User do login { generate :name } firstname { generate :name } lastname { generate :name } mail { generate :email } - status 1 # Older version of redmine does not have Principal::STATUS_ACTIVE constant + status { 1 } # Older version of redmine does not have Principal::STATUS_ACTIVE constant factory :admin_user do after(:create) do |user| diff --git a/test/factories/redmine/version.rb b/test/factories/redmine/version.rb index c038953..065a844 100644 --- a/test/factories/redmine/version.rb +++ b/test/factories/redmine/version.rb @@ -1,4 +1,4 @@ -FactoryGirl.define do +FactoryBot.define do factory :version do name end diff --git a/test/factories/redmine_undev_git/global_hook.rb b/test/factories/redmine_undev_git/global_hook.rb index 121f933..5bdb746 100644 --- a/test/factories/redmine_undev_git/global_hook.rb +++ b/test/factories/redmine_undev_git/global_hook.rb @@ -1,7 +1,7 @@ -FactoryGirl.define do +FactoryBot.define do factory :global_hook do - branches '*' - keywords 'fix, fixes, close, closes' - assignee_type GlobalHook::NOBODY + branches { '*' } + keywords { 'fix, fixes, close, closes' } + assignee_type { GlobalHook::NOBODY } end end diff --git a/test/factories/redmine_undev_git/project_hook.rb b/test/factories/redmine_undev_git/project_hook.rb index 53f2d56..bd478bf 100644 --- a/test/factories/redmine_undev_git/project_hook.rb +++ b/test/factories/redmine_undev_git/project_hook.rb @@ -1,8 +1,8 @@ -FactoryGirl.define do +FactoryBot.define do factory :project_hook do project - branches '*' - keywords 'fix, fixes, close, closes' - assignee_type GlobalHook::NOBODY + branches { '*' } + keywords { 'fix, fixes, close, closes' } + assignee_type { GlobalHook::NOBODY } end end diff --git a/test/factories/redmine_undev_git/remote_repo.rb b/test/factories/redmine_undev_git/remote_repo.rb index 045c7d6..2feadbe 100644 --- a/test/factories/redmine_undev_git/remote_repo.rb +++ b/test/factories/redmine_undev_git/remote_repo.rb @@ -1,4 +1,4 @@ -FactoryGirl.define do +FactoryBot.define do factory :remote_repo, aliases: [:repo] do site sequence(:path_to_repo) { |n| "user#{n}/name#{n}" } diff --git a/test/factories/redmine_undev_git/remote_repo_hook.rb b/test/factories/redmine_undev_git/remote_repo_hook.rb index e50fe39..3be5127 100644 --- a/test/factories/redmine_undev_git/remote_repo_hook.rb +++ b/test/factories/redmine_undev_git/remote_repo_hook.rb @@ -1,4 +1,4 @@ -FactoryGirl.define do +FactoryBot.define do factory :remote_repo_hook do issue revision { create :remote_repo_revision } diff --git a/test/factories/redmine_undev_git/remote_repo_ref.rb b/test/factories/redmine_undev_git/remote_repo_ref.rb index 0746671..c23dcb2 100644 --- a/test/factories/redmine_undev_git/remote_repo_ref.rb +++ b/test/factories/redmine_undev_git/remote_repo_ref.rb @@ -1,4 +1,4 @@ -FactoryGirl.define do +FactoryBot.define do factory :remote_repo_ref do repo name diff --git a/test/factories/redmine_undev_git/remote_repo_revision.rb b/test/factories/redmine_undev_git/remote_repo_revision.rb index 6635c4a..c180fa2 100644 --- a/test/factories/redmine_undev_git/remote_repo_revision.rb +++ b/test/factories/redmine_undev_git/remote_repo_revision.rb @@ -1,4 +1,4 @@ -FactoryGirl.define do +FactoryBot.define do factory :remote_repo_revision do repo sequence(:sha) { |n| Digest::SHA1.hexdigest "sha#{n}" } diff --git a/test/factories/redmine_undev_git/remote_repo_site.rb b/test/factories/redmine_undev_git/remote_repo_site.rb index d461880..400c156 100644 --- a/test/factories/redmine_undev_git/remote_repo_site.rb +++ b/test/factories/redmine_undev_git/remote_repo_site.rb @@ -1,10 +1,10 @@ -FactoryGirl.define do +FactoryBot.define do factory :remote_repo_site, aliases: [:site] do sequence(:server_name) { |n| "server#{n}.com" } factory :remote_repo_site_with_repos do transient do - repos_count 1 + repos_count { 1 } end after(:create) do |site, evaluator| diff --git a/test/factories/redmine_undev_git/remote_repo_site_user.rb b/test/factories/redmine_undev_git/remote_repo_site_user.rb index 55b8392..80a9333 100644 --- a/test/factories/redmine_undev_git/remote_repo_site_user.rb +++ b/test/factories/redmine_undev_git/remote_repo_site_user.rb @@ -1,4 +1,4 @@ -FactoryGirl.define do +FactoryBot.define do factory :remote_repo_site_user do site email diff --git a/test/factories/sequences.rb b/test/factories/sequences.rb index 5cd429d..7dbb5b2 100644 --- a/test/factories/sequences.rb +++ b/test/factories/sequences.rb @@ -1,4 +1,4 @@ -FactoryGirl.define do +FactoryBot.define do sequence :name do |n| "name_#{n}" end diff --git a/test/functional/global_hooks_controller_test.rb b/test/functional/global_hooks_controller_test.rb index bce8465..2dc2442 100644 --- a/test/functional/global_hooks_controller_test.rb +++ b/test/functional/global_hooks_controller_test.rb @@ -3,13 +3,10 @@ class GlobalHooksControllerTest < ActionController::TestCase fixtures :users, :email_addresses, :roles, :members, :member_roles, :issue_statuses, :projects - def setup - @controller = GlobalHooksController.new - @request = ActionController::TestRequest.new - @response = ActionController::TestResponse.new - @user = User.find(1) # admin - User.current = @user - @request.session[:user_id] = @user.id + setup do + @user = User.find(1) # admin + User.current = @user + session[:user_id] = @user.id create_hooks! @@ -24,7 +21,7 @@ def test_index end def test_permission - @request.session[:user_id] = 4 + session[:user_id] = 4 get :index assert_response 403 @@ -45,17 +42,17 @@ def test_get_new def test_post_create assert_difference 'GlobalHook.count', 1 do - post :create, global_hook: { - branches: 'Master', - keywords: 'closes', - done_ratio: '50%' } + post :create, params: { global_hook: { + branches: 'Master', + keywords: 'closes', + done_ratio: '50%' } } end assert_redirected_to '/hooks' end def test_get_edit - get :edit, id: @hook.id + get :edit, params: { id: @hook.id } assert_response :success assert_template 'edit' assert_not_nil assigns(:hook) @@ -63,7 +60,7 @@ def test_get_edit def test_put_update assert_no_difference 'GlobalHook.count' do - put :update, id: @hook.id, global_hook: { branches: 'staging' } + put :update, params: { id: @hook.id, global_hook: { branches: 'staging' } } end assert_redirected_to '/hooks' @@ -73,7 +70,7 @@ def test_put_update def test_post_destroy assert_difference 'GlobalHook.count', -1 do - post :destroy, id: @hook.id + post :destroy, params: { id: @hook.id } end assert_redirected_to '/hooks' @@ -88,7 +85,7 @@ def test_move_higher assert_equal 1, h1.position assert_equal 2, h2.position - put :update, id: h2.id, global_hook: { 'move_to' => 'higher' } + put :update, params: { id: h2.id, global_hook: { 'position' => h2.position - 1 } } assert_response :redirect @@ -106,7 +103,7 @@ def test_move_lower assert_equal 1, h1.position assert_equal 2, h2.position - put :update, id: h1.id, global_hook: { 'move_to' => 'lower' } + put :update, params: { id: h1.id, global_hook: { 'position' => h1.position + 1 } } assert_response :redirect diff --git a/test/functional/project_hooks_controller_test.rb b/test/functional/project_hooks_controller_test.rb index a00667d..b6cd113 100644 --- a/test/functional/project_hooks_controller_test.rb +++ b/test/functional/project_hooks_controller_test.rb @@ -2,16 +2,13 @@ class ProjectHooksControllerTest < ActionController::TestCase fixtures :projects, :repositories, :users, :email_addresses, - :roles, :members, :member_roles + :roles, :members, :member_roles - def setup + setup do make_temp_dir - @controller = ProjectHooksController.new - @request = ActionController::TestRequest.new - @response = ActionController::TestResponse.new - @request.session[:user_id] = 1 # admin + session[:user_id] = 1 # admin - @project = Project.find(3) + @project = Project.find(3) @project.enabled_module_names = [:repository, :hooks] @project.save! @@ -19,7 +16,7 @@ def setup repo = create_test_repository( identifier: 'test', - project: @project + project: @project ) create_hooks!(repository_id: repo.id) @@ -32,20 +29,20 @@ def teardown end def test_permission - @request.session[:user_id] = 4 - get :new, project_id: @project.id + session[:user_id] = 4 + get :new, params: { project_id: @project.id } assert_response 403 Role.find(4).add_permission! :edit_hooks - get :new, project_id: @project.id + get :new, params: { project_id: @project.id } assert_response :success assert_template 'new' assert_not_nil assigns(:hook) end def test_get_new - get :new, project_id: @project.id + get :new, params: { project_id: @project.id } assert_response :success assert_template 'new' assert_not_nil assigns(:hook) @@ -53,19 +50,19 @@ def test_get_new def test_post_create assert_difference 'ProjectHook.count', 1 do - post :create, project_id: @project.id, - project_hook: { - branches: 'Master', - keywords: 'closes', - done_ratio: '50' - } + post :create, params: { project_id: @project.id, + project_hook: { + branches: 'Master', + keywords: 'closes', + done_ratio: '50' + } } end assert_response :redirect end def test_get_edit - get :edit, id: @repository_hook.id, project_id: @project.id + get :edit, params: { id: @repository_hook.id, project_id: @project.id } assert_response :success assert_template 'edit' assert_not_nil assigns(:hook) @@ -76,8 +73,8 @@ def test_put_update assert_not_equal @repository_hook, 'staging' assert_no_difference 'ProjectHook.count' do - put :update, id: @repository_hook.id, project_id: @project.id, - project_hook: { branches: 'staging', repository_id: nil } + put :update, params: { id: @repository_hook.id, project_id: @project.id, + project_hook: { branches: 'staging', repository_id: nil } } end @repository_hook.reload @@ -89,7 +86,7 @@ def test_put_update def test_post_destroy assert_difference 'ProjectHook.count', -1 do - post :destroy, id: @repository_hook.id, project_id: @project + post :destroy, params: { id: @repository_hook.id, project_id: @project } end assert_response :redirect diff --git a/test/functional/redmine_undev_git/issues_controller_test.rb b/test/functional/redmine_undev_git/issues_controller_test.rb index be6b1a5..e1b3371 100644 --- a/test/functional/redmine_undev_git/issues_controller_test.rb +++ b/test/functional/redmine_undev_git/issues_controller_test.rb @@ -1,33 +1,34 @@ require File.expand_path('../../../test_helper', __FILE__) -require 'issues_controller' class RedmineUndevGit::IssuesControllerTest < ActionController::TestCase + + # HTML selector of each div containing the info of a changeset + CHANGESET_DIV_SELECTOR = '.changeset.journal' + fixtures :projects, - :users, - :email_addresses, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations + :users, + :email_addresses, + :roles, + :members, + :member_roles, + :issues, + :issue_statuses, + :versions, + :trackers, + :projects_trackers, + :issue_categories, + :enabled_modules, + :enumerations + tests IssuesController include Redmine::I18n - def setup - @controller = IssuesController.new - @request = ActionController::TestRequest.new - @response = ActionController::TestResponse.new - @user = User.find(2) - @issue = Issue.find(1) - @project = @issue.project - User.current = @user - @request.session[:user_id] = 2 + setup do + @user = User.find(2) + @issue = Issue.find(1) + @project = @issue.project + User.current = @user + session[:user_id] = 2 make_temp_dir end @@ -39,15 +40,15 @@ def test_show_branches_in_associated_revisions @repository = create_test_repository(project: @project) @repository.fetch_changesets changeset = @repository.changesets.last - branches = Array.new(15) { |i| "fakebranch#{i}" } + branches = Array.new(15) { |i| "fakebranch#{i}" } changeset.update_attribute :branches, branches @issue.changesets << changeset max_branches = RedmineUndevGit.max_branches_in_assoc - get :show, id: 1 + get :issue_tab, params: { id: 1, name: "changesets" }, xhr: true assert_response :success - assert_select 'div#issue-changesets a', { text: /fakebranch/ } do |links| + assert_select "div#changeset-#{changeset.id} a", { text: /fakebranch/ } do |links| assert_equal max_branches, links.length end end @@ -56,73 +57,78 @@ def test_show_repo_name_in_associated_revisions @repository = create_test_repository(project: @project, identifier: 'repotest') @repository.fetch_changesets changeset = @repository.changesets.last - branches = %w[fakebranch] + branches = %w[fakebranch] changeset.update_attribute :branches, branches @issue.changesets << changeset - get :show, id: 1 + get :issue_tab, params: { id: 1, name: "changesets" }, xhr: true assert_response :success - assert_select 'div#issue-changesets a', { text: @repository.name } do |links| - assert_select 'a', 'repotest', count: 1 + # making sure that there's only one changeset + assert_select CHANGESET_DIV_SELECTOR, { count: 1 } + assert_select "div#changeset-#{changeset.id} a", { text: @repository.name } do |links| + assert_select 'a', 'repotest' do |elements| + assert_equal 1, elements.count + end end + end def test_show_remote_revisions_block - user = User.find(3) - @request.session[:user_id] = user.id + user = User.find(3) + session[:user_id] = user.id - issue = Issue.find(1) + issue = Issue.find(1) revision = create(:remote_repo_revision_full) revision.related_issues << issue - get :show, id: issue.id + get :issue_tab, params: { id: issue.id, name: "remote-changesets" }, xhr: true assert_response :success - assert_select 'div#issue-changesets a', { text: /#{revision.short_sha}/ } + assert_select "div.changeset.remote-revision", { text: /#{revision.short_sha}/ } end def test_user_without_permission_cant_see_revisions - user = User.find(3) - @request.session[:user_id] = user.id + user = User.find(3) + session[:user_id] = user.id Role.find(2).remove_permission!(:view_changesets) - issue = Issue.find(1) + issue = Issue.find(1) revision = create(:remote_repo_revision_full) revision.related_issues << issue - get :show, id: issue.id + get :show, params: { id: issue.id } assert_response :success - assert_select 'div#issue-changesets a', { count: 0, text: /#{revision.short_sha}/ } + assert_select CHANGESET_DIV_SELECTOR, { count: 0, text: /#{revision.short_sha}/ } end def test_user_with_permission_can_unlink_revision user = User.find(3) Role.find(2).add_permission!(:manage_related_issues) - request.session[:user_id] = user.id - issue = Issue.find(1) + session[:user_id] = user.id + issue = Issue.find(1) assert user.allowed_to?(:manage_related_issues, issue.project) rev = create(:remote_repo_revision_full) rev.related_issues << issue - put :remove_remote_revision, id: issue.id, remote_repo_id: rev.repo.id, sha: rev.sha + put :remove_remote_revision, params: { id: issue.id, remote_repo_id: rev.repo.id, sha: rev.sha } assert_response :redirect refute rev.related_issues.include?(issue) end def test_user_without_permission_cant_unlink_revision - user = User.find(9) - request.session[:user_id] = user.id - issue = Issue.find(1) + user = User.find(9) + session[:user_id] = user.id + issue = Issue.find(1) refute user.allowed_to?(:manage_related_issues, issue.project) rev = create(:remote_repo_revision_full) rev.related_issues << issue - put :remove_remote_revision, id: issue.id, sha: rev.sha + put :remove_remote_revision, params: { id: issue.id, sha: rev.sha } assert_response 403 assert rev.related_issues.include?(issue) diff --git a/test/functional/redmine_undev_git/projects_controller_test.rb b/test/functional/redmine_undev_git/projects_controller_test.rb index bd1a809..738ba74 100644 --- a/test/functional/redmine_undev_git/projects_controller_test.rb +++ b/test/functional/redmine_undev_git/projects_controller_test.rb @@ -2,28 +2,28 @@ class RedmineUndevGit::ProjectsControllerTest < ActionController::TestCase fixtures :projects, - :users, - :email_addresses, - :roles, - :members, - :member_roles, - :issues, - :issue_statuses, - :versions, - :trackers, - :projects_trackers, - :issue_categories, - :enabled_modules, - :enumerations + :users, + :email_addresses, + :roles, + :members, + :member_roles, + :issues, + :issue_statuses, + :versions, + :trackers, + :projects_trackers, + :issue_categories, + :enabled_modules, + :enumerations tests ProjectsController - def setup - @user = User.find(2) - @issue = Issue.find(1) - @project = @issue.project - User.current = @user - request.session[:user_id] = 2 + setup do + @user = User.find(2) + @issue = Issue.find(1) + @project = @issue.project + User.current = @user + session[:user_id] = 2 make_temp_dir end @@ -33,21 +33,21 @@ def teardown def test_repositories_settings_tab_will_show_remote_repos GlobalHook.create!( - branches: '*', - keywords: 'fixes', - status_id: 3, + branches: '*', + keywords: 'fixes', + status_id: 3, done_ratio: '100%' ) repo = create_stubbed_remote_repo - get :settings, id: @project.id, tab: 'repositories' + get :settings, params: { id: @project.id, tab: 'repositories' } assert_response :success assert_match repo.uri, response.body end def create_stubbed_remote_repo - site = RemoteRepoSite::Gitlab.create!(server_name: 'gitlab.com') + site = RemoteRepoSite::Gitlab.create!(server_name: 'gitlab.com') remote_repo = site.repos.create!(url: RD1) - revisions = [ + revisions = [ fake_revision(message: "refs ##{@issue.id} fixes ##{@issue.id}") ] stubs_scm_revisions(revisions) diff --git a/test/functional/remote_committers_controller_test.rb b/test/functional/remote_committers_controller_test.rb index 3e582e3..43da065 100644 --- a/test/functional/remote_committers_controller_test.rb +++ b/test/functional/remote_committers_controller_test.rb @@ -3,16 +3,16 @@ class RemoteCommittersControllerTest < ActionController::TestCase tests RemoteCommittersController - def setup - @user = create(:admin_user) - request.session[:user_id] = @user.id + setup do + @user = create(:admin_user) + session[:user_id] = @user.id end def test_committers_show_mapping_committers - repo = create(:remote_repo) - rev = create(:remote_repo_revision_full, repo: repo) + repo = create(:remote_repo) + rev = create(:remote_repo_revision_full, repo: repo) mapping = create(:remote_repo_site_user, site: repo.site, email: rev.committer_email) - get :index, remote_repo_site_id: repo.site.id + get :index, params: { remote_repo_site_id: repo.site.id } assert_response :success assert_match rev.committer_email, response.body assert_match mapping.user.name, response.body diff --git a/test/functional/remote_repo_sites_controller_test.rb b/test/functional/remote_repo_sites_controller_test.rb index b3918a8..abb8636 100644 --- a/test/functional/remote_repo_sites_controller_test.rb +++ b/test/functional/remote_repo_sites_controller_test.rb @@ -3,9 +3,9 @@ class RemoteRepoSitesControllerTest < ActionController::TestCase tests RemoteRepoSitesController - def setup + setup do @user = create(:admin_user) - request.session[:user_id] = @user.id + session[:user_id] = @user.id end def test_index_success_without_sites diff --git a/test/functional/repositories_undev_git_controller_test.rb b/test/functional/repositories_undev_git_controller_test.rb index f4f9828..5d21d02 100644 --- a/test/functional/repositories_undev_git_controller_test.rb +++ b/test/functional/repositories_undev_git_controller_test.rb @@ -4,19 +4,19 @@ class RepositoriesUndevGitControllerTest < ActionController::TestCase tests RepositoriesController fixtures :projects, :users, :email_addresses, :roles, :members, :member_roles, - :repositories, :enabled_modules + :repositories, :enabled_modules REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin? - PRJ_ID = 3 - CHAR_1_HEX = "\xc3\x9c" - NUM_REV = 28 + PRJ_ID = 3 + CHAR_1_HEX = "\xc3\x9c" + NUM_REV = 28 ## Git, Mercurial and CVS path encodings are binary. ## Subversion supports URL encoding for path. ## Redmine Mercurial adapter and extension use URL encoding. ## Git accepts only binary path in command line parameter. ## So, there is no way to use binary command line parameter in JRuby. - JRUBY_SKIP = (RUBY_PLATFORM == 'java') + JRUBY_SKIP = (RUBY_PLATFORM == 'java') JRUBY_SKIP_STR = 'TODO: This test fails in JRuby' def setup @@ -27,10 +27,10 @@ def setup Setting.enabled_scm << 'UndevGit' User.current = nil - @project = Project.find(PRJ_ID) - @repository = create_test_repository( - project: @project, - url: REPOSITORY_PATH, + @project = Project.find(PRJ_ID) + @repository = create_test_repository( + project: @project, + url: REPOSITORY_PATH, path_encoding: 'ISO-8859-1' ) assert @repository @@ -47,7 +47,7 @@ def setup ## Git for Windows (msysGit) changed internal API from ANSI to Unicode in 1.7.10 ## http://code.google.com/p/msysgit/issues/detail?id=80 ## So, Latin-1 path tests fail on Japanese Windows - WINDOWS_PASS = (Redmine::Platform.mswin? && + WINDOWS_PASS = (Redmine::Platform.mswin? && Redmine::Scm::Adapters::UndevGitAdapter.client_version_above?([1, 7, 10])) WINDOWS_SKIP_STR = 'TODO: This test fails in Git for Windows above 1.7.10' @@ -55,36 +55,37 @@ def test_create_and_update @request.session[:user_id] = 1 @project.repository.update_attribute(:url, 'none') assert_difference 'Repository.count' do - post :create, project_id: 'subproject1', - repository_scm: 'UndevGit', - repository: { - url: REPOSITORY_PATH, - is_default: '0', - identifier: 'test-create', - extra_report_last_commit: '1', - use_init_hooks: '1' - } + post :create, params: { project_id: 'subproject1', + repository_scm: 'UndevGit', + repository: { + url: REPOSITORY_PATH, + is_default: '0', + identifier: 'test-create', + report_last_commit: '1', + use_init_hooks: '1' + } + } end assert_response 302 repository = Repository.last assert_kind_of Repository::UndevGit, repository assert_equal REPOSITORY_PATH, repository.url - assert repository.extra_report_last_commit + assert repository.report_last_commit assert repository.use_init_hooks? - put :update, id: repository.id, - repository: { - extra_report_last_commit: '0' - } + put :update, params: { id: repository.id, + repository: { + report_last_commit: '0' + } } assert_response 302 repo2 = Repository.find(repository.id) - refute repo2.extra_report_last_commit + refute repo2.report_last_commit end def test_get_new @request.session[:user_id] = 1 @project.repository.destroy - get :new, project_id: 'subproject1', repository_scm: 'UndevGit' + get :new, params: { project_id: 'subproject1', repository_scm: 'UndevGit' } assert_response :success assert_template 'new' assert_kind_of Repository::UndevGit, assigns(:repository) @@ -97,7 +98,7 @@ def test_browse_root @project.reload assert_equal NUM_REV, @repository.changesets.count - get :show, id: PRJ_ID + get :show, params: { id: PRJ_ID } assert_response :success assert_template 'show' assert_not_nil assigns(:entries) @@ -120,7 +121,7 @@ def test_browse_branch @repository.fetch_changesets @project.reload assert_equal NUM_REV, @repository.changesets.count - get :show, id: PRJ_ID, rev: 'test_branch' + get :show, params: { id: PRJ_ID, rev: 'test_branch' } assert_response :success assert_template 'show' assert_not_nil assigns(:entries) @@ -142,7 +143,7 @@ def test_browse_tag 'tag00.lightweight', 'tag01.annotated', ].each do |t1| - get :show, id: PRJ_ID, rev: t1 + get :show, params: { id: PRJ_ID, rev: t1 } assert_response :success assert_template 'show' assert_not_nil assigns(:entries) @@ -157,7 +158,7 @@ def test_browse_directory @repository.fetch_changesets @project.reload assert_equal NUM_REV, @repository.changesets.count - get :show, id: PRJ_ID, path: repository_path_hash(['images'])[:param] + get :show, params: { id: PRJ_ID, path: repository_path_hash(['images'])[:param] } assert_response :success assert_template 'show' assert_not_nil assigns(:entries) @@ -175,8 +176,8 @@ def test_browse_at_given_revision @repository.fetch_changesets @project.reload assert_equal NUM_REV, @repository.changesets.count - get :show, id: PRJ_ID, path: repository_path_hash(['images'])[:param], - rev: '7234cb2750b63f47bff735edc50a1c0a433c2518' + get :show, params: { id: PRJ_ID, path: repository_path_hash(['images'])[:param], + rev: '7234cb2750b63f47bff735edc50a1c0a433c2518' } assert_response :success assert_template 'show' assert_not_nil assigns(:entries) @@ -187,7 +188,7 @@ def test_browse_at_given_revision def test_changes @repository.fetch_changesets - get :changes, id: PRJ_ID, path: repository_path_hash(['images', 'edit.png'])[:param] + get :changes, params: { id: PRJ_ID, repository_id: @repository.id, path: repository_path_hash(['images', 'edit.png'])[:param] }, as: Mime[:html] assert_response :success assert_template 'changes' assert_select 'h2', /edit.png/ @@ -195,15 +196,16 @@ def test_changes def test_entry_show @repository.fetch_changesets - get :entry, id: PRJ_ID, - path: repository_path_hash(['sources', 'watchers_controller.rb'])[:param] + get :entry, params: { id: PRJ_ID, + repository_id: @repository.id, + path: repository_path_hash(['sources', 'watchers_controller.rb'])[:param] } assert_response :success assert_template 'entry' # Line 19 - assert_tag tag: 'th', - content: '11', - attributes: { class: 'line-num' }, - sibling: { tag: 'td', content: /WITHOUT ANY WARRANTY/ } + assert_select 'th', + content: '11', + attributes: { class: 'line-num' }, + sibling: { tag: 'td', content: /WITHOUT ANY WARRANTY/ } end def test_entry_show_latin_1 @@ -217,12 +219,14 @@ def test_entry_show_latin_1 else with_settings repositories_encodings: 'UTF-8,ISO-8859-1' do ['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1| - get :entry, id: PRJ_ID, - path: repository_path_hash(['latin-1-dir', "test-#{@char_1}.txt"])[:param], - rev: r1 + get :entry, params: { id: PRJ_ID, + repository_id: @repository.id, + path: repository_path_hash(['latin-1-dir', "test-#{@char_1}.txt"])[:param], + rev: r1 }, + as: Mime[:html] assert_response :success assert_template 'entry' - assert_select 'th.line-num', '1' + assert_select 'th.line-num', 'data-txt' => '1' assert_select 'th.line-num ~ td', /test-#{@char_1}.txt/ end end @@ -231,9 +235,10 @@ def test_entry_show_latin_1 def test_entry_download @repository.fetch_changesets - get :entry, id: PRJ_ID, - path: repository_path_hash(['sources', 'watchers_controller.rb'])[:param], - format: 'raw' + get :entry, params: { id: PRJ_ID, + repository_id: @repository.id, + path: repository_path_hash(['sources', 'watchers_controller.rb'])[:param], + format: 'raw' } assert_response :success # File content assert @response.body.include?('WITHOUT ANY WARRANTY') @@ -241,8 +246,8 @@ def test_entry_download def test_directory_entry @repository.fetch_changesets - get :entry, id: PRJ_ID, - path: repository_path_hash(['sources'])[:param] + get :entry, params: { id: PRJ_ID, repository_id: @repository.id, + path: repository_path_hash(['sources'])[:param] } assert_response :success assert_template 'show' assert_not_nil assigns(:entry) @@ -259,13 +264,14 @@ def test_diff # Full diff of changeset 2f9c0091 ['inline', 'sbs'].each do |dt| get :diff, - :id => PRJ_ID, - :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7', - :type => dt + params: { :id => PRJ_ID, + repository_id: @repository.id, + :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7', + :type => dt } assert_response :success assert_template 'diff' # Line 22 removed - assert_select 'th.line-num:contains(22) ~ td.diff_out', :text => /def remove/ + assert_select 'th.line-num[data-txt="22"] ~ td.diff_out', :text => /def remove/ assert_select 'h2', :text => /2f9c0091/ end end @@ -279,19 +285,20 @@ def test_diff_with_rev_and_path # Full diff of changeset 2f9c0091 ['inline', 'sbs'].each do |dt| get :diff, - id: PRJ_ID, - rev: '2f9c0091c754a91af7a9c478e36556b4bde8dcf7', - path: repository_path_hash(['sources', 'watchers_controller.rb'])[:param], - type: dt + params: { id: PRJ_ID, + repository_id: @repository.id, + rev: '2f9c0091c754a91af7a9c478e36556b4bde8dcf7', + path: repository_path_hash(['sources', 'watchers_controller.rb'])[:param], + type: dt } assert_response :success assert_template 'diff' # Line 22 removed - assert_tag tag: 'th', - content: '22', - sibling: { tag: 'td', - attributes: { class: /diff_out/ }, - content: /def remove/ } - assert_tag tag: 'h2', content: /2f9c0091/ + assert_select 'th', + content: '22', + sibling: { tag: 'td', + attributes: { class: /diff_out/ }, + content: /def remove/ } + assert_select 'h2', content: /2f9c0091/ end end end @@ -306,14 +313,14 @@ def test_diff_truncated # Truncated diff of changeset 2f9c0091 with_cache do with_settings default_language: 'en' do - get :diff, id: PRJ_ID, type: 'inline', - rev: '2f9c0091c754a91af7a9c478e36556b4bde8dcf7' + get :diff, params: { id: PRJ_ID, repository_id: @repository.id, type: 'inline', + rev: '2f9c0091c754a91af7a9c478e36556b4bde8dcf7' } assert_response :success assert @response.body.include?('... This diff was truncated') end with_settings default_language: 'fr' do - get :diff, id: PRJ_ID, type: 'inline', - rev: '2f9c0091c754a91af7a9c478e36556b4bde8dcf7' + get :diff, params: { id: PRJ_ID, repository_id: @repository.id, type: 'inline', + rev: '2f9c0091c754a91af7a9c478e36556b4bde8dcf7' } assert_response :success assert !@response.body.include?('... This diff was truncated') assert @response.body.include?('... Ce diff') @@ -329,27 +336,28 @@ def test_diff_two_revs assert_equal NUM_REV, @repository.changesets.count ['inline', 'sbs'].each do |dt| get :diff, - id: PRJ_ID, - rev: '61b685fbe55ab05b5ac68402d5720c1a6ac973d1', - rev_to: '2f9c0091c754a91af7a9c478e36556b4bde8dcf7', - type: dt + params: { id: PRJ_ID, + repository_id: @repository.id, + rev: '61b685fbe55ab05b5ac68402d5720c1a6ac973d1', + rev_to: '2f9c0091c754a91af7a9c478e36556b4bde8dcf7', + type: dt } assert_response :success assert_template 'diff' diff = assigns(:diff) assert_not_nil diff - assert_tag tag: 'h2', content: /2f9c0091c:61b685fbe/ - assert_tag tag: 'form', - attributes: { - action: '/projects/subproject1/repository/revisions/' + - '61b685fbe55ab05b5ac68402d5720c1a6ac973d1/diff' - } - assert_tag tag: 'input', - attributes: { - id: 'rev_to', - name: 'rev_to', - type: 'hidden', - value: '2f9c0091c754a91af7a9c478e36556b4bde8dcf7' - } + assert_select 'h2', content: /2f9c0091c:61b685fbe/ + assert_select 'form', + attributes: { + action: '/projects/subproject1/repository/revisions/' + + '61b685fbe55ab05b5ac68402d5720c1a6ac973d1/diff' + } + assert_select 'input', + attributes: { + id: 'rev_to', + name: 'rev_to', + type: 'hidden', + value: '2f9c0091c754a91af7a9c478e36556b4bde8dcf7' + } end end @@ -357,9 +365,9 @@ def test_diff_path_in_subrepo @repository.fetch_changesets @project.repository.update_attribute(:url, 'none') repo = Repository::UndevGit.create( - project: @project, - url: REPOSITORY_PATH, - identifier: 'test-diff-path', + project: @project, + url: REPOSITORY_PATH, + identifier: 'test-diff-path', path_encoding: 'ISO-8859-1' ) repo.fetch_changesets @@ -367,27 +375,27 @@ def test_diff_path_in_subrepo refute repo.is_default assert_equal 'test-diff-path', repo.identifier get :diff, - id: PRJ_ID, - repository_id: 'test-diff-path', - rev: '61b685fbe55ab05b', - rev_to: '2f9c0091c754a91a', - type: 'inline' + params: { id: PRJ_ID, + repository_id: 'test-diff-path', + rev: '61b685fbe55ab05b', + rev_to: '2f9c0091c754a91a', + type: 'inline' } assert_response :success assert_template 'diff' diff = assigns(:diff) assert_not_nil diff - assert_tag tag: 'form', - attributes: { - action: '/projects/subproject1/repository/test-diff-path/' + - 'revisions/61b685fbe55ab05b/diff' - } - assert_tag tag: 'input', - attributes: { - id: 'rev_to', - name: 'rev_to', - type: 'hidden', - value: '2f9c0091c754a91a' - } + assert_select 'form', + attributes: { + action: '/projects/subproject1/repository/test-diff-path/' + + 'revisions/61b685fbe55ab05b/diff' + } + assert_select 'input', + attributes: { + id: 'rev_to', + name: 'rev_to', + type: 'hidden', + value: '2f9c0091c754a91a' + } end def test_diff_latin_1 @@ -398,23 +406,23 @@ def test_diff_latin_1 with_settings repositories_encodings: 'UTF-8,ISO-8859-1' do ['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1| ['inline', 'sbs'].each do |dt| - get :diff, id: PRJ_ID, rev: r1, type: dt + get :diff, params: { id: PRJ_ID, repository_id: @repository.id, rev: r1, type: dt } assert_response :success assert_template 'diff' - assert_tag tag: 'thead', - descendant: { - tag: 'th', - attributes: { class: 'filename' }, - content: /latin-1-dir\/test-#{@char_1}.txt/, - }, - sibling: { - tag: 'tbody', - descendant: { - tag: 'td', - attributes: { class: /diff_in/ }, - content: /test-#{@char_1}.txt/ - } - } + assert_select 'thead', + descendant: { + tag: 'th', + attributes: { class: 'filename' }, + content: /latin-1-dir\/test-#{@char_1}.txt/, + }, + sibling: { + tag: 'tbody', + descendant: { + tag: 'td', + attributes: { class: /diff_in/ }, + content: /test-#{@char_1}.txt/ + } + } end end end @@ -423,7 +431,7 @@ def test_diff_latin_1 def test_diff_should_show_filenames @repository.fetch_changesets - get :diff, id: PRJ_ID, rev: 'deff712f05a90d96edbd70facc47d944be5897e3', type: 'inline' + get :diff, params: { id: PRJ_ID, repository_id: @repository.id, rev: 'deff712f05a90d96edbd70facc47d944be5897e3', type: 'inline' } assert_response :success assert_template 'diff' # modified file @@ -432,7 +440,7 @@ def test_diff_should_show_filenames def test_save_diff_type @repository.fetch_changesets - user1 = User.find(1) + user1 = User.find(1) user1.pref[:diff_type] = nil user1.preference.save user = User.find(1) @@ -440,16 +448,18 @@ def test_save_diff_type @request.session[:user_id] = 1 # admin get :diff, - id: PRJ_ID, - rev: '2f9c0091c754a91af7a9c478e36556b4bde8dcf7' + params: { id: PRJ_ID, repository_id: @repository.id, + rev: '2f9c0091c754a91af7a9c478e36556b4bde8dcf7' } assert_response :success assert_template 'diff' user.reload assert_equal 'inline', user.pref[:diff_type] get :diff, - id: PRJ_ID, - rev: '2f9c0091c754a91af7a9c478e36556b4bde8dcf7', - type: 'sbs' + params: { + id: PRJ_ID, + repository_id: @repository.id, + rev: '2f9c0091c754a91af7a9c478e36556b4bde8dcf7', + type: 'sbs' } assert_response :success assert_template 'diff' user.reload @@ -458,14 +468,15 @@ def test_save_diff_type def test_annotate @repository.fetch_changesets - get :annotate, id: PRJ_ID, - path: repository_path_hash(['sources', 'watchers_controller.rb'])[:param] + get :annotate, params: { id: PRJ_ID, + repository_id: @repository.id, + path: repository_path_hash(['sources', 'watchers_controller.rb'])[:param] } assert_response :success assert_template 'annotate' # Line 23, changeset 2f9c0091 assert_select 'tr' do - assert_select 'th.line-num', text: '23' + assert_select 'th.line-num', 'data-txt' => '23' assert_select 'td.revision', text: /2f9c0091/ assert_select 'td.author', text: 'jsmith' assert_select 'td', text: /remove_watcher/ @@ -477,35 +488,40 @@ def test_annotate_at_given_revision @repository.fetch_changesets @project.reload assert_equal NUM_REV, @repository.changesets.count - get :annotate, id: PRJ_ID, rev: 'deff7', - path: repository_path_hash(['sources', 'watchers_controller.rb'])[:param] + get :annotate, params: { id: PRJ_ID, repository_id: @repository.id, rev: 'deff7', + path: repository_path_hash(['sources', 'watchers_controller.rb'])[:param] } assert_response :success assert_template 'annotate' - assert_tag tag: 'h2', content: /@ deff712f/ + assert_select 'h2', content: /@ deff712f/ end def test_annotate_binary_file - @repository.fetch_changesets - get :annotate, id: PRJ_ID, - path: repository_path_hash(['images', 'edit.png'])[:param] - assert_response 500 - assert_tag tag: 'p', attributes: { id: /errorExplanation/ }, - content: /cannot be annotated/ + with_settings :default_language => 'en' do + @repository.fetch_changesets + get :annotate, params: { id: PRJ_ID, + repository_id: @repository.id, + path: repository_path_hash(['images', 'edit.png'])[:param] + }, as: Mime[:html] + + assert_response :success + assert_select 'p#errorExplanation', :text => /cannot be annotated/ + end end def test_annotate_error_when_too_big @repository.fetch_changesets with_settings file_max_size_displayed: 1 do - get :annotate, id: PRJ_ID, - path: repository_path_hash(['sources', 'watchers_controller.rb'])[:param], - rev: 'deff712f' - assert_response 500 - assert_tag tag: 'p', attributes: { id: /errorExplanation/ }, - content: /exceeds the maximum text file size/ - - get :annotate, id: PRJ_ID, - path: repository_path_hash(['README'])[:param], - rev: '7234cb2' + get :annotate, params: { id: PRJ_ID, + repository_id: @repository.id, + path: repository_path_hash(['sources', 'watchers_controller.rb'])[:param], + rev: 'deff712f' } + assert_response :success + assert_select 'p#errorExplanation', :text => /exceeds the maximum text file size/ + + get :annotate, params: { id: PRJ_ID, + repository_id: @repository.id, + path: repository_path_hash(['README'])[:param], + rev: '7234cb2' } assert_response :success assert_template 'annotate' end @@ -522,14 +538,16 @@ def test_annotate_latin_1 else with_settings repositories_encodings: 'UTF-8,ISO-8859-1' do ['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1| - get :annotate, id: PRJ_ID, - path: repository_path_hash(['latin-1-dir', "test-#{@char_1}.txt"])[:param], - rev: r1 - assert_tag tag: 'th', - content: '1', - attributes: { class: 'line-num' }, - sibling: { tag: 'td', - content: /test-#{@char_1}.txt/ } + get :annotate, params: { id: PRJ_ID, + repository_id: @repository.id, + path: repository_path_hash(['latin-1-dir', "test-#{@char_1}.txt"])[:param], + rev: r1 }, + as: Mime[:html] + assert_select 'th', + content: '1', + attributes: { class: 'line-num' }, + sibling: { tag: 'td', + content: /test-#{@char_1}.txt/ } end end end @@ -540,14 +558,14 @@ def test_revisions @repository.fetch_changesets @project.reload assert_equal NUM_REV, @repository.changesets.count - get :revisions, id: PRJ_ID + get :revisions, params: { id: PRJ_ID, repository_id: @repository.id } assert_response :success assert_template 'revisions' - assert_tag tag: 'form', - attributes: { - method: 'get', - action: '/projects/subproject1/repository/revision' - } + assert_select 'form', + attributes: { + method: 'get', + action: '/projects/subproject1/repository/revision' + } end def test_revision @@ -556,7 +574,7 @@ def test_revision @project.reload assert_equal NUM_REV, @repository.changesets.count ['61b685fbe55ab05b5ac68402d5720c1a6ac973d1', '61b685f'].each do |r| - get :revision, id: PRJ_ID, rev: r + get :revision, params: { id: PRJ_ID, repository_id: @repository.id, rev: r } assert_response :success assert_template 'revision' end @@ -568,7 +586,7 @@ def test_empty_revision @project.reload assert_equal NUM_REV, @repository.changesets.count ['', ' ', nil].each do |r| - get :revision, id: PRJ_ID, rev: r + get :revision, params: { id: PRJ_ID, repository_id: @repository.id, rev: r } assert_response 404 end end @@ -581,7 +599,7 @@ def test_destroy_valid_repository assert_equal NUM_REV, @repository.changesets.count assert_difference 'Repository.count', -1 do - delete :destroy, id: @repository.id + delete :destroy, params: { id: @repository.id } end assert_response 302 @project.reload @@ -592,15 +610,15 @@ def test_destroy_repository @request.session[:user_id] = 1 # admin @project.repository.destroy @repository = Repository::UndevGit.create!( - project: @project, - url: REPOSITORY_PATH, + project: @project, + url: REPOSITORY_PATH, path_encoding: 'ISO-8859-1' ) @repository.reload assert_equal 0, @repository.changesets.count assert_difference 'Repository.count', -1 do - delete :destroy, id: @repository.id + delete :destroy, params: { id: @repository.id } end assert_response 302 @project.reload @@ -609,12 +627,12 @@ def test_destroy_repository def test_branches_in_commit_view @repository.fetch_changesets - changeset = @repository.changesets.last + changeset = @repository.changesets.last max_branches = 15 - branches = Array.new(max_branches) { |i| "fakebranch#{i}" } + branches = Array.new(max_branches) { |i| "fakebranch#{i}" } changeset.update_attribute :branches, branches - get :revision, id: PRJ_ID, rev: changeset.revision + get :revision, params: { id: PRJ_ID, repository_id: @repository.id, rev: changeset.revision } assert_response :success assert_select 'table.revision-info a', { text: /fakebranch/, count: max_branches } @@ -622,32 +640,33 @@ def test_branches_in_commit_view def test_new_form_contains_fetch_by_web_hook_checkbox @request.session[:user_id] = 1 - get :new, project_id: 'subproject1', repository_scm: 'UndevGit' + get :new, params: { project_id: 'subproject1', repository_scm: 'UndevGit' } assert_response :success assert_select 'input#repository_fetch_by_web_hook' end def test_create_with_fetch_by_web_hook @request.session[:user_id] = 1 - repo_url = 'https://github.com/Restream/redmine_undev_git.git' + repo_url = 'https://github.com/Restream/redmine_undev_git.git' post :create, - project_id: 'subproject1', - repository_scm: 'UndevGit', - repository: { - url: repo_url, - is_default: '0', - identifier: 'test-create-wbh', - fetch_by_web_hook: '1' - } + params: { project_id: 'subproject1', + repository_scm: 'UndevGit', + repository: { + url: repo_url, + is_default: '0', + identifier: 'test-create-wbh', + fetch_by_web_hook: '1' + } + } assert_response 302 repository = Repository::UndevGit.find_by_url repo_url assert repository assert repository.fetch_by_web_hook? - put :update, id: repository.id, - repository: { - fetch_by_web_hook: '0' - } + put :update, params: { id: repository.id, + repository: { + fetch_by_web_hook: '0' + } } assert_response 302 repository = Repository::UndevGit.find_by_url repo_url refute repository.fetch_by_web_hook? @@ -657,20 +676,21 @@ def test_create_with_fetch_by_web_hook def puts_ruby19_non_utf8_pass puts 'TODO: This test fails in Ruby 1.9 ' + - 'and Encoding.default_external is not UTF-8. ' + - "Current value is '#{Encoding.default_external.to_s}'" + 'and Encoding.default_external is not UTF-8. ' + + "Current value is '#{Encoding.default_external.to_s}'" end else puts 'Git test repository NOT FOUND. Skipping functional tests !!!' - def test_fake; + def test_fake assert true end end private + def with_cache(&block) - before = ActionController::Base.perform_caching + before = ActionController::Base.perform_caching ActionController::Base.perform_caching = true block.call ActionController::Base.perform_caching = before diff --git a/test/integration/receive_external_hooks_test.rb b/test/integration/receive_external_hooks_test.rb index 226c6b4..48e4423 100644 --- a/test/integration/receive_external_hooks_test.rb +++ b/test/integration/receive_external_hooks_test.rb @@ -2,7 +2,7 @@ class ReceiveExternalHooksTest < ActionDispatch::IntegrationTest fixtures :projects, :users, :email_addresses, :roles, :members, :member_roles, - :repositories, :enabled_modules + :repositories, :enabled_modules REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin? PRJ_ID = 3 @@ -10,8 +10,8 @@ class ReceiveExternalHooksTest < ActionDispatch::IntegrationTest def setup make_temp_dir Setting.enabled_scm << 'UndevGit' - User.current = nil - @project = Project.find(PRJ_ID) + User.current = nil + @project = Project.find(PRJ_ID) RedmineUndevGit.fetch_by_web_hook = '1' end @@ -19,7 +19,7 @@ def test_fetch_after_gitlab_push_hook repository = create_test_repository(project: @project, url: 'https://example.com/diaspora.git') assert repository Workers::RepositoryFetcher.expects(:defer).with(repository.id).at_least_once - post '/gitlab_hooks', gitlab_payload.to_json, gitlab_headers + post '/gitlab_hooks', params: gitlab_payload, as: :json assert_response :success end @@ -27,18 +27,18 @@ def test_fetch_after_github_push_hook repository = create_test_repository(project: @project, url: 'https://github.com/octokitty/testing.git') assert repository Workers::RepositoryFetcher.expects(:defer).with(repository.id).at_least_once - post '/github_hooks', github_push_payload.to_json, github_push_headers + post '/github_hooks', params: github_push_payload, headers: github_push_headers, as: :json assert_response :success end def test_success_on_github_ping_hook - post '/github_hooks', github_ping_payload.to_json, github_ping_headers + post '/github_hooks', params: github_ping_payload, headers: github_ping_headers, as: :json assert_response :success end def test_success_on_github_ping_hook_when_login_requred Setting.login_required = '1' - post '/github_hooks', github_ping_payload.to_json, github_ping_headers + post '/github_hooks', params: github_ping_payload, headers: github_ping_headers, as: :json assert_response :success end @@ -46,7 +46,7 @@ def test_fetch_after_bitbucket_push_hook repository = create_test_repository(project: @project, url: 'https://bitbucket.org/test/dt_fetch.git') assert repository Workers::RepositoryFetcher.expects(:defer).with(repository.id).at_least_once - post '/bitbucket_hooks', payload: bitbucket_payload.to_json + post '/bitbucket_hooks', params: bitbucket_payload, as: :json assert_response :success end @@ -54,7 +54,7 @@ def test_fetch_after_bitbucket_push_hook def test_create_remote_repo_after_gitlab_push_hook RemoteRepo.any_instance.stubs(:fetch).returns(nil) - post '/gitlab_hooks', gitlab_payload.to_json, gitlab_headers + post '/gitlab_hooks', params: gitlab_payload, as: :json assert_response :success repository = RemoteRepo.find_by_url(gitlab_payload[:repository][:url]) assert repository @@ -66,255 +66,249 @@ def test_create_remote_repo_after_gitlab_push_hook def gitlab_payload { - before: '95790bf891e76fee5e1747ab589903a6a1f80f22', - after: 'da1560886d4f094c3e6c9ef40349f7d38b5d27d7', - ref: 'refs/heads/master', - user_id: 4, - user_name: 'John Smith', - project_id: 15, - repository: { - name: 'Diaspora', - url: 'git@example.com:diaspora.git', + before: '95790bf891e76fee5e1747ab589903a6a1f80f22', + after: 'da1560886d4f094c3e6c9ef40349f7d38b5d27d7', + ref: 'refs/heads/master', + user_id: 4, + user_name: 'John Smith', + project_id: 15, + repository: { + name: 'Diaspora', + url: 'git@example.com:diaspora.git', description: '', - homepage: 'http://example.com/diaspora' + homepage: 'http://example.com/diaspora' }, - commits: [ - { - id: 'b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327', - message: 'Update Catalan translation to e38cb41.', - timestamp: '2011-12-12T14:27:31+02:00', - url: 'http://example.com/diaspora/commits/b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327', - author: { - name: 'Jordi Mallach', - email: 'jordi@softcatala.org' - } - }, - { - id: 'da1560886d4f094c3e6c9ef40349f7d38b5d27d7', - message: 'fixed readme', - timestamp: '2012-01-03T23:36:29+02:00', - url: 'http://example.com/diaspora/commits/da1560886d4f094c3e6c9ef40349f7d38b5d27d7', - author: { - name: 'GitLab dev user', - email: 'gitlabdev@dv6700.(none)' - } - } - ], + commits: [ + { + id: 'b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327', + message: 'Update Catalan translation to e38cb41.', + timestamp: '2011-12-12T14:27:31+02:00', + url: 'http://example.com/diaspora/commits/b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327', + author: { + name: 'Jordi Mallach', + email: 'jordi@softcatala.org' + } + }, + { + id: 'da1560886d4f094c3e6c9ef40349f7d38b5d27d7', + message: 'fixed readme', + timestamp: '2012-01-03T23:36:29+02:00', + url: 'http://example.com/diaspora/commits/da1560886d4f094c3e6c9ef40349f7d38b5d27d7', + author: { + name: 'GitLab dev user', + email: 'gitlabdev@dv6700.(none)' + } + } + ], total_commits_count: 2 } end - def gitlab_headers - { - 'Content_Type' => 'application/json' - } - end - def github_push_payload { - after: '1481a2de7b2a7d02428ad93446ab166be7793fbb', - before: '17c497ccc7cca9c2f735aa07e9e3813060ce9a6a', - commits: [ - { - added: [ + after: '1481a2de7b2a7d02428ad93446ab166be7793fbb', + before: '17c497ccc7cca9c2f735aa07e9e3813060ce9a6a', + commits: [ + { + added: [ - ], - author: { - email: 'lolwut@noway.biz', - name: 'Garen Torikian', - username: 'octokitty' - }, - committer: { - email: 'lolwut@noway.biz', - name: 'Garen Torikian', - username: 'octokitty' - }, - distinct: true, - id: 'c441029cf673f84c8b7db52d0a5944ee5c52ff89', - message: 'Test', - modified: [ - 'README.md' - ], - removed: [ + ], + author: { + email: 'lolwut@noway.biz', + name: 'Garen Torikian', + username: 'octokitty' + }, + committer: { + email: 'lolwut@noway.biz', + name: 'Garen Torikian', + username: 'octokitty' + }, + distinct: true, + id: 'c441029cf673f84c8b7db52d0a5944ee5c52ff89', + message: 'Test', + modified: [ + 'README.md' + ], + removed: [ - ], - timestamp: '2013-02-22T13:50:07-08:00', - url: 'https://github.com/octokitty/testing/commit/c441029cf673f84c8b7db52d0a5944ee5c52ff89' - }, - { - added: [ + ], + timestamp: '2013-02-22T13:50:07-08:00', + url: 'https://github.com/octokitty/testing/commit/c441029cf673f84c8b7db52d0a5944ee5c52ff89' + }, + { + added: [ - ], - author: { - email: 'lolwut@noway.biz', - name: 'Garen Torikian', - username: 'octokitty' - }, - committer: { - email: 'lolwut@noway.biz', - name: 'Garen Torikian', - username: 'octokitty' - }, - distinct: true, - id: '36c5f2243ed24de58284a96f2a643bed8c028658', - message: 'This is me testing the windows client.', - modified: [ - 'README.md' - ], - removed: [ + ], + author: { + email: 'lolwut@noway.biz', + name: 'Garen Torikian', + username: 'octokitty' + }, + committer: { + email: 'lolwut@noway.biz', + name: 'Garen Torikian', + username: 'octokitty' + }, + distinct: true, + id: '36c5f2243ed24de58284a96f2a643bed8c028658', + message: 'This is me testing the windows client.', + modified: [ + 'README.md' + ], + removed: [ - ], - timestamp: '2013-02-22T14:07:13-08:00', - url: 'https://github.com/octokitty/testing/commit/36c5f2243ed24de58284a96f2a643bed8c028658' - }, - { - added: [ - 'words/madame-bovary.txt' - ], - author: { - email: 'lolwut@noway.biz', - name: 'Garen Torikian', - username: 'octokitty' - }, - committer: { - email: 'lolwut@noway.biz', - name: 'Garen Torikian', - username: 'octokitty' - }, - distinct: true, - id: '1481a2de7b2a7d02428ad93446ab166be7793fbb', - message: 'Rename madame-bovary.txt to words/madame-bovary.txt', - modified: [ + ], + timestamp: '2013-02-22T14:07:13-08:00', + url: 'https://github.com/octokitty/testing/commit/36c5f2243ed24de58284a96f2a643bed8c028658' + }, + { + added: [ + 'words/madame-bovary.txt' + ], + author: { + email: 'lolwut@noway.biz', + name: 'Garen Torikian', + username: 'octokitty' + }, + committer: { + email: 'lolwut@noway.biz', + name: 'Garen Torikian', + username: 'octokitty' + }, + distinct: true, + id: '1481a2de7b2a7d02428ad93446ab166be7793fbb', + message: 'Rename madame-bovary.txt to words/madame-bovary.txt', + modified: [ - ], - removed: [ - 'madame-bovary.txt' - ], - timestamp: '2013-03-12T08:14:29-07:00', - url: 'https://github.com/octokitty/testing/commit/1481a2de7b2a7d02428ad93446ab166be7793fbb' - } - ], - compare: 'https://github.com/octokitty/testing/compare/17c497ccc7cc...1481a2de7b2a', - created: false, - deleted: false, - forced: false, + ], + removed: [ + 'madame-bovary.txt' + ], + timestamp: '2013-03-12T08:14:29-07:00', + url: 'https://github.com/octokitty/testing/commit/1481a2de7b2a7d02428ad93446ab166be7793fbb' + } + ], + compare: 'https://github.com/octokitty/testing/compare/17c497ccc7cc...1481a2de7b2a', + created: false, + deleted: false, + forced: false, head_commit: { - added: [ - 'words/madame-bovary.txt' - ], - author: { - email: 'lolwut@noway.biz', - name: 'Garen Torikian', + added: [ + 'words/madame-bovary.txt' + ], + author: { + email: 'lolwut@noway.biz', + name: 'Garen Torikian', username: 'octokitty' }, committer: { - email: 'lolwut@noway.biz', - name: 'Garen Torikian', + email: 'lolwut@noway.biz', + name: 'Garen Torikian', username: 'octokitty' }, - distinct: true, - id: '1481a2de7b2a7d02428ad93446ab166be7793fbb', - message: 'Rename madame-bovary.txt to words/madame-bovary.txt', - modified: [ + distinct: true, + id: '1481a2de7b2a7d02428ad93446ab166be7793fbb', + message: 'Rename madame-bovary.txt to words/madame-bovary.txt', + modified: [ - ], - removed: [ - 'madame-bovary.txt' - ], + ], + removed: [ + 'madame-bovary.txt' + ], timestamp: '2013-03-12T08:14:29-07:00', - url: 'https://github.com/octokitty/testing/commit/1481a2de7b2a7d02428ad93446ab166be7793fbb' + url: 'https://github.com/octokitty/testing/commit/1481a2de7b2a7d02428ad93446ab166be7793fbb' }, - pusher: { + pusher: { email: 'lolwut@noway.biz', - name: 'Garen Torikian' + name: 'Garen Torikian' }, - ref: 'refs/heads/master', - repository: { - created_at: 1332977768, - description: '', - fork: false, - forks: 0, + ref: 'refs/heads/master', + repository: { + created_at: 1332977768, + description: '', + fork: false, + forks: 0, has_downloads: true, - has_issues: true, - has_wiki: true, - homepage: '', - id: 3860742, - language: 'Ruby', + has_issues: true, + has_wiki: true, + homepage: '', + id: 3860742, + language: 'Ruby', master_branch: 'master', - name: 'testing', - open_issues: 2, - owner: { + name: 'testing', + open_issues: 2, + owner: { email: 'lolwut@noway.biz', - name: 'octokitty' + name: 'octokitty' }, - private: false, - pushed_at: 1363295520, - size: 2156, - stargazers: 1, - url: 'https://github.com/octokitty/testing', - watchers: 1 + private: false, + pushed_at: 1363295520, + size: 2156, + stargazers: 1, + url: 'https://github.com/octokitty/testing', + watchers: 1 } } end def github_push_headers { - 'CONTENT_TYPE' => 'application/json', - 'HTTP_USER_AGENT' => 'GitHub Hookshot 2636b5a', + 'CONTENT_TYPE' => 'application/json', + 'HTTP_USER_AGENT' => 'GitHub Hookshot 2636b5a', 'HTTP_X_GITHUB_DELIVERY' => '4d70b218-ec96-11e3-86ba-0eba6417d40d', - 'HTTP_X_GITHUB_EVENT' => 'push' + 'HTTP_X_GITHUB_EVENT' => 'push' } end def github_ping_payload { - 'zen' => 'Avoid administrative distraction.', + 'zen' => 'Avoid administrative distraction.', 'hook_id' => 2370832 } end def github_ping_headers { - 'CONTENT_TYPE' => 'application/json', - 'HTTP_USER_AGENT' => 'GitHub Hookshot 2636b5a', + 'CONTENT_TYPE' => 'application/json', + 'HTTP_USER_AGENT' => 'GitHub Hookshot 2636b5a', 'HTTP_X_GITHUB_DELIVERY' => '4d70b218-ec96-11e3-86ba-0eba6417d40d', - 'HTTP_X_GITHUB_EVENT' => 'ping' + 'HTTP_X_GITHUB_EVENT' => 'ping' } end def bitbucket_payload { repository: { - website: '', - fork: false, - name: 'dt_fetch', - scm: 'git', - owner: 'test', + website: '', + fork: false, + name: 'dt_fetch', + scm: 'git', + owner: 'test', absolute_url: '/test/dt_fetch/', - slug: 'dt_fetch', - is_private: false + slug: 'dt_fetch', + is_private: false }, - truncated: false, - commits: [ - { - node: '81c83664d120', - files: [ - { type: 'added', file: 'update5.txt' } - ], - raw_author: 'Test ', - utctimestamp: '2014-06-06 07:04:38+00:00', - author: 'test', - timestamp: '2014-06-06 09:04:38', - raw_node: '81c83664d120ce05c91b7259b70c02ebc64edd52', - parents: ['75d5e5aef45a'], - branch: 'master', - message: 'update 5', - revision: nil, - size: -1 - } - ], - canon_url: 'https://bitbucket.org', - user: 'test' + truncated: false, + commits: [ + { + node: '81c83664d120', + files: [ + { type: 'added', file: 'update5.txt' } + ], + raw_author: 'Test ', + utctimestamp: '2014-06-06 07:04:38+00:00', + author: 'test', + timestamp: '2014-06-06 09:04:38', + raw_node: '81c83664d120ce05c91b7259b70c02ebc64edd52', + parents: ['75d5e5aef45a'], + branch: 'master', + message: 'update 5', + revision: nil, + size: -1 + } + ], + canon_url: 'https://bitbucket.org', + user: 'test' } end end diff --git a/test/test_helper.rb b/test/test_helper.rb index 9ef7527..bcec615 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -3,13 +3,18 @@ require 'tmpdir' factories_path = File.expand_path(File.dirname(__FILE__) + '/factories') -unless FactoryGirl.definition_file_paths.include? factories_path - FactoryGirl.definition_file_paths << factories_path - FactoryGirl.reload +unless FactoryBot.definition_file_paths.include? factories_path + FactoryBot.definition_file_paths << factories_path + FactoryBot.reload end +# Forcing loading of Deface overrides +Rails.application.config.deface = Deface::Environment.new +Rails.application.config.deface.overrides.early_check +Rails.application.config.deface.overrides.load_all Rails.application + class ActiveSupport::TestCase - include FactoryGirl::Syntax::Methods + include FactoryBot::Syntax::Methods REPOSITORY_PATH = File.join(Rails.root, 'tmp', 'test', 'undev_git_repository') @@ -182,8 +187,8 @@ def fake_revision(attrs = {}) @clock ||= attrs[:clock] || (Time.now - 1.year) r = RedmineUndevGit::Services::GitRevision.new r.sha = fake_sha - r.aname = attrs[:aname] || 'Redmine Admin' - r.aemail = attrs[:aemail] || 'admin@somenet.foo' + r.aname = attrs[:aname] || 'John Smith' + r.aemail = attrs[:aemail] || 'jsmith@somenet.foo' r.adate = attrs[:adate] || @clock r.cname = attrs[:cname] || r.aname r.cemail = attrs[:cemail] || r.aemail diff --git a/test/unit/lib/redmine/scm/adapters/undev_git_adapter_test.rb b/test/unit/lib/redmine/scm/adapters/undev_git_adapter_test.rb index 9b6507e..0fd0e69 100644 --- a/test/unit/lib/redmine/scm/adapters/undev_git_adapter_test.rb +++ b/test/unit/lib/redmine/scm/adapters/undev_git_adapter_test.rb @@ -388,8 +388,8 @@ def test_entries_wrong_path_encoding assert entries1 assert_equal 3, entries1.size f1 = entries1[1] - assert_equal nil, f1.name - assert_equal nil, f1.path + assert_nil f1.name + assert_nil f1.path assert_equal 'file', f1.kind end diff --git a/test/unit/redmine_undev_git/custom_field_value_test.rb b/test/unit/redmine_undev_git/custom_field_value_test.rb index 52e8ac3..fc0169b 100644 --- a/test/unit/redmine_undev_git/custom_field_value_test.rb +++ b/test/unit/redmine_undev_git/custom_field_value_test.rb @@ -3,7 +3,12 @@ class RedmineUndevGit::CustomFieldValueTest < ActiveSupport::TestCase def setup - @cfvalue = CustomFieldValue.new + @field = IssueCustomField.create!(:name => 'List', :field_format => 'enumeration', :is_required => false) + @foo = CustomFieldEnumeration.new(:name => 'Foo') + @bar = CustomFieldEnumeration.new(:name => 'Bar') + @field.enumerations << @foo + @field.enumerations << @bar + @cfvalue = CustomFieldValue.new(:custom_field => @field, :customized => Issue.new) end def test_value_blank_for_nil diff --git a/test/unit/redmine_undev_git/services/remote_repo_fetch_test.rb b/test/unit/redmine_undev_git/services/remote_repo_fetch_test.rb index 61514d6..4f715c0 100644 --- a/test/unit/redmine_undev_git/services/remote_repo_fetch_test.rb +++ b/test/unit/redmine_undev_git/services/remote_repo_fetch_test.rb @@ -279,8 +279,9 @@ def test_refetch_dont_add_new_timelogs Setting.commit_logtime_enabled = '1' revisions = [ fake_revision(message: '#1 @2h'), - fake_revision(message: '#5 @3h') + fake_revision(message: '#3 @3h') ] + stubs_scm_revisions(revisions) @service.fetch @@ -300,7 +301,7 @@ def test_refetch_dont_add_apply_new_hooks ) revisions = [ fake_revision(message: 'half-fix #1'), - fake_revision(message: 'half-fix #5') + fake_revision(message: 'half-fix #3') ] stubs_scm_revisions(revisions) diff --git a/test/unit/repository/undev_git_test.rb b/test/unit/repository/undev_git_test.rb index ee1b10c..2792046 100644 --- a/test/unit/repository/undev_git_test.rb +++ b/test/unit/repository/undev_git_test.rb @@ -123,7 +123,7 @@ def test_fetch_changesets_from_scratch assert_equal 3, commit.filechanges.count change = commit.filechanges.sort_by(&:path).first assert_equal 'README', change.path - assert_equal nil, change.from_path + assert_nil change.from_path assert_equal 'A', change.action assert_equal NUM_HEAD, @repository.extra_info['heads'].size