dradis-html_export 4.8.0 → 4.9.1
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/views/dradis/plugins/html_export/export/_index-content.html.erb +4 -4
- data/app/views/dradis/plugins/html_export/export/_index-tabs.html.erb +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 +2 -2
- 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: ca36e1c731fed6fecd0df85b0f3e4f8d767b8165c683cab6fa1c9f306d61f741
|
4
|
+
data.tar.gz: 847247d60414d9ab8c1342318421d15b5e2b1cdf1103f6c061ee03d4b21fba23
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: afad897697ffc0473072d1b2bf4b074724c3ec38286a3328eb34c654bff1676543168d3ef5081b1fa51dfaae8c1bd1eb7a754a95e66327399cd284a4c03585dd
|
7
|
+
data.tar.gz: ed111b118353cc1419f6d141975275a4982ca910aefd139bf6bf286bbd8372902d98c1d889051883c3242102ce627663b23c4d36fd0a9556fd0de627e2f0ced2
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
<%= content_tag :div, id: 'plugin-html_export', class: 'tab-pane fade' do %>
|
1
|
+
<%= content_tag :div, id: 'plugin-html_export', class: class_names('tab-pane', 'fade', 'active show': !defined?(Dradis::Pro)) do %>
|
2
2
|
<%= form_tag project_export_manager_path(current_project), target: '_blank' do %>
|
3
3
|
<%= hidden_field_tag :plugin, :html_export %>
|
4
4
|
<%= hidden_field_tag :route, :root %>
|
@@ -8,9 +8,9 @@
|
|
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>
|
@@ -1,3 +1,3 @@
|
|
1
1
|
<li class='nav-item'>
|
2
|
-
<a href='#html_export' class='nav-link' data-toggle='tab'
|
2
|
+
<a href='#plugin-html_export' class="<%= class_names('nav-link', active: !defined?(Dradis::Pro)) %>" data-bs-toggle='tab'>HTML</a>
|
3
3
|
</li>
|
@@ -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,14 +1,14 @@
|
|
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.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Martin
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-06-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dradis-plugins
|
@@ -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
|
@@ -93,7 +94,7 @@ homepage: http://dradisframework.org
|
|
93
94
|
licenses:
|
94
95
|
- GPL-2
|
95
96
|
metadata: {}
|
96
|
-
post_install_message:
|
97
|
+
post_install_message:
|
97
98
|
rdoc_options: []
|
98
99
|
require_paths:
|
99
100
|
- lib
|
@@ -108,11 +109,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
109
|
- !ruby/object:Gem::Version
|
109
110
|
version: '0'
|
110
111
|
requirements: []
|
111
|
-
rubygems_version: 3.3.
|
112
|
-
signing_key:
|
112
|
+
rubygems_version: 3.0.3.1
|
113
|
+
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
|