foreman_statistics 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +619 -0
- data/README.md +40 -0
- data/Rakefile +47 -0
- data/app/controllers/concerns/foreman_statistics/parameters/trend.rb +20 -0
- data/app/controllers/foreman_statistics/api/v2/statistics_controller.rb +33 -0
- data/app/controllers/foreman_statistics/api/v2/trends_controller.rb +58 -0
- data/app/controllers/foreman_statistics/react_controller.rb +19 -0
- data/app/controllers/foreman_statistics/statistics_controller.rb +24 -0
- data/app/controllers/foreman_statistics/trends_controller.rb +58 -0
- data/app/helpers/foreman_statistics/trends_helper.rb +53 -0
- data/app/models/concerns/foreman_statistics/compute_resource_decorations.rb +9 -0
- data/app/models/concerns/foreman_statistics/environment_decorations.rb +9 -0
- data/app/models/concerns/foreman_statistics/general_setting_decorations.rb +17 -0
- data/app/models/concerns/foreman_statistics/hostgroup_decorations.rb +9 -0
- data/app/models/concerns/foreman_statistics/model_decorations.rb +9 -0
- data/app/models/concerns/foreman_statistics/operatingsystem_decorations.rb +9 -0
- data/app/models/concerns/foreman_statistics/setting_decorations.rb +9 -0
- data/app/models/foreman_statistics/fact_trend.rb +57 -0
- data/app/models/foreman_statistics/foreman_trend.rb +41 -0
- data/app/models/foreman_statistics/trend.rb +38 -0
- data/app/models/foreman_statistics/trend_counter.rb +11 -0
- data/app/services/foreman_statistics/statistics.rb +21 -0
- data/app/services/foreman_statistics/statistics/base.rb +39 -0
- data/app/services/foreman_statistics/statistics/count_facts.rb +17 -0
- data/app/services/foreman_statistics/statistics/count_hosts.rb +9 -0
- data/app/services/foreman_statistics/statistics/count_numerical_fact_pair.rb +43 -0
- data/app/services/foreman_statistics/statistics/count_puppet_classes.rb +23 -0
- data/app/services/foreman_statistics/trend_importer.rb +63 -0
- data/app/views/foreman_statistics/api/v2/trends/base.json.rabl +4 -0
- data/app/views/foreman_statistics/api/v2/trends/create.json.rabl +3 -0
- data/app/views/foreman_statistics/api/v2/trends/index.json.rabl +3 -0
- data/app/views/foreman_statistics/api/v2/trends/main.json.rabl +5 -0
- data/app/views/foreman_statistics/api/v2/trends/show.json.rabl +3 -0
- data/app/views/foreman_statistics/api/v2/trends/update.json.rabl +3 -0
- data/app/views/foreman_statistics/layouts/application_react.html.erb +16 -0
- data/app/views/foreman_statistics/trends/_empty_data.html.erb +7 -0
- data/app/views/foreman_statistics/trends/_fields.html.erb +7 -0
- data/app/views/foreman_statistics/trends/_form.html.erb +8 -0
- data/app/views/foreman_statistics/trends/_hosts.html.erb +13 -0
- data/app/views/foreman_statistics/trends/edit.html.erb +46 -0
- data/app/views/foreman_statistics/trends/index.html.erb +39 -0
- data/app/views/foreman_statistics/trends/new.html.erb +4 -0
- data/app/views/foreman_statistics/trends/show.html.erb +25 -0
- data/app/views/foreman_statistics/trends/welcome.html.erb +12 -0
- data/config/routes.rb +22 -0
- data/db/migrate/20200605153005_migrate_core_types.rb +15 -0
- data/db/migrate_foreman/20121012170851_create_trends.rb +25 -0
- data/db/migrate_foreman/20121012170936_create_trend_counters.rb +14 -0
- data/db/migrate_foreman/20150202094307_add_range_to_trend_counters.rb +6 -0
- data/db/migrate_foreman/20181031155025_add_trend_counter_created_at_unique_constraint.rb +9 -0
- data/lib/foreman_statistics.rb +4 -0
- data/lib/foreman_statistics/engine.rb +104 -0
- data/lib/foreman_statistics/version.rb +3 -0
- data/lib/tasks/foreman_statistics_tasks.rake +78 -0
- data/locale/Makefile +60 -0
- data/locale/en/foreman_statistics.po +19 -0
- data/locale/foreman_statistics.pot +19 -0
- data/locale/gemspec.rb +2 -0
- data/test/factories/foreman_statistics_factories.rb +68 -0
- data/test/fixtures/permissions.yml +26 -0
- data/test/fixtures/settings.yml +6 -0
- data/test/functional/foreman_statistics/api/v2/statistics_controller_test.rb +19 -0
- data/test/functional/foreman_statistics/api/v2/trends_controller_test.rb +74 -0
- data/test/functional/foreman_statistics/statistics_controller_test.rb +23 -0
- data/test/functional/foreman_statistics/trends_controller_test.rb +115 -0
- data/test/models/foreman_statistics/trend_counter_test.rb +10 -0
- data/test/models/foreman_statistics/trend_test.rb +22 -0
- data/test/test_plugin_helper.rb +6 -0
- data/test/unit/foreman_statistics/access_permissions_test.rb +16 -0
- data/test/unit/foreman_statistics/statistics_test.rb +82 -0
- data/test/unit/foreman_statistics_test.rb +11 -0
- data/test/unit/tasks/foreman_statistics_tasks_test.rb +205 -0
- metadata +199 -0
data/locale/Makefile
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
#
|
2
|
+
# Makefile for PO merging and MO generation. More info in the README.
|
3
|
+
#
|
4
|
+
# make all-mo (default) - generate MO files
|
5
|
+
# make check - check translations using translate-tool
|
6
|
+
# make tx-update - download and merge translations from Transifex
|
7
|
+
# make clean - clean everything
|
8
|
+
#
|
9
|
+
DOMAIN = foreman_statistics
|
10
|
+
VERSION = $(shell ruby -e 'require "rubygems";spec = Gem::Specification::load(Dir.glob("../*.gemspec")[0]);puts spec.version')
|
11
|
+
POTFILE = $(DOMAIN).pot
|
12
|
+
MOFILE = $(DOMAIN).mo
|
13
|
+
POFILES = $(shell find . -name '$(DOMAIN).po')
|
14
|
+
MOFILES = $(patsubst %.po,%.mo,$(POFILES))
|
15
|
+
POXFILES = $(patsubst %.po,%.pox,$(POFILES))
|
16
|
+
EDITFILES = $(patsubst %.po,%.edit.po,$(POFILES))
|
17
|
+
|
18
|
+
%.mo: %.po
|
19
|
+
mkdir -p $(shell dirname $@)/LC_MESSAGES
|
20
|
+
msgfmt -o $(shell dirname $@)/LC_MESSAGES/$(MOFILE) $<
|
21
|
+
|
22
|
+
# Generate MO files from PO files
|
23
|
+
all-mo: $(MOFILES)
|
24
|
+
|
25
|
+
# Check for malformed strings
|
26
|
+
%.pox: %.po
|
27
|
+
msgfmt -c $<
|
28
|
+
pofilter --nofuzzy -t variables -t blank -t urls -t emails -t long -t newlines \
|
29
|
+
-t endwhitespace -t endpunc -t puncspacing -t options -t printf -t validchars --gnome $< > $@
|
30
|
+
cat $@
|
31
|
+
! grep -q msgid $@
|
32
|
+
|
33
|
+
%.edit.po:
|
34
|
+
touch $@
|
35
|
+
|
36
|
+
check: $(POXFILES)
|
37
|
+
|
38
|
+
# Unify duplicate translations
|
39
|
+
uniq-po:
|
40
|
+
for f in $(shell find ./ -name "*.po") ; do \
|
41
|
+
msguniq $$f -o $$f ; \
|
42
|
+
done
|
43
|
+
|
44
|
+
tx-pull: $(EDITFILES)
|
45
|
+
tx pull -f
|
46
|
+
for f in $(EDITFILES) ; do \
|
47
|
+
sed -i 's/^\("Project-Id-Version: \).*$$/\1$(DOMAIN) $(VERSION)\\n"/' $$f; \
|
48
|
+
done
|
49
|
+
|
50
|
+
tx-update: tx-pull
|
51
|
+
@echo
|
52
|
+
@echo Run rake plugin:gettext[$(DOMAIN)] from the Foreman installation, then make -C locale mo-files to finish
|
53
|
+
@echo
|
54
|
+
|
55
|
+
mo-files: $(MOFILES)
|
56
|
+
git add $(POFILES) $(POTFILE) ../locale/*/LC_MESSAGES
|
57
|
+
git commit -m "i18n - pulling from tx"
|
58
|
+
@echo
|
59
|
+
@echo Changes commited!
|
60
|
+
@echo
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# foreman_statistics
|
2
|
+
#
|
3
|
+
# This file is distributed under the same license as foreman_statistics.
|
4
|
+
#
|
5
|
+
#, fuzzy
|
6
|
+
msgid ""
|
7
|
+
msgstr ""
|
8
|
+
"Project-Id-Version: version 0.0.1\n"
|
9
|
+
"Report-Msgid-Bugs-To: \n"
|
10
|
+
"POT-Creation-Date: 2014-08-20 08:46+0100\n"
|
11
|
+
"PO-Revision-Date: 2014-08-20 08:54+0100\n"
|
12
|
+
"Last-Translator: Foreman Team <foreman-dev@googlegroups.com>\n"
|
13
|
+
"Language-Team: Foreman Team <foreman-dev@googlegroups.com>\n"
|
14
|
+
"Language: \n"
|
15
|
+
"MIME-Version: 1.0\n"
|
16
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
17
|
+
"Content-Transfer-Encoding: 8bit\n"
|
18
|
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
19
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# foreman_statistics
|
2
|
+
#
|
3
|
+
# This file is distributed under the same license as foreman_statistics.
|
4
|
+
#
|
5
|
+
#, fuzzy
|
6
|
+
msgid ""
|
7
|
+
msgstr ""
|
8
|
+
"Project-Id-Version: version 0.0.1\n"
|
9
|
+
"Report-Msgid-Bugs-To: \n"
|
10
|
+
"POT-Creation-Date: 2014-08-20 08:46+0100\n"
|
11
|
+
"PO-Revision-Date: 2014-08-20 08:46+0100\n"
|
12
|
+
"Last-Translator: Foreman Team <foreman-dev@googlegroups.com>\n"
|
13
|
+
"Language-Team: Foreman Team <foreman-dev@googlegroups.com>\n"
|
14
|
+
"Language: \n"
|
15
|
+
"MIME-Version: 1.0\n"
|
16
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
17
|
+
"Content-Transfer-Encoding: 8bit\n"
|
18
|
+
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
|
19
|
+
|
data/locale/gemspec.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
FactoryBot.define do
|
2
|
+
factory :foreman_statistics_trend, :class => ForemanStatistics::Trend do
|
3
|
+
sequence(:name) { |n| "trend#{n}" }
|
4
|
+
sequence(:trendable_id)
|
5
|
+
|
6
|
+
trait :value do # trend for one value of a fact
|
7
|
+
name { nil }
|
8
|
+
sequence(:fact_value) { |n| "value #{n}" }
|
9
|
+
end
|
10
|
+
|
11
|
+
transient do
|
12
|
+
counter_count { 0 }
|
13
|
+
end
|
14
|
+
trait :with_counters do
|
15
|
+
counter_count { 2 }
|
16
|
+
end
|
17
|
+
|
18
|
+
after(:create) do |trend, evaluator|
|
19
|
+
# only trends for a certain value have counters
|
20
|
+
if trend.fact_value.present?
|
21
|
+
trend.trend_counters = (0...evaluator.counter_count).map do |idx|
|
22
|
+
FactoryBot.build(:foreman_statistics_trend_counter, trend: trend, created_at: Time.zone.now - idx.minutes)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
factory :foreman_statistics_foreman_trend, :class => ForemanStatistics::ForemanTrend, :parent => :foreman_statistics_trend do
|
29
|
+
transient do
|
30
|
+
with_values { false }
|
31
|
+
end
|
32
|
+
trait :with_values do
|
33
|
+
with_values { true }
|
34
|
+
end
|
35
|
+
|
36
|
+
factory :foreman_statistics_trend_os do
|
37
|
+
trendable_type { 'Operatingsystem' }
|
38
|
+
sequence(:name) { |n| "OS#{n}" }
|
39
|
+
|
40
|
+
before(:create) do |trend, evaluator|
|
41
|
+
if evaluator.with_values && trend.name.present?
|
42
|
+
FactoryBot.create_list(:operatingsystem, 3).each do |os|
|
43
|
+
FactoryBot.create(:foreman_statistics_trend_os, :value, :trendable_id => os.id, :fact_value => os.to_s, :counter_count => evaluator.counter_count)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
factory :foreman_statistics_fact_trend, :class => ForemanStatistics::FactTrend, :parent => :foreman_statistics_trend do
|
51
|
+
trendable_type { 'FactName' }
|
52
|
+
trendable { FactoryBot.create(:fact_name) }
|
53
|
+
|
54
|
+
trait :with_values do
|
55
|
+
before(:create) do |trend, evaluator|
|
56
|
+
if trend.name.present?
|
57
|
+
FactoryBot.create_list(:fact_value, 3, :fact_name => trend.trendable).each do |fact|
|
58
|
+
FactoryBot.create(:foreman_statistics_fact_trend, :value, :trendable_id => trend.trendable_id, :fact_name => trend.trendable.name, :fact_value => fact.value, :counter_count => evaluator.counter_count)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
factory :foreman_statistics_trend_counter, :class => ForemanStatistics::TrendCounter do
|
66
|
+
sequence(:count) { |n| n }
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
---
|
2
|
+
view_trends:
|
3
|
+
name: view_trends
|
4
|
+
resource_type: Trend
|
5
|
+
created_at: "2013-12-04 08:41:06.282474"
|
6
|
+
updated_at: "2013-12-04 08:41:06.282474"
|
7
|
+
create_trends:
|
8
|
+
name: create_trends
|
9
|
+
resource_type: Trend
|
10
|
+
created_at: "2013-12-04 08:41:06.290854"
|
11
|
+
updated_at: "2013-12-04 08:41:06.290854"
|
12
|
+
edit_trends:
|
13
|
+
name: edit_trends
|
14
|
+
resource_type: Trend
|
15
|
+
created_at: "2013-12-04 08:41:06.299794"
|
16
|
+
updated_at: "2013-12-04 08:41:06.299794"
|
17
|
+
destroy_trends:
|
18
|
+
name: destroy_trends
|
19
|
+
resource_type: Trend
|
20
|
+
created_at: "2013-12-04 08:41:06.307322"
|
21
|
+
updated_at: "2013-12-04 08:41:06.307322"
|
22
|
+
update_trends:
|
23
|
+
name: update_trends
|
24
|
+
resource_type: Trend
|
25
|
+
created_at: "2013-12-04 08:41:06.315986"
|
26
|
+
updated_at: "2013-12-04 08:41:06.315986"
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative '../../../../test_plugin_helper'
|
2
|
+
|
3
|
+
class ForemanStatistics::Api::V2::StatisticsControllerTest < ActionController::TestCase
|
4
|
+
setup do
|
5
|
+
@routes = ForemanStatistics::Engine.routes
|
6
|
+
end
|
7
|
+
|
8
|
+
test 'should get statistics' do
|
9
|
+
get :index
|
10
|
+
assert_response :success
|
11
|
+
response = ActiveSupport::JSON.decode(@response.body)
|
12
|
+
assert_not response.empty?
|
13
|
+
expected_keys = %w[arch_count cpu_count env_count klass_count
|
14
|
+
mem_free mem_size mem_totfree mem_totsize
|
15
|
+
model_count os_count swap_free swap_size]
|
16
|
+
|
17
|
+
assert_equal expected_keys, response.keys.sort
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require_relative '../../../../test_plugin_helper'
|
2
|
+
|
3
|
+
class ForemanStatistics::Api::V2::TrendsControllerTest < ActionController::TestCase
|
4
|
+
setup do
|
5
|
+
@routes = ForemanStatistics::Engine.routes
|
6
|
+
|
7
|
+
FactoryBot.create(:fact_value, :value => '2.6.9', :host => host,
|
8
|
+
:fact_name => FactoryBot.create(:fact_name, :name => 'kernelversion'))
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:host) { FactoryBot.create(:host) }
|
12
|
+
let(:foreman_trend) { FactoryBot.create(:foreman_statistics_foreman_trend, :trendable_type => 'Environment', :fact_name => 'fact') }
|
13
|
+
let(:fact_trend) { FactoryBot.create(:foreman_statistics_fact_trend, :trendable_type => 'FactName') }
|
14
|
+
let(:os_fact) do
|
15
|
+
FactoryBot.create(:fact_value, :value => 'fedora', :host => host,
|
16
|
+
:fact_name => FactoryBot.create(:fact_name, :name => 'operatingsystem'))
|
17
|
+
end
|
18
|
+
let(:foreman_trend_invalid_attrs) { { :trendable_type => 'NotExists' } }
|
19
|
+
let(:fact_trend_valid_attrs) { { :trendable_type => 'FactName', :trendable_id => os_fact.fact_name_id.to_s } }
|
20
|
+
|
21
|
+
test 'should get index' do
|
22
|
+
expected = [foreman_trend.fact_name, fact_trend.fact_name]
|
23
|
+
get :index, params: {}
|
24
|
+
assert_response :success
|
25
|
+
assert_not_nil assigns(:trends)
|
26
|
+
trends = ActiveSupport::JSON.decode(@response.body)
|
27
|
+
assert_equal expected.sort, trends['results'].map { |t| t['fact_name'] }.sort
|
28
|
+
end
|
29
|
+
|
30
|
+
test 'should create a valid foreman trend' do
|
31
|
+
foreman_trend; fact_trend; os_fact
|
32
|
+
assert_difference('ForemanStatistics::Trend.types.where(:type => "ForemanStatistics::ForemanTrend").count', 1) do
|
33
|
+
post :create, params: { :trend => { :trendable_type => 'Model' } }
|
34
|
+
assert_response :created
|
35
|
+
result = ActiveSupport::JSON.decode(@response.body)
|
36
|
+
assert_equal('Model', result['trendable_type'])
|
37
|
+
assert_equal('ForemanStatistics::ForemanTrend', result['type'])
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
test 'should create a valid fact trend' do
|
42
|
+
assert_difference('ForemanStatistics::Trend.types.where(:type => "ForemanStatistics::FactTrend").count', 1) do
|
43
|
+
post :create, params: { :trend => fact_trend_valid_attrs }
|
44
|
+
assert_response :created
|
45
|
+
result = ActiveSupport::JSON.decode(@response.body)
|
46
|
+
assert_equal('FactName', result['trendable_type'])
|
47
|
+
assert_equal('operatingsystem', result['fact_name'])
|
48
|
+
assert_equal('ForemanStatistics::FactTrend', result['type'])
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
test 'should not create invalid trends' do
|
53
|
+
assert_no_difference('ForemanStatistics::Trend.types.count') do
|
54
|
+
post :create, params: { :trend => foreman_trend_invalid_attrs }
|
55
|
+
end
|
56
|
+
assert_response :error
|
57
|
+
end
|
58
|
+
|
59
|
+
test 'should show individual record' do
|
60
|
+
get :show, params: { :id => foreman_trend.id.to_param }
|
61
|
+
assert_response :success
|
62
|
+
show_response = ActiveSupport::JSON.decode(@response.body)
|
63
|
+
assert_equal foreman_trend.trendable_type, show_response['trendable_type']
|
64
|
+
end
|
65
|
+
|
66
|
+
test 'should destroy trends ' do
|
67
|
+
foreman_trend; fact_trend
|
68
|
+
assert_difference('ForemanStatistics::Trend.types.count', -2) do
|
69
|
+
delete :destroy, params: { :id => foreman_trend.id.to_param }
|
70
|
+
delete :destroy, params: { :id => fact_trend.id.to_param }
|
71
|
+
end
|
72
|
+
assert_response :success
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require_relative '../../test_plugin_helper'
|
2
|
+
|
3
|
+
module ForemanStatistics
|
4
|
+
class StatisticsControllerTest < ActionController::TestCase
|
5
|
+
setup do
|
6
|
+
@routes = ForemanStatistics::Engine.routes
|
7
|
+
end
|
8
|
+
|
9
|
+
test 'user with viewer rights should succeed in viewing statistics' do
|
10
|
+
@request.session[:user] = users(:one).id
|
11
|
+
users(:one).roles = [Role.default, Role.find_by(name: 'Viewer')]
|
12
|
+
get :index, session: set_session_user
|
13
|
+
assert_response :success
|
14
|
+
end
|
15
|
+
|
16
|
+
test 'user with viewer rights should succeed in requesting statistics data via ajax' do
|
17
|
+
@request.session[:user] = users(:one).id
|
18
|
+
users(:one).roles = [Role.default, Role.find_by(name: 'Viewer')]
|
19
|
+
get :show, params: { :id => 'operatingsystem', :format => 'json' }, session: set_session_user
|
20
|
+
assert_response :success
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
require_relative '../../test_plugin_helper'
|
2
|
+
|
3
|
+
module ForemanStatistics
|
4
|
+
class TrendsControllerTest < ActionController::TestCase
|
5
|
+
setup do
|
6
|
+
@routes = ForemanStatistics::Engine.routes
|
7
|
+
Setting::General.create(:name => 'max_trend', :default => 30, :description => 'Max days for Trends graphs')
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:os_trend) { FactoryBot.create(:foreman_statistics_trend_os) }
|
11
|
+
let(:os_trend_with_counters) do
|
12
|
+
FactoryBot.create(:foreman_statistics_trend_os, :with_values, :with_counters)
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'GET #index' do
|
16
|
+
setup do
|
17
|
+
@old = Setting[:entries_per_page]
|
18
|
+
Setting[:entries_per_page] = entries_per_page
|
19
|
+
end
|
20
|
+
teardown do
|
21
|
+
Setting[:entries_per_page] = @old
|
22
|
+
end
|
23
|
+
|
24
|
+
describe 'pagination rendered' do
|
25
|
+
setup { os_trend }
|
26
|
+
let(:entries_per_page) { 1 }
|
27
|
+
|
28
|
+
test 'should not render pagination' do
|
29
|
+
get :index, session: set_session_user
|
30
|
+
assert_response :success
|
31
|
+
assert_not_includes @response.body, 'id=pagination'
|
32
|
+
end
|
33
|
+
|
34
|
+
test 'should render pagination' do
|
35
|
+
get :index, session: set_session_user
|
36
|
+
assert_response :success
|
37
|
+
assert_select "div[id='pagination']"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe 'pagination per page' do
|
42
|
+
setup { trends }
|
43
|
+
let(:entries_per_page) { 5 }
|
44
|
+
let(:trends) { FactoryBot.create_list(:foreman_statistics_trend_os, entries_per_page + 2) }
|
45
|
+
|
46
|
+
test 'should render correct per_page value' do
|
47
|
+
get :index, params: { per_page: entries_per_page + 1 }, session: set_session_user
|
48
|
+
assert_response :success
|
49
|
+
per_page_results = response.body.scan(/perPage":\d+/).first.gsub(/[^\d]/, '').to_i
|
50
|
+
assert_equal entries_per_page, per_page_results
|
51
|
+
end
|
52
|
+
|
53
|
+
test 'should render per page dropdown with correct values' do
|
54
|
+
get :index, params: { per_page: entries_per_page + 1 }, session: set_session_user
|
55
|
+
assert_response :success
|
56
|
+
assert_not_nil response.body['perPageOptions":[5,6,10,15,25,50]']
|
57
|
+
end
|
58
|
+
|
59
|
+
test 'sort links should include per page param' do
|
60
|
+
get :index, params: { per_page: entries_per_page + 1 }, session: set_session_user
|
61
|
+
assert_response :success
|
62
|
+
sort_links = css_select('thead a')
|
63
|
+
sort_links.each do |link|
|
64
|
+
assert_includes link['href'], "per_page=#{entries_per_page + 1}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
test 'should get empty_data page, if no trend counters exist' do
|
71
|
+
get :show, params: { :id => os_trend.id }, session: set_session_user
|
72
|
+
assert_response :success
|
73
|
+
assert_template :partial => 'foreman_statistics/trends/_empty_data'
|
74
|
+
end
|
75
|
+
|
76
|
+
test 'should show Foreman model trend' do
|
77
|
+
get :show, params: { :id => os_trend_with_counters.id }, session: set_session_user
|
78
|
+
assert_response :success
|
79
|
+
assert_template 'show'
|
80
|
+
end
|
81
|
+
|
82
|
+
test 'should show Foreman model trend value details' do
|
83
|
+
trend_value = os_trend_with_counters.values.find { |t| t.trend_counters.any? }
|
84
|
+
get :show, params: { :id => trend_value.id }, session: set_session_user
|
85
|
+
assert_response :success
|
86
|
+
assert_template 'show'
|
87
|
+
end
|
88
|
+
|
89
|
+
test 'should show fact trend' do
|
90
|
+
get :show, params: { :id => os_trend_with_counters.id }, session: set_session_user
|
91
|
+
assert_response :success
|
92
|
+
assert_template 'show'
|
93
|
+
end
|
94
|
+
|
95
|
+
test 'should show fact trend value details' do
|
96
|
+
trend_value = os_trend_with_counters.values.find { |t| t.trend_counters.any? }
|
97
|
+
get :show, params: { :id => trend_value.id }, session: set_session_user
|
98
|
+
assert_response :success
|
99
|
+
assert_template 'show'
|
100
|
+
end
|
101
|
+
|
102
|
+
test 'should create trend' do
|
103
|
+
trend_parameters = { :name => 'test', :fact_name => 'os',
|
104
|
+
:fact_value => 'fedora', :trendable_type => 'FactName' }
|
105
|
+
post :create, params: { :trend => trend_parameters }, session: set_session_user
|
106
|
+
assert_response :success
|
107
|
+
end
|
108
|
+
|
109
|
+
test 'should update trend' do
|
110
|
+
put :edit, params: { :id => os_trend.id, :trend => { :name => 'test2' } },
|
111
|
+
session: set_session_user
|
112
|
+
assert_response :success
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|