dradis-html_export 4.7.0 → 4.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/app/controllers/dradis/plugins/html_export/base_controller.rb +2 -3
- data/app/views/dradis/plugins/html_export/export/_index-content.html.erb +6 -4
- data/app/views/dradis/plugins/html_export/export/_index-tabs.html.erb +1 -1
- data/dradis-html_export.gemspec +1 -1
- data/lib/dradis/plugins/html_export/engine.rb +6 -2
- data/lib/dradis/plugins/html_export/exporter.rb +27 -26
- data/lib/dradis/plugins/html_export/gem_version.rb +1 -1
- data/spec/fixtures/files/liquid.html.erb +12 -0
- data/spec/lib/dradis/plugins/html_export/exporter_spec.rb +98 -15
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4f159a418d2f4dea8f4b57772360b8bb3d687c1df4f311a5277da61135532984
|
4
|
+
data.tar.gz: fef4201229f3d73ea441747f072d25b411709cefcd27e9423b2b7ab9af82b310
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 799c8f3fc2a9a8209b12c307ce0fa544497b38825fe669002e56e4986050a85ba7aaaa5f0dcffe6da27cd1057f52c6eabe3e2efac8f96f69794f8f0eb02fcb06
|
7
|
+
data.tar.gz: af728f464fc65494da24da642b173434dbd7d31146438a96bd2690a166f266324f4fe6867f3bd509b8a743acebef4293f34a38c647c9552dbb8e806d5c7bc95e
|
data/CHANGELOG.md
CHANGED
@@ -7,13 +7,12 @@ module Dradis
|
|
7
7
|
#
|
8
8
|
# It uses the template at: ./vendor/plugins/html_export/template.html.erb
|
9
9
|
def index
|
10
|
-
exporter = Dradis::Plugins::HtmlExport::Exporter.new(
|
11
|
-
html
|
10
|
+
exporter = Dradis::Plugins::HtmlExport::Exporter.new(export_params)
|
11
|
+
html = exporter.export
|
12
12
|
|
13
13
|
render html: html.html_safe
|
14
14
|
end
|
15
15
|
end
|
16
|
-
|
17
16
|
end
|
18
17
|
end
|
19
18
|
end
|
@@ -8,15 +8,17 @@
|
|
8
8
|
|
9
9
|
<% Dradis::Plugins::HtmlExport::TemplatePresenter.each_template do |template| %>
|
10
10
|
<% present(template, Dradis::Plugins::HtmlExport::TemplatePresenter) do |template_presenter| %>
|
11
|
-
<div class="
|
12
|
-
<%= radio_button_tag :template, template_presenter.filename, Dradis::Plugins::HtmlExport::TemplatePresenter.templates.first == template , class: '
|
13
|
-
<label class="
|
11
|
+
<div class="form-check">
|
12
|
+
<%= radio_button_tag :template, template_presenter.filename, Dradis::Plugins::HtmlExport::TemplatePresenter.templates.first == template , class: 'form-check-input' %>
|
13
|
+
<label class="form-check-label" for="template_<%= template_presenter.filename %>">
|
14
14
|
<%= template_presenter.title %>
|
15
15
|
</label>
|
16
16
|
</div>
|
17
17
|
<% end %>
|
18
18
|
<% end %>
|
19
19
|
|
20
|
-
<
|
20
|
+
<div class="mt-4">
|
21
|
+
<%= render partial: 'export/submit_button', locals: { plugin_name: Dradis::Plugins::HtmlExport::Engine.plugin_name } %>
|
22
|
+
</div>
|
21
23
|
<% end %>
|
22
24
|
<% end%>
|
data/dradis-html_export.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.require_paths = ["lib"]
|
22
22
|
|
23
23
|
# gem.add_dependency 'dradis_core', version
|
24
|
-
spec.add_dependency 'dradis-plugins', '
|
24
|
+
spec.add_dependency 'dradis-plugins', '>= 4.8.0'
|
25
25
|
|
26
26
|
# Note markup
|
27
27
|
spec.add_dependency 'rails_autolink', '~> 1.1'
|
@@ -2,7 +2,6 @@ module Dradis
|
|
2
2
|
module Plugins
|
3
3
|
module HtmlExport
|
4
4
|
class Engine < ::Rails::Engine
|
5
|
-
|
6
5
|
# Standard Rails Engine stuff
|
7
6
|
isolate_namespace Dradis::Plugins::HtmlExport
|
8
7
|
engine_name 'dradis_html_export'
|
@@ -19,12 +18,17 @@ module Dradis
|
|
19
18
|
provides :export, :rtp
|
20
19
|
description 'Generate advanced HTML reports'
|
21
20
|
|
22
|
-
|
23
21
|
initializer 'dradis-html_export.mount_engine' do
|
24
22
|
Rails.application.routes.append do
|
25
23
|
mount Dradis::Plugins::HtmlExport::Engine => '/export/html'
|
26
24
|
end
|
27
25
|
end
|
26
|
+
|
27
|
+
initializer 'draids-html_export.include_helper' do
|
28
|
+
ActiveSupport.on_load(:action_view) do
|
29
|
+
Dradis::Plugins::HtmlExport::Exporter.include(ApplicationHelper)
|
30
|
+
end
|
31
|
+
end
|
28
32
|
end
|
29
33
|
end
|
30
34
|
end
|
@@ -1,31 +1,13 @@
|
|
1
1
|
module Dradis
|
2
2
|
module Plugins
|
3
3
|
module HtmlExport
|
4
|
-
|
5
4
|
class Exporter < Dradis::Plugins::Export::Base
|
6
5
|
def export(args = {})
|
7
6
|
log_report
|
8
7
|
|
9
|
-
controller = args[:controller] || ApplicationController
|
10
|
-
|
11
8
|
with_temporary_template(options[:template]) do |temporary_template|
|
12
|
-
|
13
|
-
|
14
|
-
template: temporary_template,
|
15
|
-
layout: false,
|
16
|
-
locals: {
|
17
|
-
categorized_issues: categorized_issues,
|
18
|
-
content_service: content_service,
|
19
|
-
issues: issues,
|
20
|
-
nodes: nodes,
|
21
|
-
notes: notes,
|
22
|
-
project: project,
|
23
|
-
reporting_cat: content_service.report_category,
|
24
|
-
tags: tags,
|
25
|
-
title: title,
|
26
|
-
user: options[:user]
|
27
|
-
}
|
28
|
-
)
|
9
|
+
erb = ERB.new(File.read(temporary_template))
|
10
|
+
erb.result(binding)
|
29
11
|
end
|
30
12
|
end
|
31
13
|
|
@@ -89,11 +71,30 @@ module Dradis
|
|
89
71
|
end
|
90
72
|
|
91
73
|
def title
|
92
|
-
@title ||=
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
74
|
+
@title ||=
|
75
|
+
if Dradis.constants.include?(:Pro)
|
76
|
+
"Dradis Professional Edition v#{Dradis::Pro.version}"
|
77
|
+
else
|
78
|
+
"Dradis Community Edition v#{Dradis::CE.version}"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def liquid_assigns
|
83
|
+
assigns = {
|
84
|
+
'issues' => issues.map { |issue| IssueDrop.new(issue) },
|
85
|
+
'nodes' => nodes.map { |node| NodeDrop.new(node) },
|
86
|
+
'project' => ProjectDrop.new(project),
|
87
|
+
'tags' => tags.map { |tag| TagDrop.new(tag) }
|
88
|
+
}
|
89
|
+
|
90
|
+
if defined?(Dradis::Pro)
|
91
|
+
assigns.merge!(
|
92
|
+
'content_blocks' => content_service.all_content_blocks.map { |c| ContentBlockDrop.new(c) },
|
93
|
+
'document_properties' => DocumentPropertiesDrop.new(properties: project.content_library.properties)
|
94
|
+
)
|
95
|
+
end
|
96
|
+
|
97
|
+
assigns
|
97
98
|
end
|
98
99
|
|
99
100
|
def with_temporary_template(original, &block)
|
@@ -103,7 +104,7 @@ module Dradis
|
|
103
104
|
FileUtils.mkdir_p(File.dirname(destination_path))
|
104
105
|
FileUtils.cp(original, destination_path)
|
105
106
|
|
106
|
-
yield(
|
107
|
+
yield(destination_path)
|
107
108
|
ensure
|
108
109
|
file_path = Rails.root.join("app/views/tmp/#{filename}")
|
109
110
|
File.delete(file_path) if File.exists?(file_path)
|
@@ -1,25 +1,108 @@
|
|
1
1
|
require 'rails_helper'
|
2
2
|
|
3
3
|
describe Dradis::Plugins::HtmlExport::Exporter do
|
4
|
-
let!(:project) { create(:project) }
|
5
|
-
|
6
|
-
|
7
|
-
let(:
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
)
|
13
|
-
}
|
14
|
-
end
|
4
|
+
let!(:project) { create(:project, :with_team) }
|
5
|
+
|
6
|
+
let!(:content_blocks) { create_list(:content_block, 5, project: project) }
|
7
|
+
let!(:issues) { create_list(:issue, 5, node: project.issue_library) }
|
8
|
+
let!(:nodes) { create_list(:node, 5, project: project) }
|
9
|
+
let!(:tags) { create_list(:tag, 5, project: project) }
|
10
|
+
|
11
|
+
let(:controller) { Dradis::Plugins::HtmlExport::BaseController.new }
|
15
12
|
|
16
13
|
let(:exporter) { described_class.new(export_options) }
|
17
14
|
|
18
|
-
|
19
|
-
|
15
|
+
context 'html' do
|
16
|
+
let(:export_options) do
|
17
|
+
{
|
18
|
+
project_id: project.id,
|
19
|
+
template: Dradis::Plugins::HtmlExport::Engine.root.join(
|
20
|
+
'spec/fixtures/files/template.html.erb'
|
21
|
+
)
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'exports html' do
|
26
|
+
html = exporter.export
|
27
|
+
|
28
|
+
issues.each do |issue|
|
29
|
+
expect(html.include?(issue.title))
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'liquid' do
|
35
|
+
let(:export_options) do
|
36
|
+
{
|
37
|
+
project_id: project.id,
|
38
|
+
template: Dradis::Plugins::HtmlExport::Engine.root.join(
|
39
|
+
'spec/fixtures/files/liquid.html.erb'
|
40
|
+
)
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
before do
|
45
|
+
report_content = project.content_library
|
46
|
+
report_content.properties = {
|
47
|
+
'dradis.project' => project.name,
|
48
|
+
'dradis.version' => 'v1.0'
|
49
|
+
}
|
50
|
+
report_content.save
|
51
|
+
|
52
|
+
nodes.each do |node|
|
53
|
+
create(:evidence, node: node, issue: issues.first)
|
54
|
+
end
|
55
|
+
|
56
|
+
create(:issue,
|
57
|
+
node: project.issue_library,
|
58
|
+
text: <<-TEXT
|
59
|
+
#[Title]#
|
60
|
+
Test Issue
|
61
|
+
|
62
|
+
#[Description]#
|
63
|
+
*Project:* {{ project.name }}
|
64
|
+
*Document Properties:*
|
65
|
+
* {{ document_properties.dradis.project }}
|
66
|
+
* {{ document_properties.dradis.version }}
|
67
|
+
|
68
|
+
*Nodes:*
|
69
|
+
{% for node in nodes %}
|
70
|
+
* {{ node.label }}
|
71
|
+
{% endfor %}
|
72
|
+
|
73
|
+
*Content blocks:*
|
74
|
+
{% for content_block in content_blocks %}
|
75
|
+
* {{ content_block.fields['Title'] }}
|
76
|
+
{% endfor %}
|
77
|
+
|
78
|
+
*Tags:*
|
79
|
+
{% for tag in tags %}
|
80
|
+
* {{ tag.name }}
|
81
|
+
{% endfor %}
|
82
|
+
TEXT
|
83
|
+
)
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'parses liquid syntax' do
|
87
|
+
html = exporter.export
|
88
|
+
|
89
|
+
expect(html).to include project.name
|
90
|
+
|
91
|
+
project.content_library.properties.each do |_, value|
|
92
|
+
expect(html).to include value
|
93
|
+
end
|
94
|
+
|
95
|
+
nodes.each do |node|
|
96
|
+
expect(html).to include node.label
|
97
|
+
end
|
98
|
+
|
99
|
+
content_blocks.each do |content_block|
|
100
|
+
expect(html).to include content_block.title
|
101
|
+
end
|
20
102
|
|
21
|
-
|
22
|
-
|
103
|
+
tags.each do |tag|
|
104
|
+
expect(html).to include tag.name
|
105
|
+
end
|
23
106
|
end
|
24
107
|
end
|
25
108
|
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dradis-html_export
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Martin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-05-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dradis-plugins
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 4.8.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 4.8.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rails_autolink
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- lib/dradis/plugins/html_export/gem_version.rb
|
83
83
|
- lib/dradis/plugins/html_export/version.rb
|
84
84
|
- lib/tasks/thorfile.rb
|
85
|
+
- spec/fixtures/files/liquid.html.erb
|
85
86
|
- spec/fixtures/files/template.html.erb
|
86
87
|
- spec/lib/dradis/plugins/html_export/exporter_spec.rb
|
87
88
|
- spec/presenters/dradis/plugins/html_export/template_presenter_spec.rb
|
@@ -113,6 +114,7 @@ signing_key:
|
|
113
114
|
specification_version: 4
|
114
115
|
summary: Dradis HTML export plugin
|
115
116
|
test_files:
|
117
|
+
- spec/fixtures/files/liquid.html.erb
|
116
118
|
- spec/fixtures/files/template.html.erb
|
117
119
|
- spec/lib/dradis/plugins/html_export/exporter_spec.rb
|
118
120
|
- spec/presenters/dradis/plugins/html_export/template_presenter_spec.rb
|