def test_order_tower_catalog_item(appliance, config_manager, catalog_item, request, job_type): """Tests ordering of catalog items for Ansible Template and Workflow jobs Metadata: test_flag: provision Polarion: assignee: nachandr initialEstimate: 1/4h casecomponent: Services caseimportance: high """ if job_type == 'template_limit': host = config_manager.yaml_data['provisioning_data']['inventory_host'] dialog_values = {'limit': host} service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name, dialog_values=dialog_values) else: service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() logger.info('Waiting for cfme provision request for service %s', catalog_item.name) cells = {'Description': catalog_item.name} order_request = appliance.collections.requests.instantiate(cells=cells, partial_check=True) order_request.wait_for_request(method='ui') msg = 'Request failed with the message {}'.format(order_request.row.last_message.text) assert order_request.is_succeeded(method='ui'), msg appliance.user.my_settings.default_views.set_default_view('Configuration Management Providers', 'List View')
def test_quota_cloud_via_services(appliance, request, admin_email, entities, prov_data, catalog_item, context): """This test case verifies the quota assigned by automation method for user and group is working correctly for the cloud providers. Polarion: assignee: ghubale initialEstimate: 1/4h casecomponent: Cloud tags: quota testSteps: 1. Navigate to Automation > Automate > Explorer 2. Add quota automation methods to domain 3. Change 'quota_source_type' to 'user' or 'group' 4. Test quota by provisioning instances over quota limit via UI or SSUI for user and group 5. Check whether quota is exceeded or not """ with appliance.context.use(context): service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) if context is ViaSSUI: service_catalogs.add_to_shopping_cart() service_catalogs.order() # nav to requests page to check quota validation request_description = ("Provisioning Service [{catalog_item_name}] from [{catalog_item_name}]" .format(catalog_item_name=catalog_item.name)) provision_request = appliance.collections.requests.instantiate(request_description) provision_request.wait_for_request(method='ui') request.addfinalizer(provision_request.remove_request) assert provision_request.row.reason.text == "Quota Exceeded"
def test_order_catalog_item(appliance, provider, catalog_item, request, register_event): """Tests order catalog item Metadata: test_flag: provision Polarion: assignee: nansari casecomponent: Services initialEstimate: 1/4h tags: service """ vm_name = catalog_item.prov_data['catalog']["vm_name"] request.addfinalizer( lambda: appliance.collections.infra_vms.instantiate( "{}0001".format(vm_name), provider).cleanup_on_provider() ) register_event(target_type='Service', target_name=catalog_item.name, event_type='service_provisioned') service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() logger.info("Waiting for cfme provision request for service {}".format(catalog_item.name)) request_description = catalog_item.name provision_request = appliance.collections.requests.instantiate(request_description, partial_check=True) provision_request.wait_for_request() msg = "Provisioning failed with the message {}".format(provision_request.rest.message) assert provision_request.is_succeeded(), msg
def test_tenant_quota_enforce_via_service_cloud(request, appliance, provider, setup_provider, context, set_roottenant_quota, set_default, custom_prov_data, extra_msg, template_name, catalog_item): """Test Tenant Quota in UI and SSUI Polarion: assignee: ghubale casecomponent: Cloud initialEstimate: 1/10h """ with appliance.context.use(context): service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) if context is ViaSSUI: service_catalogs.add_to_shopping_cart() service_catalogs.order() # nav to requests page to check quota validation request_description = 'Provisioning Service [{0}] from [{0}]'.format(catalog_item.name) provision_request = appliance.collections.requests.instantiate(request_description) provision_request.wait_for_request(method='ui') assert provision_request.row.reason.text == "Quota Exceeded" @request.addfinalizer def delete(): provision_request.remove_request() catalog_item.delete()
def test_retire_stack(appliance, provider, provisioning, catalog, catalog_item, request): """Tests stack provisioning Metadata: test_flag: provision """ catalog_item, template = catalog_item DefaultView.set_default_view("Stacks", "Grid View") stack_data = prepare_stack_data(provider, provisioning) service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name, stack_data) service_catalogs.order() logger.info('Waiting for cfme provision request for service {}'.format(catalog_item.name)) request_description = catalog_item.name provision_request = appliance.collections.requests.instantiate(request_description, partial_check=True) provision_request.wait_for_request() assert provision_request.is_succeeded() stack = StackCollection(appliance).instantiate(stack_data['stack_name'], provider=provider) stack.wait_for_exists() stack.retire_stack() @request.addfinalizer def _cleanup_vms(): clean_up(stack_data, provider)
def test_order_catalog_bundle(appliance, provider, catalog_item, request): """Tests ordering a catalog bundle Metadata: test_flag: provision """ vm_name = catalog_item.prov_data['catalog']["vm_name"] request.addfinalizer( lambda: appliance.collections.infra_vms.instantiate( "{}0001".format(vm_name), provider).cleanup_on_provider() ) bundle_name = fauxfactory.gen_alphanumeric() catalog_bundle = appliance.collections.catalog_bundles.create( bundle_name, description="catalog_bundle", display_in=True, catalog=catalog_item.catalog, dialog=catalog_item.dialog, catalog_items=[catalog_item.name]) service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_bundle.name) service_catalogs.order() logger.info("Waiting for cfme provision request for service {}".format(bundle_name)) request_description = bundle_name provision_request = appliance.collections.requests.instantiate(request_description, partial_check=True) provision_request.wait_for_request() msg = "Provisioning failed with the message {}".format(provision_request.rest.message) assert provision_request.is_succeeded(), msg
def test_tagdialog_catalog_item(appliance, provider, catalog_item, request): """Tests tag dialog catalog item Metadata: test_flag: provision Polarion: assignee: nansari initialEstimate: 1/4h casecomponent: Services tags: service """ vm_name = catalog_item.prov_data['catalog']["vm_name"] request.addfinalizer( lambda: appliance.collections.infra_vms.instantiate( "{}0001".format(vm_name), provider).cleanup_on_provider() ) dialog_values = {'service_level': "Gold"} service_catalogs = ServiceCatalogs(appliance, catalog=catalog_item.catalog, name=catalog_item.name, dialog_values=dialog_values) service_catalogs.order() logger.info('Waiting for cfme provision request for service {}'.format(catalog_item.name)) request_description = catalog_item.name provision_request = appliance.collections.requests.instantiate(request_description, partial_check=True) provision_request.wait_for_request() msg = "Request failed with the message {}".format(provision_request.rest.message) assert provision_request.is_succeeded(), msg
def test_bundles_in_bundle(appliance, catalog_item): bundle_name = "first_" + fauxfactory.gen_alphanumeric() catalog_bundle = CatalogBundle(name=bundle_name, description="catalog_bundle", display_in=True, catalog=catalog_item.catalog, dialog=catalog_item.dialog, catalog_items=[catalog_item.name]) catalog_bundle.create() sec_bundle_name = "sec_" + fauxfactory.gen_alphanumeric() sec_catalog_bundle = CatalogBundle(name=sec_bundle_name, description="catalog_bundle", display_in=True, catalog=catalog_item.catalog, dialog=catalog_item.dialog, catalog_items=[bundle_name]) sec_catalog_bundle.create() third_bundle_name = "third_" + fauxfactory.gen_alphanumeric() third_catalog_bundle = CatalogBundle(name=third_bundle_name, description="catalog_bundle", display_in=True, catalog=catalog_item.catalog, dialog=catalog_item.dialog, catalog_items=[bundle_name, sec_bundle_name]) third_catalog_bundle.create() service_catalogs = ServiceCatalogs(appliance, third_catalog_bundle.catalog, third_bundle_name) service_catalogs.order() logger.info('Waiting for cfme provision request for service %s', bundle_name) request_description = third_bundle_name provision_request = appliance.collections.requests.instantiate(request_description, partial_check=True) provision_request.wait_for_request() msg = "Request failed with the message {}".format(provision_request.rest.message) assert provision_request.is_succeeded(), msg
def test_reconfigure_service(appliance, provider, provisioning, catalog, catalog_item, request): """Tests stack provisioning Metadata: test_flag: provision """ catalog_item, template = catalog_item stack_data = prepare_stack_data(provider, provisioning) @request.addfinalizer def _cleanup_vms(): clean_up(stack_data, provider) service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name, stack_data) service_catalogs.order() logger.info('Waiting for cfme provision request for service {}'.format(catalog_item.name)) request_description = catalog_item.name provision_request = appliance.collections.requests.instantiate(request_description, partial_check=True) provision_request.wait_for_request() assert provision_request.is_succeeded() myservice = MyService(appliance, catalog_item.name) myservice.reconfigure_service()
def test_quota_tagging_infra_via_services(request, appliance, admin_email, context, set_entity_quota_tag, custom_prov_data, prov_data, catalog_item): """This test case verifies the quota tagging is working correctly for the infra providers. Polarion: assignee: ghubale casecomponent: Quota caseimportance: medium initialEstimate: 1/6h tags: quota """ prov_data.update(custom_prov_data) with appliance.context.use(context): service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) if context is ViaSSUI: service_catalogs.add_to_shopping_cart() service_catalogs.order() # nav to requests page to check quota validation request_description = 'Provisioning Service [{0}] from [{0}]'.format(catalog_item.name) provision_request = appliance.collections.requests.instantiate(request_description) provision_request.wait_for_request(method='ui') request.addfinalizer(provision_request.remove_request) assert provision_request.row.reason.text == "Quota Exceeded"
def test_service_manual_approval(appliance, provider, modify_instance, catalog_item, request): """Tests order catalog item Metadata: test_flag: provision Polarion: assignee: nansari initialEstimate: 1/4h casecomponent: Services tags: service """ vm_name = catalog_item.prov_data['catalog']["vm_name"] request.addfinalizer( lambda: appliance.collections.infra_vms.instantiate(vm_name, provider).cleanup_on_provider() ) service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() logger.info("Waiting for cfme provision request for service {}".format(catalog_item.name)) request_description = catalog_item.name service_request = appliance.collections.requests.instantiate(description=request_description, partial_check=True) service_request.update(method='ui') assert service_request.row.approval_state.text == 'Pending Approval'
def test_bundles_in_bundle(appliance, catalog_item): """ Polarion: assignee: nansari casecomponent: Services caseimportance: low initialEstimate: 1/8h tags: service """ bundle_name = "first_" + fauxfactory.gen_alphanumeric() appliance.collections.catalog_bundles.create( bundle_name, description="catalog_bundle", display_in=True, catalog=catalog_item.catalog, dialog=catalog_item.dialog, catalog_items=[catalog_item.name]) sec_bundle_name = "sec_" + fauxfactory.gen_alphanumeric() appliance.collections.catalog_bundles.create( sec_bundle_name, description="catalog_bundle", display_in=True, catalog=catalog_item.catalog, dialog=catalog_item.dialog, catalog_items=[bundle_name]) third_bundle_name = "third_" + fauxfactory.gen_alphanumeric() third_catalog_bundle = appliance.collections.catalog_bundles.create( third_bundle_name, description="catalog_bundle", display_in=True, catalog=catalog_item.catalog, dialog=catalog_item.dialog, catalog_items=[bundle_name, sec_bundle_name]) service_catalogs = ServiceCatalogs(appliance, third_catalog_bundle.catalog, third_bundle_name) service_catalogs.order() logger.info('Waiting for cfme provision request for service %s', bundle_name) request_description = third_bundle_name provision_request = appliance.collections.requests.instantiate(request_description, partial_check=True) provision_request.wait_for_request() msg = "Request failed with the message {}".format(provision_request.rest.message) assert provision_request.is_succeeded(), msg
def test_pxe_servicecatalog(appliance, setup_provider, provider, catalog_item, request): """Tests RHEV PXE service catalog Metadata: test_flag: pxe, provision Polarion: assignee: nansari initialEstimate: 1/4h """ vm_name = catalog_item.prov_data['catalog']["vm_name"] request.addfinalizer( lambda: appliance.collections.infra_vms.instantiate( "{}0001".format(vm_name), provider).cleanup_on_provider() ) service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() # nav to requests page happens on successful provision logger.info('Waiting for cfme provision request for service %s', catalog_item.name) request_description = catalog_item.name provision_request = appliance.collections.requests.instantiate(request_description, partial_check=True) provision_request.wait_for_request(num_sec=3600) msg = "Provisioning failed with the message {}".format(provision_request.rest.message) assert provision_request.is_succeeded(), msg
def test_quota_catalog_bundle_infra(request, appliance, admin_email, entities, custom_prov_data, prov_data, catalog_bundle, context, vm_name, template_name): """This test case verifies the quota assigned by automation method for user and group is working correctly for the infra providers by ordering catalog bundle. Polarion: assignee: ghubale initialEstimate: 1/4h casecomponent: Quota caseimportance: high tags: quota testSteps: 1. Navigate to Automation > Automate > Explorer 2. Add quota automation methods to domain 3. Change 'quota_source_type' to 'user' or 'group' 4. Create one or more catalogs to test quota by provisioning VMs over quota limit via UI or SSUI for user and group 5. Add more than one catalog to catalog bundle and order catalog bundle 6. Check whether quota is exceeded or not """ prov_data.update(custom_prov_data) with appliance.context.use(context): service_catalogs = ServiceCatalogs(appliance, catalog_bundle.catalog, catalog_bundle.name) if context is ViaSSUI: service_catalogs.add_to_shopping_cart() service_catalogs.order() # nav to requests page to check quota validation request_description = 'Provisioning Service [{0}] from [{0}]'.format(catalog_bundle.name) provision_request = appliance.collections.requests.instantiate(request_description) provision_request.wait_for_request(method='ui') request.addfinalizer(provision_request.remove_request) assert provision_request.row.reason.text == "Quota Exceeded"
def test_service_rbac_service_catalog(appliance, role_user_group, catalog, catalog_item): """ Test service rbac with service catalog Polarion: assignee: apagac initialEstimate: 1/4h casecomponent: Services """ role, user = role_user_group product_features = [ (['Everything'], True), (['Everything'], False), (['Everything', 'Services', 'Requests'], True), (['Everything', 'Automation', 'Automate', 'Customization'], True) ] product_features.extend([(['Everything', 'Services', 'Catalogs Explorer', k], True) for k in ['Catalog Items', 'Service Catalogs', 'Catalogs']]) role.update({'product_features': product_features}) # Without below line, service_order only works here via admin, not via user # TODO: Remove below line when this behavior gets fixed with user: appliance.server.login(user) service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() service_request = appliance.collections.requests.instantiate(catalog_item.name, partial_check=True) service_request.wait_for_request() assert service_request.is_succeeded()
def test_dynamicdropdown_dialog(appliance, dialog, catalog): item_name = fauxfactory.gen_alphanumeric() catalog_item = appliance.collections.catalog_items.create( appliance.collections.catalog_items.GENERIC, name=item_name, description="my catalog", display_in=True, catalog=catalog, dialog=dialog) service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order()
def test_dynamicdropdown_dialog(appliance, dialog, catalog): item_name = fauxfactory.gen_alphanumeric() catalog_item = CatalogItem(item_type="Generic", name=item_name, description="my catalog", display_in=True, catalog=catalog, dialog=dialog) catalog_item.create() service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order()
def test_service_catalog_crud(appliance, setup_provider, context, order_catalog_item_in_ops_ui): """Tests Service Catalog in SSUI.""" service_name = order_catalog_item_in_ops_ui.name with appliance.context.use(context): appliance.server.login() service = ServiceCatalogs(appliance, name=service_name) service.add_to_shopping_cart() service.order()
def test_delete_catalog_deletes_service(appliance, dialog, catalog): item_name = fauxfactory.gen_alphanumeric() catalog_item = CatalogItem(item_type="Generic", name=item_name, description="my catalog", display_in=True, catalog=catalog, dialog=dialog) catalog_item.create() catalog.delete() service_catalogs = ServiceCatalogs(appliance, catalog, catalog_item.name) with error.expected(NoSuchElementException): service_catalogs.order()
def test_cloud_catalog_item(appliance, setup_provider, provider, dialog, catalog, request, provisioning): """Tests cloud catalog item Metadata: test_flag: provision """ vm_name = 'test{}'.format(fauxfactory.gen_alphanumeric()) # GCE accepts only lowercase letters in VM name vm_name = vm_name.lower() request.addfinalizer(lambda: cleanup_vm(vm_name + "_0001", provider)) image = provisioning['image']['name'] item_name = fauxfactory.gen_alphanumeric() provisioning_data = { 'catalog': {'vm_name': vm_name, }, 'properties': {'instance_type': provisioning['instance_type'], }, 'environment': {'security_groups': [provisioning['security_group']], }, } if provider.type == "azure": env_updates = dict( cloud_network=provisioning['virtual_private_cloud'], cloud_subnet=provisioning['cloud_subnet'], resource_groups=[provisioning['resource_group']], ) else: provisioning_data['properties']['guest_keypair'] = provisioning['guest_keypair'] provisioning_data['properties']['boot_disk_size'] = provisioning['boot_disk_size'] env_updates = dict( availability_zone=provisioning['availability_zone'], cloud_tenant=provisioning['cloud_tenant'], cloud_network=provisioning['cloud_network']) provisioning_data['environment'].update(env_updates) catalog_item = CatalogItem(item_type=provisioning['item_type'], name=item_name, description="my catalog", display_in=True, catalog=catalog, dialog=dialog, catalog_name=image, provider=provider, prov_data=provisioning_data) catalog_item.create() service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() logger.info('Waiting for cfme provision request for service %s', item_name) request_description = item_name provision_request = appliance.collections.requests.instantiate(request_description, partial_check=True) provision_request.wait_for_request() assert provision_request.is_succeeded()
def test_delete_catalog_deletes_service(appliance, dialog, catalog): item_name = fauxfactory.gen_alphanumeric() catalog_item = appliance.collections.catalog_items.create( appliance.collections.catalog_items.GENERIC, name=item_name, description="my catalog", display_in=True, catalog=catalog, dialog=dialog) catalog.delete() service_catalogs = ServiceCatalogs(appliance, catalog, catalog_item.name) with pytest.raises(NoSuchElementException): service_catalogs.order()
def test_copy_request_bz1194479(appliance, setup_provider, provider, catalog_item, request): """Automate BZ 1194479""" vm_name = catalog_item.prov_data["catalog"]["vm_name"] request.addfinalizer(lambda: VM.factory(vm_name + "_0001", provider).cleanup_on_provider()) catalog_item.create() service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() request_description = catalog_item.name service_request = appliance.collections.requests.instantiate(request_description, partial_check=True) service_request.wait_for_request() assert navigate_to(service_request, 'Details')
def test_service_catalog_crud_ui(appliance, context, order_ansible_service_in_ops_ui, request): """Tests Ansible Service Catalog in SSUI.""" service_name = order_ansible_service_in_ops_ui with appliance.context.use(context): service = ServiceCatalogs(appliance, name=service_name) service.add_to_shopping_cart() service.order() @request.addfinalizer def _finalize(): _service = MyService(appliance, service_name) _service.delete()
def test_delete_catalog_item_deletes_service(appliance, catalog_item): """ Polarion: assignee: nansari casecomponent: Services caseimportance: medium initialEstimate: 1/8h tags: service """ catalog_item.delete() service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) with pytest.raises(CandidateNotFound): service_catalogs.order()
def test_quota_tagging_cloud_via_services(appliance, request, provider, setup_provider, context, admin_email, set_entity_quota_tag, catalog_item): """Test Group and User Quota in UI and SSUI using tagging""" with appliance.context.use(context): service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) if context is ViaSSUI: service_catalogs.add_to_shopping_cart() service_catalogs.order() # nav to requests page to check quota validation request_description = 'Provisioning Service [{0}] from [{0}]'.format(catalog_item.name) provision_request = appliance.collections.requests.instantiate(request_description) provision_request.wait_for_request(method='ui') request.addfinalizer(provision_request.remove_request) assert provision_request.row.reason.text == "Quota Exceeded"
def test_order_tower_catalog_item(appliance, catalog_item, request): """Tests order catalog item Metadata: test_flag: provision """ catalog_item.create() service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() logger.info('Waiting for cfme provision request for service %s', catalog_item.name) cells = {'Description': catalog_item.name} order_request = appliance.collections.requests.instantiate(cells=cells, partial_check=True) order_request.wait_for_request(method='ui') assert order_request.is_succeeded(method='ui') DefaultView.set_default_view("Configuration Management Providers", "List View")
def test_service_generic_catalog_bundle(appliance, catalog_item): bundle_name = "generic_" + fauxfactory.gen_alphanumeric() catalog_bundle = CatalogBundle(name=bundle_name, description="catalog_bundle", display_in=True, catalog=catalog_item.catalog, dialog=catalog_item.dialog, catalog_items=[catalog_item.name]) catalog_bundle.create() service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, bundle_name) service_catalogs.order() logger.info('Waiting for cfme provision request for service %s', bundle_name) request_description = bundle_name provision_request = appliance.collections.requests.instantiate(request_description, partial_check=True) provision_request.wait_for_request() assert provision_request.is_succeeded()
def test_retire_ansible_service(appliance, catalog_item, request): """Tests order catalog item Metadata: test_flag: provision """ catalog_item.create() service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() logger.info('Waiting for cfme provision request for service %s', catalog_item.name) cells = {'Description': catalog_item.name} order_request = appliance.collections.requests.instantiate(cells=cells, partial_check=True) order_request.wait_for_request(method='ui') assert order_request.is_succeeded(method='ui') myservice = MyService(appliance, catalog_item.name) myservice.retire()
def test_order_tower_catalog_item(appliance, catalog_item, request): """Tests order catalog item Metadata: test_flag: provision """ service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() logger.info('Waiting for cfme provision request for service %s', catalog_item.name) cells = {'Description': catalog_item.name} order_request = appliance.collections.requests.instantiate(cells=cells, partial_check=True) order_request.wait_for_request(method='ui') msg = 'Request failed with the message {}'.format(order_request.row.last_message.text) assert order_request.is_succeeded(method='ui'), msg appliance.user.my_settings.default_views.set_default_view('Configuration Management Providers', 'List View')
def test_request_with_orphaned_template(appliance, provider, catalog_item): """Tests edit catalog item after deleting provider Metadata: test_flag: provision """ service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() logger.info("Waiting for cfme provision request for service {}".format(catalog_item.name)) request_description = catalog_item.name provision_request = appliance.collections.requests.instantiate(request_description, partial_check=True) provider.delete(cancel=False) provider.wait_for_delete() provision_request.wait_for_request(method='ui') assert provision_request.row.status.text == 'Error'
def test_retire_ansible_service(appliance, catalog_item, request, job_type): """Tests retiring of catalog items for Ansible Template and Workflow jobs Metadata: test_flag: provision Polarion: assignee: nachandr casecomponent: Services caseimportance: medium initialEstimate: 1/4h """ service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() logger.info('Waiting for cfme provision request for service %s', catalog_item.name) cells = {'Description': catalog_item.name} order_request = appliance.collections.requests.instantiate(cells=cells, partial_check=True) order_request.wait_for_request(method='ui') msg = "Request failed with the message {}".format(order_request.row.last_message.text) assert order_request.is_succeeded(method='ui'), msg myservice = MyService(appliance, catalog_item.name) myservice.retire()
def test_request_with_orphaned_template(appliance, provider, catalog_item): """Tests edit catalog item after deleting provider Metadata: test_flag: provision Polarion: assignee: nansari casecomponent: Services initialEstimate: 1/4h tags: service """ service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() logger.info("Waiting for cfme provision request for service {}".format(catalog_item.name)) request_description = catalog_item.name provision_request = appliance.collections.requests.instantiate(request_description, partial_check=True) provider.delete() provider.wait_for_delete() provision_request.wait_for_request(method='ui') assert provision_request.row.status.text == 'Error'
def generic_service(appliance, generic_catalog_item): """ This is global fixture to order generic service and return service and catalog item""" service_catalogs = ServiceCatalogs(appliance, catalog=generic_catalog_item.catalog, name=generic_catalog_item.name) provision_request = service_catalogs.order() logger.info("Waiting for service provision request for service %s", generic_catalog_item.name) provision_request.wait_for_request() if not provision_request.is_finished(): pytest.skip( f"Failed to provision service '{generic_catalog_item.name}'") service = MyService(appliance, generic_catalog_item.dialog.label) yield service, generic_catalog_item if service.exists: service.delete() if provision_request.exists: provision_request.remove_request(method="rest")
def test_pxe_servicecatalog(appliance, setup_provider, provider, catalog_item, request): """Tests RHEV PXE service catalog Metadata: test_flag: pxe, provision """ vm_name = catalog_item.prov_data['catalog']["vm_name"] request.addfinalizer( lambda: appliance.collections.infra_vms.instantiate( "{}_0001".format(vm_name), provider).delete_from_provider() ) service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() # nav to requests page happens on successful provision logger.info('Waiting for cfme provision request for service %s', catalog_item.name) request_description = catalog_item.name provision_request = appliance.collections.requests.instantiate(request_description, partial_check=True) provision_request.wait_for_request(num_sec=3600) msg = "Provisioning failed with the message {}".format(provision_request.rest.message) assert provision_request.is_succeeded(), msg
def test_copy_request_bz1194479(appliance, provider, catalog_item, request): """Automate BZ 1194479 Polarion: assignee: nansari initialEstimate: 1/4h casecomponent: Services tags: service """ vm_name = catalog_item.prov_data["catalog"]["vm_name"] request.addfinalizer( lambda: appliance.collections.infra_vms.instantiate( f"{vm_name}0001", provider).cleanup_on_provider() ) service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() request_description = catalog_item.name service_request = appliance.collections.requests.instantiate(request_description, partial_check=True) service_request.wait_for_request() assert navigate_to(service_request, 'Details')
def test_order_tower_catalog_item(appliance, catalog_item, request, job_type): """Tests ordering of catalog items for Ansible Template and Workflow jobs Metadata: test_flag: provision Polarion: assignee: nachandr initialEstimate: 1/4h casecomponent: Services caseimportance: high """ service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() logger.info('Waiting for cfme provision request for service %s', catalog_item.name) cells = {'Description': catalog_item.name} order_request = appliance.collections.requests.instantiate(cells=cells, partial_check=True) order_request.wait_for_request(method='ui') msg = 'Request failed with the message {}'.format(order_request.row.last_message.text) assert order_request.is_succeeded(method='ui'), msg appliance.user.my_settings.default_views.set_default_view('Configuration Management Providers', 'List View')
def test_pxe_servicecatalog(appliance, setup_provider, provider, catalog_item, request): """Tests RHEV PXE service catalog Metadata: test_flag: pxe, provision """ vm_name = catalog_item.provisioning_data['catalog']["vm_name"] request.addfinalizer(lambda: cleanup_vm(vm_name + "_0001", provider)) catalog_item.create() service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() # nav to requests page happens on successful provision logger.info('Waiting for cfme provision request for service %s', catalog_item.name) request_description = catalog_item.name provision_request = appliance.collections.requests.instantiate( request_description, partial_check=True) provision_request.wait_for_request(num_sec=3600) assert provision_request.is_succeeded()
def test_quota_tagging_cloud_via_services(appliance, request, context, admin_email, set_entity_quota_tag, catalog_item): """Test Group and User Quota in UI and SSUI using tagging Polarion: assignee: ghubale casecomponent: Cloud initialEstimate: 1/6h tags: quota """ with appliance.context.use(context): service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) if context is ViaSSUI: service_catalogs.add_to_shopping_cart() service_catalogs.order() # nav to requests page to check quota validation request_description = 'Provisioning Service [{0}] from [{0}]'.format( catalog_item.name) provision_request = appliance.collections.requests.instantiate( request_description) provision_request.wait_for_request(method='ui') request.addfinalizer(provision_request.remove_request) assert provision_request.row.reason.text == "Quota Exceeded"
def test_quota_tagging_infra_via_services(request, appliance, admin_email, context, set_entity_quota_tag, custom_prov_data, prov_data, catalog_item): """This test case verifies the quota tagging is working correctly for the infra providers. Polarion: assignee: ghubale casecomponent: Quota caseimportance: medium initialEstimate: 1/6h tags: quota """ prov_data.update(custom_prov_data) with appliance.context.use(context): service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) if context is ViaSSUI: service_catalogs.add_to_shopping_cart() service_catalogs.order() # nav to requests page to check quota validation request_description = 'Provisioning Service [{0}] from [{0}]'.format( catalog_item.name) provision_request = appliance.collections.requests.instantiate( request_description) provision_request.wait_for_request(method='ui') request.addfinalizer(provision_request.remove_request) assert provision_request.row.reason.text == "Quota Exceeded"
def test_tenant_quota_enforce_via_service_infra(request, appliance, context, set_roottenant_quota, extra_msg, set_default, custom_prov_data, catalog_item): """Tests quota enforcement via service infra Polarion: assignee: ghubale casecomponent: Infra caseimportance: high initialEstimate: 1/8h tags: quota """ with appliance.context.use(context): service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) if context is ViaSSUI: service_catalogs.add_to_shopping_cart() service_catalogs.order() # nav to requests page to check quota validation request_description = 'Provisioning Service [{0}] from [{0}]'.format( catalog_item.name) provision_request = appliance.collections.requests.instantiate( request_description) provision_request.wait_for_request(method='ui') request.addfinalizer(provision_request.remove_request) assert provision_request.row.reason.text == "Quota Exceeded"
def test_service_catalog_crud_ssui(appliance, setup_provider, context, order_service): """Tests Service Catalog in SSUI.""" catalog_item = order_service with appliance.context.use(context): if appliance.version >= '5.9': dialog_values = {'service_name': "ssui_{}".format(fauxfactory.gen_alphanumeric())} service = ServiceCatalogs(appliance, name=catalog_item.name, dialog_values=dialog_values) else: service = ServiceCatalogs(appliance, name=catalog_item.name) service.add_to_shopping_cart() service.order()
def test_tenant_quota_enforce_via_service_infra(request, appliance, provider, setup_provider, context, set_roottenant_quota, extra_msg, custom_prov_data, catalog_item): """Tests quota enforcement via service infra Metadata: test_flag: quota """ with appliance.context.use(context): service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) if context is ViaSSUI: service_catalogs.add_to_shopping_cart() service_catalogs.order() # nav to requests page to check quota validation request_description = 'Provisioning Service [{0}] from [{0}]'.format( catalog_item.name) provision_request = appliance.collections.requests.instantiate( request_description) provision_request.wait_for_request(method='ui') assert provision_request.row.reason.text == "Quota Exceeded" @request.addfinalizer def delete(): provision_request.remove_request() catalog_item.delete()
def test_quota_infra(request, appliance, admin_email, entities, custom_prov_data, prov_data, catalog_item, context, vm_name, template_name): """This test case verifies the quota assigned by automation method for user and group is working correctly for the infra providers. Polarion: assignee: ghubale initialEstimate: 1/4h casecomponent: Quota caseimportance: medium tags: quota testSteps: 1. Navigate to Automation > Automate > Explorer 2. Add quota automation methods to domain 3. Change 'quota_source_type' to 'user' or 'group' 4. Test quota by provisioning VMs over quota limit via UI or SSUI for user and group 5. Check whether quota is exceeded or not """ prov_data.update(custom_prov_data) with appliance.context.use(context): service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) if context is ViaSSUI: service_catalogs.add_to_shopping_cart() service_catalogs.order() # nav to requests page to check quota validation request_description = 'Provisioning Service [{0}] from [{0}]'.format( catalog_item.name) provision_request = appliance.collections.requests.instantiate( request_description) provision_request.wait_for_request(method='ui') request.addfinalizer(provision_request.remove_request) assert provision_request.row.reason.text == "Quota Exceeded"
def test_tenant_quota_enforce_via_service_cloud(request, appliance, provider, setup_provider, context, set_roottenant_quota, custom_prov_data, extra_msg, template_name, catalog_item): """Test Tenant Quota in UI and SSUI Polarion: assignee: ghubale casecomponent: cloud initialEstimate: 1/10h """ with appliance.context.use(context): service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) if context is ViaSSUI: service_catalogs.add_to_shopping_cart() service_catalogs.order() # nav to requests page to check quota validation request_description = 'Provisioning Service [{0}] from [{0}]'.format( catalog_item.name) provision_request = appliance.collections.requests.instantiate( request_description) provision_request.wait_for_request(method='ui') assert provision_request.row.reason.text == "Quota Exceeded" @request.addfinalizer def delete(): provision_request.remove_request() catalog_item.delete()
def test_quota_cloud_via_services(appliance, request, setup_provider, admin_email, entities, prov_data, catalog_item, context): """This test case verifies the quota assigned by automation method for user and group is working correctly for the cloud providers. Steps: 1. Navigate to Automation > Automate > Explorer 2. Add quota automation methods to domain 3. Change 'quota_source_type' to 'user' or 'group' 4. Test quota by provisioning instances over quota limit via UI or SSUI for user and group 5. Check whether quota is exceeded or not Polarion: assignee: None initialEstimate: None """ with appliance.context.use(context): service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) if context is ViaSSUI: service_catalogs.add_to_shopping_cart() service_catalogs.order() # nav to requests page to check quota validation request_description = ( "Provisioning Service [{catalog_item_name}] from [{catalog_item_name}]" .format(catalog_item_name=catalog_item.name)) provision_request = appliance.collections.requests.instantiate( request_description) provision_request.wait_for_request(method='ui') request.addfinalizer(provision_request.remove_request) assert provision_request.row.reason.text == "Quota Exceeded"
def test_dropdownlist_required_dialog_element(appliance, catalog_item): """Tests service dropdownlist dialog required element. Testing BZ 1512398. Polarion: assignee: None initialEstimate: None """ service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) view = navigate_to(service_catalogs, 'Order') assert view.submit_button.disabled
def order_retire_service(request, context, appliance, catalog_item): """Common method to order and then retire a service.""" with appliance: # Order the service provision_request = ServiceCatalogs(appliance, catalog=catalog_item.catalog, name=catalog_item.name).order() provision_request.wait_for_request(method='ui') assert provision_request.is_succeeded(method='ui') if isinstance(catalog_item, appliance.collections.catalog_items.GENERIC): service_name = catalog_item.dialog.label else: service_name = catalog_item.name service = MyService(appliance, service_name) @request.addfinalizer def _clear_request_service(): if provision_request.exists(): provision_request.remove_request() if service.exists: service.delete() assert service.exists # Retire the service via UI or REST, depending on context with appliance.context.use(context): retire_request = service.retire() assert retire_request and retire_request.exists() @request.addfinalizer def _remove_retire_request(): retire_request.remove_request() wait_for(lambda: service.is_retired, delay=5, num_sec=300, fail_func=service.browser.refresh, message="Waiting for service to retire")
def test_simultaneous_tenant_quota(request, appliance, context, new_project, new_user_project, set_project_quota, custom_prov_data, catalog_item, set_default): """ Bugzilla: 1456819 1401251 Polarion: assignee: ghubale initialEstimate: 1/6h caseimportance: medium caseposneg: positive testtype: functional startsin: 5.8 casecomponent: Provisioning tags: quota setup: 1. Create tenant1 and tenant2. 2. Create a project under tenant1 or tenant2 3. Enable quota for cpu, memory or storage etc 4. Create a group and add role super_administrator 5. Create a user and add it to the group testSteps: 1. Login with the newly created user in the service portal. Take multiple items which go over the allocated quota expectedResults: 1. CFME should deny request with quota exceeded reason """ with new_user_project: with appliance.context.use(context): appliance.server.login(new_user_project) service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) if context is ViaSSUI: service_catalogs.add_to_shopping_cart() provision_request = service_catalogs.order() provision_request.wait_for_request(method='ui') request.addfinalizer(provision_request.remove_request) assert provision_request.row.reason.text == "Quota Exceeded"
def test_order_catalog_bundle(appliance, provider, catalog_item, request): """Tests ordering a catalog bundle Metadata: test_flag: provision """ vm_name = catalog_item.prov_data['catalog']["vm_name"] request.addfinalizer(lambda: VM.factory(vm_name + "_0001", provider).cleanup_on_provider()) bundle_name = fauxfactory.gen_alphanumeric() catalog_bundle = appliance.collections.catalog_bundles.create( bundle_name, description="catalog_bundle", display_in=True, catalog=catalog_item.catalog, dialog=catalog_item.dialog, catalog_items=[catalog_item.name]) service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_bundle.name) service_catalogs.order() logger.info("Waiting for cfme provision request for service {}".format(bundle_name)) request_description = bundle_name provision_request = appliance.collections.requests.instantiate(request_description, partial_check=True) provision_request.wait_for_request() msg = "Provisioning failed with the message {}".format(provision_request.rest.message) assert provision_request.is_succeeded(), msg
def test_provision_stack(appliance, setup_provider, provider, provisioning, catalog, catalog_item, request, stack_data): """Tests stack provisioning Metadata: test_flag: provision """ catalog_item, template = catalog_item @request.addfinalizer def _cleanup_vms(): clean_up(stack_data, provider) service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name, stack_data) service_catalogs.order() logger.info('Waiting for cfme provision request for service {}'.format(catalog_item.name)) request_description = catalog_item.name provision_request = appliance.collections.requests.instantiate(request_description, partial_check=True) provision_request.wait_for_request() assert provision_request.is_succeeded()
def test_rhev_iso_servicecatalog(appliance, setup_provider, provider, catalog_item, request): """Tests RHEV ISO service catalog Metadata: test_flag: iso, provision """ vm_name = catalog_item.provisioning_data['catalog']["vm_name"] request.addfinalizer(lambda: cleanup_vm(vm_name + "_0001", provider)) service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() # nav to requests page happens on successful provision logger.info('Waiting for cfme provision request for service %s', catalog_item.name) request_description = catalog_item.name provision_request = appliance.collections.requests.instantiate( request_description, partial_check=True) provision_request.wait_for_request() msg = "Provisioning failed with the message {}".format( provision_request.rest.message) assert provision_request.is_succeeded(), msg
def test_tagdialog_catalog_item(appliance, provider, setup_provider, catalog_item, request): """Tests tag dialog catalog item Metadata: test_flag: provision """ vm_name = catalog_item.provisioning_data['catalog']["vm_name"] request.addfinalizer(lambda: cleanup_vm(vm_name + "_0001", provider)) catalog_item.create() dialog_values = {'default_select_value': "Gold"} service_catalogs = ServiceCatalogs(appliance, catalog=catalog_item.catalog, name=catalog_item.name, dialog_values=dialog_values) service_catalogs.order() logger.info('Waiting for cfme provision request for service {}'.format( catalog_item.name)) request_description = catalog_item.name provision_request = appliance.collections.requests.instantiate( request_description, partial_check=True) provision_request.wait_for_request() assert provision_request.is_succeeded()
def myservice(appliance, provider, catalog_item, request): """Tests my service Metadata: test_flag: provision """ vm_name = catalog_item.prov_data["catalog"]["vm_name"] + '0001' service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() logger.info('Waiting for cfme provision request for service %s', catalog_item.name) request_description = catalog_item.name service_request = appliance.collections.requests.instantiate( request_description, partial_check=True) service_request.wait_for_request() assert service_request.is_succeeded(),\ ("Request failed with the message {}".format(service_request.rest.message)) yield catalog_item.name, vm_name VM.factory(vm_name, provider).cleanup_on_provider()
def test_remove_template_provisioning(appliance, provider, provisioning, catalog, catalog_item): """Tests stack provisioning Metadata: test_flag: provision """ catalog_item, template = catalog_item stack_data = prepare_stack_data(appliance, provider, provisioning) service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name, stack_data) service_catalogs.order() # This is part of test - remove template and see if provision fails , so not added as finalizer template.delete() request_description = 'Provisioning Service [{}] from [{}]'.format( catalog_item.name, catalog_item.name) provision_request = appliance.collections.requests.instantiate( request_description) provision_request.wait_for_request(method='ui') assert (provision_request.row.last_message.text == 'Service_Template_Provisioning failed' or provision_request.row.status.text == "Error")
def test_tagdialog_catalog_item(appliance, provider, catalog_item, request): """Tests tag dialog catalog item Metadata: test_flag: provision """ vm_name = catalog_item.prov_data['catalog']["vm_name"] request.addfinalizer( lambda: appliance.collections.infra_vms.instantiate( "{}0001".format(vm_name), provider).cleanup_on_provider() ) dialog_values = {'service_level': "Gold"} service_catalogs = ServiceCatalogs(appliance, catalog=catalog_item.catalog, name=catalog_item.name, dialog_values=dialog_values) service_catalogs.order() logger.info('Waiting for cfme provision request for service {}'.format(catalog_item.name)) request_description = catalog_item.name provision_request = appliance.collections.requests.instantiate(request_description, partial_check=True) provision_request.wait_for_request() msg = "Request failed with the message {}".format(provision_request.rest.message) assert provision_request.is_succeeded(), msg
def order_service(appliance, provider, provisioning, vm_name, dialog, catalog, request): """ Orders service once the catalog item is created""" if hasattr(request, 'param'): param = request.param catalog_item = create_catalog_item(appliance, provider, provisioning, vm_name, dialog, catalog, console_test=True if 'console_test' in param else None) else: catalog_item = create_catalog_item(appliance, provider, provisioning, vm_name, dialog, catalog) service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) provision_request = service_catalogs.order() provision_request.wait_for_request(method='ui') assert provision_request.is_succeeded() if provision_request.exists(): provision_request.wait_for_request() provision_request.remove_request() yield catalog_item service = MyService(appliance, catalog_item.name) if service.exists: service.delete()
def order_service(appliance, provider, provisioning, dialog, catalog, request): # BZ 1646333 - Delete this request button is not shown in service Request details page # The above BZ got closed because of INSUFFICIENT_DATA, so I havve reported the same issue # in BZ 775779. """ Orders service once the catalog item is created""" if hasattr(request, 'param'): vm_count = request.param[ 'vm_count'] if 'vm_count' in request.param else '1' console_test = request.param[ 'console_test'] if 'console_test' in request.param else False catalog_item = create_catalog_item(appliance, provider, provisioning, dialog, catalog, vm_count=vm_count, console_test=console_test) else: catalog_item = create_catalog_item(appliance, provider, provisioning, dialog, catalog) service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) provision_request = service_catalogs.order() provision_request.wait_for_request(method='ui') assert provision_request.is_succeeded() if provision_request.exists(): provision_request.wait_for_request() # Provision request is being removed through REST API because of BZ 775779. provision_request.remove_request(method='rest') yield catalog_item service = MyService(appliance, catalog_item.name) if service.exists: service.delete() name = catalog_item.prov_data['catalog']['vm_name'] for i in range(int(vm_count)): vm_name = f'{name}000{i+1}' vm = appliance.collections.infra_vms.instantiate(vm_name, provider) vm.cleanup_on_provider()
def myservice(appliance, provider, catalog_item, request): vm_name = catalog_item.provisioning_data["catalog"]["vm_name"] request.addfinalizer(lambda: cleanup_vm(vm_name + "_0001", provider)) service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() logger.info('Waiting for cfme provision request for service %s', catalog_item.name) request_description = catalog_item.name provision_request = appliance.collections.requests.instantiate( request_description, partial_check=True) provision_request.wait_for_request() assert provision_request.is_finished() service = MyService(appliance, catalog_item.name, vm_name) yield service try: service.delete() except Exception as ex: logger.warning( 'Exception while deleting MyService, continuing: {}'.format( ex.message))
def test_tenant_quota_enforce_via_service_cloud(request, appliance, provider, setup_provider, set_roottenant_quota, extra_msg, custom_prov_data, prov_data, template_name, catalog_item): """Test Tenant Quota in UI""" catalog_item.provisioning_data.update(custom_prov_data) catalog_item.provisioning_data['catalog']['vm_name'] = catalog_item.vm_name catalog_item.provisioning_data.update({'properties': { 'instance_type': partial_match('m1.large')}}) catalog_item.create() service_catalogs = ServiceCatalogs(appliance, catalog_item.catalog, catalog_item.name) service_catalogs.order() # nav to requests page to check quota validation request_description = 'Provisioning Service [{0}] from [{0}]'.format(catalog_item.name) provision_request = appliance.collections.requests.instantiate(request_description) provision_request.wait_for_request(method='ui') assert provision_request.row.reason.text == "Quota Exceeded" @request.addfinalizer def delete(): provision_request.remove_request() catalog_item.delete()
def test_timepicker_on_service_order( appliance, generic_catalog_item_with_imported_dialog): """ Timepicker should show date when chosen once and it should retain the value when service is ordered. Bugzilla: 1638079 Polarion: assignee: nansari casecomponent: Services testtype: functional initialEstimate: 1/4h startsin: 5.7 tags: service setup: 1. Add the dialog, catalog, and catalog_item. testSteps: 1. Navigate to the catalogs order page. 2. Try to fill in a different value in the timepicker dialog element. 3. Once the timepicker value has been changed, click the submit button. 4. Navigate to requests details page. 5. Check the value of the timepicker element. expectedResults: 1. 2. Value must changed the first time. 3. 4. 5. Value is same as what was set in step 3. """ catalog_item = generic_catalog_item_with_imported_dialog[0] service_catalog = ServiceCatalogs(appliance, catalog=catalog_item.catalog, name=catalog_item.name) view = navigate_to(service_catalog, "Order") datepicker = TimePicker(view, id="begindate") assert datepicker.is_displayed old_date = datepicker.read() new_date = old_date + datetime.timedelta(days=5) datepicker.fill(new_date) new_date = datepicker.read() assert old_date != new_date assert view.submit_button.is_enabled view.submit_button.click() view = navigate_to( appliance.collections.requests.instantiate(service_catalog.name, partial_check=True), "Details", ) assert (datetime.datetime.strftime(new_date, "%m/%d/%Y") in view.details.request_details.read()["Begin Date"])