Project

General

Profile

Download (37.9 KB) Statistics
| Branch: | Tag: | Revision:
require "katello_test_helper"

module Katello
class Api::V2::RepositoriesControllerTest < ActionController::TestCase
include Support::ForemanTasks::Task

def models
@organization = get_organization
@repository = katello_repositories(:fedora_17_unpublished)
@rpm = katello_rpms(:one)
@redhat_repository = katello_repositories(:rhel_6_x86_64)
@product = katello_products(:fedora)
@view = katello_content_views(:library_view)
@errata = katello_errata(:security)
@environment = katello_environments(:dev)
@content_view_version = katello_content_view_versions(:library_view_version_1)
@fedora_dev = katello_repositories(:fedora_17_x86_64_dev)
@on_demand_repo = katello_repositories(:fedora_17_x86_64)
@puppet_repo = katello_repositories(:p_forge)
@docker_repo = katello_repositories(:busybox)
end

def permissions
@read_permission = :view_products
@create_permission = :create_products
@update_permission = :edit_products
@destroy_permission = :destroy_products
@sync_permission = :sync_products
@export_permission = :export_products
end

def backend_stubs
Product.any_instance.stubs(:certificate).returns(nil)
Product.any_instance.stubs(:key).returns(nil)
Resources::CDN::CdnResource.stubs(:ca_file_contents).returns(:nil)
end

def setup
setup_controller_defaults_api
login_user(User.find(users(:admin).id))
User.current = User.find(users(:admin).id)
@request.env['HTTP_ACCEPT'] = 'application/json'
models
permissions
backend_stubs
end

def test_index
get :index, params: { :organization_id => @organization.id }

assert_response :success
assert_template 'api/v2/repositories/index'
end

def test_repository_types
get :repository_types

assert_response :success
body = JSON.parse(response.body)
assert_equal RepositoryTypeManager.repository_types.size, body.size
body.each do |repo|
assert RepositoryTypeManager.find(repo["name"]).present?
end
end

def test_repository_types_with_view_products_permission
User.current = setup_user_with_permissions(:view_products, User.find(users(:restricted).id))
get :repository_types
assert_response :success
end

def test_creatable_repository_types
get :repository_types, params: { :creatable => "true" }

assert_response :success
body = JSON.parse(response.body)
assert_equal RepositoryTypeManager.creatable_repository_types.size, body.size
body.each do |repo|
assert RepositoryTypeManager.find(repo["name"]).present?
assert RepositoryTypeManager.creatable_by_user?(repo["name"])
end
end

def assert_response_ids(response, expected)
body = JSON.parse(response.body)
found_ids = body['results'].map { |item| item['id'] }
refute_empty expected
assert_equal expected.sort, found_ids.sort
end

def test_index_with_product_id
ids = Repository.where(:product_id => @product.id, :library_instance_id => nil).pluck(:id)

response = get :index, params: { :product_id => @product.id }
response_ids = JSON.parse(response.body)['results'].map { |repo| repo['id'] }

assert_response :success
assert_template 'api/v2/repositories/index'
assert_equal response_ids.sort, ids.sort
end

def test_index_with_environment_id
ids = @environment.repositories.pluck(:id)

response = get :index, params: { :environment_id => @environment.id, :organization_id => @organization.id }

assert_response :success
assert_template 'api/v2/repositories/index'
assert_response_ids response, ids
end

def test_index_with_content_view_id
ids = @view.repositories.pluck(:id)

response = get :index, params: { :content_view_id => @view.id, :organization_id => @organization.id }

assert_response :success
assert_template 'api/v2/repositories/index'
assert_response_ids response, ids
end

def test_index_with_content_view_version_id
version = @view.content_view_versions.first
ids = version.repository_ids

response = get :index, params: { :content_view_version_id => version.id, :organization_id => @organization.id }

assert_response :success
assert_template 'api/v2/repositories/index'
assert_response_ids response, ids
end

def test_index_available_for_content_view
ids = @view.organization.default_content_view.versions.first.repositories.pluck(:id) - @view.repositories.pluck(:id)

response = get :index, params: { :content_view_id => @view.id, :available_for => :content_view, :organization_id => @organization.id }

assert_response :success
assert_template 'api/v2/repositories/index'
assert_response_ids response, ids
end

def test_index_with_content_view_id_and_environment_id
ids = @fedora_dev.content_view_version.repositories.where(:environment_id => @fedora_dev.environment_id).pluck(:id)

response = get :index, params: { :content_view_id => @fedora_dev.content_view_version.content_view_id, :environment_id => @fedora_dev.environment_id, :organization_id => @organization.id }

assert_response :success
assert_template 'api/v2/repositories/index'
assert_response_ids response, ids
end

def test_index_with_erratum_id
ids = @errata.repositories.in_content_views([@organization.default_content_view]).pluck(:id)

response = get :index, params: { :erratum_id => @errata.uuid, :organization_id => @organization.id }

assert_response :success
assert_template 'api/v2/repositories/index'
assert_response_ids response, ids
end

def test_index_with_content_view_version_id_and_environment
repo = Repository.find(katello_repositories(:fedora_17_x86_64_dev).id)
ids = repo.content_view_version.repositories.where(:environment_id => repo.environment.id).map(&:id)

response = get :index, params: { :content_view_version_id => repo.content_view_version.id, :environment_id => repo.environment_id, :organization_id => @organization.id }

assert_response :success
assert_template 'api/v2/repositories/index'
assert_response_ids response, ids
end

def test_index_with_content_view_version_id_and_library
ids = @view.versions.first.repositories.pluck(:library_instance_id).reject(&:blank?).uniq
response = get :index, params: { :content_view_version_id => @view.versions.first.id, :organization_id => @organization.id, :library => true }

assert_response :success
assert_template 'api/v2/repositories/index'
assert_response_ids response, ids
end

def test_index_with_library
ids = @organization.default_content_view.versions.first.repositories.pluck(:id)

response = get :index, params: { :library => true, :organization_id => @organization.id }

assert_response :success
assert_template 'api/v2/repositories/index'
assert_response_ids response, ids
end

def test_index_with_content_type
ids = Repository.where(
:content_type => 'yum',
:content_view_version_id => @organization.default_content_view.versions.first.id
)
ids = ids.pluck(:id)

get :index, params: { :content_type => 'yum', :organization_id => @organization.id }

assert_response :success
assert_template 'api/v2/repositories/index'
assert_response_ids response, ids
end

def test_index_with_name
ids = Repository.where(:name => katello_repositories(:fedora_17_x86_64).name, :library_instance_id => nil).pluck(:id)

response = get :index, params: { :name => katello_repositories(:fedora_17_x86_64).name, :organization_id => @organization.id }

assert_response :success
assert_template 'api/v2/repositories/index'
assert_response_ids response, ids
end

def test_index_protected
allowed_perms = [@read_permission]
denied_perms = [@create_permission, @update_permission, @destroy_permission]

assert_protected_action(:index, allowed_perms, denied_perms, [@organization]) do
get :index, params: { :organization_id => @organization.id }
end
end

def test_create
product = mock
product.expects(:add_repo).with(
:label => 'Fedora_Repository',
:name => 'Fedora Repository',
:url => 'http://www.google.com',
:content_type => 'yum',
:arch => 'noarch',
:unprotected => true,
:gpg_key => nil,
:ssl_ca_cert => nil,
:ssl_client_cert => nil,
:ssl_client_key => nil
).returns(@repository)

product.expects(:gpg_key).returns(nil)
product.expects(:ssl_ca_cert).returns(nil)
product.expects(:ssl_client_cert).returns(nil)
product.expects(:ssl_client_key).returns(nil)
product.expects(:organization).returns(@organization)
product.expects(:redhat?).returns(false)
assert_sync_task(::Actions::Katello::Repository::Create, @repository, false, true)

Product.stubs(:find).returns(product)
post :create, params: { :name => 'Fedora Repository', :product_id => @product.id, :url => 'http://www.google.com', :content_type => 'yum' }
assert_response :success
assert_template 'api/v2/common/create'
end

def test_create_with_arch
product = mock
product.expects(:add_repo).with(
:label => 'Fedora_Repository',
:name => 'Fedora Repository',
:url => 'http://www.google.com',
:content_type => 'yum',
:arch => 'x86_64',
:unprotected => true,
:gpg_key => nil,
:ssl_ca_cert => nil,
:ssl_client_cert => nil,
:ssl_client_key => nil
).returns(@repository)

product.expects(:gpg_key).returns(nil)
product.expects(:ssl_ca_cert).returns(nil)
product.expects(:ssl_client_cert).returns(nil)
product.expects(:ssl_client_key).returns(nil)
product.expects(:organization).returns(@organization)
product.expects(:redhat?).returns(false)
assert_sync_task(::Actions::Katello::Repository::Create, @repository, false, true)

Product.stubs(:find).returns(product)
post :create, params: { :name => 'Fedora Repository', :product_id => @product.id, :url => 'http://www.google.com', :content_type => 'yum', :arch => 'x86_64' }
assert_response :success
assert_template 'api/v2/common/create'
end

def test_create_with_empty_string_url
product = mock
product.expects(:add_repo).with(
:label => 'Fedora_Repository',
:name => 'Fedora Repository',
:url => nil,
:content_type => 'yum',
:arch => 'noarch',
:unprotected => true,
:gpg_key => nil,
:ssl_ca_cert => nil,
:ssl_client_cert => nil,
:ssl_client_key => nil
).returns(@repository)

product.expects(:gpg_key).returns(nil)
product.expects(:ssl_ca_cert).returns(nil)
product.expects(:ssl_client_cert).returns(nil)
product.expects(:ssl_client_key).returns(nil)
product.expects(:organization).returns(@organization)
product.expects(:redhat?).returns(false)
assert_sync_task(::Actions::Katello::Repository::Create, @repository, false, true)

Product.stubs(:find).returns(product)

post :create, params: { :name => 'Fedora Repository', :product_id => @product.id, :url => '', :content_type => 'yum' }
assert_response :success
assert_template 'api/v2/common/create'
end

def test_create_with_gpg_key
key = GpgKey.find(katello_gpg_keys('fedora_gpg_key').id)
product = mock
product.expects(:add_repo).with(
:label => 'Fedora_Repository',
:name => 'Fedora Repository',
:url => 'http://www.google.com',
:content_type => 'yum',
:arch => 'noarch',
:unprotected => true,
:gpg_key => key,
:ssl_ca_cert => nil,
:ssl_client_cert => nil,
:ssl_client_key => nil
).returns(@repository)

product.expects(:gpg_key).returns(key)
product.expects(:ssl_ca_cert).returns(nil)
product.expects(:ssl_client_cert).returns(nil)
product.expects(:ssl_client_key).returns(nil)
product.expects(:organization).returns(@organization)
product.expects(:redhat?).returns(false)
assert_sync_task(::Actions::Katello::Repository::Create, @repository, false, true)

Product.stubs(:find).returns(product)

post :create, params: { :name => 'Fedora Repository', :product_id => @product.id, :url => 'http://www.google.com', :content_type => 'yum' }

assert_response :success
assert_template 'api/v2/common/create'
end

def test_create_with_cert
cert = GpgKey.find(katello_gpg_keys('fedora_cert').id)
product = mock
product.expects(:add_repo).with(
:label => 'Fedora_Repository',
:name => 'Fedora Repository',
:url => 'http://www.google.com',
:content_type => 'yum',
:arch => 'noarch',
:unprotected => true,
:gpg_key => nil,
:ssl_ca_cert => nil,
:ssl_client_cert => cert,
:ssl_client_key => nil
).returns(@repository)

product.expects(:gpg_key).returns(nil)
product.expects(:ssl_ca_cert).returns(nil)
product.expects(:ssl_client_cert).returns(cert)
product.expects(:ssl_client_key).returns(nil)
product.expects(:organization).returns(@organization)
product.expects(:redhat?).returns(false)
assert_sync_task(::Actions::Katello::Repository::Create, @repository, false, true)

Product.stubs(:find).returns(product)

post :create, params: { :name => 'Fedora Repository', :product_id => @product.id, :url => 'http://www.google.com', :content_type => 'yum' }

assert_response :success
assert_template 'api/v2/common/create'
end

def test_create_with_checksum
product = mock
product.expects(:add_repo).with(
:label => 'Fedora_Repository',
:name => 'Fedora Repository',
:url => nil,
:content_type => 'yum',
:arch => 'noarch',
:unprotected => true,
:gpg_key => nil,
:ssl_ca_cert => nil,
:ssl_client_cert => nil,
:ssl_client_key => nil,
:checksum_type => 'sha256'
).returns(@repository)

product.expects(:gpg_key).returns(nil)
product.expects(:ssl_ca_cert).returns(nil)
product.expects(:ssl_client_cert).returns(nil)
product.expects(:ssl_client_key).returns(nil)
product.expects(:organization).returns(@organization)
product.expects(:redhat?).returns(false)
assert_sync_task(::Actions::Katello::Repository::Create, @repository, false, true)

Product.stubs(:find).returns(product)
post :create, params: { :name => 'Fedora Repository', :product_id => @product.id, :url => '', :content_type => 'yum', :checksum_type => 'sha256' }

assert_response :success
assert_template 'api/v2/common/create'
end

def test_create_with_download_policy
product = mock
product.expects(:add_repo).with(
:label => 'Fedora_Repository',
:name => 'Fedora Repository',
:url => nil,
:content_type => 'yum',
:arch => 'noarch',
:unprotected => true,
:gpg_key => nil,
:ssl_ca_cert => nil,
:ssl_client_cert => nil,
:ssl_client_key => nil,
:download_policy => 'on_demand'
).returns(@repository)

product.expects(:gpg_key).returns(nil)
product.expects(:ssl_ca_cert).returns(nil)
product.expects(:ssl_client_cert).returns(nil)
product.expects(:ssl_client_key).returns(nil)
product.expects(:organization).returns(@organization)
product.expects(:redhat?).returns(false)
assert_sync_task(::Actions::Katello::Repository::Create, @repository, false, true)

Product.stubs(:find).returns(product)
post :create, params: { :name => 'Fedora Repository', :product_id => @product.id, :url => '', :content_type => 'yum', :download_policy => 'on_demand' }

assert_response :success
assert_template 'api/v2/common/create'
end

def test_create_with_protected_true
product = mock
product.expects(:add_repo).with(
:label => 'Fedora_Repository',
:name => 'Fedora Repository',
:url => 'http://www.google.com',
:content_type => 'yum',
:arch => 'noarch',
:unprotected => false,
:gpg_key => nil,
:ssl_ca_cert => nil,
:ssl_client_cert => nil,
:ssl_client_key => nil
).returns(@repository)

product.expects(:gpg_key).returns(nil)
product.expects(:ssl_ca_cert).returns(nil)
product.expects(:ssl_client_cert).returns(nil)
product.expects(:ssl_client_key).returns(nil)
product.expects(:organization).returns(@organization)
product.expects(:redhat?).returns(false)
assert_sync_task(::Actions::Katello::Repository::Create, @repository, false, true)

Product.stubs(:find).returns(product)
post :create, params: { :name => 'Fedora Repository', :product_id => @product.id, :url => 'http://www.google.com', :content_type => 'yum', :unprotected => false }

assert_response :success
assert_template 'api/v2/common/create'
end

def run_test_individual_attribute(params)
product = mock
product.expects(:add_repo).with(
:label => 'Fedora_Repository',
:name => 'Fedora Repository',
:url => 'http://www.google.com',
:content_type => 'yum',
:arch => 'noarch',
:unprotected => false,
:gpg_key => nil,
:ssl_ca_cert => nil,
:ssl_client_cert => nil,
:ssl_client_key => nil
).returns(@repository)

product.expects(:gpg_key).returns(nil)
product.expects(:ssl_ca_cert).returns(nil)
product.expects(:ssl_client_cert).returns(nil)
product.expects(:ssl_client_key).returns(nil)
product.expects(:organization).returns(@organization)
product.expects(:redhat?).returns(false)
yield product, @repository
assert_sync_task(::Actions::Katello::Repository::Create, @repository, false, true)
Product.stubs(:find).returns(product)
params = {:name => 'Fedora Repository', :product_id => @product.id, :url => 'http://www.google.com', :content_type => 'yum', :unprotected => false}.merge(params)
post :create, params: params
assert_response :success
assert_template 'api/v2/common/create'
end

def test_create_with_mirror_on_sync_true
mirror_on_sync = true
run_test_individual_attribute(:mirror_on_sync => mirror_on_sync) do |_, repo|
repo.expects(:mirror_on_sync=).with(mirror_on_sync)
end
end

def test_create_with_ignorable_content
ignorable_content = ["srpm", "erratum"]
run_test_individual_attribute(:ignorable_content => ignorable_content) do |_, repo|
repo.expects(:ignorable_content=).with(ignorable_content)
end
end

def test_create_with_verify_ssl_on_sync_true
verify_ssl_on_sync = true
run_test_individual_attribute(:verify_ssl_on_sync => verify_ssl_on_sync) do |_, repo|
repo.expects(:verify_ssl_on_sync=).with(verify_ssl_on_sync)
end
end

def test_create_with_username_password
upstream_username = "genius"
upstream_password = "genius_password"
run_test_individual_attribute(:upstream_username => upstream_username, :upstream_password => upstream_password) do |_, repo|
repo.expects(:upstream_username=).with(upstream_username)
repo.expects(:upstream_password=).with(upstream_password)
end
end

def test_create_with_protected_docker
product = mock
product.expects(:add_repo).with(
:label => 'Fedora_Repository',
:name => 'Fedora Repository',
:url => 'http://hub.registry.com',
:content_type => 'docker',
:arch => 'noarch',
:unprotected => true,
:gpg_key => nil,
:ssl_ca_cert => nil,
:ssl_client_cert => nil,
:ssl_client_key => nil
).returns(@repository)

product.expects(:gpg_key).returns(nil)
product.expects(:ssl_ca_cert).returns(nil)
product.expects(:ssl_client_cert).returns(nil)
product.expects(:ssl_client_key).returns(nil)
product.expects(:organization).returns(@organization)
product.expects(:redhat?).returns(false)
assert_sync_task(::Actions::Katello::Repository::Create, @repository, false, true)
Product.stubs(:find).returns(product)
post :create, params: { :name => 'Fedora Repository', :product_id => @product.id, :url => 'http://hub.registry.com', :content_type => 'docker', :docker_upstream_name => "busybox" }

assert_response :success
assert_template 'api/v2/common/create'
end

def test_create_with_ostree
repository = katello_repositories(:ostree_rhel7)
sync_depth = '123'
sync_policy = "custom"
product = mock
product.expects(:add_repo).with(
:label => 'Fedora_Repository',
:name => 'Fedora Repository',
:url => 'http://hub.registry.com',
:content_type => 'ostree',
:arch => 'noarch',
:unprotected => true,
:gpg_key => nil,
:ssl_ca_cert => nil,
:ssl_client_cert => nil,
:ssl_client_key => nil
).returns(repository)

product.expects(:gpg_key).returns(nil)
product.expects(:ssl_ca_cert).returns(nil)
product.expects(:ssl_client_cert).returns(nil)
product.expects(:ssl_client_key).returns(nil)
product.expects(:organization).returns(@organization)
product.expects(:redhat?).returns(false)
repository.expects(:ostree_upstream_sync_policy=).with(sync_policy)
repository.expects(:ostree_upstream_sync_depth=).with(sync_depth)

assert_sync_task(::Actions::Katello::Repository::Create, repository, false, true)

Product.stubs(:find).returns(product)
post :create, params: { :name => 'Fedora Repository', :product_id => @product.id, :url => 'http://hub.registry.com', :content_type => 'ostree', :ostree_upstream_sync_policy => sync_policy, :ostree_upstream_sync_depth => sync_depth }

assert_response :success
assert_template 'api/v2/common/create'
end

def test_create_without_label_or_name
post :create, params: { :product_id => @product.id }
#should raise an error along the lines of invalid content type provided
assert_response 422
end

def test_create_protected
allowed_perms = [@create_permission]
denied_perms = [@read_permission, @update_permission, @destroy_permission]

assert_protected_action(:create, allowed_perms, denied_perms) do
post :create, params: { :product_id => @product.id }
end
end

def test_show
get :show, params: { :id => @repository.id }

assert_response :success
assert_template 'api/v2/repositories/show'
end

def test_show_protected
allowed_perms = [@read_permission]
denied_perms = [@create_permission, @update_permission, @destroy_permission]

assert_protected_action(:show, allowed_perms, denied_perms) do
get :show, params: { :id => @repository.id }
end
end

def test_update_with_gpg_key
key = GpgKey.find(katello_gpg_keys('fedora_gpg_key').id)
assert_sync_task(::Actions::Katello::Repository::Update) do |repo, attributes|
repo.must_equal @repository
attributes.to_hash.must_equal('gpg_key_id' => key.id.to_s)
end
put :update, params: { :id => @repository.id, :repository => {:gpg_key_id => key.id.to_s} }
assert_response :success
assert_template 'api/v2/repositories/show'
end

def test_update_with_cert
cert = GpgKey.find(katello_gpg_keys('fedora_cert').id)
assert_sync_task(::Actions::Katello::Repository::Update) do |repo, attributes|
repo.must_equal @repository
attributes.to_hash.must_equal('ssl_ca_cert_id' => cert.id.to_s)
end
put :update, params: { :id => @repository.id, :repository => {:ssl_ca_cert_id => cert.id.to_s} }
assert_response :success
assert_template 'api/v2/repositories/show'
end

def test_update_protected
allowed_perms = [@update_permission]
denied_perms = [@read_permission, @create_permission, @destroy_permission]

assert_protected_action(:update, allowed_perms, denied_perms) do
put :update, params: { :id => @repository.id }
end
end

def test_update_with_upstream_name
repo = katello_repositories(:busybox)
assert_sync_task(::Actions::Katello::Repository::Update) do |_, attributes|
attributes[:docker_upstream_name].must_equal "helloworld"
end
put :update, params: { :id => repo.id, :docker_upstream_name => "helloworld" }
end

def test_update_false_download_policy
expected_message = "must be one of the following: %s" % ::Runcible::Models::YumImporter::DOWNLOAD_POLICIES.join(', ')
response = put :update, params: { :id => @repository.id, :download_policy => 'false' }
body = JSON.parse(response.body)

assert_response 422
assert_equal(expected_message, body['errors']['download_policy'][0])
end

def test_update_with_upstream_sync_policy
sync_depth = '100'
sync_policy = "custom"
repo = katello_repositories(:ostree)
assert_sync_task(::Actions::Katello::Repository::Update) do |_, attributes|
attributes[:ostree_upstream_sync_policy].must_equal sync_policy
attributes[:ostree_upstream_sync_depth].must_equal sync_depth
end
put :update, params: { :id => repo.id, :ostree_upstream_sync_depth => sync_depth, :ostree_upstream_sync_policy => sync_policy }
end

def test_update_with_ignorable_content
ignorable_content = ["rpm", "srpm"]
repo = katello_repositories(:fedora_17_unpublished)
assert_sync_task(::Actions::Katello::Repository::Update) do |_, attributes|
attributes[:ignorable_content].must_equal ignorable_content
end
put :update, params: { :id => repo.id, :ignorable_content => ignorable_content }
end

def test_remove_content
@repository.rpms << @rpm
@controller.expects(:sync_task).with(::Actions::Katello::Repository::RemoveContent,
@repository, [@rpm], sync_capsule: true).once.returns(::ForemanTasks::Task::DynflowTask.new)

put :remove_content, params: { :id => @repository.id, :ids => [@rpm.uuid] }

assert_response :success
end

def test_remove_content_protected
allowed_perms = [@update_permission]
denied_perms = [@read_permission, @create_permission, @destroy_permission]

assert_protected_action(:remove_content, allowed_perms, denied_perms) do
put :remove_content, params: { :id => @repository.id, :uuids => ['foo', 'bar'] }
end
end

def test_destroy
assert_sync_task(::Actions::Katello::Repository::Destroy) do |repo|
repo.id == @repository.id
end

delete :destroy, params: { :id => @repository.id }

assert_response :success
end

def test_destroy_protected
allowed_perms = [@destroy_permission]
denied_perms = [@read_permission, @create_permission, @update_permission]

assert_protected_action(:destroy, allowed_perms, denied_perms) do
delete :destroy, params: { :id => @repository.id }
end
end

def test_republish
assert_async_task ::Actions::Katello::Repository::MetadataGenerate do |repo, options|
repo.id == @repository.id && options == {:force => true}
end

put :republish, params: { :id => @repository.id }
assert_response :success
end

def test_republish_protected
allowed_perms = [@update_permission]
denied_perms = [@read_permission, @create_permission, @destroy_permission]

assert_protected_action(:republish, allowed_perms, denied_perms) do
put :republish, params: { :id => @repository.id }
end
end

def test_sync
assert_async_task ::Actions::Katello::Repository::Sync do |repo|
repo.id == @repository.id
end

post :sync, params: { :id => @repository.id }
assert_response :success
end

def test_sync_with_url_override
assert_async_task ::Actions::Katello::Repository::Sync do |repo, pulp_task_id, options|
repo.id.must_equal(@repository.id)
pulp_task_id.must_equal(nil)
options[:source_url].must_equal('file:///tmp/')
end
post :sync, params: { :id => @repository.id, :source_url => 'file:///tmp/' }
assert_response :success
end

def test_sync_with_incremental_flag
assert_async_task ::Actions::Katello::Repository::Sync do |repo, pulp_task_id, options|
repo.id.must_equal(@repository.id)
pulp_task_id.must_equal(nil)
options[:source_url].must_equal('file:///tmp/')
options[:incremental].must_equal true
end
post :sync, params: { :id => @repository.id, :source_url => 'file:///tmp/', :incremental => true }
assert_response :success
end

def test_sync_with_bad_url_override
post :sync, params: { :id => @repository.id, :source_url => 'file:|||tmp/' }
assert_response 400
end

def test_sync_no_feed_urls
repo = katello_repositories(:feedless_fedora_17_x86_64)
post :sync, params: { :id => repo.id }
assert_response 400
end

def test_sync_no_feed_urls_with_override
repo = katello_repositories(:feedless_fedora_17_x86_64)
post :sync, params: { :id => repo.id, :source_url => 'http://www.wikipedia.org' }
assert_response :success
end

def test_sync_complete
logout_user
token = 'imalittleteapotshortandstout'
SETTINGS[:katello][:post_sync_url] = "http://foo.com/foo?token=#{token}"
Repository.stubs(:where).returns([@repository])

assert_async_task ::Actions::Katello::Repository::ScheduledSync do |repo, task_id|
repo.id == @repository.id && task_id == '1234'
end

post(:sync_complete, params: { :token => token, :payload => {:repo_id => @repository.pulp_id}, :call_report => {:task_id => '1234'} })
assert_response :success
end

def test_sync_complete_bad_token
token = 'super_secret'
SETTINGS[:katello][:post_sync_url] = "http://foo.com/foo?token=attacker_key"
post :sync_complete, params: { :token => token, :payload => {:repo_id => @repository.pulp_id}, :call_report => {} }

assert_response 403
end

def test_sync_protected
allowed_perms = [@sync_permission]
denied_perms = [@create_permission, @read_permission, @destroy_permission, @update_permission]

assert_protected_action(:sync, allowed_perms, denied_perms) do
post :sync, params: { :id => @repository.id }
end
end

def test_upload_content
test_document = File.join(Engine.root, "test", "fixtures", "files", "puppet_module.tar.gz")
puppet_module = Rack::Test::UploadedFile.new(test_document, '')

assert_sync_task ::Actions::Katello::Repository::UploadFiles do |repo, files|
repo.id == @repository.id &&
files.size == 1 && files.first[:filename].include?("puppet_module.tar.gz")
end

# array
post :upload_content, params: { :id => @repository.id, :content => [puppet_module] }
assert_response :success

assert_sync_task ::Actions::Katello::Repository::UploadFiles do |repo, files|
repo.id == @repository.id &&
files.size == 1 && files.first[:filename].include?("puppet_module.tar.gz")
end

# single file
post :upload_content, params: { :id => @repository.id, :content => puppet_module }
assert_response :success
end

def test_upload_content_protected
allowed_perms = [@update_permission]
denied_perms = [@read_permission, @create_permission, @destroy_permission]

assert_protected_action(:upload_content, allowed_perms, denied_perms) do
post :upload_content, params: { :id => @repository.id }
end
end

def test_import_upload_ids
uploads = [{'id' => '1'}]
@controller.expects(:sync_task)
.with(::Actions::Katello::Repository::ImportUpload, @repository,
uploads.map { |u| u['id'] }, unit_type_id: 'rpm',
unit_keys: uploads.map { |u| u.except('id') }, generate_metadata: false,
sync_capsule: false)
.returns(build_task_stub)

put(:import_uploads, params: { :id => @repository.id, :upload_ids => uploads.map { |u| u['id'] }, :publish_repository => 'false', sync_capsule: 'false' })

assert_response :success
end

def test_two_import_upload_ids
uploads = [{'id' => '1'}, {'id' => '2'}]
@controller.expects(:sync_task)
.with(::Actions::Katello::Repository::ImportUpload, @repository,
uploads.map { |u| u['id'] }, unit_type_id: 'rpm',
unit_keys: uploads.map { |u| u.except('id') }, generate_metadata: false,
sync_capsule: false)
.returns(build_task_stub)

put(:import_uploads, params: { :id => @repository.id, :upload_ids => uploads.map { |u| u['id'] }, :publish_repository => 'false', sync_capsule: 'false' })

assert_response :success
end

def test_import_uploads
uploads = [{'id' => '1', 'size' => '12333', 'checksum' => 'asf23421324', 'name' => 'test'}]
# make sure name gets ignored for non-file repos
# this is yum repo. So unit keys should except name
@controller.expects(:sync_task)
.with(::Actions::Katello::Repository::ImportUpload, @repository,
uploads.map { |u| u['id'] }, unit_type_id: 'rpm',
unit_keys: uploads.map { |u| u.except('id').except('name') },
generate_metadata: true, sync_capsule: true)
.returns(build_task_stub)

put :import_uploads, params: { id: @repository.id, uploads: uploads }

assert_response :success
end

def test_import_uploads_file
# make sure name does not get ignored for file repos
# this is yum repo. So unit keys should accept name
file_repo = katello_repositories(:generic_file)
uploads = [{'id' => '1', 'size' => '12333', 'checksum' => 'asf23421324', 'name' => 'test'}]
@controller.expects(:sync_task)
.with(::Actions::Katello::Repository::ImportUpload, file_repo,
uploads.map { |u| u['id'] }, unit_type_id: 'iso',
unit_keys: uploads.map { |u| u.except('id') },
generate_metadata: true, sync_capsule: true)
.returns(build_task_stub)

put :import_uploads, params: { id: file_repo, uploads: uploads }

assert_response :success
end

def test_import_uploads_docker_manifest
# make sure name does not get ignored for docker repos
# this is docker repo. So unit keys should accept name
uploads = [{'id' => '1', 'size' => '12333', 'checksum' => 'asf23421324', 'name' => 'test'}]
@controller.expects(:sync_task)
.with(::Actions::Katello::Repository::ImportUpload, @docker_repo,
uploads.map { |u| u['id'] }, unit_type_id: 'docker_manifest',
unit_keys: uploads.map { |u| u.except('id') },
generate_metadata: true, sync_capsule: true)
.returns(build_task_stub)

put :import_uploads, params: { id: @docker_repo.id, uploads: uploads }

assert_response :success
end

def test_import_uploads_docker_tag
uploads = [{'id' => '1', 'size' => '12333', 'checksum' => 'asf23421324', 'name' => 'test', 'digest' => 'sha256:1234'}]
# make sure name is not ignored for docker repos
# this is docker repo so unit keys should acccept name
@controller.expects(:sync_task)
.with(::Actions::Katello::Repository::ImportUpload, @docker_repo,
uploads.map { |u| u['id'] }, unit_type_id: 'docker_tag',
unit_keys: uploads.map { |u| u.except('id') },
generate_metadata: true, sync_capsule: true)
.returns(build_task_stub)

put :import_uploads, params: { id: @docker_repo.id, uploads: uploads }

assert_response :success
end

def test_import_uploads_protected
allowed_perms = [@update_permission]
denied_perms = [@read_permission, @create_permission, @destroy_permission]

assert_protected_action(:import_uploads, allowed_perms, denied_perms) do
put :import_uploads, params: { :id => @repository.id, :upload_ids => [1] }
end
end

def test_export
Setting['pulp_export_destination'] = '/tmp'
post :export, params: { :id => @repository.id }
assert_response :success
end

def test_export_with_bad_date
post :export, params: { :id => @repository.id, :since => 'November 32, 1970' }
assert_response 400
end

def test_export_wrong_type
post :export, params: { :id => @puppet_repo.id }
assert_response 400
end

def test_export_on_demand
Setting['pulp_export_destination'] = '/tmp'
post :export, params: { :id => @on_demand_repo.id }
assert_response 400
end

def test_export_with_date
Setting['pulp_export_destination'] = '/tmp'
post :export, params: { :id => @repository.id, :since => 'November 30, 1970' }
assert_response :success
end

def test_export_with_8601_date
Setting['pulp_export_destination'] = '/tmp'
post :export, params: { :id => @repository.id, :since => '2010-01-01T00:00:00' }
assert_response :success
end

def test_export_protected
allowed_perms = [@export_permission]
denied_perms = [@sync_permission, @create_permission, @read_permission,
@destroy_permission, @update_permission]

assert_protected_action(:export, allowed_perms, denied_perms) do
post :export, params: { :id => @repository.id }
end
end

def test_gpg_key_content
logout_user
get :gpg_key_content, params: { :id => @repository.id }

assert_response :success
assert_equal @repository.gpg_key.content, response.body
end

def test_no_gpg_key_content
@repository.gpg_key = nil
@repository.save
get :gpg_key_content, params: { :id => @repository.id }

assert_response 404
end
end
end
(37-37/44)