mirror of
https://github.com/meineerde/redmine.git
synced 2026-02-01 03:57:15 +00:00
Adds webooks for versions (#29664).
git-svn-id: https://svn.redmine.org/redmine/trunk@24204 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
ea0a6dfbcb
commit
c749dc2bd3
@ -123,6 +123,10 @@ class Version < ApplicationRecord
|
||||
before_destroy :nullify_projects_default_version
|
||||
after_save :update_default_project_version
|
||||
|
||||
after_create_commit ->{ Webhook.trigger('version.created', self) }
|
||||
after_update_commit ->{ Webhook.trigger('version.updated', self) }
|
||||
after_destroy_commit ->{ Webhook.trigger('version.deleted', self) }
|
||||
|
||||
belongs_to :project
|
||||
has_many :fixed_issues, :class_name => 'Issue', :foreign_key => 'fixed_version_id', :dependent => :nullify, :extend => FixedIssuesExtension
|
||||
|
||||
@ -412,6 +416,14 @@ class Version < ApplicationRecord
|
||||
@default_project_version = (arg == '1' || arg == true)
|
||||
end
|
||||
|
||||
def created_on
|
||||
created_at
|
||||
end
|
||||
|
||||
def updated_on
|
||||
updated_at
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Update the issue's fixed versions. Used if a version's sharing changes.
|
||||
|
||||
@ -32,6 +32,7 @@ class WebhookPayload
|
||||
wiki_page: %w[created updated deleted],
|
||||
time_entry: %w[created updated deleted],
|
||||
news: %w[created updated deleted],
|
||||
version: %w[created updated deleted],
|
||||
}
|
||||
|
||||
def to_h
|
||||
@ -150,6 +151,25 @@ class WebhookPayload
|
||||
}
|
||||
end
|
||||
|
||||
def version_payload(action)
|
||||
version = object
|
||||
ts = case action
|
||||
when 'created'
|
||||
version.created_on
|
||||
when 'deleted'
|
||||
Time.now
|
||||
else
|
||||
version.updated_on
|
||||
end
|
||||
{
|
||||
type: event,
|
||||
timestamp: ts.iso8601,
|
||||
data: {
|
||||
version: ApiRenderer.new("app/views/versions/show.api.rsb", user).to_h(version: version)
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
# given a path to an API template (relative to RAILS_ROOT), renders it and returns the resulting hash
|
||||
class ApiRenderer
|
||||
include ApplicationHelper
|
||||
|
||||
@ -156,4 +156,35 @@ class WebhookPayloadTest < ActiveSupport::TestCase
|
||||
assert_equal 'news.deleted', h[:type]
|
||||
assert_equal 'Updated title', h.dig(:data, :news, :title)
|
||||
end
|
||||
|
||||
test "version created payload should contain version details" do
|
||||
version = Version.generate!
|
||||
|
||||
p = WebhookPayload.new('version.created', version, @dlopper)
|
||||
assert h = p.to_h
|
||||
assert_equal 'version.created', h[:type]
|
||||
assert_equal version.name, h.dig(:data, :version, :name)
|
||||
end
|
||||
|
||||
test "version updated payload should contain updated timestamp" do
|
||||
version = Version.first
|
||||
|
||||
version.name = 'Updated name'
|
||||
version.save!
|
||||
|
||||
p = WebhookPayload.new('version.updated', version, @dlopper)
|
||||
h = p.to_h
|
||||
assert_equal 'version.updated', h[:type]
|
||||
assert_equal 'Updated name', h.dig(:data, :version, :name)
|
||||
end
|
||||
|
||||
test "version deleted payload should contain basic info" do
|
||||
version = Version.first
|
||||
version.destroy
|
||||
|
||||
p = WebhookPayload.new('version.deleted', version, @dlopper)
|
||||
h = p.to_h
|
||||
assert_equal 'version.deleted', h[:type]
|
||||
assert_equal 'Updated name', h.dig(:data, :version, :name)
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user