arpa 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +42 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +138 -0
- data/Rakefile +2 -0
- data/arpa.gemspec +33 -0
- data/lib/arpa.rb +91 -0
- data/lib/arpa/additions/resource.rb +29 -0
- data/lib/arpa/assets/stylesheets/ar_accordion.scss +80 -0
- data/lib/arpa/controllers/profiles_controller.rb +106 -0
- data/lib/arpa/controllers/resources_controller.rb +47 -0
- data/lib/arpa/controllers/roles_controller.rb +106 -0
- data/lib/arpa/data_mappers/action_mapper.rb +13 -0
- data/lib/arpa/data_mappers/base.rb +117 -0
- data/lib/arpa/data_mappers/profile_mapper.rb +14 -0
- data/lib/arpa/data_mappers/resource_mapper.rb +11 -0
- data/lib/arpa/data_mappers/role_mapper.rb +14 -0
- data/lib/arpa/entities/action.rb +24 -0
- data/lib/arpa/entities/permissions.rb +35 -0
- data/lib/arpa/entities/profile.rb +22 -0
- data/lib/arpa/entities/resource.rb +58 -0
- data/lib/arpa/entities/role.rb +28 -0
- data/lib/arpa/exceptions/record_invalid.rb +13 -0
- data/lib/arpa/repositories/actions/creator.rb +18 -0
- data/lib/arpa/repositories/actions/finder.rb +23 -0
- data/lib/arpa/repositories/actions/remover.rb +22 -0
- data/lib/arpa/repositories/actions/repository_action.rb +15 -0
- data/lib/arpa/repositories/base.rb +15 -0
- data/lib/arpa/repositories/profiles/creator.rb +18 -0
- data/lib/arpa/repositories/profiles/finder.rb +29 -0
- data/lib/arpa/repositories/profiles/remover.rb +29 -0
- data/lib/arpa/repositories/profiles/repository_profile.rb +12 -0
- data/lib/arpa/repositories/profiles/updater.rb +23 -0
- data/lib/arpa/repositories/registrator.rb +44 -0
- data/lib/arpa/repositories/resources/creator.rb +18 -0
- data/lib/arpa/repositories/resources/finder.rb +45 -0
- data/lib/arpa/repositories/resources/remover.rb +22 -0
- data/lib/arpa/repositories/resources/repository_resource.rb +12 -0
- data/lib/arpa/repositories/roles/creator.rb +18 -0
- data/lib/arpa/repositories/roles/finder.rb +29 -0
- data/lib/arpa/repositories/roles/remover.rb +29 -0
- data/lib/arpa/repositories/roles/repository_role.rb +13 -0
- data/lib/arpa/repositories/roles/updater.rb +23 -0
- data/lib/arpa/services/actions/create/action_creator.rb +50 -0
- data/lib/arpa/services/actions/remove/action_remover.rb +24 -0
- data/lib/arpa/services/base.rb +41 -0
- data/lib/arpa/services/profiles/create/profile_creator.rb +32 -0
- data/lib/arpa/services/profiles/profile_manager_creator.rb +22 -0
- data/lib/arpa/services/profiles/profile_manager_remover.rb +24 -0
- data/lib/arpa/services/profiles/profile_manager_updater.rb +22 -0
- data/lib/arpa/services/profiles/remove/profile_remover.rb +25 -0
- data/lib/arpa/services/profiles/update/profile_updater.rb +32 -0
- data/lib/arpa/services/resources/create/resource_creator.rb +42 -0
- data/lib/arpa/services/resources/remove/resource_remover.rb +31 -0
- data/lib/arpa/services/resources/resource_manager_creator.rb +50 -0
- data/lib/arpa/services/roles/create/role_creator.rb +33 -0
- data/lib/arpa/services/roles/remove/role_remover.rb +25 -0
- data/lib/arpa/services/roles/role_manager_creator.rb +23 -0
- data/lib/arpa/services/roles/role_manager_remover.rb +23 -0
- data/lib/arpa/services/roles/role_manager_updater.rb +22 -0
- data/lib/arpa/services/roles/update/role_updater.rb +32 -0
- data/lib/arpa/services/verifier.rb +24 -0
- data/lib/arpa/validators/action_validator.rb +17 -0
- data/lib/arpa/validators/profile_validator.rb +19 -0
- data/lib/arpa/validators/resource_validator.rb +17 -0
- data/lib/arpa/validators/role_validator.rb +20 -0
- data/lib/arpa/version.rb +3 -0
- data/lib/arpa/views/profiles/_form.html.erb +41 -0
- data/lib/arpa/views/profiles/edit.html.erb +6 -0
- data/lib/arpa/views/profiles/index.html.erb +29 -0
- data/lib/arpa/views/profiles/new.html.erb +5 -0
- data/lib/arpa/views/profiles/show.html.erb +37 -0
- data/lib/arpa/views/resources/index.html.erb +27 -0
- data/lib/arpa/views/resources/show.html.erb +33 -0
- data/lib/arpa/views/roles/_form.html.erb +55 -0
- data/lib/arpa/views/roles/edit.html.erb +6 -0
- data/lib/arpa/views/roles/index.html.erb +29 -0
- data/lib/arpa/views/roles/new.html.erb +5 -0
- data/lib/arpa/views/roles/show.html.erb +37 -0
- data/lib/config/locales/arpa.en.yml +38 -0
- data/lib/generators/ar/install_generator.rb +74 -0
- data/lib/generators/ar/templates/migration.rb +48 -0
- data/spec/factories/repository_actions.rb +19 -0
- data/spec/factories/repository_profiles.rb +11 -0
- data/spec/factories/repository_resources.rb +15 -0
- data/spec/factories/repository_roles.rb +11 -0
- data/spec/lib/ar/additions/resource_spec.rb +34 -0
- data/spec/lib/ar/data_mappers/action_mapper_spec.rb +46 -0
- data/spec/lib/ar/data_mappers/base_spec.rb +47 -0
- data/spec/lib/ar/data_mappers/profile_mapper_spec.rb +43 -0
- data/spec/lib/ar/data_mappers/resource_mapper_spec.rb +38 -0
- data/spec/lib/ar/data_mappers/role_mapper_spec.rb +47 -0
- data/spec/lib/ar/entities/action_spec.rb +19 -0
- data/spec/lib/ar/entities/permissions_spec.rb +61 -0
- data/spec/lib/ar/entities/resource_spec.rb +35 -0
- data/spec/lib/ar/repositories/actions/finder_spec.rb +40 -0
- data/spec/lib/ar/repositories/base_spec.rb +37 -0
- data/spec/lib/ar/repositories/profiles/finder_spec.rb +43 -0
- data/spec/lib/ar/repositories/profiles/remover_spec.rb +31 -0
- data/spec/lib/ar/repositories/resources/finder_spec.rb +92 -0
- data/spec/lib/ar/repositories/resources/remover_spec.rb +38 -0
- data/spec/lib/ar/repositories/roles/finder_spec.rb +43 -0
- data/spec/lib/ar/repositories/roles/remover_spec.rb +31 -0
- data/spec/lib/ar/requests/profiles/create_request_spec.rb +51 -0
- data/spec/lib/ar/requests/profiles/remove_request_spec.rb +36 -0
- data/spec/lib/ar/requests/resources/create_request_spec.rb +107 -0
- data/spec/lib/ar/requests/roles/create_request_spec.rb +40 -0
- data/spec/lib/ar/requests/roles/remove_request_spec.rb +23 -0
- data/spec/lib/ar/requests/roles/update_request_spec.rb +50 -0
- data/spec/lib/ar/services/actions/create/action_creator_spec.rb +88 -0
- data/spec/lib/ar/services/actions/remove/action_remover_spec.rb +36 -0
- data/spec/lib/ar/services/base_spec.rb +94 -0
- data/spec/lib/ar/services/profiles/create/profile_creator_spec.rb +68 -0
- data/spec/lib/ar/services/profiles/profile_manager_creator_spec.rb +31 -0
- data/spec/lib/ar/services/profiles/profile_manager_remover_spec.rb +44 -0
- data/spec/lib/ar/services/profiles/profile_manager_updater_spec.rb +31 -0
- data/spec/lib/ar/services/profiles/remove/profile_remover_spec.rb +45 -0
- data/spec/lib/ar/services/profiles/update/profile_updater_spec.rb +68 -0
- data/spec/lib/ar/services/resources/create/resource_creator_spec.rb +87 -0
- data/spec/lib/ar/services/resources/remove/resource_remover_spec.rb +50 -0
- data/spec/lib/ar/services/resources/resource_manager_creator_spec.rb +71 -0
- data/spec/lib/ar/services/roles/create/role_creator_spec.rb +68 -0
- data/spec/lib/ar/services/roles/remove/role_remover_spec.rb +50 -0
- data/spec/lib/ar/services/roles/role_manager_creator_spec.rb +31 -0
- data/spec/lib/ar/services/roles/role_manager_remover_spec.rb +32 -0
- data/spec/lib/ar/services/roles/role_manager_updater_spec.rb +31 -0
- data/spec/lib/ar/services/roles/update/role_updater_spec.rb +68 -0
- data/spec/lib/ar/services/verifier_spec.rb +44 -0
- data/spec/lib/ar/validators/action_validator_spec.rb +15 -0
- data/spec/lib/ar/validators/profile_validator_spec.rb +16 -0
- data/spec/lib/ar/validators/resource_validator_spec.rb +15 -0
- data/spec/lib/ar/validators/role_validator_spec.rb +16 -0
- data/spec/spec_helper.rb +33 -0
- data/spec/support/repositories/test_repository.rb +2 -0
- data/spec/support/schema.rb +58 -0
- metadata +380 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
FactoryGirl.define do
|
|
2
|
+
factory :repository_action, class: Arpa::Repositories::Actions::RepositoryAction do
|
|
3
|
+
|
|
4
|
+
trait :index do
|
|
5
|
+
name 'index'
|
|
6
|
+
resource { FactoryGirl.create(:repository_resource, :user) }
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
trait :show do
|
|
10
|
+
name 'show'
|
|
11
|
+
resource { FactoryGirl.create(:repository_resource, :user) }
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
trait :with_complete_association do
|
|
15
|
+
name 'index_new'
|
|
16
|
+
resource { FactoryGirl.create(:repository_resource, :user) }
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
FactoryGirl.define do
|
|
2
|
+
factory :repository_profile, class: Arpa::Repositories::Profiles::RepositoryProfile do
|
|
3
|
+
|
|
4
|
+
name 'some_profile'
|
|
5
|
+
description 'description_profile'
|
|
6
|
+
|
|
7
|
+
trait :with_complete_association do
|
|
8
|
+
roles { [FactoryGirl.create(:repository_role, :with_complete_association)] }
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
FactoryGirl.define do
|
|
2
|
+
factory :repository_resource, class: Arpa::Repositories::Resources::RepositoryResource do
|
|
3
|
+
|
|
4
|
+
trait :user do
|
|
5
|
+
full_name 'UsersController'
|
|
6
|
+
name 'users'
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
trait :contact do
|
|
10
|
+
full_name 'ContactsController'
|
|
11
|
+
name 'contacts'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
FactoryGirl.define do
|
|
2
|
+
factory :repository_role, class: Arpa::Repositories::Roles::RepositoryRole do
|
|
3
|
+
|
|
4
|
+
name 'some_role'
|
|
5
|
+
description 'description_role'
|
|
6
|
+
|
|
7
|
+
trait :with_complete_association do
|
|
8
|
+
actions {[FactoryGirl.create(:repository_action, :with_complete_association)] }
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
class ResourceImplementation
|
|
4
|
+
def self.helper_method(args);end
|
|
5
|
+
include Arpa::Additions::Resource
|
|
6
|
+
def session;'';end
|
|
7
|
+
def current_user;'';end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
describe Arpa::Additions::Resource, type: :addition, fast: true do
|
|
11
|
+
|
|
12
|
+
let(:resource_implementation) { ResourceImplementation.new }
|
|
13
|
+
|
|
14
|
+
describe '#has_access?' do
|
|
15
|
+
let(:verifier) { double }
|
|
16
|
+
let(:resource) { double }
|
|
17
|
+
let(:action) { double }
|
|
18
|
+
|
|
19
|
+
before do
|
|
20
|
+
allow(Arpa::Services::Verifier).to receive(:new).and_return(verifier)
|
|
21
|
+
allow(verifier).to receive(:has_access?)
|
|
22
|
+
resource_implementation.has_access?(resource, action)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'should call :new from Arpa::Services::Verifier' do
|
|
26
|
+
expect(Arpa::Services::Verifier).to have_received(:new).once
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'verifier should call :has_access? with resource and action as parameter' do
|
|
30
|
+
expect(verifier).to have_received(:has_access?).with(resource, action).once
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::DataMappers::ActionMapper, type: :mapper, fast: true do
|
|
4
|
+
let(:mapper) { Arpa::DataMappers::ActionMapper.instance }
|
|
5
|
+
|
|
6
|
+
describe 'mapping to record instance' do
|
|
7
|
+
let(:entity) { Arpa::Entities::Action.new(name: 'index', resource_id: 1)}
|
|
8
|
+
let(:record_instance) { mapper.map_to_record(entity) }
|
|
9
|
+
|
|
10
|
+
it 'record_instance should be an instance of ActiveRecord::Base' do
|
|
11
|
+
expect(record_instance).to be_a ActiveRecord::Base
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'record_instance should fill the property :name from entity property' do
|
|
15
|
+
expect(record_instance.name).to eql 'index'
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'record_instance should fill the property :resource_id and :repository_resource_id from entity property' do
|
|
19
|
+
expect(record_instance.resource_id).to be == 1
|
|
20
|
+
expect(record_instance.repository_resource_id).to be == 1
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
describe 'mapping to entity instance' do
|
|
26
|
+
let(:record) { create :repository_action, :index }
|
|
27
|
+
let(:entity_instance) { mapper.map_to_entity(record) }
|
|
28
|
+
|
|
29
|
+
it 'entity_instance should fill the property :name from record property' do
|
|
30
|
+
expect(entity_instance.name).to eql 'index'
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'entity_instance should fill the property :id from record property' do
|
|
34
|
+
expect(entity_instance.id).to be == record.id
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'entity_instance should fill the property :resource_id from record property' do
|
|
38
|
+
expect(entity_instance.resource_id).to be == record.resource_id
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'entity_instance should fill the property :resource from record property' do
|
|
42
|
+
expect(entity_instance.resource).to be_an Arpa::Entities::Resource
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
class TestMapper < Arpa::DataMappers::Base
|
|
4
|
+
entity_class 'TestRepository'
|
|
5
|
+
repository_class 'TestRepository'
|
|
6
|
+
attributes_to_map :id, :name
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe Arpa::DataMappers::Base, type: :mapper, fast: true do
|
|
10
|
+
let(:mapper) { TestMapper.instance }
|
|
11
|
+
|
|
12
|
+
context 'when initialize more than one Mapper' do
|
|
13
|
+
|
|
14
|
+
let(:mapper_002) { TestMapper.instance }
|
|
15
|
+
|
|
16
|
+
it 'the instances should use singleton pattern' do
|
|
17
|
+
expect(mapper).to eq mapper_002
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe 'mapping to record instance' do
|
|
22
|
+
let(:entity) { double id: nil, name: 'Some Name' }
|
|
23
|
+
let(:record_instance) { mapper.map_to_record(entity) }
|
|
24
|
+
|
|
25
|
+
it 'record_instance should be an instance of ActiveRecord::Base' do
|
|
26
|
+
expect(record_instance).to be_a ActiveRecord::Base
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'record_instance should fill the property :name from entity property' do
|
|
30
|
+
expect(record_instance.name).to eql 'Some Name'
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe 'mapping to entity instance' do
|
|
35
|
+
let(:record) { TestRepository.create(name: 'Name One') }
|
|
36
|
+
let(:entity_instance) { mapper.map_to_entity(record) }
|
|
37
|
+
|
|
38
|
+
it 'entity_instance should fill the property :name from record property' do
|
|
39
|
+
expect(entity_instance.name).to eql 'Name One'
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'entity_instance should fill the property :id from record property' do
|
|
43
|
+
expect(entity_instance.id).to be == record.id
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::DataMappers::ProfileMapper, type: :mapper, fast: true do
|
|
4
|
+
let(:mapper) { Arpa::DataMappers::ProfileMapper.instance }
|
|
5
|
+
|
|
6
|
+
describe 'mapping to record instance' do
|
|
7
|
+
let(:entity) { Arpa::Entities::Profile.new(name: 'some_profile')}
|
|
8
|
+
let(:record_instance) { mapper.map_to_record(entity) }
|
|
9
|
+
|
|
10
|
+
it 'record_instance should be an instance of Arpa::Repositories::Profiles::RepositoryProfile' do
|
|
11
|
+
expect(record_instance).to be_a Arpa::Repositories::Profiles::RepositoryProfile
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'record_instance should fill the property :name from entity property' do
|
|
15
|
+
expect(record_instance.name).to eql 'some_profile'
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe 'mapping to entity instance' do
|
|
20
|
+
let(:action_record) { create :repository_action, :index }
|
|
21
|
+
let(:role_record) { create :repository_role, action_ids: [action_record.id] }
|
|
22
|
+
let(:record) { create :repository_profile, role_ids: [role_record.id] }
|
|
23
|
+
let(:entity_instance) { mapper.map_to_entity(record) }
|
|
24
|
+
|
|
25
|
+
it 'entity_instance should fill the property :name from record property' do
|
|
26
|
+
expect(entity_instance.name).to eql 'some_profile'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'entity_instance should fill the property :id from record property' do
|
|
30
|
+
expect(entity_instance.id).to be == record.id
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'entity_instance should fill the property :roles from record property' do
|
|
34
|
+
expect(entity_instance.roles.first).to be_an Arpa::Entities::Role
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'entity_instance should fill the property :role_ids from record property' do
|
|
38
|
+
expect(entity_instance.role_ids).to eq [role_record.id]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::DataMappers::ResourceMapper, type: :mapper, fast: true do
|
|
4
|
+
let(:mapper) { Arpa::DataMappers::ResourceMapper.instance }
|
|
5
|
+
|
|
6
|
+
describe 'mapping to record instance' do
|
|
7
|
+
let(:entity) { Arpa::Entities::Resource.new(full_name: 'UsersController')}
|
|
8
|
+
let(:record_instance) { mapper.map_to_record(entity) }
|
|
9
|
+
|
|
10
|
+
it 'record_instance should be an instance of ActiveRecord::Base' do
|
|
11
|
+
expect(record_instance).to be_a ActiveRecord::Base
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'record_instance should fill the property :name from entity property' do
|
|
15
|
+
expect(record_instance.full_name).to eql 'UsersController'
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe 'mapping to entity instance' do
|
|
20
|
+
let(:action_record) { create :repository_action, :index }
|
|
21
|
+
let(:record) { create :repository_resource, :user, actions: [action_record] }
|
|
22
|
+
let(:entity_instance) { mapper.map_to_entity(record.reload) }
|
|
23
|
+
|
|
24
|
+
it 'entity_instance should fill the property :name from record property' do
|
|
25
|
+
expect(entity_instance.full_name).to eql 'UsersController'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'entity_instance should fill the property :id from record property' do
|
|
29
|
+
expect(entity_instance.id).to be == record.id
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'entity_instance should fill the property :actions from record property' do
|
|
33
|
+
expect(entity_instance.actions.first).to be_an Arpa::Entities::Action
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::DataMappers::RoleMapper, type: :mapper, fast: true do
|
|
4
|
+
let(:mapper) { Arpa::DataMappers::RoleMapper.instance }
|
|
5
|
+
|
|
6
|
+
describe 'mapping to record instance' do
|
|
7
|
+
let(:entity) { Arpa::Entities::Role.new(name: 'some_role')}
|
|
8
|
+
let(:record_instance) { mapper.map_to_record(entity) }
|
|
9
|
+
|
|
10
|
+
it 'record_instance should be an instance of Arpa::Repositories::Roles::RepositoryRole' do
|
|
11
|
+
expect(record_instance).to be_a Arpa::Repositories::Roles::RepositoryRole
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'record_instance should fill the property :name from entity property' do
|
|
15
|
+
expect(record_instance.name).to eql 'some_role'
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe 'mapping to entity instance' do
|
|
20
|
+
let(:action_record) { create :repository_action, :index }
|
|
21
|
+
let(:profile_record) { create :repository_profile }
|
|
22
|
+
let(:record) { create :repository_role, profile_ids: [profile_record.id], action_ids: [action_record.id] }
|
|
23
|
+
let(:entity_instance) { mapper.map_to_entity(record) }
|
|
24
|
+
|
|
25
|
+
it 'entity_instance should fill the property :name from record property' do
|
|
26
|
+
expect(entity_instance.name).to eql 'some_role'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'entity_instance should fill the property :id from record property' do
|
|
30
|
+
expect(entity_instance.id).to be == record.id
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it 'entity_instance should fill the property :actions from record property' do
|
|
34
|
+
expect(entity_instance.actions.first).to be_an Arpa::Entities::Action
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'entity_instance should fill the property :action_ids from record property' do
|
|
38
|
+
expect(entity_instance.action_ids).to eq [action_record.id]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'entity_instance should fill the property :profiles from record property' do
|
|
42
|
+
expect(entity_instance.profiles.first).to be_an Arpa::Entities::Profile
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::Entities::Action, type: :entity, fast: true do
|
|
4
|
+
let(:resource) { double(name: 'users') }
|
|
5
|
+
|
|
6
|
+
subject { Arpa::Entities::Action.new resource: resource, name: 'index'}
|
|
7
|
+
|
|
8
|
+
describe 'getting description by action name and resource name' do
|
|
9
|
+
|
|
10
|
+
context 'when resource.name is "users" and action.name is "index"' do
|
|
11
|
+
|
|
12
|
+
it 'description should be "List of Users"' do
|
|
13
|
+
expect(subject.description).to eql "List of Users"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::Entities::Permissions, type: :presenter, fast: true do
|
|
4
|
+
let(:index_action) { double name: 'index_new' }
|
|
5
|
+
let(:resource_001) { double name: 'users', actions: [index_action] }
|
|
6
|
+
let(:resource_002) { double name: 'users', actions: [index_action] }
|
|
7
|
+
let(:resources) { [resource_001, resource_002] }
|
|
8
|
+
|
|
9
|
+
subject { Arpa::Entities::Permissions.new(resources)}
|
|
10
|
+
|
|
11
|
+
describe 'intializing' do
|
|
12
|
+
let(:result) { subject.permissions }
|
|
13
|
+
|
|
14
|
+
it 'attr :permissions should be an Array' do
|
|
15
|
+
expect(result).to be_an Array
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'should fill attr :permissions as an Array of Hash with keys :resource and :action' do
|
|
19
|
+
first = result.first
|
|
20
|
+
|
|
21
|
+
expect(first).to be_a Hash
|
|
22
|
+
expect(first.has_key?('resource')).to be_truthy
|
|
23
|
+
expect(first.has_key?('action')).to be_truthy
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
context 'when try fill permissions with duplicate resource and action' do
|
|
27
|
+
let(:hash_permission) { {'resource' => 'users', 'action' => 'index_new' } }
|
|
28
|
+
|
|
29
|
+
it 'should has only one Hash with that duplicated resource and action' do
|
|
30
|
+
duplicated_hash_permission = result.detect{ |e| result.count(e) > 1 }
|
|
31
|
+
expect(duplicated_hash_permission).to be_nil
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe '#has_permission?' do
|
|
38
|
+
let(:resource_name) { 'users' }
|
|
39
|
+
let(:result) { subject.has_permission?(resource_name, action_name) }
|
|
40
|
+
|
|
41
|
+
context 'when has' do
|
|
42
|
+
let(:action_name) { 'index_new' }
|
|
43
|
+
|
|
44
|
+
it 'should return true' do
|
|
45
|
+
expect(result).to be_truthy
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
context 'when has not' do
|
|
51
|
+
let(:action_name) { 'index' }
|
|
52
|
+
|
|
53
|
+
it 'should return false' do
|
|
54
|
+
expect(result).to be_falsey
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
end
|
|
61
|
+
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::Entities::Resource, type: :entity, fast: true do
|
|
4
|
+
|
|
5
|
+
describe '#build_correct_name' do
|
|
6
|
+
|
|
7
|
+
before { subject.build_correct_name }
|
|
8
|
+
|
|
9
|
+
context 'when pass :full_name as "UsersController"' do
|
|
10
|
+
subject { Arpa::Entities::Resource.new full_name: 'UsersController' }
|
|
11
|
+
|
|
12
|
+
it 'full_name should be "UsersController"' do
|
|
13
|
+
expect(subject.full_name).to eql 'UsersController'
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'name should be builded as "users"' do
|
|
17
|
+
expect(subject.name).to eql 'users'
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
context 'when pass :full_name as "Authentication::Someone::UsersController"' do
|
|
22
|
+
subject { Arpa::Entities::Resource.new full_name: 'Authentication::Someone::UsersController' }
|
|
23
|
+
|
|
24
|
+
it 'full_name should be "Authentication::Someone::UsersController"' do
|
|
25
|
+
expect(subject.full_name).to eql 'Authentication::Someone::UsersController'
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'name should be builded as "authentication/someone/users"' do
|
|
29
|
+
expect(subject.name).to eql 'authentication/someone/users'
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Arpa::Repositories::Actions::Finder, type: :repository, slow: true do
|
|
4
|
+
|
|
5
|
+
let(:resource_record) { create :repository_resource, :user }
|
|
6
|
+
let(:action_record_001) { create :repository_action, :index, resource: resource_record }
|
|
7
|
+
let(:action_record_002) { create :repository_action, :show, resource: resource_record}
|
|
8
|
+
|
|
9
|
+
before do
|
|
10
|
+
action_record_001
|
|
11
|
+
action_record_002
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
describe '#by_name_and_resource' do
|
|
15
|
+
|
|
16
|
+
context 'when exist with the params' do
|
|
17
|
+
|
|
18
|
+
let(:result) { subject.by_name_and_resource('index', resource_record) }
|
|
19
|
+
|
|
20
|
+
it 'should return a resource with name "index"' do
|
|
21
|
+
expect(result.name).to eql 'index'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'the result should be an instance of Arpa::Entities::Action' do
|
|
25
|
+
expect(result).to be_an Arpa::Entities::Action
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
context 'when nonexist with the params' do
|
|
30
|
+
|
|
31
|
+
let(:result) { subject.by_name_and_resource('nonexist_action', resource_record) }
|
|
32
|
+
|
|
33
|
+
it 'the result should return nil' do
|
|
34
|
+
expect(result).to be_nil
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|