Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/bestpractical/rt.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 't/customroles/web-assets.t')
-rw-r--r--t/customroles/web-assets.t279
1 files changed, 279 insertions, 0 deletions
diff --git a/t/customroles/web-assets.t b/t/customroles/web-assets.t
new file mode 100644
index 0000000000..0d236aaf06
--- /dev/null
+++ b/t/customroles/web-assets.t
@@ -0,0 +1,279 @@
+use strict;
+use warnings;
+use RT::Test::Assets tests => undef;
+my ($baseurl, $m) = RT::Test::Assets->started_ok;
+ok $m->login, "Logged in agent";
+
+
+my $catalog = create_catalog( Name => "Software" );
+ok $catalog->id, "Created Catalog";
+
+my $owner = RT::Test->load_or_create_user(Name => 'owner', EmailAddress => 'owner@example.com');
+my $licensee = RT::Test->load_or_create_user(Name => 'licensee@example.com', EmailAddress => 'licensee@example.com', Password => 'password');
+
+my $role;
+my ($asset, $asset2, $asset3);
+
+diag "Create custom role and apply it to General assets";
+{
+ $m->follow_link_ok({ id => "admin-custom-roles-create" }, "Custom Role create link");
+ $m->submit_form_ok({
+ with_fields => {
+ Name => 'Licensee',
+ Description => 'The person who licensed the software',
+ LookupType => RT::Asset->CustomFieldLookupType,
+ EntryHint => 'Make sure user has real name set',
+ },
+ }, "submitted create form");
+ $m->text_like(qr/Custom role created/, "Found created message");
+ my ($id) = $m->uri =~ /id=(\d+)/;
+ ok($id, 'Got role id');
+
+ $role = RT::CustomRole->new(RT->SystemUser);
+ $role->Load($id);
+ is $role->id, $id, "id matches";
+ is $role->Name, "Licensee", "Name matches";
+ is $role->Description, "The person who licensed the software", "Description matches";
+ is $role->LookupType, RT::Asset->CustomFieldLookupType, "LookupType matches";
+ is $role->EntryHint, "Make sure user has real name set", "EntryHint matches";
+
+ ok(!$role->IsAdded($catalog->Id), 'not added to catalog yet');
+
+ $m->follow_link_ok({ id => "page-applies-to" }, "Applies to link");
+ $m->submit_form_ok({
+ with_fields => {
+ ("AddRole-" . $id) => $catalog->Id,
+ },
+ button => 'Update',
+ }, "submitted applies to form");
+ $m->text_contains('Licensee added to queue Software', "Found update message");
+
+ # refresh cache
+ RT::CustomRoles->RegisterRoles;
+
+ ok($role->IsAdded($catalog->Id), 'added to catalog now');
+ is_deeply([sort $catalog->Roles], [sort 'Contact', 'HeldBy', 'Owner', $role->GroupType], '->Roles');
+}
+
+diag "Create asset with custom role";
+{
+ $m->follow_link_ok({ id => "assets-create" }, "Asset create link");
+ $m->submit_form_ok({ with_fields => { Catalog => $catalog->id, CatalogChanged => 1 } }, "Picked a catalog");
+ $m->text_contains('Licensee', 'custom role name');
+ $m->content_contains('Make sure user has real name set', 'custom role entry hint');
+
+ $m->submit_form_ok({
+ with_fields => {
+ id => 'new',
+ Name => 'Some Software',
+ Owner => 'owner@example.com',
+ $role->GroupType => 'licensee@example.com',
+ },
+ }, "submitted create form");
+ $m->text_like(qr/Asset .* created/, "Found created message");
+ my ($id) = $m->uri =~ /id=(\d+)/;
+
+ $asset = RT::Asset->new( RT->SystemUser );
+ $asset->Load($id);
+ is $asset->id, $id, "id matches";
+ is $asset->Name, "Some Software", "Name matches";
+ is $asset->Owner->EmailAddress, 'owner@example.com', "Owner matches";
+ is $asset->RoleAddresses($role->GroupType), 'licensee@example.com', "Licensee matches";
+}
+
+diag "Grant permissions on Licensee";
+{
+ $m->follow_link_ok({ id => "admin-assets-catalogs-select" }, "Admin assets");
+ $m->follow_link_ok({ text => 'Software' }, "Picked a catalog");
+ $m->follow_link_ok({ id => 'page-group-rights' }, "Group rights");
+
+ $m->text_contains('Licensee', 'role group name');
+
+ my $acl_id = $catalog->RoleGroup($role->GroupType)->Id;
+
+ $m->form_name('ModifyGroupRights');
+ $m->tick("SetRights-" . $acl_id . '-RT::Catalog-' . $catalog->id, 'ShowAsset');
+ $m->tick("SetRights-" . $acl_id . '-RT::Catalog-' . $catalog->id, 'ShowCatalog');
+ $m->submit;
+ $m->text_contains("Granted right 'ShowAsset' to Licensee");
+ $m->text_contains("Granted right 'ShowCatalog' to Licensee");
+
+ RT::Principal::InvalidateACLCache();
+}
+
+diag "Create asset without custom role";
+{
+ $m->follow_link_ok({ id => "assets-create" }, "Asset create link");
+ $m->submit_form_ok({ with_fields => { Catalog => $catalog->id, CatalogChanged => 1 } }, "Picked a catalog");
+ $m->text_contains('Licensee', 'custom role name');
+ $m->content_contains('Make sure user has real name set', 'custom role entry hint');
+
+ $m->submit_form_ok({
+ with_fields => {
+ id => 'new',
+ Name => 'More Software',
+ Owner => 'owner@example.com',
+ },
+ }, "submitted create form");
+ $m->text_like(qr/Asset .* created/, "Found created message");
+ my ($id) = $m->uri =~ /id=(\d+)/;
+
+ $asset2 = RT::Asset->new( RT->SystemUser );
+ $asset2->Load($id);
+ is $asset2->id, $id, "id matches";
+ is $asset2->Name, "More Software", "Name matches";
+ is $asset2->Owner->EmailAddress, 'owner@example.com', "Owner matches";
+ is $asset2->RoleAddresses($role->GroupType), '', "No Licensee";
+}
+
+diag "Search by custom role";
+{
+ $m->follow_link_ok({ id => "assets-simple_search" }, "Asset simple search link");
+ $m->submit_form_ok({ with_fields => { Catalog => $catalog->Id } }, "Picked a catalog");
+ $m->submit_form_ok({
+ with_fields => {
+ 'Role.' . $role->GroupType => 'licensee@example.com',
+ },
+ button => 'SearchAssets',
+ }, "Search by role");
+
+ $m->text_contains('Some Software', 'search hit');
+ $m->text_lacks('More Software', 'search miss');
+
+ $m->submit_form_ok({
+ with_fields => {
+ 'Role.' . $role->GroupType => '',
+ '!Role.' . $role->GroupType => 'licensee@example.com',
+ },
+ button => 'SearchAssets',
+ }, "Search by role");
+
+ $m->text_lacks('Some Software', 'search miss');
+ $m->text_contains('More Software', 'search hit');
+}
+
+diag "Search by custom role";
+{
+ $m->follow_link_ok({ id => "assets-search" }, "Asset search link");
+ $m->submit_form_ok({ with_fields => { ValueOfCatalog => $catalog->Id }, button => 'AddClause' }, "Picked a catalog");
+
+ my $form = $m->form_name('BuildQuery');
+ my @watcher_options = ( '', qw/Owner HeldBy Contact CustomRole.{Licensee}/ );
+ is_deeply( [ $form->find_input('WatcherField')->possible_values ], \@watcher_options, 'WatcherField options' );
+
+ $m->submit_form_ok({
+ with_fields => {
+ WatcherField => 'CustomRole.{Licensee}',
+ ValueOfWatcher => 'licensee@example.com',
+ },
+ button => 'DoSearch',
+ }, "Search by role");
+
+ $m->text_contains('Some Software', 'search hit');
+ $m->text_lacks('More Software', 'search miss');
+
+ $m->follow_link_ok({ id => "assets-search" }, "Asset search link");
+ $m->submit_form_ok({ with_fields => { ValueOfCatalog => $catalog->Id }, button => 'AddClause' }, "Picked a catalog");
+ $m->submit_form_ok({
+ with_fields => {
+ WatcherField => 'CustomRole.{Licensee}',
+ ValueOfWatcher => 'licensee@example.com',
+ WatcherOp => 'NOT LIKE',
+ },
+ button => 'DoSearch',
+ }, "Search by role");
+
+ $m->text_lacks('Some Software', 'search miss');
+ $m->text_contains('More Software', 'search hit');
+}
+
+diag "Test permissions on Licensee";
+{
+ $m->logout;
+ $m->login('licensee@example.com', 'password');
+
+ $m->get_ok("$baseurl/Asset/Display.html?id=".$asset->Id);
+ $m->text_contains('Some Software', 'asset name shows on page');
+ $m->text_contains('Licensee', 'role name shows on page');
+
+ $m->get_ok("$baseurl/Asset/Display.html?id=".$asset2->Id);
+ $m->text_lacks('More Software', 'asset name does not show on page');
+ $m->text_lacks('Licensee', 'role name does not show on page');
+ $m->text_contains("You don't have permission to view this asset.");
+ $m->warning_like( qr/You don't have permission to view this asset/, 'got warning' );
+}
+
+$m->logout;
+$m->login; # log back in as root
+
+diag "Disable role";
+{
+ $m->follow_link_ok({ id => "admin-custom-roles-select" }, "Custom Role select link");
+ $m->follow_link_ok({ text => 'Licensee' }, "Picked a custom role");
+ $m->submit_form_ok({
+ with_fields => {
+ Enabled => 0,
+ },
+ }, "submitted update form");
+ $m->text_contains('Custom role disabled');
+
+ # refresh cache
+ RT::CustomRoles->RegisterRoles;
+
+ $role->Load($role->Id);
+ is $role->Name, "Licensee", "Name matches";
+ ok $role->Disabled, "now disabled";
+
+ my $catalog_id = $catalog->Id;
+ $catalog = RT::Catalog->new( RT->SystemUser );
+ $catalog->Load($catalog_id);
+ is_deeply([sort $catalog->Roles], [sort 'Contact', 'HeldBy', 'Owner'], '->Roles no longer includes Licensee');
+}
+
+diag "Test permissions on Licensee";
+{
+ $m->logout;
+ $m->login('licensee@example.com', 'password');
+
+ $m->get_ok("$baseurl/Asset/Display.html?id=".$asset->Id);
+ $m->text_lacks('Some Software', 'asset name does not show on page');
+ $m->text_lacks('Licensee', 'role name does not show on page');
+ $m->text_contains("You don't have permission to view this asset.");
+ $m->warning_like( qr/You don't have permission to view this asset/, 'got warning' );
+
+ $m->get_ok("$baseurl/Asset/Display.html?id=".$asset2->Id);
+ $m->text_lacks('More Software', 'asset name does not show on page');
+ $m->text_lacks('Licensee', 'role name does not show on page');
+ $m->text_contains("You don't have permission to view this asset.");
+ $m->warning_like( qr/You don't have permission to view this asset/, 'got warning' );
+}
+
+$m->logout;
+$m->login; # log back in as root
+
+diag "Create asset with disabled custom role";
+{
+ $m->follow_link_ok({ id => "assets-create" }, "Asset create link");
+ $m->submit_form_ok({ with_fields => { Catalog => $catalog->id, CatalogChanged => 1 } }, "Picked a catalog");
+ $m->text_lacks('Licensee', 'custom role name');
+ $m->text_lacks('Make sure user has real name set', 'custom role entry hint');
+
+ $m->submit_form_ok({
+ with_fields => {
+ id => 'new',
+ Name => 'All Software',
+ Owner => 'owner@example.com',
+ },
+ }, "submitted create form");
+ $m->text_like(qr/Asset .* created/, "Found created message");
+ my ($id) = $m->uri =~ /id=(\d+)/;
+
+ $asset3 = RT::Asset->new( RT->SystemUser );
+ $asset3->Load($id);
+ is $asset3->id, $id, "id matches";
+ is $asset3->Name, "All Software", "Name matches";
+ is $asset3->Owner->EmailAddress, 'owner@example.com', "Owner matches";
+ is $asset3->RoleAddresses($role->GroupType), '', "No Licensee";
+}
+
+done_testing;