foreman_teamdynamix 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 712ad657ba486c73b3ed27d103192ed7601d1952
4
- data.tar.gz: f391618928e41d508ca72d71f5e082f86760636d
2
+ SHA256:
3
+ metadata.gz: 794c51b66dd0d644686457e879f7afdac549631887c3992ff7fb3e0f605c75b6
4
+ data.tar.gz: 643df4d3a0afa76409a95bea74a9d1827ba52ccb34de79d1beef8100c9ecc21d
5
5
  SHA512:
6
- metadata.gz: 31a92e3d4f4d162119d9f559e2eb0b6baadb0cc4dce2b3b2c054e9ffb34a3bc92bef39aa18598f945ac15dcb171f8f58d520ec10080ed8e32c4923a0897ad739
7
- data.tar.gz: a0cf77dfeba937ae494cd3cdd45523e39f8af6488a620ef3107f4bcebdb4eae4a14f1d286d141b19ed5d7be0e2bf48411bb331392133ebf67750adf042e2ac31
6
+ metadata.gz: 43388c4a90d67990cafa869640227c28dcc11d16ec9a404aca967c4e06ef44ee1637c9d95fb381cc398eca99f40a1e713799c11b0432510061da40286b6f14a6
7
+ data.tar.gz: a197a8ec8140d1d076b5173529d1bde01c8c3145708f701bf7ba3088fcb0f2d142b4c95eee03269ccbe4925a4ae0e10716f849b08bd1b442879f376e8f4c1ae1
data/LICENSE CHANGED
File without changes
data/README.md CHANGED
File without changes
data/Rakefile CHANGED
@@ -38,7 +38,7 @@ task default: :test
38
38
  begin
39
39
  require 'rubocop/rake_task'
40
40
  RuboCop::RakeTask.new
41
- rescue StandardError => _
41
+ rescue StandardError => _e
42
42
  puts 'Rubocop not loaded.'
43
43
  end
44
44
 
@@ -6,8 +6,8 @@ module ForemanTeamdynamix
6
6
  def teamdynamix
7
7
  find_resource
8
8
  render partial: 'foreman_teamdynamix/hosts/teamdynamix', :locals => { :host => @host }
9
- rescue ActionView::Template::Error => exception
10
- process_ajax_error exception, 'fetch teamdynamix tab information'
9
+ rescue ActionView::Template::Error => e
10
+ process_ajax_error e, 'fetch teamdynamix tab information'
11
11
  end
12
12
 
13
13
  private
@@ -32,7 +32,7 @@ module ForemanTeamdynamix
32
32
  def asset_uri(td_pane_fields)
33
33
  if td_pane_fields[:url]
34
34
  uri = "#{td_pane_fields[:url]}/#{@asset['AppID']}/Assets/AssetDet?AssetID=#{@asset['ID']}"
35
- [[_('URI'), link_to(@asset['SerialNumber'], uri, target: '_blank')]]
35
+ [[_('URI'), link_to(@asset['SerialNumber'], uri, target: '_blank', rel: 'noopener')]]
36
36
  else
37
37
  []
38
38
  end
@@ -43,11 +43,14 @@ module ForemanTeamdynamix
43
43
  parent_attrib = nested_attrib_tokens.first
44
44
  child_attrib = nested_attrib_tokens[1..nested_attrib_tokens.length].join('.')
45
45
  return '' if parent_attrib.blank? || child_attrib.blank?
46
+
46
47
  child_attrib.delete!("'")
47
48
  parent_attrib_val = @asset[parent_attrib]
48
49
  return '' if parent_attrib_val.blank?
50
+
49
51
  nested_attrib_val = parent_attrib_val.find { |attrib| attrib['Name'] == child_attrib }
50
52
  return '' if nested_attrib_val.blank?
53
+
51
54
  nested_attrib_val['Value']
52
55
  end
53
56
  end
File without changes
File without changes
@@ -5,12 +5,15 @@ class TeamdynamixApi
5
5
  if SETTINGS[:teamdynamix].blank?
6
6
  raise('Missing configurations for the plugin see https://github.com/MiamiOH/foreman_teamdynamix')
7
7
  end
8
+
8
9
  API_CONFIG = SETTINGS[:teamdynamix][:api]
9
10
 
10
11
  raise('Missing Team Dynamix Api ID in plugin settings') if API_CONFIG[:appId].blank?
12
+
11
13
  APP_ID = API_CONFIG[:appId]
12
14
 
13
15
  raise('Missing Team Dynamix API URL in plugin settings') if API_CONFIG[:url].blank?
16
+
14
17
  API_URL = API_CONFIG[:url]
15
18
 
16
19
  def initialize
@@ -21,6 +24,7 @@ class TeamdynamixApi
21
24
  # returns TeamDynamix.Api.Assets.Asset
22
25
  def get_asset(asset_id)
23
26
  return nil unless asset_id
27
+
24
28
  uri = URI.parse("#{API_URL}/#{APP_ID}/assets/#{asset_id}")
25
29
  rest(:get, uri)
26
30
  rescue RuntimeError
@@ -153,7 +157,7 @@ class TeamdynamixApi
153
157
  end
154
158
 
155
159
  def valid_auth_token?(token)
156
- token.match(/^[a-zA-Z0-9\.\-\_]*$/)
160
+ token.match(/^[a-zA-Z0-9.\-_]*$/)
157
161
  end
158
162
 
159
163
  def ensure_configured_create_params
@@ -1,5 +1,5 @@
1
1
  Rails.application.routes.draw do
2
- constraints(:id => %r{[^\/]+}) do
2
+ constraints(:id => %r{[^/]+}) do
3
3
  resources :hosts do
4
4
  member do
5
5
  get 'teamdynamix'
File without changes
@@ -16,7 +16,7 @@ module ForemanTeamdynamix
16
16
 
17
17
  initializer 'foreman_teamdynamix.register_plugin', :before => :finisher_hook do |_app|
18
18
  Foreman::Plugin.register :foreman_teamdynamix do
19
- requires_foreman '>= 1.7'
19
+ requires_foreman '>= 2.3'
20
20
 
21
21
  # Add permissions
22
22
  security_block :foreman_teamdynamix do
@@ -29,13 +29,11 @@ module ForemanTeamdynamix
29
29
 
30
30
  # Include concerns in this config.to_prepare block
31
31
  config.to_prepare do
32
- begin
33
- HostsHelper.send(:include, ForemanTeamdynamix::HostsHelperExtensions)
34
- ::HostsController.send(:include, ForemanTeamdynamix::HostsControllerExtensions)
35
- ::Host::Managed.send(:include, ForemanTeamdynamix::HostExtensions)
36
- rescue StandardError => e
37
- Rails.logger.warn "ForemanTeamdynamix: skipping engine hook (#{e})"
38
- end
32
+ HostsHelper.include ForemanTeamdynamix::HostsHelperExtensions
33
+ ::HostsController.include ForemanTeamdynamix::HostsControllerExtensions
34
+ ::Host::Managed.include ForemanTeamdynamix::HostExtensions
35
+ rescue StandardError => e
36
+ Rails.logger.warn "ForemanTeamdynamix: skipping engine hook (#{e})"
39
37
  end
40
38
 
41
39
  initializer 'foreman_teamdynamix.register_gettext', after: :load_config_initializers do |_app|
@@ -1,3 +1,3 @@
1
1
  module ForemanTeamdynamix
2
- VERSION = '1.0.0'.freeze
2
+ VERSION = '2.0.0'.freeze
3
3
  end
@@ -11,7 +11,7 @@ namespace :test do
11
11
  end
12
12
 
13
13
  namespace :foreman_teamdynamix do
14
- task :rubocop do
14
+ task rubocop: :environment do
15
15
  begin
16
16
  require 'rubocop/rake_task'
17
17
  RuboCop::RakeTask.new(:rubocop_foreman_teamdynamix) do |task|
@@ -1,4 +1,4 @@
1
- desc <<-DESC.strip_heredoc.squish
1
+ desc <<~DESC.squish
2
2
  Scans existing hosts and creates or updates the asset in TeamDynamix.
3
3
  * If found, update the fields in the TeamDynamix asset.
4
4
  * If not found, create a TeamDynamix asset with desired fields.
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -7,7 +7,7 @@ class HostsControllerTest < ActionController::TestCase
7
7
  before do
8
8
  Host::Managed.any_instance.stubs(:td_api).returns(td_api)
9
9
  end
10
- # rubocop:disable Style/StringLiterals, HttpPositionalArguments
10
+ # rubocop:disable Style/StringLiterals, Rails/HttpPositionalArguments
11
11
  describe 'Given host exist as an asset in TeamDynamix' do
12
12
  describe 'when TeamDynamix asset attributes are configured' do
13
13
  describe 'GET hosts/show' do
@@ -15,9 +15,10 @@ class HostsControllerTest < ActionController::TestCase
15
15
  get :show, { :id => host.name }, set_session_user
16
16
  assert_includes response.headers['Content-Type'], 'text/html'
17
17
  assert_includes response.body, "<ul id=\"myTab\""
18
- assert_equal response.status, 200
18
+ assert_equal(200, response.status)
19
19
  assert_includes response.body, "<li><a href=\"#teamdynamix\" data-toggle=\"tab\">#{td_tab_title}</a></li>"
20
- assert_includes response.body, "<div id=\"teamdynamix\" class=\"tab-pane\" data-ajax-url=\"/hosts/#{host.name}/teamdynamix\" data-on-complete=\"onContentLoad\">"
20
+ assert_includes response.body,
21
+ "<div id=\"teamdynamix\" class=\"tab-pane\" data-ajax-url=\"/hosts/#{host.name}/teamdynamix\" data-on-complete=\"onContentLoad\">"
21
22
  end
22
23
  test 'TeamDynamix tab contains configured asset attributes' do
23
24
  skip
@@ -27,5 +28,5 @@ class HostsControllerTest < ActionController::TestCase
27
28
  end
28
29
  end
29
30
  end
30
- # rubocop:enable Style/StringLiterals, HttpPositionalArguments
31
+ # rubocop:enable Style/StringLiterals, Rails/HttpPositionalArguments
31
32
  end
@@ -13,7 +13,9 @@ class HostsHelperExtensionsTest < ActiveSupport::TestCase
13
13
  describe '#teamdynamix_fields' do
14
14
  let(:sample_asset) { td_api.get_asset }
15
15
  let(:default_fields) { [sample_asset_uri] }
16
- let(:direct_attribs_config) { { 'Asset ID' => 'ID', 'Owner' => 'OwningCustomerName', 'Parent Asset' => 'ParentID' } }
16
+ let(:direct_attribs_config) do
17
+ { 'Asset ID' => 'ID', 'Owner' => 'OwningCustomerName', 'Parent Asset' => 'ParentID' }
18
+ end
17
19
  let(:direct_attribs_fields) { get_direct_asset_attribs_val(direct_attribs_config) }
18
20
  let(:expected_fields) { default_fields + direct_attribs_fields }
19
21
  before do
@@ -56,7 +58,7 @@ class HostsHelperExtensionsTest < ActiveSupport::TestCase
56
58
 
57
59
  test 'settings title is not present: return default title' do
58
60
  SETTINGS[:teamdynamix][:title] = nil
59
- assert_equal teamdynamix_title, 'Team Dynamix'
61
+ assert_equal('Team Dynamix', teamdynamix_title)
60
62
  SETTINGS[:teamdynamix][:title] = title_orig
61
63
  end
62
64
  end
File without changes
File without changes
@@ -8,17 +8,19 @@ class TeamdynamixApiTest < ActiveSupport::TestCase
8
8
  let(:api_url) { api_config[:url] }
9
9
  let(:host) { FactoryBot.build(:host, :managed) }
10
10
  let(:auth_payload) { { username: api_config[:username], password: api_config[:password] }.to_json }
11
- let(:dummy_token) { 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1bmlxdWVfbmFtZSI6InR5YWdpbkBtaWFtaW9oLmVkdSIsImlzcyI6IlREIiwiYXVkIjoiaHR0cHM6Ly93d3cudGVhbWR5bmFtaXguY29tLyIsImV4cCI6MTUxNzA2OTU1OSwibmJmIjoxNTE2OTgzMTU5fQ.PkvKbYQCV-hY7_ni4-Zg3qJARBagSzz99fclBYyxxas' }
11
+ let(:dummy_token) do
12
+ 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1bmlxdWVfbmFtZSI6InR5YWdpbkBtaWFtaW9oLmVkdSIsImlzcyI6IlREIiwiYXVkIjoiaHR0cHM6Ly93d3cudGVhbWR5bmFtaXguY29tLyIsImV4cCI6MTUxNzA2OTU1OSwibmJmIjoxNTE2OTgzMTU5fQ.PkvKbYQCV-hY7_ni4-Zg3qJARBagSzz99fclBYyxxas'
13
+ end
12
14
  let(:sample_asset) { FakeTeamdynamixApi.new.get_asset }
13
15
  let(:sample_asset_id) { sample_asset['ID'].to_s }
14
16
  let(:host_name) { 'delete.foreman_teamdynamix.com' }
15
- let(:get_asset_path) { api_url + '/' + app_id + '/assets/' + sample_asset_id }
17
+ let(:get_asset_path) { "#{api_url}/#{app_id}/assets/#{sample_asset_id}" }
16
18
  let(:create_status_id) { 641 }
17
19
  let(:custom_attributes) do
18
20
  [{ 'name' => 'mu.ci.Lifecycle Status', 'id' => 11_634, 'value' => '26193' },
19
21
  { 'name' => 'mu.ci.Description', 'id' => 11_632, 'value' => 'Foreman host created by ForemanTeamdynamix plugin' }]
20
22
  end
21
- let(:create_path) { api_url + '/' + app_id + '/assets' }
23
+ let(:create_path) { "#{api_url}/#{app_id}/assets" }
22
24
  let(:create_payload) do
23
25
  { AppID: app_id,
24
26
  SerialNumber: host_name,
@@ -27,7 +29,7 @@ class TeamdynamixApiTest < ActiveSupport::TestCase
27
29
  Attributes: custom_attributes }
28
30
  end
29
31
  before do
30
- stub_request(:post, api_url + '/auth')
32
+ stub_request(:post, "#{api_url}/auth")
31
33
  .with(body: auth_payload,
32
34
  headers: { 'Content-Type' => 'application/json' })
33
35
  .to_return(status: 200, body: dummy_token)
@@ -45,7 +47,7 @@ class TeamdynamixApiTest < ActiveSupport::TestCase
45
47
  context 'Valid Request' do
46
48
  before do
47
49
  stub_request(:post, update_path)
48
- .with(headers: { 'Authorization' => 'Bearer ' + dummy_token,
50
+ .with(headers: { 'Authorization' => "Bearer #{dummy_token}",
49
51
  'Content-Type' => 'application/json' },
50
52
  body: update_payload)
51
53
  .to_return(status: 200, body: sample_asset.to_json)
@@ -67,10 +69,10 @@ class TeamdynamixApiTest < ActiveSupport::TestCase
67
69
  end
68
70
  describe 'valid request' do
69
71
  let(:retired_asset) { sample_asset.merge('StatusID' => retire_status_id) }
70
- let(:retire_path) { api_url + '/' + app_id + '/assets/' + sample_asset_id }
72
+ let(:retire_path) { "#{api_url}/#{app_id}/assets/#{sample_asset_id}" }
71
73
  before do
72
74
  stub_request(:post, retire_path)
73
- .with(headers: { 'Authorization' => 'Bearer ' + dummy_token,
75
+ .with(headers: { 'Authorization' => "Bearer #{dummy_token}",
74
76
  'Content-Type' => 'application/json' })
75
77
  .to_return(status: 200, body: retired_asset.to_json)
76
78
  end
@@ -91,7 +93,7 @@ class TeamdynamixApiTest < ActiveSupport::TestCase
91
93
  context 'Valid Request' do
92
94
  before do
93
95
  stub_request(:post, create_path)
94
- .with(headers: { 'Authorization' => 'Bearer ' + dummy_token,
96
+ .with(headers: { 'Authorization' => "Bearer #{dummy_token}",
95
97
  'Content-Type' => 'application/json' },
96
98
  body: create_payload)
97
99
  .to_return(status: 200, body: sample_asset.to_json)
@@ -112,7 +114,7 @@ class TeamdynamixApiTest < ActiveSupport::TestCase
112
114
  # rubocop:enable Style/StringLiterals
113
115
  before do
114
116
  stub_request(:post, create_path)
115
- .with(headers: { 'Authorization' => 'Bearer ' + dummy_token,
117
+ .with(headers: { 'Authorization' => "Bearer #{dummy_token}",
116
118
  'Content-Type' => 'application/json' },
117
119
  body: create_payload)
118
120
  .to_return(status: 400, body: error_body)
@@ -138,7 +140,7 @@ class TeamdynamixApiTest < ActiveSupport::TestCase
138
140
  let(:error) { { status: "403", msg: "", body: error_body }.to_json }
139
141
  # rubocop:enable Style/StringLiterals
140
142
  before do
141
- stub_request(:post, api_url + '/auth')
143
+ stub_request(:post, "#{api_url}/auth")
142
144
  .with(body: auth_payload)
143
145
  .to_return(status: 403, body: error_body)
144
146
  end
@@ -154,7 +156,7 @@ class TeamdynamixApiTest < ActiveSupport::TestCase
154
156
  context 'Valid Request' do
155
157
  before do
156
158
  stub_request(:get, get_asset_path)
157
- .with(headers: { 'Authorization' => 'Bearer ' + dummy_token })
159
+ .with(headers: { 'Authorization' => "Bearer #{dummy_token}" })
158
160
  .to_return(status: 200, body: sample_asset.to_json)
159
161
  end
160
162
  it 'returns asset json' do
@@ -28,7 +28,7 @@ end
28
28
  def sample_asset_uri
29
29
  api_url = SETTINGS[:teamdynamix][:api][:url]
30
30
  asset_uri = api_url.split('api').first + sample_asset['Uri']
31
- [_('URI'), link_to(sample_asset['Uri'], asset_uri, target: '_blank')]
31
+ [_('URI'), link_to(sample_asset['Uri'], asset_uri, target: '_blank', rel: 'noopener')]
32
32
  end
33
33
 
34
34
  require 'webmock/minitest'
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_teamdynamix
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nipendar Tyagi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-19 00:00:00.000000000 Z
11
+ date: 2021-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: deface
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop-rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: webmock
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -101,7 +115,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
101
115
  requirements:
102
116
  - - ">="
103
117
  - !ruby/object:Gem::Version
104
- version: '0'
118
+ version: 2.5.0
105
119
  required_rubygems_version: !ruby/object:Gem::Requirement
106
120
  requirements:
107
121
  - - ">="
@@ -109,16 +123,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
123
  version: '0'
110
124
  requirements: []
111
125
  rubyforge_project:
112
- rubygems_version: 2.6.11
126
+ rubygems_version: 2.7.6
113
127
  signing_key:
114
128
  specification_version: 4
115
129
  summary: Creates TeamDynamix Asset when a host is created in Foreman
116
130
  test_files:
117
- - test/models/host_extensions_test.rb
118
131
  - test/fake_teamdynamix_api.rb
119
- - test/test_plugin_helper.rb
120
- - test/sample_asset.json
121
132
  - test/functional/concerns/hosts_controller_extensions_test.rb
133
+ - test/helpers/concerns/foreman_teamdynamix/hosts_helper_extensions_test.rb
134
+ - test/models/host_extensions_test.rb
135
+ - test/sample_asset.json
122
136
  - test/services/teamdynamix_api_test.rb
137
+ - test/test_plugin_helper.rb
123
138
  - test/unit/foreman_teamdynamix_test.rb
124
- - test/helpers/concerns/foreman_teamdynamix/hosts_helper_extensions_test.rb