Prior to this commit, we had a copy of the ability_spec.rb. That
Knapsack copy looks to have less coverage than the Hyku version. And I
found the diff of ability spec before commit to be a bit confusing.
To see what would change I copied Hyku's spec over which is present in
the diff Comparing full changes when copying Hyku's ability spec to Knapsack
My preference would be do have an ability_decorator_spec to highlight if
and how the abilities of this are different.
Regardless, I'm removing the spec for now.
diff of ability spec before commit
```
❯ diff spec/models/ability_spec.rb hyrax-webapp/spec/models/ability_spec.rb
56,57c56,61
< describe 'an administrative user' do
< let(:user) { FactoryBot.create(:admin) }
---
> describe 'an ordinary user with a role on this tenant' do
> let(:user) do
> u = FactoryBot.create(:user)
> u.add_role(:depositor)
> u
> end
61c65
< it { is_expected.to be_able_to(:manage, Site) }
---
> it { is_expected.not_to be_able_to(:manage, Site) }
66,67c70,71
< it "has the admin group" do
< expect(subject).to include 'admin'
---
> it "does have the registered group" do
> expect(subject).to include 'registered'
68a73,76
>
> it "does not have the admin group" do
> expect(subject).not_to include 'admin'
> end
71a80,87
> describe 'an administrative user' do
> let(:user) { FactoryBot.create(:admin) }
>
> it { is_expected.not_to be_able_to(:manage, :all) }
> it { is_expected.not_to be_able_to(:manage, Account) }
> it { is_expected.to be_able_to(:manage, Site) }
> end
>
76a93,191
>
> # Brought over from blacklight-access_controls v0.6.2
> describe '#user_groups' do
> subject { ability.user_groups }
>
> context 'an admin user' do
> let(:user) { FactoryBot.create(:admin) }
>
> it { is_expected.to contain_exactly('admin', 'registered', 'public') }
> end
>
> # NOTE(bkiahstroud): Override to test guest users instead of
> # "unregistered" (User.new) users; see User#add_default_group_membership!
> context 'a guest user' do
> let(:user) { create(:guest_user) }
>
> it { is_expected.to contain_exactly('public') }
> end
>
> context 'a registered user' do
> let(:user) { create(:user) }
>
> it { is_expected.to contain_exactly('registered', 'public') }
> end
>
> # NOTE(bkiahstroud): Override test to create Hyrax::Groups
> # that the user is a member of.
> context 'a user with groups' do
> let(:user) { create(:user) }
>
> before do
> create(:group, name: 'group1', member_users: [user])
> create(:group, name: 'group2', member_users: [user])
> end
>
> it { is_expected.to include('group1', 'group2') }
> end
> end
>
> describe '#admin?' do
> subject { ability.admin? }
>
> context 'a user with the admin role' do
> let(:user) { create(:admin) }
>
> it { is_expected.to eq(true) }
> end
>
> context 'a user in the admin Hyrax::Group' do
> let(:user) { create(:user) }
>
> before do
> create(:admin_group, member_users: [user])
> end
>
> it { is_expected.to eq(true) }
> end
>
> context 'a user without the admin role' do
> let(:user) { create(:user) }
>
> it { is_expected.to eq(false) }
> end
>
> context 'a user not in the admin Hyrax::Group' do
> let(:user) { create(:user) }
>
> before do
> create(:group, name: 'non-admin', member_users: [user])
> end
>
> it { is_expected.to eq(false) }
> end
> end
>
> describe '#all_user_and_group_roles' do
> let(:user) { create(:user) }
> let(:user_reader_role) { create(:role, :user_reader) }
> let(:collection_editor_role) { create(:role, :collection_editor) }
> let(:work_depositor_role) { create(:role, :work_depositor) }
>
> before do
> user.add_role(user_reader_role.name, Site.instance)
> create(
> :group,
> name: 'test_group',
> member_users: [user],
> roles: [collection_editor_role.name, work_depositor_role.name]
> )
> end
>
> it 'lists all role names that apply to the user' do
> expect(subject.all_user_and_group_roles).to contain_exactly(
> user_reader_role.name,
> collection_editor_role.name,
> work_depositor_role.name
> )
> end
> end
```
Comparing full changes when copying Hyku's ability spec to
Knapsack
```
diff --git a/spec/models/ability_spec.rb b/spec/models/ability_spec.rb
index 424f6bc..ca8a439 100644
--- a/spec/models/ability_spec.rb
+++ b/spec/models/ability_spec.rb
@@ -53,20 +53,36 @@
end
end
+ describe 'an ordinary user with a role on this tenant' do
+ let(:user) do
+ u = FactoryBot.create(:user)
+ u.add_role(:depositor)
+ u
+ end
+
+ it { is_expected.not_to be_able_to(:manage, :all) }
+ it { is_expected.not_to be_able_to(:manage, Account) }
+ it { is_expected.not_to be_able_to(:manage, Site) }
+
+ describe "#user_groups" do
+ subject { ability.user_groups }
+
+ it "does have the registered group" do
+ expect(subject).to include 'registered'
+ end
+
+ it "does not have the admin group" do
+ expect(subject).not_to include 'admin'
+ end
+ end
+ end
+
describe 'an administrative user' do
let(:user) { FactoryBot.create(:admin) }
it { is_expected.not_to be_able_to(:manage, :all) }
it { is_expected.not_to be_able_to(:manage, Account) }
it { is_expected.to be_able_to(:manage, Site) }
-
- describe "#user_groups" do
- subject { ability.user_groups }
-
- it "has the admin group" do
- expect(subject).to include 'admin'
- end
- end
end
describe 'a superadmin user' do
@@ -74,4 +90,103 @@
it { is_expected.to be_able_to(:manage, :all) }
end
+
+ # Brought over from blacklight-access_controls v0.6.2
+ describe '#user_groups' do
+ subject { ability.user_groups }
+
+ context 'an admin user' do
+ let(:user) { FactoryBot.create(:admin) }
+
+ it { is_expected.to contain_exactly('admin', 'registered', 'public') }
+ end
+
+ # NOTE(bkiahstroud): Override to test guest users instead of
+ # "unregistered" (User.new) users; see User#add_default_group_membership!
+ context 'a guest user' do
+ let(:user) { create(:guest_user) }
+
+ it { is_expected.to contain_exactly('public') }
+ end
+
+ context 'a registered user' do
+ let(:user) { create(:user) }
+
+ it { is_expected.to contain_exactly('registered', 'public') }
+ end
+
+ # NOTE(bkiahstroud): Override test to create Hyrax::Groups
+ # that the user is a member of.
+ context 'a user with groups' do
+ let(:user) { create(:user) }
+
+ before do
+ create(:group, name: 'group1', member_users: [user])
+ create(:group, name: 'group2', member_users: [user])
+ end
+
+ it { is_expected.to include('group1', 'group2') }
+ end
+ end
+
+ describe '#admin?' do
+ subject { ability.admin? }
+
+ context 'a user with the admin role' do
+ let(:user) { create(:admin) }
+
+ it { is_expected.to eq(true) }
+ end
+
+ context 'a user in the admin Hyrax::Group' do
+ let(:user) { create(:user) }
+
+ before do
+ create(:admin_group, member_users: [user])
+ end
+
+ it { is_expected.to eq(true) }
+ end
+
+ context 'a user without the admin role' do
+ let(:user) { create(:user) }
+
+ it { is_expected.to eq(false) }
+ end
+
+ context 'a user not in the admin Hyrax::Group' do
+ let(:user) { create(:user) }
+
+ before do
+ create(:group, name: 'non-admin', member_users: [user])
+ end
+
+ it { is_expected.to eq(false) }
+ end
+ end
+
+ describe '#all_user_and_group_roles' do
+ let(:user) { create(:user) }
+ let(:user_reader_role) { create(:role, :user_reader) }
+ let(:collection_editor_role) { create(:role, :collection_editor) }
+ let(:work_depositor_role) { create(:role, :work_depositor) }
+
+ before do
+ user.add_role(user_reader_role.name, Site.instance)
+ create(
+ :group,
+ name: 'test_group',
+ member_users: [user],
+ roles: [collection_editor_role.name, work_depositor_role.name]
+ )
+ end
+
+ it 'lists all role names that apply to the user' do
+ expect(subject.all_user_and_group_roles).to contain_exactly(
+ user_reader_role.name,
+ collection_editor_role.name,
+ work_depositor_role.name
+ )
+ end
+ end
end
```
Prior to this commit, we had a copy of the ability_spec.rb. That Knapsack copy looks to have less coverage than the Hyku version. And I found the diff of ability spec before commit to be a bit confusing.
To see what would change I copied Hyku's spec over which is present in the diff Comparing full changes when copying Hyku's ability spec to Knapsack
My preference would be do have an ability_decorator_spec to highlight if and how the abilities of this are different.
Regardless, I'm removing the spec for now.
diff of ability spec before commit
``` ❯ diff spec/models/ability_spec.rb hyrax-webapp/spec/models/ability_spec.rb 56,57c56,61 < describe 'an administrative user' do < let(:user) { FactoryBot.create(:admin) } --- > describe 'an ordinary user with a role on this tenant' do > let(:user) do > u = FactoryBot.create(:user) > u.add_role(:depositor) > u > end 61c65 < it { is_expected.to be_able_to(:manage, Site) } --- > it { is_expected.not_to be_able_to(:manage, Site) } 66,67c70,71 < it "has the admin group" do < expect(subject).to include 'admin' --- > it "does have the registered group" do > expect(subject).to include 'registered' 68a73,76 > > it "does not have the admin group" do > expect(subject).not_to include 'admin' > end 71a80,87 > describe 'an administrative user' do > let(:user) { FactoryBot.create(:admin) } > > it { is_expected.not_to be_able_to(:manage, :all) } > it { is_expected.not_to be_able_to(:manage, Account) } > it { is_expected.to be_able_to(:manage, Site) } > end > 76a93,191 > > # Brought over from blacklight-access_controls v0.6.2 > describe '#user_groups' do > subject { ability.user_groups } > > context 'an admin user' do > let(:user) { FactoryBot.create(:admin) } > > it { is_expected.to contain_exactly('admin', 'registered', 'public') } > end > > # NOTE(bkiahstroud): Override to test guest users instead of > # "unregistered" (User.new) users; see User#add_default_group_membership! > context 'a guest user' do > let(:user) { create(:guest_user) } > > it { is_expected.to contain_exactly('public') } > end > > context 'a registered user' do > let(:user) { create(:user) } > > it { is_expected.to contain_exactly('registered', 'public') } > end > > # NOTE(bkiahstroud): Override test to create Hyrax::Groups > # that the user is a member of. > context 'a user with groups' do > let(:user) { create(:user) } > > before do > create(:group, name: 'group1', member_users: [user]) > create(:group, name: 'group2', member_users: [user]) > end > > it { is_expected.to include('group1', 'group2') } > end > end > > describe '#admin?' do > subject { ability.admin? } > > context 'a user with the admin role' do > let(:user) { create(:admin) } > > it { is_expected.to eq(true) } > end > > context 'a user in the admin Hyrax::Group' do > let(:user) { create(:user) } > > before do > create(:admin_group, member_users: [user]) > end > > it { is_expected.to eq(true) } > end > > context 'a user without the admin role' do > let(:user) { create(:user) } > > it { is_expected.to eq(false) } > end > > context 'a user not in the admin Hyrax::Group' do > let(:user) { create(:user) } > > before do > create(:group, name: 'non-admin', member_users: [user]) > end > > it { is_expected.to eq(false) } > end > end > > describe '#all_user_and_group_roles' do > let(:user) { create(:user) } > let(:user_reader_role) { create(:role, :user_reader) } > let(:collection_editor_role) { create(:role, :collection_editor) } > let(:work_depositor_role) { create(:role, :work_depositor) } > > before do > user.add_role(user_reader_role.name, Site.instance) > create( > :group, > name: 'test_group', > member_users: [user], > roles: [collection_editor_role.name, work_depositor_role.name] > ) > end > > it 'lists all role names that apply to the user' do > expect(subject.all_user_and_group_roles).to contain_exactly( > user_reader_role.name, > collection_editor_role.name, > work_depositor_role.name > ) > end > end ```Comparing full changes when copying Hyku's ability spec to Knapsack
``` diff --git a/spec/models/ability_spec.rb b/spec/models/ability_spec.rb index 424f6bc..ca8a439 100644 --- a/spec/models/ability_spec.rb +++ b/spec/models/ability_spec.rb @@ -53,20 +53,36 @@ end end + describe 'an ordinary user with a role on this tenant' do + let(:user) do + u = FactoryBot.create(:user) + u.add_role(:depositor) + u + end + + it { is_expected.not_to be_able_to(:manage, :all) } + it { is_expected.not_to be_able_to(:manage, Account) } + it { is_expected.not_to be_able_to(:manage, Site) } + + describe "#user_groups" do + subject { ability.user_groups } + + it "does have the registered group" do + expect(subject).to include 'registered' + end + + it "does not have the admin group" do + expect(subject).not_to include 'admin' + end + end + end + describe 'an administrative user' do let(:user) { FactoryBot.create(:admin) } it { is_expected.not_to be_able_to(:manage, :all) } it { is_expected.not_to be_able_to(:manage, Account) } it { is_expected.to be_able_to(:manage, Site) } - - describe "#user_groups" do - subject { ability.user_groups } - - it "has the admin group" do - expect(subject).to include 'admin' - end - end end describe 'a superadmin user' do @@ -74,4 +90,103 @@ it { is_expected.to be_able_to(:manage, :all) } end + + # Brought over from blacklight-access_controls v0.6.2 + describe '#user_groups' do + subject { ability.user_groups } + + context 'an admin user' do + let(:user) { FactoryBot.create(:admin) } + + it { is_expected.to contain_exactly('admin', 'registered', 'public') } + end + + # NOTE(bkiahstroud): Override to test guest users instead of + # "unregistered" (User.new) users; see User#add_default_group_membership! + context 'a guest user' do + let(:user) { create(:guest_user) } + + it { is_expected.to contain_exactly('public') } + end + + context 'a registered user' do + let(:user) { create(:user) } + + it { is_expected.to contain_exactly('registered', 'public') } + end + + # NOTE(bkiahstroud): Override test to create Hyrax::Groups + # that the user is a member of. + context 'a user with groups' do + let(:user) { create(:user) } + + before do + create(:group, name: 'group1', member_users: [user]) + create(:group, name: 'group2', member_users: [user]) + end + + it { is_expected.to include('group1', 'group2') } + end + end + + describe '#admin?' do + subject { ability.admin? } + + context 'a user with the admin role' do + let(:user) { create(:admin) } + + it { is_expected.to eq(true) } + end + + context 'a user in the admin Hyrax::Group' do + let(:user) { create(:user) } + + before do + create(:admin_group, member_users: [user]) + end + + it { is_expected.to eq(true) } + end + + context 'a user without the admin role' do + let(:user) { create(:user) } + + it { is_expected.to eq(false) } + end + + context 'a user not in the admin Hyrax::Group' do + let(:user) { create(:user) } + + before do + create(:group, name: 'non-admin', member_users: [user]) + end + + it { is_expected.to eq(false) } + end + end + + describe '#all_user_and_group_roles' do + let(:user) { create(:user) } + let(:user_reader_role) { create(:role, :user_reader) } + let(:collection_editor_role) { create(:role, :collection_editor) } + let(:work_depositor_role) { create(:role, :work_depositor) } + + before do + user.add_role(user_reader_role.name, Site.instance) + create( + :group, + name: 'test_group', + member_users: [user], + roles: [collection_editor_role.name, work_depositor_role.name] + ) + end + + it 'lists all role names that apply to the user' do + expect(subject.all_user_and_group_roles).to contain_exactly( + user_reader_role.name, + collection_editor_role.name, + work_depositor_role.name + ) + end + end end ```Related to: