[katello-devel] Fwd: 768254 - scope products API by organization
Ivan Nečas
inecas at redhat.com
Tue Feb 7 11:01:32 UTC 2012
Hi,
After previous discussions I've changed our /products API. Please update
your scripts, if needed, to reflect this change.
It was tagged in katello-0.1.225-1 and katello-cli-0.1.53-1.
-- Ivan
-------- Original Message --------
Subject: [katello-commits] [katello] 768254 - scope products API by
organization
Date: Tue, 7 Feb 2012 10:57:51 +0000 (UTC)
From: Ivan Nečas <inecas at fedoraproject.org>
Reply-To: katello-commits at lists.fedorahosted.org
To: katello-commits at lists.fedorahosted.org
commit f3b57d1da6b93af2bda0fbb5246824fb68efdb20
Author: Ivan Necas<inecas at redhat.com>
Date: Tue Feb 7 11:43:26 2012 +0100
768254 - scope products API by organization
We referrence products by candlepin id. However there are more products in
Katello assigned to a CP product (e.g. after importing manifest to more
organizations).
We might choose to refference products using Katello id, but
this would cause troubles with rhsm, because we are mirroring CP API and in
case subscription manager was using CP /products API, it would behave
differently for plain Candlepin and Katello proxy.
Therefore all the requests beginning with:
/api/products/:product_id/...
were transformed to:
/api/organizations/:organization_name/products/:product_id/...
cli/src/katello/client/api/product.py | 40 +++++++++---------
cli/src/katello/client/api/repo.py | 10 +++--
cli/src/katello/client/core/organization.py | 2 +-
cli/src/katello/client/core/product.py | 26 ++++++------
cli/src/katello/client/core/repo.py | 10 ++--
src/app/controllers/api/filters_controller.rb | 4 +-
src/app/controllers/api/products_controller.rb | 6 +-
src/app/controllers/api/repositories_controller.rb | 4 +-
src/app/controllers/api/sync_controller.rb | 3 +-
src/app/models/glue/pulp/errata.rb | 2 +-
src/app/models/organization.rb | 1 +
src/config/routes.rb | 26 +++++------
.../controllers/api/filters_controller_spec.rb | 6 +-
.../controllers/api/products_controller_spec.rb | 6 +-
.../api/repositories_controller_spec.rb | 16 ++++----
src/spec/controllers/api/sync_controller_spec.rb | 45 ++++++++++---------
16 files changed, 106 insertions(+), 101 deletions(-)
---
diff --git a/cli/src/katello/client/api/product.py b/cli/src/katello/client/api/product.py
index f7dc821..543567a 100644
--- a/cli/src/katello/client/api/product.py
+++ b/cli/src/katello/client/api/product.py
@@ -53,7 +53,7 @@ class ProductAPI(KatelloAPI):
result = self.server.POST(path, {"product": product})[1]
return result
- def update(self, prodId, description, gpgkey, nogpgkey, gpgkey_recursive):
+ def update(self, orgName, prodId, description, gpgkey, nogpgkey, gpgkey_recursive):
product = {}
self.update_dict(product, "description", description)
self.update_dict(product, "gpg_key_name", gpgkey)
@@ -61,46 +61,46 @@ class ProductAPI(KatelloAPI):
if nogpgkey:
product["gpg_key_name"] = ""
- path = "/api/products/%s/" % prodId
+ path = "/api/organizations/%s/products/%s/" % (orgName, prodId)
result = self.server.PUT(path, {"product": product})[1]
return result
- def show(self, prodId):
- path = "/api/products/%s/" % prodId
+ def show(self, orgName, prodId):
+ path = "/api/organizations/%s/products/%s/" % (orgName, prodId)
return self.server.GET(path)[1]
- def delete(self, prodId):
- path = "/api/products/%s/" % prodId
+ def delete(self, orgName, prodId):
+ path = "/api/organizations/%s/products/%s/" % (orgName, prodId)
return self.server.DELETE(path)[1]
- def sync(self, prodId):
- path = "/api/products/%s/sync" % prodId
+ def sync(self, orgName, prodId):
+ path = "/api/organizations/%s/products/%s/sync" % (orgName, prodId)
return self.server.POST(path)[1]
- def set_sync_plan(self, prodId, planId):
- path = "/api/products/%s/sync_plan" % str(prodId)
+ def set_sync_plan(self, orgName, prodId, planId):
+ path = "/api/organizations/%s/products/%s/sync_plan" % (orgName, prodId)
return self.server.POST(path, {"plan_id": planId})[1]
- def remove_sync_plan(self, prodId):
- path = "/api/products/%s/sync_plan" % str(prodId)
+ def remove_sync_plan(self, orgName, prodId):
+ path = "/api/organizations/%s/products/%s/sync_plan" % (orgName, prodId)
return self.server.DELETE(path)[1]
- def cancel_sync(self, prodId):
- path = "/api/products/%s/sync" % prodId
+ def cancel_sync(self, orgName, prodId):
+ path = "/api/organizations/%s/products/%s/sync" % (orgName, prodId)
return self.server.DELETE(path)[1]
- def last_sync_status(self, prodId):
- path = "/api/products/%s/sync" % prodId
+ def last_sync_status(self, orgName, prodId):
+ path = "/api/organizations/%s/products/%s/sync" % (orgName, prodId)
data = self.server.GET(path)[1]
return data
- def update_filters(self, prodId, filters):
- path = "/api/products/%s/filters" % prodId
+ def update_filters(self, orgName, prodId, filters):
+ path = "/api/organizations/%s/products/%s/filters" % (orgName, prodId)
data = self.server.PUT(path, {"filters": filters})[1]
return data
- def filters(self, prodId):
- path = "/api/products/%s/filters" % prodId
+ def filters(self, orgName, prodId):
+ path = "/api/organizations/%s/products/%s/filters" % (orgName, prodId)
data = self.server.GET(path)[1]
return data
diff --git a/cli/src/katello/client/api/repo.py b/cli/src/katello/client/api/repo.py
index b5bd746..8eee71c 100644
--- a/cli/src/katello/client/api/repo.py
+++ b/cli/src/katello/client/api/repo.py
@@ -19,8 +19,10 @@ class RepoAPI(KatelloAPI):
"""
Connection class to access repositories
"""
- def create(self, prod_id, name, url, gpgkey, nogpgkey):
- repodata = {"product_id": prod_id,
+ def create(self, orgName, prod_id, name, url, gpgkey, nogpgkey):
+ repodata = {
+ "organization_id": orgName,
+ "product_id": prod_id,
"name": name,
"url": url}
self.update_dict(repodata, "gpg_key_name", gpgkey)
@@ -58,8 +60,8 @@ class RepoAPI(KatelloAPI):
result_list = self.server.GET(path, search_params)[1]
return result_list
- def repos_by_product(self, productId, includeDisabled=False):
- path = "/api/products/%s/repositories" % productId
+ def repos_by_product(self, orgName, productId, includeDisabled=False):
+ path = "/api/organizations/%s/products/%s/repositories" % (orgName, productId)
data = {
"include_disabled": includeDisabled
}
diff --git a/cli/src/katello/client/core/organization.py b/cli/src/katello/client/core/organization.py
index 8b4f6e2..bae764b 100644
--- a/cli/src/katello/client/core/organization.py
+++ b/cli/src/katello/client/core/organization.py
@@ -226,7 +226,7 @@ class ShowSubscriptions(OrganizationAction):
return os.EX_OK
def sla(self, pool):
- return {'sla': self.extract_sla_from_product(self.productApi.show(pool['productId']))}
+ return {'sla': self.extract_sla_from_product(self.productApi.show(self.get_option('name'), pool['productId']))}
def convert_timestamp(self, timestamp_field):
offset = int(timestamp_field[-5:])
diff --git a/cli/src/katello/client/core/product.py b/cli/src/katello/client/core/product.py
index 94825f7..ca0c733 100644
--- a/cli/src/katello/client/core/product.py
+++ b/cli/src/katello/client/core/product.py
@@ -95,7 +95,7 @@ class SetSyncPlan(SingleProductAction):
if (plan == None):
return os.EX_DATAERR
- msg = self.api.set_sync_plan(prod['id'], plan['id'])
+ msg = self.api.set_sync_plan(orgName, prod['id'], plan['id'])
print msg
return os.EX_OK
@@ -114,7 +114,7 @@ class RemoveSyncPlan(SingleProductAction):
if (prod == None):
return os.EX_DATAERR
- msg = self.api.remove_sync_plan(prod['id'])
+ msg = self.api.remove_sync_plan(orgName, prod['id'])
print msg
return os.EX_OK
@@ -181,7 +181,7 @@ class Sync(SingleProductAction):
if (prod == None):
return os.EX_DATAERR
- task = AsyncTask(self.api.sync(prod["id"]))
+ task = AsyncTask(self.api.sync(orgName, prod["id"]))
run_async_task_with_status(task, ProgressBar())
if task.failed():
@@ -209,7 +209,7 @@ class CancelSync(SingleProductAction):
if (prod == None):
return os.EX_DATAERR
- msg = self.api.cancel_sync(prod["id"])
+ msg = self.api.cancel_sync(orgName, prod["id"])
print msg
return os.EX_OK
@@ -228,7 +228,7 @@ class Status(SingleProductAction):
if (prod == None):
return os.EX_DATAERR
- task = AsyncTask(self.api.last_sync_status(prod['id']))
+ task = AsyncTask(self.api.last_sync_status(orgName, prod['id']))
prod['last_sync'] = format_sync_time(prod['last_sync'])
prod['sync_state'] = format_sync_state(prod['sync_state'])
@@ -367,7 +367,7 @@ class Create(ProductAction):
repourls = self.discoverRepos.discover_repositories(orgName, url)
self.printer.setHeader(_("Repository Urls discovered @ [%s]" % url))
selectedurls = self.discoverRepos.select_repositories(repourls, assumeyes)
- self.discoverRepos.create_repositories(prod["id"], prod["name"], selectedurls)
+ self.discoverRepos.create_repositories(orgName, prod["id"], prod["name"], selectedurls)
return os.EX_OK
@@ -403,7 +403,7 @@ class Update(SingleProductAction):
if (prod == None):
return os.EX_DATAERR
- prod = self.api.update(prod["id"], description, gpgkey, nogpgkey, gpgkey_recursive)
+ prod = self.api.update(orgName, prod["id"], description, gpgkey, nogpgkey, gpgkey_recursive)
print _("Successfully updated product [ %s ]") % prodName
return os.EX_OK
@@ -420,7 +420,7 @@ class Delete(SingleProductAction):
if product == None:
return os.EX_DATAERR
- msg = self.api.delete(product["id"])
+ msg = self.api.delete(orgName, product["id"])
print msg
return os.EX_OK
@@ -437,7 +437,7 @@ class ListFilters(SingleProductAction):
if (prod == None):
return os.EX_DATAERR
- filters = self.api.filters(prod['id'])
+ filters = self.api.filters(orgName, prod['id'])
self.printer.addColumn('name')
self.printer.addColumn('description')
self.printer.setHeader(_("Product Filters"))
@@ -484,12 +484,12 @@ class AddRemoveFilter(SingleProductAction):
if get_filter(org_name, filter_name) == None:
return os.EX_DATAERR
- filters = self.api.filters(prod['id'])
+ filters = self.api.filters(org_name, prod['id'])
filters = [f['name'] for f in filters]
- self.update_filters(prod, filters, filter_name)
+ self.update_filters(org_name, prod, filters, filter_name)
return os.EX_OK
- def update_filters(self, product, filters, filter_name):
+ def update_filters(self, org_name, product, filters, filter_name):
if self.addition:
filters.append(filter_name)
message = _("Added filter [ %s ] to product [ %s ]" % (filter_name, product["name"]))
@@ -497,7 +497,7 @@ class AddRemoveFilter(SingleProductAction):
filters.remove(filter_name)
message = _("Removed filter [ %s ] to product [ %s ]" % (filter_name, product["name"]))
- self.api.update_filters(product['id'], filters)
+ self.api.update_filters(org_name, product['id'], filters)
print message
diff --git a/cli/src/katello/client/core/repo.py b/cli/src/katello/client/core/repo.py
index 9e7a7e7..e5a7a59 100644
--- a/cli/src/katello/client/core/repo.py
+++ b/cli/src/katello/client/core/repo.py
@@ -149,7 +149,7 @@ class Create(RepoAction):
prod = get_product(orgName, prodName)
if prod != None:
- repo = self.api.create(prod["id"], name, url, gpgkey, nogpgkey)
+ repo = self.api.create(orgName, prod["id"], name, url, gpgkey, nogpgkey)
print _("Successfully created repository [ %s ]") % name
else:
print _("No product [ %s ] found") % prodName
@@ -192,7 +192,7 @@ class Discovery(RepoAction):
prod = get_product(orgName, prodName)
if prod != None:
- self.create_repositories(prod["id"], name, selectedurls)
+ self.create_repositories(orgName, prod["id"], name, selectedurls)
return os.EX_OK
@@ -252,11 +252,11 @@ class Discovery(RepoAction):
return selection
- def create_repositories(self, productid, name, selectedurls):
+ def create_repositories(self, orgName, productid, name, selectedurls):
for repourl in selectedurls:
parsedUrl = urlparse.urlparse(repourl)
repoName = self.repository_name(name, parsedUrl.path) # pylint: disable=E1101
- repo = self.api.create(productid, repoName, repourl, None, None)
+ repo = self.api.create(orgName, productid, repoName, repourl, None, None)
print _("Successfully created repository [ %s ]") % repoName
@@ -454,7 +454,7 @@ class List(RepoAction):
prod = get_product(orgName, prodName)
if prod != None:
self.printer.setHeader(_("Repo List for Product %s in Org %s ") % (prodName, orgName))
- repos = self.api.repos_by_product(prod["id"], listDisabled)
+ repos = self.api.repos_by_product(orgName, prod["id"], listDisabled)
self.printer.printItems(repos)
else:
return os.EX_DATAERR
diff --git a/src/app/controllers/api/filters_controller.rb b/src/app/controllers/api/filters_controller.rb
index b955823..0308fd7 100644
--- a/src/app/controllers/api/filters_controller.rb
+++ b/src/app/controllers/api/filters_controller.rb
@@ -12,7 +12,7 @@
class Api::FiltersController< Api::ApiController
- before_filter :find_organization, :only => [:index, :create]
+ before_filter :find_organization, :only => [:index, :create, :list_product_filters, :update_product_filters]
before_filter :find_filter, :only => [:show, :destroy, :update]
before_filter :find_product, :only => [:list_product_filters, :update_product_filters]
before_filter :find_repository, :only => [:list_repository_filters, :update_repository_filters]
@@ -101,7 +101,7 @@ class Api::FiltersController< Api::ApiController
end
def find_product
- @product = Product.find_by_cp_id(params[:product_id])
+ @product = @organization.products.find_by_cp_id(params[:product_id])
raise HttpErrors::NotFound, _("Couldn't find product with id '#{params[:product_id]}'") if @product.nil?
end
diff --git a/src/app/controllers/api/products_controller.rb b/src/app/controllers/api/products_controller.rb
index 118606e..e6ec49c 100644
--- a/src/app/controllers/api/products_controller.rb
+++ b/src/app/controllers/api/products_controller.rb
@@ -12,9 +12,9 @@
class Api::ProductsController< Api::ApiController
respond_to :json
- before_filter :find_organization, :only => [:index]
- before_filter :find_product, :only => [:repositories, :show, :update, :destroy, :set_sync_plan, :remove_sync_plan]
+ before_filter :find_organization, :only => [:index, :repositories, :show, :update, :destroy, :set_sync_plan, :remove_sync_plan]
before_filter :find_environment, :only => [:index, :repositories]
+ before_filter :find_product, :only => [:repositories, :show, :update, :destroy, :set_sync_plan, :remove_sync_plan]
before_filter :verify_presence_of_organization_or_environment, :only => [:index]
before_filter :authorize
@@ -85,7 +85,7 @@ class Api::ProductsController< Api::ApiController
private
def find_product
- @product = Product.find_by_cp_id(params[:id].to_s)
+ @product = @organization.products.find_by_cp_id(params[:id].to_s)
raise HttpErrors::NotFound, _("Couldn't find product with id '#{params[:id]}'") if @product.nil?
end
diff --git a/src/app/controllers/api/repositories_controller.rb b/src/app/controllers/api/repositories_controller.rb
index e7a7acd..147762d 100644
--- a/src/app/controllers/api/repositories_controller.rb
+++ b/src/app/controllers/api/repositories_controller.rb
@@ -15,8 +15,8 @@ require 'resources/pulp'
class Api::RepositoriesController< Api::ApiController
respond_to :json
before_filter :find_repository, :only => [:show, :update, :destroy, :package_groups, :package_group_categories, :enable, :gpg_key_content]
+ before_filter :find_organization, :only => [:create, :discovery]
before_filter :find_product, :only => [:create]
- before_filter :find_organization, :only => [:discovery]
before_filter :authorize
skip_filter :set_locale, :require_user, :thread_locals, :authorize, :only => [:gpg_key_content]
@@ -120,7 +120,7 @@ class Api::RepositoriesController< Api::ApiController
end
def find_product
- @product = Product.find_by_cp_id params[:product_id]
+ @product = @organization.products.find_by_cp_id params[:product_id]
raise HttpErrors::NotFound, _("Couldn't find product with id '#{params[:product_id]}'") if @product.nil?
end
end
diff --git a/src/app/controllers/api/sync_controller.rb b/src/app/controllers/api/sync_controller.rb
index e2c3131..650523d 100644
--- a/src/app/controllers/api/sync_controller.rb
+++ b/src/app/controllers/api/sync_controller.rb
@@ -80,7 +80,8 @@ class Api::SyncController< Api::ApiController
end
def find_product
- @product = Product.find_by_cp_id(params[:product_id])
+ find_organization
+ @product = @organization.products.find_by_cp_id(params[:product_id])
raise HttpErrors::NotFound, _("Couldn't find product with id '#{params[:product_id]}'") if @product.nil?
@product
end
diff --git a/src/app/models/glue/pulp/errata.rb b/src/app/models/glue/pulp/errata.rb
index 1aae95f..48bdd57 100644
--- a/src/app/models/glue/pulp/errata.rb
+++ b/src/app/models/glue/pulp/errata.rb
@@ -49,7 +49,7 @@ class Glue::Pulp::Errata
elsif environment_id = filter[:environment_id]
env = KTEnvironment.find(environment_id)
if product_id = filter[:product_id]
- products = [::Product.find_by_cp_id!(product_id)]
+ products = [env.products.find_by_cp_id!(product_id)]
else
products = env.products
end
diff --git a/src/app/models/organization.rb b/src/app/models/organization.rb
index 29f7cbd..9f2eaa0 100644
--- a/src/app/models/organization.rb
+++ b/src/app/models/organization.rb
@@ -27,6 +27,7 @@ class Organization< ActiveRecord::Base
has_many :activation_keys, :dependent => :destroy
has_many :providers, :dependent => :destroy
+ has_many :products, :through => :providers
has_many :environments, :class_name => "KTEnvironment", :conditions => {:library => false}, :dependent => :destroy, :inverse_of => :organization
has_one :library, :class_name =>"KTEnvironment", :conditions => {:library => true}, :dependent => :destroy
has_many :filters, :dependent => :destroy, :inverse_of => :organization
diff --git a/src/config/routes.rb b/src/config/routes.rb
index 484feec..a1d9ec6 100644
--- a/src/config/routes.rb
+++ b/src/config/routes.rb
@@ -392,9 +392,20 @@ Src::Application.routes.draw do
end
resources :organizations do
- resources :products, :only => [:index] do
+ resources :products, :only => [:index, :show, :update, :destroy] do
+ get :repositories, :on => :member
+ post :sync_plan, :on => :member, :action => :set_sync_plan
+ delete :sync_plan, :on => :member, :action => :remove_sync_plan
get :repositories, :on => :member
+ resources :sync, :only => [:index, :create] do
+ delete :index, :on => :collection, :action => :cancel
+ end
+ resources :filters, :only => [] do
+ get :index, :on => :collection, :action => :list_product_filters
+ put :index, :on => :collection, :action => :update_product_filters
+ end
end
+
resources :environments do
get :repositories, :on => :member
resources :changesets, :only => [:index, :create]
@@ -450,19 +461,6 @@ Src::Application.routes.draw do
end
- resources :products, :only => [:show, :update, :destroy] do
- post :sync_plan, :on => :member, :action => :set_sync_plan
- delete :sync_plan, :on => :member, :action => :remove_sync_plan
- get :repositories, :on => :member
- resources :sync, :only => [:index, :create] do
- delete :index, :on => :collection, :action => :cancel
- end
- resources :filters, :only => [] do
- get :index, :on => :collection, :action => :list_product_filters
- put :index, :on => :collection, :action => :update_product_filters
- end
- end
-
#resources :puppetclasses, :only => [:index]
resources :ping, :only => [:index]
diff --git a/src/spec/controllers/api/filters_controller_spec.rb b/src/spec/controllers/api/filters_controller_spec.rb
index 8bb5b60..7ec40e6 100644
--- a/src/spec/controllers/api/filters_controller_spec.rb
+++ b/src/spec/controllers/api/filters_controller_spec.rb
@@ -90,16 +90,16 @@ describe Api::FiltersController do
it "should find product" do
Product.should_receive(:find_by_cp_id).once.with(product_id).and_return(@product)
- put :update_product_filters, :product_id => product_id, :filters => []
+ put :update_product_filters, :organization_id => @organization.cp_key, :product_id => product_id, :filters => []
end
it "should find filters" do
Filter.should_receive(:where).once.with(hash_including(:pulp_id => [@filter.name]))
- put :update_product_filters, :product_id => product_id, :filters => [@filter.name]
+ put :update_product_filters, :organization_id => @organization.cp_key, :product_id => product_id, :filters => [@filter.name]
end
it "should add new filter" do
- put :update_product_filters, :product_id => product_id, :filters => [@filter.name]
+ put :update_product_filters, :organization_id => @organization.cp_key, :product_id => product_id, :filters => [@filter.name]
assigns(:product).filters.size.should == 1
assigns(:product).filters.should include(@filter)
end
diff --git a/src/spec/controllers/api/products_controller_spec.rb b/src/spec/controllers/api/products_controller_spec.rb
index c08af30..2deffbc 100644
--- a/src/spec/controllers/api/products_controller_spec.rb
+++ b/src/spec/controllers/api/products_controller_spec.rb
@@ -71,7 +71,7 @@ describe Api::ProductsController do
end
let(:action) { :show }
- let(:req) { get 'show', :id => @product.id }
+ let(:req) { get 'show', :organization_id => @organization.name, :id => @product.id }
let(:authorized_user) { user_with_read_permissions }
let(:unauthorized_user) { user_without_read_permissions }
it_should_behave_like "protected action"
@@ -91,7 +91,7 @@ describe Api::ProductsController do
end
let(:action) { :update }
- let(:req) { put 'update', :id => @product.id, :product => {:gpg_key_name => gpg_key.name, :description => "another description" } }
+ let(:req) { put 'update', :id => @product.cp_id, :organization_id => @organization.cp_key, :product => {:gpg_key_name => gpg_key.name, :description => "another description" } }
let(:authorized_user) { user_with_update_permissions }
let(:unauthorized_user) { user_without_update_permissions }
it_should_behave_like "protected action"
@@ -108,7 +108,7 @@ describe Api::ProductsController do
it "should reset repos' GPGs, if updating recursive" do
@product.should_receive(:reset_repo_gpgs!)
- put 'update', :id => @product.id, :product => {:gpg_key_name => gpg_key.name, :description => "another description", :recursive => true }
+ put 'update', :id => @product.cp_id, :organization_id => @organization.cp_key, :product => {:gpg_key_name => gpg_key.name, :description => "another description", :recursive => true }
end
end
diff --git a/src/spec/controllers/api/repositories_controller_spec.rb b/src/spec/controllers/api/repositories_controller_spec.rb
index 87912a0..e5bab58 100644
--- a/src/spec/controllers/api/repositories_controller_spec.rb
+++ b/src/spec/controllers/api/repositories_controller_spec.rb
@@ -46,7 +46,7 @@ describe Api::RepositoriesController do
describe "for create" do
let(:action) {:create}
let(:req) do
- post 'create', :name => 'repo_1', :url => 'http://www.repo.org', :product_id => 'product_1'
+ post 'create', :name => 'repo_1', :url => 'http://www.repo.org', :product_id => 'product_1', :organization_id => @organization.cp_key
end
let(:authorized_user) do
user_with_permissions { |u| u.can(:update, :providers, @provider.id, @organization) }
@@ -173,13 +173,13 @@ describe Api::RepositoriesController do
Product.should_receive(:find_by_cp_id).with('product_1').and_return(@product)
@product.should_receive(:add_repo).and_return({})
- post 'create', :name => 'repo_1', :url => 'http://www.repo.org', :product_id => 'product_1'
+ post 'create', :name => 'repo_1', :url => 'http://www.repo.org', :product_id => 'product_1', :organization_id => @organization.cp_key
end
context 'there is already a repo for the product with the same name' do
it "should notify about conflict" do
@product.stub(:add_repo).and_return { raise Errors::ConflictException }
- post 'create', :name => 'repo_1', :url => 'http://www.repo.org', :product_id => 'product_1'
+ post 'create', :name => 'repo_1', :url => 'http://www.repo.org', :product_id => 'product_1', :organization_id => @organization.cp_key
response.code.should == '409'
end
end
@@ -197,7 +197,7 @@ describe Api::RepositoriesController do
@product.should_receive(:add_repo).with do |name, url, type, gpg|
gpg == product_gpg
end.and_return({})
- post 'create', :name => 'repo_1', :url => 'http://www.repo.org', :product_id => 'product_1'
+ post 'create', :name => 'repo_1', :url => 'http://www.repo.org', :product_id => 'product_1', :organization_id => @organization.cp_key
end
end
@@ -206,7 +206,7 @@ describe Api::RepositoriesController do
@product.should_receive(:add_repo).with do |name, url, type, gpg|
gpg == repo_gpg
end.and_return({})
- post 'create', :name => 'repo_1', :url => 'http://www.repo.org', :product_id => 'product_1', :gpg_key_name => repo_gpg.name
+ post 'create', :name => 'repo_1', :url => 'http://www.repo.org', :product_id => 'product_1', :organization_id => @organization.cp_key, :gpg_key_name => repo_gpg.name
end
end
@@ -215,7 +215,7 @@ describe Api::RepositoriesController do
@product.should_receive(:add_repo).with do |name, url, type, gpg|
gpg == nil
end.and_return({})
- post 'create', :name => 'repo_1', :url => 'http://www.repo.org', :product_id => 'product_1', :gpg_key_name => ""
+ post 'create', :name => 'repo_1', :url => 'http://www.repo.org', :product_id => 'product_1', :organization_id => @organization.cp_key, :gpg_key_name => ""
end
end
end
@@ -254,7 +254,7 @@ describe Api::RepositoriesController do
url = "http://url.org"
type = "yum"
- post 'create', :name => 'repo_1', :url => 'http://www.repo.org', :product_id => 'product_1'
+ post 'create', :name => 'repo_1', :url => 'http://www.repo.org', :product_id => 'product_1', :organization_id => @organization.cp_key
end
context 'there is already a repo for the product with the same name' do
@@ -264,7 +264,7 @@ describe Api::RepositoriesController do
end
it "should notify about conflict" do
- post 'create', :name => 'repo_1', :url => 'http://www.repo.org', :product_id => 'product_1'
+ post 'create', :name => 'repo_1', :url => 'http://www.repo.org', :product_id => 'product_1', :organization_id => @organization.cp_key
response.code.should == '409'
end
end
diff --git a/src/spec/controllers/api/sync_controller_spec.rb b/src/spec/controllers/api/sync_controller_spec.rb
index 1b9ee3e..775c0c0 100644
--- a/src/spec/controllers/api/sync_controller_spec.rb
+++ b/src/spec/controllers/api/sync_controller_spec.rb
@@ -46,22 +46,7 @@ describe Api::SyncController do
describe "rules" do
before(:each) do
- disable_product_orchestration
-
- @organization = new_test_org
- Organization.stub!(:first).and_return(@organization)
- @provider = Provider.create!(:provider_type=>Provider::CUSTOM, :name=>"foo1", :organization=>@organization)
- Provider.stub!(:find).and_return(@provider)
- @product = Product.new({:name => "prod"})
- @product.provider = @provider
- @product.environments<< @organization.library
- @product.stub(:arch).and_return('noarch')
- @product.save!
- Product.stub!(:find).and_return(@product)
- Product.stub!(:find_by_cp_id).and_return(@product)
- ep = EnvironmentProduct.find_or_create(@organization.library, @product)
- @repository = Repository.create!(:environment_product => ep, :name=> "repo_1", :pulp_id=>"1")
- Repository.stub(:find).and_return(@repository)
+ stub_product_with_repo
end
describe "for provider index" do
let(:action) {:index}
@@ -79,7 +64,7 @@ describe Api::SyncController do
describe "for product index" do
let(:action) {:index}
let(:req) do
- get :index, :product_id => product_id
+ get :index, :product_id => product_id, :organization_id => @organization.cp_key
end
let(:authorized_user) do
user_with_permissions { |u| u.can(:read, :providers, nil, @organization) }
@@ -146,11 +131,10 @@ describe Api::SyncController do
end
it "should find product if :product_id is specified" do
- found_product = {}
- Product.should_receive(:find_by_cp_id).once.with(product_id).and_return(found_product)
- controller.stub!(:params).and_return({:product_id => product_id })
+ stub_product_with_repo
+ controller.stub!(:params).and_return({:organization_id => @organization.cp_key, :product_id => @product.id })
- controller.find_object.should == found_product
+ controller.find_object.should == @product
end
it "should find repository if :repository_id is specified" do
@@ -263,5 +247,24 @@ describe Api::SyncController do
end
end
+ def stub_product_with_repo
+ disable_product_orchestration
+
+ @organization = new_test_org
+ Organization.stub!(:first).and_return(@organization)
+ @provider = Provider.create!(:provider_type=>Provider::CUSTOM, :name=>"foo1", :organization=>@organization)
+ Provider.stub!(:find).and_return(@provider)
+ @product = Product.new({:name => "prod"})
+ @product.provider = @provider
+ @product.environments<< @organization.library
+ @product.stub(:arch).and_return('noarch')
+ @product.save!
+ Product.stub!(:find).and_return(@product)
+ Product.stub!(:find_by_cp_id).and_return(@product)
+ ep = EnvironmentProduct.find_or_create(@organization.library, @product)
+ @repository = Repository.create!(:environment_product => ep, :name=> "repo_1", :pulp_id=>"1")
+ Repository.stub(:find).and_return(@repository)
+ end
+
end
_______________________________________________
katello-commits mailing list
katello-commits at lists.fedorahosted.org
https://fedorahosted.org/mailman/listinfo/katello-commits
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/katello-devel/attachments/20120207/0dc35fe9/attachment.htm>
More information about the katello-devel
mailing list