def test_positive_list_filters_with_pagination(self, make_role_with_permissions, per_page): """Make sure filters list can be displayed with different items per page value :id: b9c7c6c1-70c2-4d7f-8d36-fa8613acc865 :BZ: 1428516 :expectedresults: `per-page` correctly sets amount of items displayed per page, different `per-page` values divide a list into correct number of pages :CaseImportance: Critical :parametrized: yes """ # Verify the first page contains exactly the same items count # as `per-page` value filters = Role.filters( {'name': make_role_with_permissions['role']['name'], 'per-page': per_page} ) assert len(filters) == per_page # Verify pagination and total amount of pages by checking the # items count on the last page last_page = ceil(len(make_role_with_permissions['permissions']) / per_page) filters = Role.filters( { 'name': make_role_with_permissions['role']['name'], 'page': last_page, 'per-page': per_page, } ) assert len(filters) == ( len(make_role_with_permissions['permissions']) % per_page or per_page )
def test_positive_list_filters_with_pagination(self): """Make sure filters list can be displayed with different items per page value :id: b9c7c6c1-70c2-4d7f-8d36-fa8613acc865 :BZ: 1428516 :expectedresults: `per-page` correctly sets amount of items displayed per page, different `per-page` values divide a list into correct number of pages :CaseImportance: Critical """ role = make_role() res_types = iter(PERMISSIONS.keys()) permissions = [] # Collect more than 20 different permissions while len(permissions) <= 20: permissions += [ permission['name'] for permission in Filter.available_permissions( {'resource-type': next(res_types)}) ] # Create a filter for each permission for perm in permissions: make_filter({ 'role': role['name'], 'permissions': perm, }) # Test different `per-page` values for per_page in (1, 5, 20): with self.subTest(per_page): # Verify the first page contains exactly the same items count # as `per-page` value filters = Role.filters({ 'name': role['name'], 'per-page': per_page, }) self.assertEqual(len(filters), per_page) # Verify pagination and total amount of pages by checking the # items count on the last page last_page = (len(permissions) / per_page + int(len(permissions) % per_page != 0)) filters = Role.filters({ 'name': role['name'], 'page': last_page, 'per-page': per_page, }) self.assertEqual( len(filters), len(permissions) % per_page or per_page)
def test_positive_list_filters_with_pagination(self): """Make sure filters list can be displayed with different items per page value :id: b9c7c6c1-70c2-4d7f-8d36-fa8613acc865 :BZ: 1428516 :expectedresults: `per-page` correctly sets amount of items displayed per page, different `per-page` values divide a list into correct number of pages :CaseImportance: Critical """ role = make_role() res_types = iter(PERMISSIONS.keys()) permissions = [] # Collect more than 20 different permissions while len(permissions) <= 20: permissions += [ permission['name'] for permission in Filter.available_permissions( {'resource-type': next(res_types)}) ] # Create a filter for each permission for perm in permissions: make_filter({ 'role': role['name'], 'permissions': perm, }) # Test different `per-page` values for per_page in (1, 5, 20): with self.subTest(per_page): # Verify the first page contains exactly the same items count # as `per-page` value filters = Role.filters({ 'name': role['name'], 'per-page': per_page, }) self.assertEqual(len(filters), per_page) # Verify pagination and total amount of pages by checking the # items count on the last page last_page = (len(permissions) / per_page + int(len(permissions) % per_page != 0)) filters = Role.filters({ 'name': role['name'], 'page': last_page, 'per-page': per_page, }) self.assertEqual(len(filters), len(permissions) % per_page or per_page)
def test_negative_list_filters_without_parameters(self): """Try to list filter without specifying role id or name :id: 56cafbe0-d1cb-413e-8eac-0e01a3590fd2 :expectedresults: Proper error message is shown instead of SQL error :CaseImportance: Critical :BZ: 1296782 """ with self.assertRaises(CLIReturnCodeError) as err: with self.assertNotRaises(CLIDataBaseError): Role.filters() self.assertRegex(err.exception.msg, 'At least one of options .* is required')
def test_positive_create_with_permission(self): """Create new role with a set of permission :id: 7cb2b2e2-ad4d-41e9-b6b2-c0366eb09b9a :expectedresults: Role is created and has correct set of permissions :CaseImportance: Critical """ role = make_role() # Pick permissions by its resource type permissions = [ permission['name'] for permission in Filter.available_permissions( {'resource-type': 'Organization'}) ] # Assign filter to created role make_filter({ 'role-id': role['id'], 'permissions': permissions, }) self.assertEqual( Role.filters({'id': role['id']})[0]['permissions'], permissions )
def test_negative_list_filters_without_parameters(self): """Try to list filter without specifying role id or name :id: 56cafbe0-d1cb-413e-8eac-0e01a3590fd2 :expectedresults: Proper error message is shown instead of SQL error :CaseImportance: Critical :BZ: 1296782 """ with self.assertRaises(CLIReturnCodeError) as err: with self.assertNotRaises(CLIDataBaseError): Role.filters() self.assertRegex( err.exception.msg, 'At least one of options .* is required')
def test_negative_list_filters_without_parameters(self): """Try to list filter without specifying role id or name :id: 56cafbe0-d1cb-413e-8eac-0e01a3590fd2 :expectedresults: Proper error message is shown instead of SQL error :CaseImportance: Critical :BZ: 1296782 """ with pytest.raises(CLIReturnCodeError) as err: try: Role.filters() except CLIDataBaseError as err: pytest.fail(err) assert re.search('At least one of options .* is required', err.value.msg)
def test_positive_list_filters_by_id(self): """Create new role with a filter and list it by role id :id: 6979ad8d-629b-481e-9d3a-8f3b3bca53f9 :expectedresults: Filter is listed for specified role :CaseImportance: Critical """ role = make_role() # Pick permissions by its resource type permissions = [ permission['name'] for permission in Filter.available_permissions({"search": "resource_type=Organization"}) ] # Assign filter to created role filter_ = make_filter({'role-id': role['id'], 'permissions': permissions}) assert role['name'] == filter_['role'] assert Role.filters({'id': role['id']})[0]['id'] == filter_['id']
def test_positive_list_filters_by_name(self): """Create new role with a filter and list it by role name :id: bbcb3982-f484-4dde-a3ea-7145fd28ab1f :expectedresults: Filter is listed for specified role :CaseImportance: Critical """ role = make_role() # Pick permissions by its resource type permissions = [ permission['name'] for permission in Filter.available_permissions({"search": "resource_type=Organization"}) ] # Assign filter to created role filter_ = make_filter({'role': role['name'], 'permissions': permissions}) assert role['name'] == filter_['role'] assert Role.filters({'name': role['name']})[0]['id'] == filter_['id']
def test_positive_list_filters_by_name(self): """Create new role with a filter and list it by role name :id: bbcb3982-f484-4dde-a3ea-7145fd28ab1f :expectedresults: Filter is listed for specified role :CaseImportance: Critical """ role = make_role() # Pick permissions by its resource type permissions = [ permission['name'] for permission in Filter.available_permissions( {'resource-type': 'Organization'}) ] # Assign filter to created role filter_ = make_filter({ 'role': role['name'], 'permissions': permissions, }) self.assertEqual(role['name'], filter_['role']) self.assertEqual( Role.filters({'name': role['name']})[0]['id'], filter_['id'])
def test_positive_list_filters_by_id(self): """Create new role with a filter and list it by role id :id: 6979ad8d-629b-481e-9d3a-8f3b3bca53f9 :expectedresults: Filter is listed for specified role :CaseImportance: Critical """ role = make_role() # Pick permissions by its resource type permissions = [ permission['name'] for permission in Filter.available_permissions( {'resource-type': 'Organization'}) ] # Assign filter to created role filter_ = make_filter({ 'role-id': role['id'], 'permissions': permissions, }) self.assertEqual(role['name'], filter_['role']) self.assertEqual( Role.filters({'id': role['id']})[0]['id'], filter_['id'])
def test_system_admin_role_end_to_end(self): """Test System admin role with a end to end workflow :id: da6b3549-d1cf-44fc-869f-08d15d407fa2 :steps: 1. Create a System admin role user1 2. Login with the user1 and change global settings "Out of sync interval" to 31 3. Create user2 with system admin role 4. Login with user2 to create a Organization 5. Clone a Org-admin role 6. Edit the Architecture Filter and search name = x86_64 7. Create a User with Cloned Org admin 8. Login with user. :expectedresults: 1. User should be assigned with System Admin role. 2. User with sys admin role should be able to update settings 3. User with sys admin role should be able to create users and assign Organizations to them. 4. System Admin role should be able to create Organization admins 5. User with sys admin role should be able to edit filters on roles :CaseLevel: System """ org = make_org() location = make_location() common_pass = gen_string('alpha') role = Role.info({'name': 'System admin'}) system_admin_1 = make_user( { 'password': common_pass, 'organization-ids': org['id'], 'location-ids': location['id'], } ) User.add_role({'id': system_admin_1['id'], 'role-id': role['id']}) Settings.with_user(username=system_admin_1['login'], password=common_pass).set( {'name': "outofsync_interval", 'value': "32"} ) sync_time = Settings.list({'search': 'name=outofsync_interval'})[0] # Asserts if the setting was updated successfully assert '32' == sync_time['value'] # Create another System Admin user using the first one system_admin = User.with_user( username=system_admin_1['login'], password=common_pass ).create( { 'auth-source-id': 1, 'firstname': gen_string('alpha'), 'lastname': gen_string('alpha'), 'login': gen_string('alpha'), 'mail': '{}@example.com'.format(gen_string('alpha')), 'password': common_pass, 'organizations': org['name'], 'role-ids': role['id'], 'locations': location['name'], } ) # Create the Org Admin user org_role = Role.with_user(username=system_admin['login'], password=common_pass).clone( { 'name': 'Organization admin', 'new-name': gen_string('alpha'), 'organization-ids': org['id'], 'location-ids': location['id'], } ) org_admin = User.with_user(username=system_admin['login'], password=common_pass).create( { 'auth-source-id': 1, 'firstname': gen_string('alpha'), 'lastname': gen_string('alpha'), 'login': gen_string('alpha'), 'mail': '{}@example.com'.format(gen_string('alpha')), 'password': common_pass, 'organizations': org['name'], 'role-ids': org_role['id'], 'location-ids': location['id'], } ) # Assert if the cloning was successful assert org_role['id'] is not None org_role_filters = Role.filters({'id': org_role['id']}) search_filter = None for arch_filter in org_role_filters: if arch_filter['resource-type'] == 'Architecture': search_filter = arch_filter break Filter.with_user(username=system_admin['login'], password=common_pass).update( {'role-id': org_role['id'], 'id': arch_filter['id'], 'search': 'name=x86_64'} ) # Asserts if the filter is updated assert 'name=x86_64' in Filter.info({'id': search_filter['id']}).values() org_admin = User.with_user(username=system_admin['login'], password=common_pass).info( {'id': org_admin['id']} ) # Asserts Created Org Admin assert org_role['name'] in org_admin['roles'] assert org['name'] in org_admin['organizations']
def test_system_admin_role_end_to_end(self): """Test System admin role with a end to end workflow :id: da6b3549-d1cf-44fc-869f-08d15d407fa2 :steps: 1. Create a System admin role user1 2. Login with the user1 and change global settings "Out of sync interval" to 31 3. Create user2 with system admin role 4. Login with user2 to create a Organization 5. Clone a Org-admin role 6. Edit the Architecture Filter and search name = x86_64 7. Create a User with Cloned Org admin 8. Login with user. :expectedresults: 1. User should be assigned with System Admin role. 2. User with sys admin role should be able to update settings 3. User with sys admin role should be able to create users and assign Organizations to them. 4. System Admin role should be able to create Organization admins 5. User with sys admin role should be able to edit filters on roles :CaseLevel: System """ org = make_org() location = make_location() common_pass = gen_string('alpha') role = Role.info({'name': 'System admin'}) system_admin_1 = make_user({ 'password': common_pass, 'organization-ids': org['id'], 'location-ids': location['id'] }) User.add_role({ 'id': system_admin_1['id'], 'role-id': role['id'] }) Settings.with_user( username=system_admin_1['login'], password=common_pass).set({ 'name': "outofsync_interval", 'value': "32" }) sync_time = Settings.list({ 'search': 'name=outofsync_interval' })[0] # Asserts if the setting was updated successfully self.assertEqual('32', sync_time['value']) # Create another System Admin user using the first one system_admin = User.with_user( username=system_admin_1['login'], password=common_pass).create({ u'auth-source-id': 1, u'firstname': gen_string('alpha'), u'lastname': gen_string('alpha'), u'login': gen_string('alpha'), u'mail': '{0}@example.com'.format(gen_string('alpha')), u'password': common_pass, u'organizations': org['name'], u'role-ids': role['id'], u'locations': location['name'] }) # Create the Org Admin user org_role = Role.with_user( username=system_admin['login'], password=common_pass).clone({ 'name': 'Organization admin', 'new-name': gen_string('alpha'), 'organization-ids': org['id'], 'location-ids': location['id'] }) org_admin = User.with_user( username=system_admin['login'], password=common_pass).create({ u'auth-source-id': 1, u'firstname': gen_string('alpha'), u'lastname': gen_string('alpha'), u'login': gen_string('alpha'), u'mail': '{0}@example.com'.format(gen_string('alpha')), u'password': common_pass, u'organizations': org['name'], u'role-ids': org_role['id'], u'location-ids': location['id'] }) # Assert if the cloning was successful self.assertIsNotNone(org_role['id']) org_role_filters = Role.filters({'id': org_role['id']}) search_filter = None for arch_filter in org_role_filters: if arch_filter['resource-type'] == 'Architecture': search_filter = arch_filter break Filter.with_user( username=system_admin['login'], password=common_pass).update({ 'role-id': org_role['id'], 'id': arch_filter['id'], 'search': 'name=x86_64' }) # Asserts if the filter is updated self.assertIn('name=x86_64', Filter.info({ 'id': search_filter['id'] }).values() ) org_admin = User.with_user( username=system_admin['login'], password=common_pass).info({'id': org_admin['id']}) # Asserts Created Org Admin self.assertIn(org_role['name'], org_admin['roles']) self.assertIn(org['name'], org_admin['organizations'])