test/yao/resources/test_role.rb in yao-0.7.0 vs test/yao/resources/test_role.rb in yao-0.8.0
- old
+ new
@@ -1,12 +1,266 @@
-class TestRole < Test::Unit::TestCase
+class TestRole < TestYaoResource
def test_role_attributes
params = {
"name" => "test_role",
"description" => "test_description_1"
}
role = Yao::Role.new(params)
assert_equal(role.name, "test_role")
assert_equal(role.description, "test_description_1")
+ end
+
+ sub_test_case 'with keystone v2.0' do
+
+ def setup
+ super
+ Yao.default_client.admin_pool["identity"] = Yao::Client.gen_client("https://example.com:12345/v2.0")
+ end
+
+ def test_find_by_name
+ stub = stub_request(:get, "https://example.com:12345/v2.0/OS-KSADM/roles").
+ to_return(
+ status: 200,
+ body: <<-JSON,
+ {
+ "roles": [{
+ "id": "0123456789abcdef0123456789abcdef",
+ "name": "admin"
+ }]
+ }
+ JSON
+ headers: {'Content-Type' => 'application/json'}
+ )
+
+ roles = Yao::Role.find_by_name("admin")
+
+ assert_instance_of(Yao::Role, roles.first)
+ assert_equal(roles.first.id, "0123456789abcdef0123456789abcdef")
+ assert_requested(stub)
+ end
+
+ def test_resource_path
+ stub = stub_request(:get, "https://example.com:12345/v2.0/OS-KSADM/roles").
+ to_return(
+ status: 200,
+ body: <<-JSON,
+ {
+ "roles": [{
+ "id": "0123456789abcdef0123456789abcdef",
+ "name": "admin"
+ }]
+ }
+ JSON
+ headers: {'Content-Type' => 'application/json'}
+ )
+
+ roles = Yao::Role.list
+
+ assert_instance_of(Yao::Role, roles.first)
+ assert_equal(roles.first.id, "0123456789abcdef0123456789abcdef")
+ assert_requested(stub)
+ end
+
+ def test_list_for_user
+ stub_user
+ stub_tenant
+ stub = stub_request(:get, "https://example.com:12345/v2.0/tenants/0123456789abcdef0123456789abcdef/users/2844b2a08be147a08ef58317d6471f1f/roles").
+ to_return(
+ status: 200,
+ body: <<-JSON,
+ {
+ "roles": [{
+ "id": "0123456789abcdef0123456789abcdef",
+ "name": "admin"
+ }]
+ }
+ JSON
+ headers: {'Content-Type' => 'application/json'}
+ )
+
+ roles = Yao::Role.list_for_user("test_user", on:"admin")
+ assert_equal(roles.first.id, "0123456789abcdef0123456789abcdef")
+ assert_received(Yao::User) { |subject| subject.get("test_user") }
+ assert_received(Yao::Tenant) { |subject| subject.find_by_name("admin") }
+ assert_requested(stub)
+ end
+
+ def test_grant
+ stub_role
+ stub_user
+ stub_tenant
+ stub = stub_request(:put, "https://example.com:12345/v2.0/tenants/0123456789abcdef0123456789abcdef/users/2844b2a08be147a08ef58317d6471f1f/roles/OS-KSADM/5318e65d75574c17bf5339d3df33a5a3").
+ to_return(
+ status: 204,
+ body: "",
+ headers: {'Content-Type' => 'application/json'}
+ )
+
+ Yao::Role.grant("test_role", to:"test_user", on:"admin")
+ assert_received(Yao::Role) { |subject| subject.get("test_role") }
+ assert_received(Yao::User) { |subject| subject.get("test_user") }
+ assert_received(Yao::Tenant) { |subject| subject.find_by_name("admin") }
+ assert_requested(stub)
+ end
+
+ def test_revoke
+ stub_role
+ stub_user
+ stub_tenant
+ stub = stub_request(:delete, "https://example.com:12345/v2.0/tenants/0123456789abcdef0123456789abcdef/users/2844b2a08be147a08ef58317d6471f1f/roles/OS-KSADM/5318e65d75574c17bf5339d3df33a5a3").
+ to_return(
+ status: 204,
+ body: "",
+ headers: {'Content-Type' => 'application/json'}
+ )
+
+ Yao::Role.revoke("test_role", from:"test_user", on:"admin")
+ assert_received(Yao::Role) { |subject| subject.get("test_role") }
+ assert_received(Yao::User) { |subject| subject.get("test_user") }
+ assert_received(Yao::Tenant) { |subject| subject.find_by_name("admin") }
+ assert_requested(stub)
+ end
+ end
+
+ sub_test_case 'with keystone v3' do
+
+ def setup
+ super
+ Yao.default_client.admin_pool["identity"] = Yao::Client.gen_client("https://example.com:12345/v3")
+ end
+
+ def test_find_by_name
+ stub = stub_request(:get, "https://example.com:12345/v3/roles?name=admin").
+ to_return(
+ status: 200,
+ body: <<-JSON,
+ {
+ "roles": [{
+ "id": "0123456789abcdef0123456789abcdef",
+ "name": "admin"
+ }]
+ }
+ JSON
+ headers: {'Content-Type' => 'application/json'}
+ )
+
+ roles = Yao::Role.find_by_name("admin")
+
+ assert_instance_of(Yao::Role, roles.first)
+ assert_equal(roles.first.id, "0123456789abcdef0123456789abcdef")
+ assert_requested(stub)
+ end
+
+ def test_resource_path
+ stub = stub_request(:get, "https://example.com:12345/v3/roles").
+ to_return(
+ status: 200,
+ body: <<-JSON,
+ {
+ "roles": [{
+ "id": "0123456789abcdef0123456789abcdef",
+ "name": "admin"
+ }]
+ }
+ JSON
+ headers: {'Content-Type' => 'application/json'}
+ )
+
+ roles = Yao::Role.list
+
+ assert_instance_of(Yao::Role, roles.first)
+ assert_equal(roles.first.id, "0123456789abcdef0123456789abcdef")
+ assert_requested(stub)
+ end
+
+ def test_list_for_user
+ stub_user
+ stub_project
+ stub = stub_request(:get, "https://example.com:12345/v3/projects/0123456789abcdef0123456789abcdef/users/2844b2a08be147a08ef58317d6471f1f/roles").
+ to_return(
+ status: 200,
+ body: <<-JSON,
+ {
+ "roles": [{
+ "id": "0123456789abcdef0123456789abcdef",
+ "name": "admin"
+ }]
+ }
+ JSON
+ headers: {'Content-Type' => 'application/json'}
+ )
+
+ roles = Yao::Role.list_for_user("test_user", on:"admin")
+ assert_equal(roles.first.id, "0123456789abcdef0123456789abcdef")
+ assert_received(Yao::Resources::User) { |subject| subject.get("test_user") }
+ assert_received(Yao::Resources::Project) { |subject| subject.get("admin") }
+ assert_requested(stub)
+ end
+
+ def test_grant
+ stub_role
+ stub_user
+ stub_project
+ stub = stub_request(:put, "https://example.com:12345/v3/projects/0123456789abcdef0123456789abcdef/users/2844b2a08be147a08ef58317d6471f1f/roles/5318e65d75574c17bf5339d3df33a5a3").
+ to_return(
+ status: 204,
+ body: "",
+ headers: {'Content-Type' => 'application/json'}
+ )
+
+ Yao::Role.grant("test_role", to:"test_user", on:"admin")
+ assert_received(Yao::Role) { |subject| subject.get("test_role") }
+ assert_received(Yao::User) { |subject| subject.get("test_user") }
+ assert_received(Yao::Project) { |subject| subject.get("admin") }
+ assert_requested(stub)
+ end
+
+ def test_revoke
+ stub_role
+ stub_user
+ stub_project
+ stub = stub_request(:delete, "https://example.com:12345/v3/projects/0123456789abcdef0123456789abcdef/users/2844b2a08be147a08ef58317d6471f1f/roles/5318e65d75574c17bf5339d3df33a5a3").
+ to_return(
+ status: 204,
+ body: "",
+ headers: {'Content-Type' => 'application/json'}
+ )
+
+ Yao::Role.revoke("test_role", from:"test_user", on:"admin")
+ assert_received(Yao::Role) { |subject| subject.get("test_role") }
+ assert_received(Yao::User) { |subject| subject.get("test_user") }
+ assert_received(Yao::Project) { |subject| subject.get("admin") }
+ assert_requested(stub)
+ end
+ end
+
+ private
+ def stub_role
+ stub(Yao::Role).get { Yao::Role.new(
+ "id" => "5318e65d75574c17bf5339d3df33a5a3",
+ "name" => "test_role",
+ "description" => "test_description_1"
+ )}
+ end
+
+ def stub_user
+ stub(Yao::User).get { Yao::User.new({
+ "id" => "2844b2a08be147a08ef58317d6471f1f",
+ "name" => "test_user",
+ }) }
+ end
+
+ def stub_tenant
+ stub(Yao::Tenant).find_by_name { Yao::Tenant.new({
+ "id" => "0123456789abcdef0123456789abcdef",
+ "name" => "admin",
+ }) }
+ end
+
+ def stub_project
+ stub(Yao::Project).get { Yao::Tenant.new({
+ "id" => "0123456789abcdef0123456789abcdef",
+ "name" => "admin",
+ }) }
end
end