foreman_scc_manager 1.8.12 → 1.8.17

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
2
  SHA256:
3
- metadata.gz: f09d1fba685e2d82d20dcc19d519dfce35a1b6bd04b6c64353e2e40519b30fc9
4
- data.tar.gz: afdb4e0f4c17546b8984c7b29d3bebfce35fa9043fb308a60423c8f113df2b84
3
+ metadata.gz: 96a0d125c5dab16617adfbfbabb28166111f8d0f85c5cbac77836e2f2d6a6791
4
+ data.tar.gz: 2b3ea8baa9f5f09427aee36ce034f6d4e0c385c395b148311ce1605221d9843d
5
5
  SHA512:
6
- metadata.gz: 93779edde27305d62942cdcce50ba8dd548af379f0ff9b88fd7fe800b79bb3de41c58f6e873b116451ba20fbd65c89f6ab0428fbe7f8c7f25f07bc26982054f1
7
- data.tar.gz: 0c58463cfd08bf269ae9c3a6ba2b0c833f1327d5985038cf32b38ff60a3a307377498759ca6cb11734de7a31122b2743bd9a8cb84a454cc8b6167682925c14a4
6
+ metadata.gz: 193d57d91538c74f8e29ee1d7fce65153c46a286b586a281674cbfcde51e833a485c8c7bab8e4342ab09451bcc044dceb09be42e489f3ed3ef4a91217b2b5585
7
+ data.tar.gz: 76f4ff19c508a4f61d5153dcf80f1298c9edb140c0e59e05f702218d097b4d62fe9f7f945dd797bbe0c4ad495db2a39b0807cd7006a7d20f2f8994616feb9da7
data/README.md CHANGED
@@ -8,7 +8,13 @@ Foreman plugin to sync SUSE Customer Center products and repositories into Katel
8
8
 
9
9
  ## Installation
10
10
 
11
- See [Foreman Manual](https://theforeman.org/plugins/#2.Installation) on how to install Foreman plugins.
11
+ This plugin installation is not supported by foreman-installer and has to be installed manually:
12
+
13
+ ```sh
14
+ yum install tfm-rubygem-foreman_scc_manager
15
+
16
+ foreman-installer
17
+ ```
12
18
 
13
19
  ## Compatibility
14
20
 
@@ -29,7 +35,7 @@ See [Foreman Manual](https://theforeman.org/plugins/#2.Installation) on how to i
29
35
 
30
36
  ## Documentation
31
37
 
32
- [Plugin documentation](https://docs.orcharhino.com/sources/management_ui/the_content_menu/suse_subscriptions.html)
38
+ [Plugin documentation](https://docs.orcharhino.com/or/docs/sources/usage_guides/managing_sles_systems_guide.html#mssg_installing_the_scc_manager_plugin)
33
39
 
34
40
  ## Hammer CLI Extension
35
41
 
data/Rakefile CHANGED
@@ -35,13 +35,9 @@ end
35
35
 
36
36
  task default: :test
37
37
 
38
- begin
39
- require 'rubocop/rake_task'
40
- RuboCop::RakeTask.new
41
- rescue StandardError => _e
42
- puts 'Rubocop not loaded.'
43
- end
44
-
45
- task :default do
46
- Rake::Task['rubocop'].execute
38
+ class ForemanSccManager::Engine
39
+ def self.root
40
+ File.expand_path('__dir__')
41
+ end
47
42
  end
43
+ import 'lib/tasks/rubocop.rake'
@@ -12,11 +12,22 @@ module Api
12
12
 
13
13
  before_action :find_resource, :only => [:show, :subscribe]
14
14
 
15
- api :GET, '/scc_accounts/:scc_account_id/scc_products/', N_('List all products for scc_account')
15
+ def metadata_subtotal
16
+ if @scc_products.present?
17
+ @scc_products.count
18
+ else
19
+ super
20
+ end
21
+ end
22
+
23
+ api :GET, '/scc_accounts/:scc_account_id/scc_products/', N_('List products for an scc_account')
16
24
  param :scc_account_id, :identifier_dottable, :required => true
25
+ param :subscribed_only, :bool, :required => false, :desc => N_('Show subscribed products only')
17
26
  param_group :search_and_pagination, ::Api::V2::BaseController
27
+
18
28
  def index
19
29
  scope = resource_scope
30
+ scope = scope.where.not(:product_id => nil) if ::Foreman::Cast.to_bool(params[:subscribed_only])
20
31
  scope = scope.where(:organization => params[:organization_id]) if params[:organization_id].present?
21
32
  @scc_products = scope.search_for(params[:search], :order => params[:order]).paginate(:page => params[:page])
22
33
  end
@@ -47,8 +58,8 @@ module Api
47
58
  private
48
59
 
49
60
  def find_resource
50
- @scc_account = ::SccAccount.find_by!(id: params[:scc_account_id])
51
- @scc_product = @scc_account.scc_products.find_by!(id: params[:id])
61
+ @scc_account = ::SccAccount.find(params[:scc_account_id])
62
+ @scc_product = @scc_account.scc_products.find(params[:id])
52
63
  end
53
64
 
54
65
  def action_permission
@@ -37,7 +37,7 @@ class SccAccountsController < ApplicationController
37
37
  # POST /scc_accounts/test_connection
38
38
  def test_connection
39
39
  @scc_account = SccAccount.new(scc_account_params)
40
- @scc_account.password = SccAccount.find_by!(id: params[:scc_account_id]).password if params[:scc_account_id].present? && scc_account_params[:password].empty?
40
+ @scc_account.password = SccAccount.find(params[:scc_account_id]).password if params[:scc_account_id].present? && scc_account_params[:password].empty?
41
41
  respond_to do |format|
42
42
  if @scc_account.test_connection
43
43
  format.json { render json: nil, status: :ok }
@@ -101,12 +101,16 @@ class SccAccountsController < ApplicationController
101
101
 
102
102
  def find_available_gpg_keys
103
103
  @scc_account ? org = @scc_account.organization : org = @organization
104
- @selectable_gpg_keys = ::Katello::GpgKey.where(organization: org).collect { |p| [p.name, p.id] }.unshift ['None', nil]
104
+ if ::Katello.const_defined?(:ContentCredential)
105
+ @selectable_gpg_keys = ::Katello::ContentCredential.where(organization: org).collect { |p| [p.name, p.id] }.unshift ['None', nil]
106
+ else
107
+ @selectable_gpg_keys = ::Katello::GpgKey.where(organization: org).collect { |p| [p.name, p.id] }.unshift ['None', nil]
108
+ end
105
109
  end
106
110
 
107
111
  def find_organization
108
112
  @organization = Organization.current
109
- redirect_to '/select_organization?toState=' + request.path unless @organization
113
+ redirect_to "/select_organization?toState=#{request.path}" unless @organization
110
114
  end
111
115
 
112
116
  # Use callbacks to share common setup or constraints between actions.
@@ -54,7 +54,11 @@ module Actions
54
54
  def create_sub_plans
55
55
  product = ::Katello::Product.new
56
56
  product.name = input[:product_name]
57
- product.gpg_key = ::Katello::GpgKey.find_by(id: input[:gpg_key], organization: input[:organization_id])
57
+ if ::Katello.const_defined?(:ContentCredential)
58
+ product.gpg_key = ::Katello::ContentCredential.find_by(id: input[:gpg_key], organization: input[:organization_id])
59
+ else
60
+ product.gpg_key = ::Katello::GpgKey.find_by(id: input[:gpg_key], organization: input[:organization_id])
61
+ end
58
62
  product.description = input[:product_description]
59
63
  trigger(::Actions::Katello::Product::Create,
60
64
  product,
@@ -82,7 +86,11 @@ module Actions
82
86
  :arch => input[:arch],
83
87
  :download_policy => ::Runcible::Models::YumImporter::DOWNLOAD_IMMEDIATE }
84
88
  repository = product.add_repo(repo_param)
85
- repository.mirror_on_sync = true
89
+ if repository.has_attribute?('mirror_on_sync')
90
+ repository.mirror_on_sync = true
91
+ else
92
+ repository.mirroring_policy = ::Katello::RootRepository::MIRRORING_POLICY_CONTENT
93
+ end
86
94
  repository.verify_ssl_on_sync = true
87
95
  trigger(::Actions::Katello::Repository::CreateRoot, repository).tap do
88
96
  output[:katello_root_repository_id] = repository.id
@@ -10,7 +10,8 @@ module SccManager
10
10
  end
11
11
 
12
12
  url = base_url + rest_url
13
- auth_header = { Authorization: 'Basic ' + Base64.encode64("#{login}:#{password}").chomp,
13
+ credentials = Base64.encode64("#{login}:#{password}").chomp
14
+ auth_header = { Authorization: "Basic #{credentials}",
14
15
  Accept: 'application/vnd.scc.suse.com.v4+json' }
15
16
  results = []
16
17
  loop do
@@ -172,7 +172,7 @@ class SccAccount < ApplicationRecord
172
172
  def update_scc_repositories(upstream_repositories)
173
173
  upstream_repo_ids = []
174
174
  # initially invalidate all repositories and validate them during update
175
- invalidated_repos = invalidate_subscription_status(scc_repositories)
175
+ invalidated_repos = invalidate_subscription_status(scc_repositories, save_record: false)
176
176
  # import repositories
177
177
  upstream_repositories.each do |ur|
178
178
  cached_repository = scc_repositories.find_or_initialize_by(scc_id: ur['id'])
@@ -196,7 +196,7 @@ class SccAccount < ApplicationRecord
196
196
  # subscription_valid can be set to nil
197
197
  to_invalidate = invalidated_repos.select { |ir| ir.katello_root_repository_id.present? && !ir.subscription_valid }
198
198
  ::Foreman::Logging.logger('foreman_scc_manager').debug "Invalidating #{to_invalidate.count} expired repositories"
199
- invalidate_subscription_status(to_invalidate, true)
199
+ invalidate_subscription_status(to_invalidate, save_record: true)
200
200
 
201
201
  # delete repositories being removed upstream and that are not subscribed to
202
202
  to_delete = scc_repositories.where.not(scc_id: upstream_repo_ids)
@@ -207,7 +207,7 @@ class SccAccount < ApplicationRecord
207
207
  def update_scc_products(upstream_products)
208
208
  upstream_product_ids = []
209
209
  # initially invalidate all products and validate them during update
210
- invalidated_products = invalidate_subscription_status(scc_products)
210
+ invalidated_products = invalidate_subscription_status(scc_products, save_record: false)
211
211
  # import products
212
212
  upstream_products.each do |up|
213
213
  cached_product = scc_products.find_or_initialize_by(scc_id: up['id'])
@@ -233,7 +233,7 @@ class SccAccount < ApplicationRecord
233
233
  # subscription_valid can be set to nil
234
234
  to_invalidate = invalidated_products.select { |ip| ip.product_id.present? && !ip.subscription_valid }
235
235
  ::Foreman::Logging.logger('foreman_scc_manager').debug "Invalidating #{to_invalidate.count} expired products"
236
- invalidate_subscription_status(to_invalidate, true)
236
+ invalidate_subscription_status(to_invalidate, save_record: true)
237
237
 
238
238
  # delete products being removed upstream and that are not subscribed to
239
239
  to_delete = scc_products.where.not(scc_id: upstream_product_ids).where(product_id: nil)
@@ -266,9 +266,9 @@ class SccAccount < ApplicationRecord
266
266
 
267
267
  # set all products/repos invalid
268
268
  # params: items_to_invalidate: ActiveRecord_(*)
269
- # save_record: store in database or not (default)
269
+ # save_record: store in database or not
270
270
  # return: ActiveRecord elements with invalidated subscription status
271
- def invalidate_subscription_status(items_to_invalidate, save_record = false)
271
+ def invalidate_subscription_status(items_to_invalidate, save_record:)
272
272
  if items_to_invalidate.present?
273
273
  items_to_invalidate.each do |inv|
274
274
  inv.subscription_valid = false
@@ -58,7 +58,11 @@ class SccProduct < ApplicationRecord
58
58
  gpg_key = new_product.gpg_key
59
59
  new_repo = new_product.add_repo(label, uniq_repo_name, repo.full_url, 'yum', unprotected, gpg_key)
60
60
  new_repo.arch = arch || 'noarch'
61
- new_repo.mirror_on_sync = true
61
+ if new_repo.has_attribute?('mirror_on_sync')
62
+ new_repo.mirror_on_sync = true
63
+ else
64
+ new_repo.mirroring_policy = ::Katello::RootRepository::MIRRORING_POLICY_CONTENT
65
+ end
62
66
  new_repo.verify_ssl_on_sync = true
63
67
  ForemanTasks.sync_task(::Actions::Katello::Repository::Create, new_repo, false, false)
64
68
  end
@@ -9,11 +9,11 @@ class SccRepository < ApplicationRecord
9
9
  has_and_belongs_to_many :scc_products
10
10
 
11
11
  def full_url
12
- token.blank? ? url : url + '?' + token
12
+ token.blank? ? url : "#{url}?#{token}"
13
13
  end
14
14
 
15
15
  def uniq_name(scc_product)
16
- scc_product.scc_id.to_s + ' ' + description
16
+ "#{scc_product.scc_id} #{description}"
17
17
  end
18
18
 
19
19
  def pretty_name
@@ -25,7 +25,7 @@
25
25
  display_link_if_authorized(_("Sync"), hash_for_sync_scc_account_path(:id => scc_account).merge(:auth_object => scc_account, :authorizer => authorizer),
26
26
  :method => :put),
27
27
  display_delete_if_authorized(hash_for_scc_account_path(:id => scc_account).merge(:auth_object => scc_account, :authorizer => authorizer, :permission => 'delete_scc_accounts'),
28
- :data => { :confirm => _("Delete %s?") % scc_account.to_s })
28
+ :data => { :confirm => _("WARNING: If you want to switch SCC accounts and retain the synchronized content, DO NOT delete your old SCC account, even if it is expired. Please change the login and password of your SCC account, instead.\n\nIf you delete your old SCC account, you CANNOT reuse existing repositories, products, content views, and composite content views.\n\nReally delete SCC account %s?") % scc_account.to_s })
29
29
 
30
30
  ) %>
31
31
  </td>
@@ -1,6 +1,10 @@
1
1
  class AddGpgKeyToSccAccount < ActiveRecord::Migration[5.2]
2
2
  def change
3
- add_column :scc_accounts, :katello_gpg_key_id, :integer, null: true
4
- add_foreign_key :scc_accounts, :katello_gpg_keys, column: :katello_gpg_key_id, on_delete: :nullify
3
+ add_column :scc_accounts, :katello_gpg_key_id, :integer, null: true
4
+ if ActiveRecord::Base.connection.table_exists? :katello_content_credentials
5
+ add_foreign_key :scc_accounts, :katello_content_credentials, column: :katello_gpg_key_id, on_delete: :nullify
6
+ else
7
+ add_foreign_key :scc_accounts, :katello_gpg_keys, column: :katello_gpg_key_id, on_delete: :nullify
8
+ end
5
9
  end
6
10
  end
@@ -1,3 +1,3 @@
1
1
  module ForemanSccManager
2
- VERSION = '1.8.12'.freeze
2
+ VERSION = '1.8.17'.freeze
3
3
  end
@@ -0,0 +1,24 @@
1
+ require 'test_plugin_helper'
2
+
3
+ class SccManagerActions < ActiveSupport::TestCase
4
+ include Dynflow::Testing
5
+
6
+ let(:action_class) { ::Actions::SccManager::Sync }
7
+
8
+ def setup
9
+ @scc_account = scc_accounts(:one)
10
+ # ensure we have an org label
11
+ get_organization
12
+ end
13
+
14
+ test 'plan sync action' do
15
+ action = create_action(action_class)
16
+ action.stubs(:action_subject).with(@scc_account)
17
+
18
+ assert_respond_to(action, :phase)
19
+ plan_action(action, @scc_account)
20
+
21
+ assert_action_planned_with(action, ::Actions::SccManager::SyncProducts, @scc_account)
22
+ assert_action_planned_with(action, ::Actions::SccManager::SyncRepositories, @scc_account)
23
+ end
24
+ end
@@ -5,7 +5,9 @@ class Api::V2::SccProductsControllerTest < ActionController::TestCase
5
5
  @scc_account = scc_accounts(:one)
6
6
  @scc_product1 = scc_products(:one)
7
7
  @scc_product2 = scc_products(:two)
8
- @scc_account.scc_products = [@scc_product1, @scc_product2]
8
+ @scc_product3 = scc_products(:three)
9
+ @scc_product4 = scc_products(:four)
10
+ @scc_account.scc_products = [@scc_product1, @scc_product2, @scc_product3, @scc_product4]
9
11
  end
10
12
 
11
13
  test 'should get index' do
@@ -37,4 +39,22 @@ class Api::V2::SccProductsControllerTest < ActionController::TestCase
37
39
  put :subscribe, params: { :id => 'doest-not-exit', :scc_account_id => @scc_account.id }
38
40
  assert_response :not_found
39
41
  end
42
+
43
+ test 'show subscribed products only' do
44
+ get :index, params: { :scc_account_id => @scc_account.id, :subscribed_only => true }
45
+ assert_response :success
46
+ body = ActiveSupport::JSON.decode(@response.body)
47
+ assert_not_empty body
48
+ assert_equal 2, body['results'].count
49
+ assert_equal 2, body['subtotal']
50
+ end
51
+
52
+ test 'show all products if subscribed_only flag is set to false' do
53
+ get :index, params: { :scc_account_id => @scc_account.id, :subscribed_only => false }
54
+ assert_response :success
55
+ body = ActiveSupport::JSON.decode(@response.body)
56
+ assert_not_empty body
57
+ assert_equal 4, body['results'].count
58
+ assert_equal 4, body['subtotal']
59
+ end
40
60
  end
@@ -10,6 +10,7 @@ one:
10
10
  description: "<p> lorem ipsum dolor sit amet </p>"
11
11
  product_type: base
12
12
  subscription_valid: nil
13
+ product_id: nil
13
14
 
14
15
  two:
15
16
  scc_account_id: test_account1
@@ -21,6 +22,7 @@ two:
21
22
  description: "<p> lorem ipsum dolor sit amet </p><p> lorem lorem lorem </p>"
22
23
  product_type: extras
23
24
  subscription_valid: true
25
+ product_id: nil
24
26
 
25
27
  three:
26
28
  scc_account_id: test_account1
@@ -32,18 +34,31 @@ three:
32
34
  description: lorem ipsum dolor sit amet
33
35
  product_type: base
34
36
  subscription_valid: nil
37
+ product_id: 1
38
+
39
+ four:
40
+ scc_account_id: test_account1
41
+ scc_id: 444
42
+ name: four
43
+ version: 4
44
+ arch: x86_128
45
+ friendly_name: number four
46
+ description: lorem ipsum dolor sit amet
47
+ product_type: base
48
+ subscription_valid: nil
49
+ product_id: 2
35
50
 
36
51
  # create a couple of products as scc_extensions
37
52
  <% 1.upto(10) do |i| %>
38
53
  p_extension_<%= i %>:
39
54
  scc_account_id: test_account1
40
55
  scc_id: <%= i %>
41
- name: p_ext_<%= i%>
56
+ name: p_ext_<%= i%>
42
57
  version: 3
43
58
  arch: x86_128
44
- friendly_name: number <%= i%>
59
+ friendly_name: number <%= i%>
45
60
  description: lorem ipsum dolor sit amet
46
61
  product_type: extension
47
62
  subscription_valid: nil
63
+ product_id: nil
48
64
  <% end %>
49
-
@@ -30,7 +30,7 @@ end
30
30
 
31
31
  class SccProductSearchTest < ActiveSupport::TestCase
32
32
  test 'default ordered by name' do
33
- product_names = ['one', 'two', 'three',
33
+ product_names = ['one', 'two', 'three', 'four',
34
34
  'p_ext_1', 'p_ext_10', 'p_ext_2', 'p_ext_3',
35
35
  'p_ext_4', 'p_ext_5', 'p_ext_6', 'p_ext_7',
36
36
  'p_ext_8', 'p_ext_9']
@@ -1,6 +1,8 @@
1
1
  # This calls the main test_helper in Foreman-core
2
2
  require 'test_helper'
3
3
 
4
+ require 'dynflow/testing'
5
+ Dynflow::Testing.logger_adapter.level = 1
4
6
  require 'foreman_tasks/test_helpers'
5
7
  require "#{ForemanSccManager::Engine.root}/test/support/fixtures_support"
6
8
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_scc_manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.12
4
+ version: 1.8.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - ATIX AG
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-21 00:00:00.000000000 Z
11
+ date: 2022-02-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdoc
@@ -36,28 +36,28 @@ dependencies:
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: 0.75.0
39
+ version: 0.89.0
40
40
  type: :development
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: 0.75.0
46
+ version: 0.89.0
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rubocop-rails
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: 2.0.1
53
+ version: 2.8.1
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: 2.0.1
60
+ version: 2.8.1
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: webmock
63
63
  requirement: !ruby/object:Gem::Requirement
@@ -173,19 +173,15 @@ files:
173
173
  - locale/Makefile
174
174
  - locale/action_names.rb
175
175
  - locale/de/LC_MESSAGES/foreman_scc_manager.mo
176
- - locale/de/foreman_scc_manager.edit.po
177
176
  - locale/de/foreman_scc_manager.po
178
- - locale/de/foreman_scc_manager.po.time_stamp
179
177
  - locale/en/LC_MESSAGES/foreman_scc_manager.mo
180
- - locale/en/foreman_scc_manager.edit.po
181
178
  - locale/en/foreman_scc_manager.po
182
- - locale/en/foreman_scc_manager.po.time_stamp
183
179
  - locale/foreman_scc_manager.pot
184
180
  - locale/gemspec.rb
181
+ - test/actions/sync_test.rb
185
182
  - test/controllers/api/v2/scc_accounts_test.rb
186
183
  - test/controllers/api/v2/scc_products_test.rb
187
184
  - test/controllers/scc_accounts_controller_test.rb
188
- - test/controllers/scc_accounts_controller_test2.rb
189
185
  - test/factories/foreman_scc_manager_factories.rb
190
186
  - test/features/sync_test.rb
191
187
  - test/fixtures/files/data_products_page1.json
@@ -193,15 +189,12 @@ files:
193
189
  - test/fixtures/files/data_repositories.json
194
190
  - test/fixtures/files/data_subscriptions.json
195
191
  - test/fixtures/models/scc_accounts.yml
196
- - test/fixtures/models/scc_extendings.yml
197
192
  - test/fixtures/models/scc_products.yml
198
193
  - test/fixtures/models/scc_repositories.yml
199
194
  - test/models/scc_account_test.rb
200
195
  - test/models/scc_product_test.rb
201
196
  - test/support/fixtures_support.rb
202
- - test/test_controller_helper.rb
203
197
  - test/test_plugin_helper.rb
204
- - test/unit/access_permissions_test.rb
205
198
  - test/unit/foreman_scc_manager_test.rb
206
199
  homepage: https://www.orcharhino.com/
207
200
  licenses:
@@ -227,22 +220,19 @@ signing_key:
227
220
  specification_version: 4
228
221
  summary: Suse Customer Center plugin for Foreman
229
222
  test_files:
230
- - test/unit/access_permissions_test.rb
231
223
  - test/unit/foreman_scc_manager_test.rb
232
- - test/test_controller_helper.rb
233
224
  - test/features/sync_test.rb
234
225
  - test/models/scc_product_test.rb
235
226
  - test/models/scc_account_test.rb
236
227
  - test/factories/foreman_scc_manager_factories.rb
237
228
  - test/controllers/api/v2/scc_accounts_test.rb
238
229
  - test/controllers/api/v2/scc_products_test.rb
239
- - test/controllers/scc_accounts_controller_test2.rb
240
230
  - test/controllers/scc_accounts_controller_test.rb
231
+ - test/actions/sync_test.rb
241
232
  - test/support/fixtures_support.rb
242
233
  - test/fixtures/models/scc_accounts.yml
243
234
  - test/fixtures/models/scc_repositories.yml
244
235
  - test/fixtures/models/scc_products.yml
245
- - test/fixtures/models/scc_extendings.yml
246
236
  - test/fixtures/files/data_products_page2.json
247
237
  - test/fixtures/files/data_products_page1.json
248
238
  - test/fixtures/files/data_subscriptions.json