This is page 57 of 61. Use http://codebase.md/taurgis/sfcc-dev-mcp?lines=true&page={x} to view the full context. # Directory Structure ``` ├── .DS_Store ├── .github │ ├── dependabot.yml │ ├── instructions │ │ ├── mcp-node-tests.instructions.md │ │ └── mcp-yml-tests.instructions.md │ ├── ISSUE_TEMPLATE │ │ ├── bug_report.yml │ │ ├── config.yml │ │ ├── documentation.yml │ │ ├── feature_request.yml │ │ └── question.yml │ ├── PULL_REQUEST_TEMPLATE │ │ ├── bug_fix.md │ │ ├── documentation.md │ │ └── new_tool.md │ ├── pull_request_template.md │ └── workflows │ ├── ci.yml │ ├── deploy-pages.yml │ ├── publish.yml │ └── update-docs.yml ├── .gitignore ├── .husky │ └── pre-commit ├── aegis.config.docs-only.json ├── aegis.config.json ├── aegis.config.with-dw.json ├── AGENTS.md ├── ai-instructions │ ├── claude-desktop │ │ └── claude_custom_instructions.md │ ├── cursor │ │ └── .cursor │ │ └── rules │ │ ├── debugging-workflows.mdc │ │ ├── hooks-development.mdc │ │ ├── isml-templates.mdc │ │ ├── job-framework.mdc │ │ ├── performance-optimization.mdc │ │ ├── scapi-endpoints.mdc │ │ ├── security-patterns.mdc │ │ ├── sfcc-development.mdc │ │ ├── sfra-controllers.mdc │ │ ├── sfra-models.mdc │ │ ├── system-objects.mdc │ │ └── testing-patterns.mdc │ └── github-copilot │ └── copilot-instructions.md ├── CHANGELOG.md ├── CONTRIBUTING.md ├── docs │ ├── best-practices │ │ ├── cartridge_creation.md │ │ ├── isml_templates.md │ │ ├── job_framework.md │ │ ├── localserviceregistry.md │ │ ├── ocapi_hooks.md │ │ ├── performance.md │ │ ├── scapi_custom_endpoint.md │ │ ├── scapi_hooks.md │ │ ├── security.md │ │ ├── sfra_client_side_js.md │ │ ├── sfra_controllers.md │ │ ├── sfra_models.md │ │ └── sfra_scss.md │ ├── dw_campaign │ │ ├── ABTest.md │ │ ├── ABTestMgr.md │ │ ├── ABTestSegment.md │ │ ├── AmountDiscount.md │ │ ├── ApproachingDiscount.md │ │ ├── BonusChoiceDiscount.md │ │ ├── BonusDiscount.md │ │ ├── Campaign.md │ │ ├── CampaignMgr.md │ │ ├── CampaignStatusCodes.md │ │ ├── Coupon.md │ │ ├── CouponMgr.md │ │ ├── CouponRedemption.md │ │ ├── CouponStatusCodes.md │ │ ├── Discount.md │ │ ├── DiscountPlan.md │ │ ├── FixedPriceDiscount.md │ │ ├── FixedPriceShippingDiscount.md │ │ ├── FreeDiscount.md │ │ ├── FreeShippingDiscount.md │ │ ├── PercentageDiscount.md │ │ ├── PercentageOptionDiscount.md │ │ ├── PriceBookPriceDiscount.md │ │ ├── Promotion.md │ │ ├── PromotionMgr.md │ │ ├── PromotionPlan.md │ │ ├── SlotContent.md │ │ ├── SourceCodeGroup.md │ │ ├── SourceCodeInfo.md │ │ ├── SourceCodeStatusCodes.md │ │ └── TotalFixedPriceDiscount.md │ ├── dw_catalog │ │ ├── Catalog.md │ │ ├── CatalogMgr.md │ │ ├── Category.md │ │ ├── CategoryAssignment.md │ │ ├── CategoryLink.md │ │ ├── PriceBook.md │ │ ├── PriceBookMgr.md │ │ ├── Product.md │ │ ├── ProductActiveData.md │ │ ├── ProductAttributeModel.md │ │ ├── ProductAvailabilityLevels.md │ │ ├── ProductAvailabilityModel.md │ │ ├── ProductInventoryList.md │ │ ├── ProductInventoryMgr.md │ │ ├── ProductInventoryRecord.md │ │ ├── ProductLink.md │ │ ├── ProductMgr.md │ │ ├── ProductOption.md │ │ ├── ProductOptionModel.md │ │ ├── ProductOptionValue.md │ │ ├── ProductPriceInfo.md │ │ ├── ProductPriceModel.md │ │ ├── ProductPriceTable.md │ │ ├── ProductSearchHit.md │ │ ├── ProductSearchModel.md │ │ ├── ProductSearchRefinementDefinition.md │ │ ├── ProductSearchRefinements.md │ │ ├── ProductSearchRefinementValue.md │ │ ├── ProductVariationAttribute.md │ │ ├── ProductVariationAttributeValue.md │ │ ├── ProductVariationModel.md │ │ ├── Recommendation.md │ │ ├── SearchModel.md │ │ ├── SearchRefinementDefinition.md │ │ ├── SearchRefinements.md │ │ ├── SearchRefinementValue.md │ │ ├── SortingOption.md │ │ ├── SortingRule.md │ │ ├── Store.md │ │ ├── StoreGroup.md │ │ ├── StoreInventoryFilter.md │ │ ├── StoreInventoryFilterValue.md │ │ ├── StoreMgr.md │ │ ├── Variant.md │ │ └── VariationGroup.md │ ├── dw_content │ │ ├── Content.md │ │ ├── ContentMgr.md │ │ ├── ContentSearchModel.md │ │ ├── ContentSearchRefinementDefinition.md │ │ ├── ContentSearchRefinements.md │ │ ├── ContentSearchRefinementValue.md │ │ ├── Folder.md │ │ ├── Library.md │ │ ├── MarkupText.md │ │ └── MediaFile.md │ ├── dw_crypto │ │ ├── CertificateRef.md │ │ ├── CertificateUtils.md │ │ ├── Cipher.md │ │ ├── Encoding.md │ │ ├── JWE.md │ │ ├── JWEHeader.md │ │ ├── JWS.md │ │ ├── JWSHeader.md │ │ ├── KeyRef.md │ │ ├── Mac.md │ │ ├── MessageDigest.md │ │ ├── SecureRandom.md │ │ ├── Signature.md │ │ ├── WeakCipher.md │ │ ├── WeakMac.md │ │ ├── WeakMessageDigest.md │ │ ├── WeakSignature.md │ │ └── X509Certificate.md │ ├── dw_customer │ │ ├── AddressBook.md │ │ ├── AgentUserMgr.md │ │ ├── AgentUserStatusCodes.md │ │ ├── AuthenticationStatus.md │ │ ├── Credentials.md │ │ ├── Customer.md │ │ ├── CustomerActiveData.md │ │ ├── CustomerAddress.md │ │ ├── CustomerCDPData.md │ │ ├── CustomerContextMgr.md │ │ ├── CustomerGroup.md │ │ ├── CustomerList.md │ │ ├── CustomerMgr.md │ │ ├── CustomerPasswordConstraints.md │ │ ├── CustomerPaymentInstrument.md │ │ ├── CustomerStatusCodes.md │ │ ├── EncryptedObject.md │ │ ├── ExternalProfile.md │ │ ├── OrderHistory.md │ │ ├── ProductList.md │ │ ├── ProductListItem.md │ │ ├── ProductListItemPurchase.md │ │ ├── ProductListMgr.md │ │ ├── ProductListRegistrant.md │ │ ├── Profile.md │ │ └── Wallet.md │ ├── dw_extensions.applepay │ │ ├── ApplePayHookResult.md │ │ └── ApplePayHooks.md │ ├── dw_extensions.facebook │ │ ├── FacebookFeedHooks.md │ │ └── FacebookProduct.md │ ├── dw_extensions.paymentrequest │ │ ├── PaymentRequestHookResult.md │ │ └── PaymentRequestHooks.md │ ├── dw_extensions.payments │ │ ├── SalesforceBancontactPaymentDetails.md │ │ ├── SalesforceCardPaymentDetails.md │ │ ├── SalesforceEpsPaymentDetails.md │ │ ├── SalesforceIdealPaymentDetails.md │ │ ├── SalesforceKlarnaPaymentDetails.md │ │ ├── SalesforcePaymentDetails.md │ │ ├── SalesforcePaymentIntent.md │ │ ├── SalesforcePaymentMethod.md │ │ ├── SalesforcePaymentRequest.md │ │ ├── SalesforcePaymentsHooks.md │ │ ├── SalesforcePaymentsMgr.md │ │ ├── SalesforcePaymentsSiteConfiguration.md │ │ ├── SalesforcePayPalOrder.md │ │ ├── SalesforcePayPalOrderAddress.md │ │ ├── SalesforcePayPalOrderPayer.md │ │ ├── SalesforcePayPalPaymentDetails.md │ │ ├── SalesforceSepaDebitPaymentDetails.md │ │ └── SalesforceVenmoPaymentDetails.md │ ├── dw_extensions.pinterest │ │ ├── PinterestAvailability.md │ │ ├── PinterestFeedHooks.md │ │ ├── PinterestOrder.md │ │ ├── PinterestOrderHooks.md │ │ └── PinterestProduct.md │ ├── dw_io │ │ ├── CSVStreamReader.md │ │ ├── CSVStreamWriter.md │ │ ├── File.md │ │ ├── FileReader.md │ │ ├── FileWriter.md │ │ ├── InputStream.md │ │ ├── OutputStream.md │ │ ├── PrintWriter.md │ │ ├── RandomAccessFileReader.md │ │ ├── Reader.md │ │ ├── StringWriter.md │ │ ├── Writer.md │ │ ├── XMLIndentingStreamWriter.md │ │ ├── XMLStreamConstants.md │ │ ├── XMLStreamReader.md │ │ └── XMLStreamWriter.md │ ├── dw_job │ │ ├── JobExecution.md │ │ └── JobStepExecution.md │ ├── dw_net │ │ ├── FTPClient.md │ │ ├── FTPFileInfo.md │ │ ├── HTTPClient.md │ │ ├── HTTPRequestPart.md │ │ ├── Mail.md │ │ ├── SFTPClient.md │ │ ├── SFTPFileInfo.md │ │ ├── WebDAVClient.md │ │ └── WebDAVFileInfo.md │ ├── dw_object │ │ ├── ActiveData.md │ │ ├── CustomAttributes.md │ │ ├── CustomObject.md │ │ ├── CustomObjectMgr.md │ │ ├── Extensible.md │ │ ├── ExtensibleObject.md │ │ ├── Note.md │ │ ├── ObjectAttributeDefinition.md │ │ ├── ObjectAttributeGroup.md │ │ ├── ObjectAttributeValueDefinition.md │ │ ├── ObjectTypeDefinition.md │ │ ├── PersistentObject.md │ │ ├── SimpleExtensible.md │ │ └── SystemObjectMgr.md │ ├── dw_order │ │ ├── AbstractItem.md │ │ ├── AbstractItemCtnr.md │ │ ├── Appeasement.md │ │ ├── AppeasementItem.md │ │ ├── Basket.md │ │ ├── BasketMgr.md │ │ ├── BonusDiscountLineItem.md │ │ ├── CouponLineItem.md │ │ ├── CreateAgentBasketLimitExceededException.md │ │ ├── CreateBasketFromOrderException.md │ │ ├── CreateCouponLineItemException.md │ │ ├── CreateOrderException.md │ │ ├── CreateTemporaryBasketLimitExceededException.md │ │ ├── GiftCertificate.md │ │ ├── GiftCertificateLineItem.md │ │ ├── GiftCertificateMgr.md │ │ ├── GiftCertificateStatusCodes.md │ │ ├── Invoice.md │ │ ├── InvoiceItem.md │ │ ├── LineItem.md │ │ ├── LineItemCtnr.md │ │ ├── Order.md │ │ ├── OrderAddress.md │ │ ├── OrderItem.md │ │ ├── OrderMgr.md │ │ ├── OrderPaymentInstrument.md │ │ ├── OrderProcessStatusCodes.md │ │ ├── PaymentCard.md │ │ ├── PaymentInstrument.md │ │ ├── PaymentMethod.md │ │ ├── PaymentMgr.md │ │ ├── PaymentProcessor.md │ │ ├── PaymentStatusCodes.md │ │ ├── PaymentTransaction.md │ │ ├── PriceAdjustment.md │ │ ├── PriceAdjustmentLimitTypes.md │ │ ├── ProductLineItem.md │ │ ├── ProductShippingCost.md │ │ ├── ProductShippingLineItem.md │ │ ├── ProductShippingModel.md │ │ ├── Return.md │ │ ├── ReturnCase.md │ │ ├── ReturnCaseItem.md │ │ ├── ReturnItem.md │ │ ├── Shipment.md │ │ ├── ShipmentShippingCost.md │ │ ├── ShipmentShippingModel.md │ │ ├── ShippingLineItem.md │ │ ├── ShippingLocation.md │ │ ├── ShippingMethod.md │ │ ├── ShippingMgr.md │ │ ├── ShippingOrder.md │ │ ├── ShippingOrderItem.md │ │ ├── SumItem.md │ │ ├── TaxGroup.md │ │ ├── TaxItem.md │ │ ├── TaxMgr.md │ │ ├── TrackingInfo.md │ │ └── TrackingRef.md │ ├── dw_order.hooks │ │ ├── CalculateHooks.md │ │ ├── OrderHooks.md │ │ ├── PaymentHooks.md │ │ ├── ReturnHooks.md │ │ └── ShippingOrderHooks.md │ ├── dw_rpc │ │ ├── SOAPUtil.md │ │ ├── Stub.md │ │ └── WebReference.md │ ├── dw_suggest │ │ ├── BrandSuggestions.md │ │ ├── CategorySuggestions.md │ │ ├── ContentSuggestions.md │ │ ├── CustomSuggestions.md │ │ ├── ProductSuggestions.md │ │ ├── SearchPhraseSuggestions.md │ │ ├── SuggestedCategory.md │ │ ├── SuggestedContent.md │ │ ├── SuggestedPhrase.md │ │ ├── SuggestedProduct.md │ │ ├── SuggestedTerm.md │ │ ├── SuggestedTerms.md │ │ ├── Suggestions.md │ │ └── SuggestModel.md │ ├── dw_svc │ │ ├── FTPService.md │ │ ├── FTPServiceDefinition.md │ │ ├── HTTPFormService.md │ │ ├── HTTPFormServiceDefinition.md │ │ ├── HTTPService.md │ │ ├── HTTPServiceDefinition.md │ │ ├── LocalServiceRegistry.md │ │ ├── Result.md │ │ ├── Service.md │ │ ├── ServiceCallback.md │ │ ├── ServiceConfig.md │ │ ├── ServiceCredential.md │ │ ├── ServiceDefinition.md │ │ ├── ServiceProfile.md │ │ ├── ServiceRegistry.md │ │ ├── SOAPService.md │ │ └── SOAPServiceDefinition.md │ ├── dw_system │ │ ├── AgentUserStatusCodes.md │ │ ├── Cache.md │ │ ├── CacheMgr.md │ │ ├── HookMgr.md │ │ ├── InternalObject.md │ │ ├── JobProcessMonitor.md │ │ ├── Log.md │ │ ├── Logger.md │ │ ├── LogNDC.md │ │ ├── OrganizationPreferences.md │ │ ├── Pipeline.md │ │ ├── PipelineDictionary.md │ │ ├── RemoteInclude.md │ │ ├── Request.md │ │ ├── RequestHooks.md │ │ ├── Response.md │ │ ├── RESTErrorResponse.md │ │ ├── RESTResponseMgr.md │ │ ├── RESTSuccessResponse.md │ │ ├── SearchStatus.md │ │ ├── Session.md │ │ ├── Site.md │ │ ├── SitePreferences.md │ │ ├── Status.md │ │ ├── StatusItem.md │ │ ├── System.md │ │ └── Transaction.md │ ├── dw_util │ │ ├── ArrayList.md │ │ ├── Assert.md │ │ ├── BigInteger.md │ │ ├── Bytes.md │ │ ├── Calendar.md │ │ ├── Collection.md │ │ ├── Currency.md │ │ ├── DateUtils.md │ │ ├── Decimal.md │ │ ├── FilteringCollection.md │ │ ├── Geolocation.md │ │ ├── HashMap.md │ │ ├── HashSet.md │ │ ├── Iterator.md │ │ ├── LinkedHashMap.md │ │ ├── LinkedHashSet.md │ │ ├── List.md │ │ ├── Locale.md │ │ ├── Map.md │ │ ├── MapEntry.md │ │ ├── MappingKey.md │ │ ├── MappingMgr.md │ │ ├── PropertyComparator.md │ │ ├── SecureEncoder.md │ │ ├── SecureFilter.md │ │ ├── SeekableIterator.md │ │ ├── Set.md │ │ ├── SortedMap.md │ │ ├── SortedSet.md │ │ ├── StringUtils.md │ │ ├── Template.md │ │ └── UUIDUtils.md │ ├── dw_value │ │ ├── EnumValue.md │ │ ├── MimeEncodedText.md │ │ ├── Money.md │ │ └── Quantity.md │ ├── dw_web │ │ ├── ClickStream.md │ │ ├── ClickStreamEntry.md │ │ ├── Cookie.md │ │ ├── Cookies.md │ │ ├── CSRFProtection.md │ │ ├── Form.md │ │ ├── FormAction.md │ │ ├── FormElement.md │ │ ├── FormElementValidationResult.md │ │ ├── FormField.md │ │ ├── FormFieldOption.md │ │ ├── FormFieldOptions.md │ │ ├── FormGroup.md │ │ ├── FormList.md │ │ ├── FormListItem.md │ │ ├── Forms.md │ │ ├── HttpParameter.md │ │ ├── HttpParameterMap.md │ │ ├── LoopIterator.md │ │ ├── PageMetaData.md │ │ ├── PageMetaTag.md │ │ ├── PagingModel.md │ │ ├── Resource.md │ │ ├── URL.md │ │ ├── URLAction.md │ │ ├── URLParameter.md │ │ ├── URLRedirect.md │ │ ├── URLRedirectMgr.md │ │ └── URLUtils.md │ ├── sfra │ │ ├── account.md │ │ ├── address.md │ │ ├── billing.md │ │ ├── cart.md │ │ ├── categories.md │ │ ├── content.md │ │ ├── locale.md │ │ ├── order.md │ │ ├── payment.md │ │ ├── price-default.md │ │ ├── price-range.md │ │ ├── price-tiered.md │ │ ├── product-bundle.md │ │ ├── product-full.md │ │ ├── product-line-items.md │ │ ├── product-search.md │ │ ├── product-tile.md │ │ ├── querystring.md │ │ ├── render.md │ │ ├── request.md │ │ ├── response.md │ │ ├── server.md │ │ ├── shipping.md │ │ ├── store.md │ │ ├── stores.md │ │ └── totals.md │ └── TopLevel │ ├── APIException.md │ ├── arguments.md │ ├── Array.md │ ├── ArrayBuffer.md │ ├── BigInt.md │ ├── Boolean.md │ ├── ConversionError.md │ ├── DataView.md │ ├── Date.md │ ├── Error.md │ ├── ES6Iterator.md │ ├── EvalError.md │ ├── Fault.md │ ├── Float32Array.md │ ├── Float64Array.md │ ├── Function.md │ ├── Generator.md │ ├── global.md │ ├── Int16Array.md │ ├── Int32Array.md │ ├── Int8Array.md │ ├── InternalError.md │ ├── IOError.md │ ├── Iterable.md │ ├── Iterator.md │ ├── JSON.md │ ├── Map.md │ ├── Math.md │ ├── Module.md │ ├── Namespace.md │ ├── Number.md │ ├── Object.md │ ├── QName.md │ ├── RangeError.md │ ├── ReferenceError.md │ ├── RegExp.md │ ├── Set.md │ ├── StopIteration.md │ ├── String.md │ ├── Symbol.md │ ├── SyntaxError.md │ ├── SystemError.md │ ├── TypeError.md │ ├── Uint16Array.md │ ├── Uint32Array.md │ ├── Uint8Array.md │ ├── Uint8ClampedArray.md │ ├── URIError.md │ ├── WeakMap.md │ ├── WeakSet.md │ ├── XML.md │ ├── XMLList.md │ └── XMLStreamError.md ├── docs-site │ ├── .gitignore │ ├── App.tsx │ ├── components │ │ ├── Badge.tsx │ │ ├── BreadcrumbSchema.tsx │ │ ├── CodeBlock.tsx │ │ ├── Collapsible.tsx │ │ ├── ConfigBuilder.tsx │ │ ├── ConfigHero.tsx │ │ ├── ConfigModeTabs.tsx │ │ ├── icons.tsx │ │ ├── Layout.tsx │ │ ├── LightCodeContainer.tsx │ │ ├── NewcomerCTA.tsx │ │ ├── NextStepsStrip.tsx │ │ ├── OnThisPage.tsx │ │ ├── Search.tsx │ │ ├── SEO.tsx │ │ ├── Sidebar.tsx │ │ ├── StructuredData.tsx │ │ ├── ToolCard.tsx │ │ ├── ToolFilters.tsx │ │ ├── Typography.tsx │ │ └── VersionBadge.tsx │ ├── constants.tsx │ ├── index.html │ ├── main.tsx │ ├── metadata.json │ ├── package-lock.json │ ├── package.json │ ├── pages │ │ ├── AIInterfacesPage.tsx │ │ ├── ConfigurationPage.tsx │ │ ├── DevelopmentPage.tsx │ │ ├── ExamplesPage.tsx │ │ ├── FeaturesPage.tsx │ │ ├── HomePage.tsx │ │ ├── SecurityPage.tsx │ │ ├── ToolsPage.tsx │ │ └── TroubleshootingPage.tsx │ ├── postcss.config.js │ ├── public │ │ ├── .well-known │ │ │ └── security.txt │ │ ├── 404.html │ │ ├── android-chrome-192x192.png │ │ ├── android-chrome-512x512.png │ │ ├── apple-touch-icon.png │ │ ├── explain-product-pricing-methods-no-mcp.png │ │ ├── explain-product-pricing-methods.png │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon.ico │ │ ├── llms.txt │ │ ├── robots.txt │ │ ├── site.webmanifest │ │ └── sitemap.xml │ ├── README.md │ ├── scripts │ │ ├── generate-search-index.js │ │ ├── generate-sitemap.js │ │ └── search-dev.js │ ├── src │ │ └── styles │ │ ├── input.css │ │ └── prism-theme.css │ ├── tailwind.config.js │ ├── tsconfig.json │ ├── types.ts │ ├── utils │ │ ├── search.ts │ │ └── toolsData.ts │ └── vite.config.ts ├── eslint.config.js ├── jest.config.js ├── LICENSE ├── package-lock.json ├── package.json ├── README.md ├── scripts │ └── convert-docs.js ├── SECURITY.md ├── server.json ├── src │ ├── clients │ │ ├── base │ │ │ ├── http-client.ts │ │ │ ├── oauth-token.ts │ │ │ └── ocapi-auth-client.ts │ │ ├── best-practices-client.ts │ │ ├── cartridge-generation-client.ts │ │ ├── docs │ │ │ ├── class-content-parser.ts │ │ │ ├── class-name-resolver.ts │ │ │ ├── documentation-scanner.ts │ │ │ ├── index.ts │ │ │ └── referenced-types-extractor.ts │ │ ├── docs-client.ts │ │ ├── log-client.ts │ │ ├── logs │ │ │ ├── index.ts │ │ │ ├── log-analyzer.ts │ │ │ ├── log-client.ts │ │ │ ├── log-constants.ts │ │ │ ├── log-file-discovery.ts │ │ │ ├── log-file-reader.ts │ │ │ ├── log-formatter.ts │ │ │ ├── log-processor.ts │ │ │ ├── log-types.ts │ │ │ └── webdav-client-manager.ts │ │ ├── ocapi │ │ │ ├── code-versions-client.ts │ │ │ ├── site-preferences-client.ts │ │ │ └── system-objects-client.ts │ │ ├── ocapi-client.ts │ │ └── sfra-client.ts │ ├── config │ │ ├── configuration-factory.ts │ │ └── dw-json-loader.ts │ ├── core │ │ ├── handlers │ │ │ ├── abstract-log-tool-handler.ts │ │ │ ├── base-handler.ts │ │ │ ├── best-practices-handler.ts │ │ │ ├── cartridge-handler.ts │ │ │ ├── client-factory.ts │ │ │ ├── code-version-handler.ts │ │ │ ├── docs-handler.ts │ │ │ ├── job-log-handler.ts │ │ │ ├── job-log-tool-config.ts │ │ │ ├── log-handler.ts │ │ │ ├── log-tool-config.ts │ │ │ ├── sfra-handler.ts │ │ │ ├── system-object-handler.ts │ │ │ └── validation-helpers.ts │ │ ├── server.ts │ │ └── tool-definitions.ts │ ├── index.ts │ ├── main.ts │ ├── services │ │ ├── file-system-service.ts │ │ ├── index.ts │ │ └── path-service.ts │ ├── tool-configs │ │ ├── best-practices-tool-config.ts │ │ ├── cartridge-tool-config.ts │ │ ├── code-version-tool-config.ts │ │ ├── docs-tool-config.ts │ │ ├── job-log-tool-config.ts │ │ ├── log-tool-config.ts │ │ ├── sfra-tool-config.ts │ │ └── system-object-tool-config.ts │ ├── types │ │ └── types.ts │ └── utils │ ├── cache.ts │ ├── job-log-tool-config.ts │ ├── job-log-utils.ts │ ├── log-cache.ts │ ├── log-tool-config.ts │ ├── log-tool-constants.ts │ ├── log-tool-utils.ts │ ├── logger.ts │ ├── ocapi-url-builder.ts │ ├── path-resolver.ts │ ├── query-builder.ts │ ├── utils.ts │ └── validator.ts ├── tests │ ├── __mocks__ │ │ ├── docs-client.ts │ │ ├── src │ │ │ └── clients │ │ │ └── base │ │ │ └── http-client.js │ │ └── webdav.js │ ├── base-handler.test.ts │ ├── base-http-client.test.ts │ ├── best-practices-handler.test.ts │ ├── cache.test.ts │ ├── cartridge-handler.test.ts │ ├── class-content-parser.test.ts │ ├── class-name-resolver.test.ts │ ├── client-factory.test.ts │ ├── code-version-handler.test.ts │ ├── code-versions-client.test.ts │ ├── config.test.ts │ ├── configuration-factory.test.ts │ ├── docs-handler.test.ts │ ├── documentation-scanner.test.ts │ ├── file-system-service.test.ts │ ├── job-log-handler.test.ts │ ├── job-log-utils.test.ts │ ├── log-client.test.ts │ ├── log-handler.test.ts │ ├── log-processor.test.ts │ ├── logger.test.ts │ ├── mcp │ │ ├── AGENTS.md │ │ ├── node │ │ │ ├── activate-code-version-advanced.full-mode.programmatic.test.js │ │ │ ├── code-versions.full-mode.programmatic.test.js │ │ │ ├── generate-cartridge-structure.docs-only.programmatic.test.js │ │ │ ├── get-available-best-practice-guides.docs-only.programmatic.test.js │ │ │ ├── get-available-sfra-documents.programmatic.test.js │ │ │ ├── get-best-practice-guide.docs-only.programmatic.test.js │ │ │ ├── get-hook-reference.docs-only.programmatic.test.js │ │ │ ├── get-job-execution-summary.full-mode.programmatic.test.js │ │ │ ├── get-job-log-entries.full-mode.programmatic.test.js │ │ │ ├── get-latest-debug.full-mode.programmatic.test.js │ │ │ ├── get-latest-error.full-mode.programmatic.test.js │ │ │ ├── get-latest-info.full-mode.programmatic.test.js │ │ │ ├── get-latest-job-log-files.full-mode.programmatic.test.js │ │ │ ├── get-latest-warn.full-mode.programmatic.test.js │ │ │ ├── get-log-file-contents.full-mode.programmatic.test.js │ │ │ ├── get-sfcc-class-documentation.docs-only.programmatic.test.js │ │ │ ├── get-sfcc-class-info.docs-only.programmatic.test.js │ │ │ ├── get-sfra-categories.docs-only.programmatic.test.js │ │ │ ├── get-sfra-document.programmatic.test.js │ │ │ ├── get-sfra-documents-by-category.docs-only.programmatic.test.js │ │ │ ├── get-system-object-definition.full-mode.programmatic.test.js │ │ │ ├── get-system-object-definitions.docs-only.programmatic.test.js │ │ │ ├── get-system-object-definitions.full-mode.programmatic.test.js │ │ │ ├── list-log-files.full-mode.programmatic.test.js │ │ │ ├── list-sfcc-classes.docs-only.programmatic.test.js │ │ │ ├── search-best-practices.docs-only.programmatic.test.js │ │ │ ├── search-custom-object-attribute-definitions.full-mode.programmatic.test.js │ │ │ ├── search-job-logs-by-name.full-mode.programmatic.test.js │ │ │ ├── search-job-logs.full-mode.programmatic.test.js │ │ │ ├── search-logs.full-mode.programmatic.test.js │ │ │ ├── search-sfcc-classes.docs-only.programmatic.test.js │ │ │ ├── search-sfcc-methods.docs-only.programmatic.test.js │ │ │ ├── search-sfra-documentation.docs-only.programmatic.test.js │ │ │ ├── search-site-preferences.full-mode.programmatic.test.js │ │ │ ├── search-system-object-attribute-definitions.full-mode.programmatic.test.js │ │ │ ├── search-system-object-attribute-groups.full-mode.programmatic.test.js │ │ │ ├── summarize-logs.full-mode.programmatic.test.js │ │ │ ├── tools.docs-only.programmatic.test.js │ │ │ └── tools.full-mode.programmatic.test.js │ │ ├── README.md │ │ ├── test-fixtures │ │ │ └── dw.json │ │ └── yaml │ │ ├── activate-code-version.docs-only.test.mcp.yml │ │ ├── activate-code-version.full-mode.test.mcp.yml │ │ ├── get_latest_error.test.mcp.yml │ │ ├── get-available-best-practice-guides.docs-only.test.mcp.yml │ │ ├── get-available-best-practice-guides.full-mode.test.mcp.yml │ │ ├── get-available-sfra-documents.docs-only.test.mcp.yml │ │ ├── get-available-sfra-documents.full-mode.test.mcp.yml │ │ ├── get-best-practice-guide.docs-only.test.mcp.yml │ │ ├── get-best-practice-guide.full-mode.test.mcp.yml │ │ ├── get-code-versions.docs-only.test.mcp.yml │ │ ├── get-code-versions.full-mode.test.mcp.yml │ │ ├── get-hook-reference.docs-only.test.mcp.yml │ │ ├── get-hook-reference.full-mode.test.mcp.yml │ │ ├── get-job-execution-summary.full-mode.test.mcp.yml │ │ ├── get-job-log-entries.full-mode.test.mcp.yml │ │ ├── get-latest-debug.full-mode.test.mcp.yml │ │ ├── get-latest-error.full-mode.test.mcp.yml │ │ ├── get-latest-info.full-mode.test.mcp.yml │ │ ├── get-latest-job-log-files.full-mode.test.mcp.yml │ │ ├── get-latest-warn.full-mode.test.mcp.yml │ │ ├── get-log-file-contents.full-mode.test.mcp.yml │ │ ├── get-sfcc-class-documentation.docs-only.test.mcp.yml │ │ ├── get-sfcc-class-documentation.full-mode.test.mcp.yml │ │ ├── get-sfcc-class-info.docs-only.test.mcp.yml │ │ ├── get-sfcc-class-info.full-mode.test.mcp.yml │ │ ├── get-sfra-categories.docs-only.test.mcp.yml │ │ ├── get-sfra-categories.full-mode.test.mcp.yml │ │ ├── get-sfra-document.docs-only.test.mcp.yml │ │ ├── get-sfra-document.full-mode.test.mcp.yml │ │ ├── get-sfra-documents-by-category.docs-only.test.mcp.yml │ │ ├── get-sfra-documents-by-category.full-mode.test.mcp.yml │ │ ├── get-system-object-definition.docs-only.test.mcp.yml │ │ ├── get-system-object-definition.full-mode.test.mcp.yml │ │ ├── get-system-object-definitions.docs-only.test.mcp.yml │ │ ├── get-system-object-definitions.full-mode.test.mcp.yml │ │ ├── list-log-files.full-mode.test.mcp.yml │ │ ├── list-sfcc-classes.docs-only.test.mcp.yml │ │ ├── list-sfcc-classes.full-mode.test.mcp.yml │ │ ├── search-best-practices.docs-only.test.mcp.yml │ │ ├── search-best-practices.full-mode.test.mcp.yml │ │ ├── search-custom-object-attribute-definitions.docs-only.test.mcp.yml │ │ ├── search-custom-object-attribute-definitions.test.mcp.yml │ │ ├── search-job-logs-by-name.full-mode.test.mcp.yml │ │ ├── search-job-logs.full-mode.test.mcp.yml │ │ ├── search-logs.full-mode.test.mcp.yml │ │ ├── search-sfcc-classes.docs-only.test.mcp.yml │ │ ├── search-sfcc-classes.full-mode.test.mcp.yml │ │ ├── search-sfcc-methods.docs-only.test.mcp.yml │ │ ├── search-sfcc-methods.full-mode.test.mcp.yml │ │ ├── search-sfra-documentation.docs-only.test.mcp.yml │ │ ├── search-sfra-documentation.full-mode.test.mcp.yml │ │ ├── search-site-preferences.docs-only.test.mcp.yml │ │ ├── search-site-preferences.full-mode.test.mcp.yml │ │ ├── search-system-object-attribute-definitions.docs-only.test.mcp.yml │ │ ├── search-system-object-attribute-definitions.full-mode.test.mcp.yml │ │ ├── search-system-object-attribute-groups.docs-only.test.mcp.yml │ │ ├── search-system-object-attribute-groups.full-mode.test.mcp.yml │ │ ├── summarize-logs.full-mode.test.mcp.yml │ │ ├── tools.docs-only.test.mcp.yml │ │ └── tools.full-mode.test.mcp.yml │ ├── oauth-token.test.ts │ ├── ocapi-auth-client.test.ts │ ├── ocapi-client.test.ts │ ├── path-service.test.ts │ ├── query-builder.test.ts │ ├── referenced-types-extractor.test.ts │ ├── servers │ │ ├── sfcc-mock-server │ │ │ ├── mock-data │ │ │ │ └── ocapi │ │ │ │ ├── code-versions.json │ │ │ │ ├── custom-object-attributes-customapi.json │ │ │ │ ├── custom-object-attributes-globalsettings.json │ │ │ │ ├── custom-object-attributes-versionhistory.json │ │ │ │ ├── site-preferences-ccv.json │ │ │ │ ├── site-preferences-fastforward.json │ │ │ │ ├── site-preferences-sfra.json │ │ │ │ ├── site-preferences-storefront.json │ │ │ │ ├── site-preferences-system.json │ │ │ │ ├── system-object-attribute-groups-campaign.json │ │ │ │ ├── system-object-attribute-groups-category.json │ │ │ │ ├── system-object-attribute-groups-order.json │ │ │ │ ├── system-object-attribute-groups-product.json │ │ │ │ ├── system-object-attribute-groups-sitepreferences.json │ │ │ │ ├── system-object-attributes-customeraddress.json │ │ │ │ ├── system-object-attributes-product-expanded.json │ │ │ │ ├── system-object-attributes-product.json │ │ │ │ ├── system-object-definition-category.json │ │ │ │ ├── system-object-definition-customer.json │ │ │ │ ├── system-object-definition-customeraddress.json │ │ │ │ ├── system-object-definition-order.json │ │ │ │ ├── system-object-definition-product.json │ │ │ │ ├── system-object-definitions-old.json │ │ │ │ └── system-object-definitions.json │ │ │ ├── package-lock.json │ │ │ ├── package.json │ │ │ ├── README.md │ │ │ ├── scripts │ │ │ │ └── setup-logs.js │ │ │ ├── server.js │ │ │ └── src │ │ │ ├── app.js │ │ │ ├── config │ │ │ │ └── server-config.js │ │ │ ├── middleware │ │ │ │ ├── auth.js │ │ │ │ ├── cors.js │ │ │ │ └── logging.js │ │ │ ├── routes │ │ │ │ ├── ocapi │ │ │ │ │ ├── code-versions-handler.js │ │ │ │ │ ├── oauth-handler.js │ │ │ │ │ ├── ocapi-error-utils.js │ │ │ │ │ ├── ocapi-utils.js │ │ │ │ │ ├── site-preferences-handler.js │ │ │ │ │ └── system-objects-handler.js │ │ │ │ ├── ocapi.js │ │ │ │ └── webdav.js │ │ │ └── utils │ │ │ ├── mock-data-loader.js │ │ │ └── webdav-xml.js │ │ └── sfcc-mock-server-manager.ts │ ├── sfcc-mock-server.test.ts │ ├── site-preferences-client.test.ts │ ├── system-objects-client.test.ts │ ├── utils.test.ts │ ├── validation-helpers.test.ts │ └── validator.test.ts ├── tsconfig.json └── tsconfig.test.json ``` # Files -------------------------------------------------------------------------------- /tests/mcp/yaml/get-sfcc-class-documentation.docs-only.test.mcp.yml: -------------------------------------------------------------------------------- ```yaml 1 | # ================================================================================== 2 | # SFCC MCP Server - get_sfcc_class_documentation Tool YAML Tests 3 | # Comprehensive testing for SFCC class documentation retrieval functionality 4 | # Tests both successful responses and error handling scenarios 5 | # 6 | # Quick Test Commands: 7 | # aegis "tests/mcp/yaml/get-sfcc-class-documentation.docs-only.test.mcp.yml" --config "aegis.config.docs-only.json" --verbose 8 | # aegis "tests/mcp/yaml/get-sfcc-class-documentation.docs-only.test.mcp.yml" --config "aegis.config.docs-only.json" --debug --timing 9 | # aegis query get_sfcc_class_documentation '{"className": "dw.catalog.Product"}' --config "aegis.config.docs-only.json" 10 | # aegis query get_sfcc_class_documentation '{"className": "dw.order.Order"}' --config "aegis.config.docs-only.json" 11 | # ================================================================================== 12 | description: "SFCC MCP Server get_sfcc_class_documentation tool - comprehensive validation" 13 | 14 | # ================================================================================== 15 | # BASIC TOOL STRUCTURE VALIDATION 16 | # ================================================================================== 17 | tests: 18 | - it: "should list get_sfcc_class_documentation tool in available tools" 19 | request: 20 | jsonrpc: "2.0" 21 | id: "tool-available" 22 | method: "tools/list" 23 | params: {} 24 | expect: 25 | response: 26 | jsonrpc: "2.0" 27 | id: "tool-available" 28 | result: 29 | match:extractField: "tools.*.name" 30 | value: "match:arrayContains:get_sfcc_class_documentation" 31 | stderr: "toBeEmpty" 32 | 33 | - it: "should have get_sfcc_class_documentation in tools list with proper structure" 34 | request: 35 | jsonrpc: "2.0" 36 | id: "tool-metadata" 37 | method: "tools/list" 38 | params: {} 39 | expect: 40 | response: 41 | jsonrpc: "2.0" 42 | id: "tool-metadata" 43 | result: 44 | tools: "match:arrayContains:name:get_sfcc_class_documentation" 45 | stderr: "toBeEmpty" 46 | 47 | - it: "should have tool with meaningful description" 48 | request: 49 | jsonrpc: "2.0" 50 | id: "tool-description-quality" 51 | method: "tools/list" 52 | params: {} 53 | expect: 54 | response: 55 | jsonrpc: "2.0" 56 | id: "tool-description-quality" 57 | result: 58 | tools: 59 | match:arrayElements: 60 | match:partial: 61 | name: "match:type:string" 62 | description: "match:regex:.{20,}" # At least 20 characters 63 | stderr: "toBeEmpty" 64 | 65 | - it: "should have proper inputSchema structure for get_sfcc_class_documentation" 66 | request: 67 | jsonrpc: "2.0" 68 | id: "tool-schema-structure" 69 | method: "tools/list" 70 | params: {} 71 | expect: 72 | response: 73 | jsonrpc: "2.0" 74 | id: "tool-schema-structure" 75 | result: 76 | tools: 77 | match:arrayElements: 78 | match:partial: 79 | name: "match:type:string" 80 | inputSchema: 81 | type: "object" 82 | properties: "match:type:object" 83 | stderr: "toBeEmpty" 84 | 85 | # ================================================================================== 86 | # SUCCESSFUL EXECUTION TESTS - CORE CLASSES 87 | # ================================================================================== 88 | 89 | - it: "should execute with dw.catalog.Product class" 90 | request: 91 | jsonrpc: "2.0" 92 | id: "exec-product-basic" 93 | method: "tools/call" 94 | params: 95 | name: "get_sfcc_class_documentation" 96 | arguments: 97 | className: "dw.catalog.Product" 98 | expect: 99 | response: 100 | jsonrpc: "2.0" 101 | id: "exec-product-basic" 102 | result: 103 | content: 104 | - type: "text" 105 | text: "match:contains:## Package: dw.catalog" 106 | isError: false 107 | stderr: "toBeEmpty" 108 | 109 | - it: "should return complete documentation for dw.catalog.Product" 110 | request: 111 | jsonrpc: "2.0" 112 | id: "exec-product-complete" 113 | method: "tools/call" 114 | params: 115 | name: "get_sfcc_class_documentation" 116 | arguments: 117 | className: "dw.catalog.Product" 118 | expect: 119 | response: 120 | jsonrpc: "2.0" 121 | id: "exec-product-complete" 122 | result: 123 | content: 124 | - type: "text" 125 | text: "match:contains:# Class Product" 126 | isError: false 127 | stderr: "toBeEmpty" 128 | 129 | - it: "should include inheritance hierarchy in Product documentation" 130 | request: 131 | jsonrpc: "2.0" 132 | id: "exec-product-inheritance" 133 | method: "tools/call" 134 | params: 135 | name: "get_sfcc_class_documentation" 136 | arguments: 137 | className: "dw.catalog.Product" 138 | expect: 139 | response: 140 | jsonrpc: "2.0" 141 | id: "exec-product-inheritance" 142 | result: 143 | content: 144 | - type: "text" 145 | text: "match:contains:## Inheritance Hierarchy" 146 | isError: false 147 | stderr: "toBeEmpty" 148 | 149 | - it: "should include properties section in Product documentation" 150 | request: 151 | jsonrpc: "2.0" 152 | id: "exec-product-properties" 153 | method: "tools/call" 154 | params: 155 | name: "get_sfcc_class_documentation" 156 | arguments: 157 | className: "dw.catalog.Product" 158 | expect: 159 | response: 160 | jsonrpc: "2.0" 161 | id: "exec-product-properties" 162 | result: 163 | content: 164 | - type: "text" 165 | text: "match:contains:## Properties" 166 | isError: false 167 | stderr: "toBeEmpty" 168 | 169 | - it: "should include method summary in Product documentation" 170 | request: 171 | jsonrpc: "2.0" 172 | id: "exec-product-methods" 173 | method: "tools/call" 174 | params: 175 | name: "get_sfcc_class_documentation" 176 | arguments: 177 | className: "dw.catalog.Product" 178 | expect: 179 | response: 180 | jsonrpc: "2.0" 181 | id: "exec-product-methods" 182 | result: 183 | content: 184 | - type: "text" 185 | text: "match:contains:## Method Summary" 186 | isError: false 187 | stderr: "toBeEmpty" 188 | 189 | - it: "should include method details in Product documentation" 190 | request: 191 | jsonrpc: "2.0" 192 | id: "exec-product-method-details" 193 | method: "tools/call" 194 | params: 195 | name: "get_sfcc_class_documentation" 196 | arguments: 197 | className: "dw.catalog.Product" 198 | expect: 199 | response: 200 | jsonrpc: "2.0" 201 | id: "exec-product-method-details" 202 | result: 203 | content: 204 | - type: "text" 205 | text: "match:contains:## Method Details" 206 | isError: false 207 | stderr: "toBeEmpty" 208 | 209 | # ================================================================================== 210 | # CLASS NAME VARIATIONS TESTING 211 | # ================================================================================== 212 | 213 | - it: "should work with fully qualified class names" 214 | request: 215 | jsonrpc: "2.0" 216 | id: "exec-fqn" 217 | method: "tools/call" 218 | params: 219 | name: "get_sfcc_class_documentation" 220 | arguments: 221 | className: "dw.catalog.Product" 222 | expect: 223 | response: 224 | jsonrpc: "2.0" 225 | id: "exec-fqn" 226 | result: 227 | content: 228 | - type: "text" 229 | text: "match:contains:dw.catalog.Product" 230 | isError: false 231 | stderr: "toBeEmpty" 232 | 233 | - it: "should work with dw.order.Order class" 234 | request: 235 | jsonrpc: "2.0" 236 | id: "exec-order-class" 237 | method: "tools/call" 238 | params: 239 | name: "get_sfcc_class_documentation" 240 | arguments: 241 | className: "dw.order.Order" 242 | expect: 243 | response: 244 | jsonrpc: "2.0" 245 | id: "exec-order-class" 246 | result: 247 | content: 248 | - type: "text" 249 | text: "match:contains:## Package: dw.order" 250 | isError: false 251 | stderr: "toBeEmpty" 252 | 253 | - it: "should work with dw.system.Site class" 254 | request: 255 | jsonrpc: "2.0" 256 | id: "exec-site-class" 257 | method: "tools/call" 258 | params: 259 | name: "get_sfcc_class_documentation" 260 | arguments: 261 | className: "dw.system.Site" 262 | expect: 263 | response: 264 | jsonrpc: "2.0" 265 | id: "exec-site-class" 266 | result: 267 | content: 268 | - type: "text" 269 | text: "match:contains:# Class Site" 270 | isError: false 271 | stderr: "toBeEmpty" 272 | 273 | - it: "should work with dw.customer.Customer class" 274 | request: 275 | jsonrpc: "2.0" 276 | id: "exec-customer-class" 277 | method: "tools/call" 278 | params: 279 | name: "get_sfcc_class_documentation" 280 | arguments: 281 | className: "dw.customer.Customer" 282 | expect: 283 | response: 284 | jsonrpc: "2.0" 285 | id: "exec-customer-class" 286 | result: 287 | content: 288 | - type: "text" 289 | text: "match:contains:dw.customer.Customer" 290 | isError: false 291 | stderr: "toBeEmpty" 292 | 293 | # ================================================================================== 294 | # CORE SFCC CLASSES VALIDATION - TOP 15 MOST IMPORTANT CLASSES 295 | # ================================================================================== 296 | 297 | - it: "should return documentation for dw.catalog.Catalog class" 298 | request: 299 | jsonrpc: "2.0" 300 | id: "core-catalog" 301 | method: "tools/call" 302 | params: 303 | name: "get_sfcc_class_documentation" 304 | arguments: 305 | className: "dw.catalog.Catalog" 306 | expect: 307 | response: 308 | jsonrpc: "2.0" 309 | id: "core-catalog" 310 | result: 311 | content: 312 | - type: "text" 313 | text: "match:contains:# Class Catalog" 314 | isError: false 315 | stderr: "toBeEmpty" 316 | 317 | - it: "should return documentation for dw.catalog.Category class" 318 | request: 319 | jsonrpc: "2.0" 320 | id: "core-category" 321 | method: "tools/call" 322 | params: 323 | name: "get_sfcc_class_documentation" 324 | arguments: 325 | className: "dw.catalog.Category" 326 | expect: 327 | response: 328 | jsonrpc: "2.0" 329 | id: "core-category" 330 | result: 331 | content: 332 | - type: "text" 333 | text: "match:contains:## Package: dw.catalog" 334 | isError: false 335 | stderr: "toBeEmpty" 336 | 337 | - it: "should return documentation for dw.order.Basket class" 338 | request: 339 | jsonrpc: "2.0" 340 | id: "core-basket" 341 | method: "tools/call" 342 | params: 343 | name: "get_sfcc_class_documentation" 344 | arguments: 345 | className: "dw.order.Basket" 346 | expect: 347 | response: 348 | jsonrpc: "2.0" 349 | id: "core-basket" 350 | result: 351 | content: 352 | - type: "text" 353 | text: "match:contains:# Class Basket" 354 | isError: false 355 | stderr: "toBeEmpty" 356 | 357 | - it: "should return documentation for dw.order.ProductLineItem class" 358 | request: 359 | jsonrpc: "2.0" 360 | id: "core-lineitem" 361 | method: "tools/call" 362 | params: 363 | name: "get_sfcc_class_documentation" 364 | arguments: 365 | className: "dw.order.ProductLineItem" 366 | expect: 367 | response: 368 | jsonrpc: "2.0" 369 | id: "core-lineitem" 370 | result: 371 | content: 372 | - type: "text" 373 | text: "match:contains:ProductLineItem" 374 | isError: false 375 | stderr: "toBeEmpty" 376 | 377 | - it: "should return documentation for dw.customer.CustomerMgr class" 378 | request: 379 | jsonrpc: "2.0" 380 | id: "core-customermgr" 381 | method: "tools/call" 382 | params: 383 | name: "get_sfcc_class_documentation" 384 | arguments: 385 | className: "dw.customer.CustomerMgr" 386 | expect: 387 | response: 388 | jsonrpc: "2.0" 389 | id: "core-customermgr" 390 | result: 391 | content: 392 | - type: "text" 393 | text: "match:contains:CustomerMgr" 394 | isError: false 395 | stderr: "toBeEmpty" 396 | 397 | - it: "should return documentation for dw.system.Session class" 398 | request: 399 | jsonrpc: "2.0" 400 | id: "core-session" 401 | method: "tools/call" 402 | params: 403 | name: "get_sfcc_class_documentation" 404 | arguments: 405 | className: "dw.system.Session" 406 | expect: 407 | response: 408 | jsonrpc: "2.0" 409 | id: "core-session" 410 | result: 411 | content: 412 | - type: "text" 413 | text: "match:contains:# Class Session" 414 | isError: false 415 | stderr: "toBeEmpty" 416 | 417 | - it: "should return documentation for dw.system.Request class" 418 | request: 419 | jsonrpc: "2.0" 420 | id: "core-request" 421 | method: "tools/call" 422 | params: 423 | name: "get_sfcc_class_documentation" 424 | arguments: 425 | className: "dw.system.Request" 426 | expect: 427 | response: 428 | jsonrpc: "2.0" 429 | id: "core-request" 430 | result: 431 | content: 432 | - type: "text" 433 | text: "match:contains:## Package: dw.system" 434 | isError: false 435 | stderr: "toBeEmpty" 436 | 437 | - it: "should return documentation for dw.system.Response class" 438 | request: 439 | jsonrpc: "2.0" 440 | id: "core-response" 441 | method: "tools/call" 442 | params: 443 | name: "get_sfcc_class_documentation" 444 | arguments: 445 | className: "dw.system.Response" 446 | expect: 447 | response: 448 | jsonrpc: "2.0" 449 | id: "core-response" 450 | result: 451 | content: 452 | - type: "text" 453 | text: "match:contains:# Class Response" 454 | isError: false 455 | stderr: "toBeEmpty" 456 | 457 | - it: "should return documentation for dw.web.URLUtils class" 458 | request: 459 | jsonrpc: "2.0" 460 | id: "core-urlutils" 461 | method: "tools/call" 462 | params: 463 | name: "get_sfcc_class_documentation" 464 | arguments: 465 | className: "dw.web.URLUtils" 466 | expect: 467 | response: 468 | jsonrpc: "2.0" 469 | id: "core-urlutils" 470 | result: 471 | content: 472 | - type: "text" 473 | text: "match:contains:URLUtils" 474 | isError: false 475 | stderr: "toBeEmpty" 476 | 477 | - it: "should return documentation for dw.catalog.ProductMgr class" 478 | request: 479 | jsonrpc: "2.0" 480 | id: "core-productmgr" 481 | method: "tools/call" 482 | params: 483 | name: "get_sfcc_class_documentation" 484 | arguments: 485 | className: "dw.catalog.ProductMgr" 486 | expect: 487 | response: 488 | jsonrpc: "2.0" 489 | id: "core-productmgr" 490 | result: 491 | content: 492 | - type: "text" 493 | text: "match:contains:ProductMgr" 494 | isError: false 495 | stderr: "toBeEmpty" 496 | 497 | - it: "should return documentation for dw.order.OrderMgr class" 498 | request: 499 | jsonrpc: "2.0" 500 | id: "core-ordermgr" 501 | method: "tools/call" 502 | params: 503 | name: "get_sfcc_class_documentation" 504 | arguments: 505 | className: "dw.order.OrderMgr" 506 | expect: 507 | response: 508 | jsonrpc: "2.0" 509 | id: "core-ordermgr" 510 | result: 511 | content: 512 | - type: "text" 513 | text: "match:contains:# Class OrderMgr" 514 | isError: false 515 | stderr: "toBeEmpty" 516 | 517 | - it: "should return documentation for dw.order.BasketMgr class" 518 | request: 519 | jsonrpc: "2.0" 520 | id: "core-basketmgr" 521 | method: "tools/call" 522 | params: 523 | name: "get_sfcc_class_documentation" 524 | arguments: 525 | className: "dw.order.BasketMgr" 526 | expect: 527 | response: 528 | jsonrpc: "2.0" 529 | id: "core-basketmgr" 530 | result: 531 | content: 532 | - type: "text" 533 | text: "match:contains:BasketMgr" 534 | isError: false 535 | stderr: "toBeEmpty" 536 | 537 | - it: "should return documentation for dw.util.ArrayList class" 538 | request: 539 | jsonrpc: "2.0" 540 | id: "core-arraylist" 541 | method: "tools/call" 542 | params: 543 | name: "get_sfcc_class_documentation" 544 | arguments: 545 | className: "dw.util.ArrayList" 546 | expect: 547 | response: 548 | jsonrpc: "2.0" 549 | id: "core-arraylist" 550 | result: 551 | content: 552 | - type: "text" 553 | text: "match:contains:ArrayList" 554 | isError: false 555 | stderr: "toBeEmpty" 556 | 557 | - it: "should return documentation for dw.util.HashMap class" 558 | request: 559 | jsonrpc: "2.0" 560 | id: "core-hashmap" 561 | method: "tools/call" 562 | params: 563 | name: "get_sfcc_class_documentation" 564 | arguments: 565 | className: "dw.util.HashMap" 566 | expect: 567 | response: 568 | jsonrpc: "2.0" 569 | id: "core-hashmap" 570 | result: 571 | content: 572 | - type: "text" 573 | text: "match:contains:# Class HashMap" 574 | isError: false 575 | stderr: "toBeEmpty" 576 | 577 | - it: "should return documentation for dw.value.Money class" 578 | request: 579 | jsonrpc: "2.0" 580 | id: "core-money" 581 | method: "tools/call" 582 | params: 583 | name: "get_sfcc_class_documentation" 584 | arguments: 585 | className: "dw.value.Money" 586 | expect: 587 | response: 588 | jsonrpc: "2.0" 589 | id: "core-money" 590 | result: 591 | content: 592 | - type: "text" 593 | text: "match:contains:## Package: dw.value" 594 | isError: false 595 | stderr: "toBeEmpty" 596 | 597 | # ================================================================================== 598 | # EXTENDED SFCC CLASSES VALIDATION - 30 ADDITIONAL IMPORTANT CLASSES 599 | # ================================================================================== 600 | 601 | - it: "should return documentation for dw.content.ContentMgr class" 602 | request: 603 | jsonrpc: "2.0" 604 | id: "ext-contentmgr" 605 | method: "tools/call" 606 | params: 607 | name: "get_sfcc_class_documentation" 608 | arguments: 609 | className: "dw.content.ContentMgr" 610 | expect: 611 | response: 612 | jsonrpc: "2.0" 613 | id: "ext-contentmgr" 614 | result: 615 | content: 616 | - type: "text" 617 | text: "match:contains:ContentMgr" 618 | isError: false 619 | stderr: "toBeEmpty" 620 | 621 | - it: "should return documentation for dw.content.Content class" 622 | request: 623 | jsonrpc: "2.0" 624 | id: "ext-content" 625 | method: "tools/call" 626 | params: 627 | name: "get_sfcc_class_documentation" 628 | arguments: 629 | className: "dw.content.Content" 630 | expect: 631 | response: 632 | jsonrpc: "2.0" 633 | id: "ext-content" 634 | result: 635 | content: 636 | - type: "text" 637 | text: "match:contains:# Class Content" 638 | isError: false 639 | stderr: "toBeEmpty" 640 | 641 | - it: "should return documentation for dw.catalog.ProductSearchModel class" 642 | request: 643 | jsonrpc: "2.0" 644 | id: "ext-productsearch" 645 | method: "tools/call" 646 | params: 647 | name: "get_sfcc_class_documentation" 648 | arguments: 649 | className: "dw.catalog.ProductSearchModel" 650 | expect: 651 | response: 652 | jsonrpc: "2.0" 653 | id: "ext-productsearch" 654 | result: 655 | content: 656 | - type: "text" 657 | text: "match:contains:ProductSearchModel" 658 | isError: false 659 | stderr: "toBeEmpty" 660 | 661 | - it: "should return documentation for dw.catalog.SearchModel class" 662 | request: 663 | jsonrpc: "2.0" 664 | id: "ext-searchmodel" 665 | method: "tools/call" 666 | params: 667 | name: "get_sfcc_class_documentation" 668 | arguments: 669 | className: "dw.catalog.SearchModel" 670 | expect: 671 | response: 672 | jsonrpc: "2.0" 673 | id: "ext-searchmodel" 674 | result: 675 | content: 676 | - type: "text" 677 | text: "match:contains:SearchModel" 678 | isError: false 679 | stderr: "toBeEmpty" 680 | 681 | - it: "should return documentation for dw.catalog.PriceBook class" 682 | request: 683 | jsonrpc: "2.0" 684 | id: "ext-pricebook" 685 | method: "tools/call" 686 | params: 687 | name: "get_sfcc_class_documentation" 688 | arguments: 689 | className: "dw.catalog.PriceBook" 690 | expect: 691 | response: 692 | jsonrpc: "2.0" 693 | id: "ext-pricebook" 694 | result: 695 | content: 696 | - type: "text" 697 | text: "match:contains:PriceBook" 698 | isError: false 699 | stderr: "toBeEmpty" 700 | 701 | - it: "should return documentation for dw.catalog.Variant class" 702 | request: 703 | jsonrpc: "2.0" 704 | id: "ext-variant" 705 | method: "tools/call" 706 | params: 707 | name: "get_sfcc_class_documentation" 708 | arguments: 709 | className: "dw.catalog.Variant" 710 | expect: 711 | response: 712 | jsonrpc: "2.0" 713 | id: "ext-variant" 714 | result: 715 | content: 716 | - type: "text" 717 | text: "match:contains:# Class Variant" 718 | isError: false 719 | stderr: "toBeEmpty" 720 | 721 | - it: "should return documentation for dw.order.PaymentInstrument class" 722 | request: 723 | jsonrpc: "2.0" 724 | id: "ext-paymentinstrument" 725 | method: "tools/call" 726 | params: 727 | name: "get_sfcc_class_documentation" 728 | arguments: 729 | className: "dw.order.PaymentInstrument" 730 | expect: 731 | response: 732 | jsonrpc: "2.0" 733 | id: "ext-paymentinstrument" 734 | result: 735 | content: 736 | - type: "text" 737 | text: "match:contains:PaymentInstrument" 738 | isError: false 739 | stderr: "toBeEmpty" 740 | 741 | - it: "should return documentation for dw.order.Shipment class" 742 | request: 743 | jsonrpc: "2.0" 744 | id: "ext-shipment" 745 | method: "tools/call" 746 | params: 747 | name: "get_sfcc_class_documentation" 748 | arguments: 749 | className: "dw.order.Shipment" 750 | expect: 751 | response: 752 | jsonrpc: "2.0" 753 | id: "ext-shipment" 754 | result: 755 | content: 756 | - type: "text" 757 | text: "match:contains:# Class Shipment" 758 | isError: false 759 | stderr: "toBeEmpty" 760 | 761 | - it: "should return documentation for dw.order.ShippingMethod class" 762 | request: 763 | jsonrpc: "2.0" 764 | id: "ext-shippingmethod" 765 | method: "tools/call" 766 | params: 767 | name: "get_sfcc_class_documentation" 768 | arguments: 769 | className: "dw.order.ShippingMethod" 770 | expect: 771 | response: 772 | jsonrpc: "2.0" 773 | id: "ext-shippingmethod" 774 | result: 775 | content: 776 | - type: "text" 777 | text: "match:contains:ShippingMethod" 778 | isError: false 779 | stderr: "toBeEmpty" 780 | 781 | - it: "should return documentation for dw.customer.CustomerGroup class" 782 | request: 783 | jsonrpc: "2.0" 784 | id: "ext-customergroup" 785 | method: "tools/call" 786 | params: 787 | name: "get_sfcc_class_documentation" 788 | arguments: 789 | className: "dw.customer.CustomerGroup" 790 | expect: 791 | response: 792 | jsonrpc: "2.0" 793 | id: "ext-customergroup" 794 | result: 795 | content: 796 | - type: "text" 797 | text: "match:contains:CustomerGroup" 798 | isError: false 799 | stderr: "toBeEmpty" 800 | 801 | - it: "should return documentation for dw.customer.Profile class" 802 | request: 803 | jsonrpc: "2.0" 804 | id: "ext-profile" 805 | method: "tools/call" 806 | params: 807 | name: "get_sfcc_class_documentation" 808 | arguments: 809 | className: "dw.customer.Profile" 810 | expect: 811 | response: 812 | jsonrpc: "2.0" 813 | id: "ext-profile" 814 | result: 815 | content: 816 | - type: "text" 817 | text: "match:contains:# Class Profile" 818 | isError: false 819 | stderr: "toBeEmpty" 820 | 821 | - it: "should return documentation for dw.system.Logger class" 822 | request: 823 | jsonrpc: "2.0" 824 | id: "ext-logger" 825 | method: "tools/call" 826 | params: 827 | name: "get_sfcc_class_documentation" 828 | arguments: 829 | className: "dw.system.Logger" 830 | expect: 831 | response: 832 | jsonrpc: "2.0" 833 | id: "ext-logger" 834 | result: 835 | content: 836 | - type: "text" 837 | text: "match:contains:# Class Logger" 838 | isError: false 839 | stderr: "toBeEmpty" 840 | 841 | - it: "should return documentation for dw.system.Transaction class" 842 | request: 843 | jsonrpc: "2.0" 844 | id: "ext-transaction" 845 | method: "tools/call" 846 | params: 847 | name: "get_sfcc_class_documentation" 848 | arguments: 849 | className: "dw.system.Transaction" 850 | expect: 851 | response: 852 | jsonrpc: "2.0" 853 | id: "ext-transaction" 854 | result: 855 | content: 856 | - type: "text" 857 | text: "match:contains:Transaction" 858 | isError: false 859 | stderr: "toBeEmpty" 860 | 861 | - it: "should return documentation for dw.web.Cookie class" 862 | request: 863 | jsonrpc: "2.0" 864 | id: "ext-cookie" 865 | method: "tools/call" 866 | params: 867 | name: "get_sfcc_class_documentation" 868 | arguments: 869 | className: "dw.web.Cookie" 870 | expect: 871 | response: 872 | jsonrpc: "2.0" 873 | id: "ext-cookie" 874 | result: 875 | content: 876 | - type: "text" 877 | text: "match:contains:# Class Cookie" 878 | isError: false 879 | stderr: "toBeEmpty" 880 | 881 | - it: "should return documentation for dw.web.Resource class" 882 | request: 883 | jsonrpc: "2.0" 884 | id: "ext-resource" 885 | method: "tools/call" 886 | params: 887 | name: "get_sfcc_class_documentation" 888 | arguments: 889 | className: "dw.web.Resource" 890 | expect: 891 | response: 892 | jsonrpc: "2.0" 893 | id: "ext-resource" 894 | result: 895 | content: 896 | - type: "text" 897 | text: "match:contains:Resource" 898 | isError: false 899 | stderr: "toBeEmpty" 900 | 901 | - it: "should return documentation for dw.web.Form class" 902 | request: 903 | jsonrpc: "2.0" 904 | id: "ext-form" 905 | method: "tools/call" 906 | params: 907 | name: "get_sfcc_class_documentation" 908 | arguments: 909 | className: "dw.web.Form" 910 | expect: 911 | response: 912 | jsonrpc: "2.0" 913 | id: "ext-form" 914 | result: 915 | content: 916 | - type: "text" 917 | text: "match:contains:# Class Form" 918 | isError: false 919 | stderr: "toBeEmpty" 920 | 921 | - it: "should return documentation for dw.util.Collection class" 922 | request: 923 | jsonrpc: "2.0" 924 | id: "ext-collection" 925 | method: "tools/call" 926 | params: 927 | name: "get_sfcc_class_documentation" 928 | arguments: 929 | className: "dw.util.Collection" 930 | expect: 931 | response: 932 | jsonrpc: "2.0" 933 | id: "ext-collection" 934 | result: 935 | content: 936 | - type: "text" 937 | text: "match:contains:Collection" 938 | isError: false 939 | stderr: "toBeEmpty" 940 | 941 | - it: "should return documentation for dw.util.Iterator class" 942 | request: 943 | jsonrpc: "2.0" 944 | id: "ext-iterator" 945 | method: "tools/call" 946 | params: 947 | name: "get_sfcc_class_documentation" 948 | arguments: 949 | className: "dw.util.Iterator" 950 | expect: 951 | response: 952 | jsonrpc: "2.0" 953 | id: "ext-iterator" 954 | result: 955 | content: 956 | - type: "text" 957 | text: "match:contains:Iterator" 958 | isError: false 959 | stderr: "toBeEmpty" 960 | 961 | - it: "should return documentation for dw.util.Calendar class" 962 | request: 963 | jsonrpc: "2.0" 964 | id: "ext-calendar" 965 | method: "tools/call" 966 | params: 967 | name: "get_sfcc_class_documentation" 968 | arguments: 969 | className: "dw.util.Calendar" 970 | expect: 971 | response: 972 | jsonrpc: "2.0" 973 | id: "ext-calendar" 974 | result: 975 | content: 976 | - type: "text" 977 | text: "match:contains:# Class Calendar" 978 | isError: false 979 | stderr: "toBeEmpty" 980 | 981 | - it: "should return documentation for dw.value.Quantity class" 982 | request: 983 | jsonrpc: "2.0" 984 | id: "ext-quantity" 985 | method: "tools/call" 986 | params: 987 | name: "get_sfcc_class_documentation" 988 | arguments: 989 | className: "dw.value.Quantity" 990 | expect: 991 | response: 992 | jsonrpc: "2.0" 993 | id: "ext-quantity" 994 | result: 995 | content: 996 | - type: "text" 997 | text: "match:contains:Quantity" 998 | isError: false 999 | stderr: "toBeEmpty" 1000 | 1001 | - it: "should return documentation for dw.net.HTTPClient class" 1002 | request: 1003 | jsonrpc: "2.0" 1004 | id: "ext-httpclient" 1005 | method: "tools/call" 1006 | params: 1007 | name: "get_sfcc_class_documentation" 1008 | arguments: 1009 | className: "dw.net.HTTPClient" 1010 | expect: 1011 | response: 1012 | jsonrpc: "2.0" 1013 | id: "ext-httpclient" 1014 | result: 1015 | content: 1016 | - type: "text" 1017 | text: "match:contains:HTTPClient" 1018 | isError: false 1019 | stderr: "toBeEmpty" 1020 | 1021 | - it: "should return documentation for dw.net.Mail class" 1022 | request: 1023 | jsonrpc: "2.0" 1024 | id: "ext-mail" 1025 | method: "tools/call" 1026 | params: 1027 | name: "get_sfcc_class_documentation" 1028 | arguments: 1029 | className: "dw.net.Mail" 1030 | expect: 1031 | response: 1032 | jsonrpc: "2.0" 1033 | id: "ext-mail" 1034 | result: 1035 | content: 1036 | - type: "text" 1037 | text: "match:contains:# Class Mail" 1038 | isError: false 1039 | stderr: "toBeEmpty" 1040 | 1041 | - it: "should return documentation for dw.io.File class" 1042 | request: 1043 | jsonrpc: "2.0" 1044 | id: "ext-file" 1045 | method: "tools/call" 1046 | params: 1047 | name: "get_sfcc_class_documentation" 1048 | arguments: 1049 | className: "dw.io.File" 1050 | expect: 1051 | response: 1052 | jsonrpc: "2.0" 1053 | id: "ext-file" 1054 | result: 1055 | content: 1056 | - type: "text" 1057 | text: "match:contains:# Class File" 1058 | isError: false 1059 | stderr: "toBeEmpty" 1060 | 1061 | - it: "should return documentation for dw.io.Reader class" 1062 | request: 1063 | jsonrpc: "2.0" 1064 | id: "ext-reader" 1065 | method: "tools/call" 1066 | params: 1067 | name: "get_sfcc_class_documentation" 1068 | arguments: 1069 | className: "dw.io.Reader" 1070 | expect: 1071 | response: 1072 | jsonrpc: "2.0" 1073 | id: "ext-reader" 1074 | result: 1075 | content: 1076 | - type: "text" 1077 | text: "match:contains:Reader" 1078 | isError: false 1079 | stderr: "toBeEmpty" 1080 | 1081 | - it: "should return documentation for dw.svc.ServiceRegistry class" 1082 | request: 1083 | jsonrpc: "2.0" 1084 | id: "ext-serviceregistry" 1085 | method: "tools/call" 1086 | params: 1087 | name: "get_sfcc_class_documentation" 1088 | arguments: 1089 | className: "dw.svc.ServiceRegistry" 1090 | expect: 1091 | response: 1092 | jsonrpc: "2.0" 1093 | id: "ext-serviceregistry" 1094 | result: 1095 | content: 1096 | - type: "text" 1097 | text: "match:contains:ServiceRegistry" 1098 | isError: false 1099 | stderr: "toBeEmpty" 1100 | 1101 | - it: "should return documentation for dw.svc.HTTPService class" 1102 | request: 1103 | jsonrpc: "2.0" 1104 | id: "ext-httpservice" 1105 | method: "tools/call" 1106 | params: 1107 | name: "get_sfcc_class_documentation" 1108 | arguments: 1109 | className: "dw.svc.HTTPService" 1110 | expect: 1111 | response: 1112 | jsonrpc: "2.0" 1113 | id: "ext-httpservice" 1114 | result: 1115 | content: 1116 | - type: "text" 1117 | text: "match:contains:HTTPService" 1118 | isError: false 1119 | stderr: "toBeEmpty" 1120 | 1121 | - it: "should return documentation for dw.campaign.Campaign class" 1122 | request: 1123 | jsonrpc: "2.0" 1124 | id: "ext-campaign" 1125 | method: "tools/call" 1126 | params: 1127 | name: "get_sfcc_class_documentation" 1128 | arguments: 1129 | className: "dw.campaign.Campaign" 1130 | expect: 1131 | response: 1132 | jsonrpc: "2.0" 1133 | id: "ext-campaign" 1134 | result: 1135 | content: 1136 | - type: "text" 1137 | text: "match:contains:# Class Campaign" 1138 | isError: false 1139 | stderr: "toBeEmpty" 1140 | 1141 | - it: "should return documentation for dw.campaign.Promotion class" 1142 | request: 1143 | jsonrpc: "2.0" 1144 | id: "ext-promotion" 1145 | method: "tools/call" 1146 | params: 1147 | name: "get_sfcc_class_documentation" 1148 | arguments: 1149 | className: "dw.campaign.Promotion" 1150 | expect: 1151 | response: 1152 | jsonrpc: "2.0" 1153 | id: "ext-promotion" 1154 | result: 1155 | content: 1156 | - type: "text" 1157 | text: "match:contains:Promotion" 1158 | isError: false 1159 | stderr: "toBeEmpty" 1160 | 1161 | - it: "should return documentation for dw.object.CustomObject class" 1162 | request: 1163 | jsonrpc: "2.0" 1164 | id: "ext-customobject" 1165 | method: "tools/call" 1166 | params: 1167 | name: "get_sfcc_class_documentation" 1168 | arguments: 1169 | className: "dw.object.CustomObject" 1170 | expect: 1171 | response: 1172 | jsonrpc: "2.0" 1173 | id: "ext-customobject" 1174 | result: 1175 | content: 1176 | - type: "text" 1177 | text: "match:contains:CustomObject" 1178 | isError: false 1179 | stderr: "toBeEmpty" 1180 | 1181 | - it: "should return documentation for dw.object.CustomObjectMgr class" 1182 | request: 1183 | jsonrpc: "2.0" 1184 | id: "ext-customobjectmgr" 1185 | method: "tools/call" 1186 | params: 1187 | name: "get_sfcc_class_documentation" 1188 | arguments: 1189 | className: "dw.object.CustomObjectMgr" 1190 | expect: 1191 | response: 1192 | jsonrpc: "2.0" 1193 | id: "ext-customobjectmgr" 1194 | result: 1195 | content: 1196 | - type: "text" 1197 | text: "match:contains:CustomObjectMgr" 1198 | isError: false 1199 | stderr: "toBeEmpty" 1200 | 1201 | # ================================================================================== 1202 | # ADVANCED SFCC CLASSES VALIDATION - 30 MORE SPECIALIZED CLASSES 1203 | # ================================================================================== 1204 | 1205 | - it: "should return documentation for dw.catalog.CatalogMgr class" 1206 | request: 1207 | jsonrpc: "2.0" 1208 | id: "adv-catalogmgr" 1209 | method: "tools/call" 1210 | params: 1211 | name: "get_sfcc_class_documentation" 1212 | arguments: 1213 | className: "dw.catalog.CatalogMgr" 1214 | expect: 1215 | response: 1216 | jsonrpc: "2.0" 1217 | id: "adv-catalogmgr" 1218 | result: 1219 | content: 1220 | - type: "text" 1221 | text: "match:contains:CatalogMgr" 1222 | isError: false 1223 | stderr: "toBeEmpty" 1224 | 1225 | - it: "should return documentation for dw.catalog.ProductOption class" 1226 | request: 1227 | jsonrpc: "2.0" 1228 | id: "adv-productoption" 1229 | method: "tools/call" 1230 | params: 1231 | name: "get_sfcc_class_documentation" 1232 | arguments: 1233 | className: "dw.catalog.ProductOption" 1234 | expect: 1235 | response: 1236 | jsonrpc: "2.0" 1237 | id: "adv-productoption" 1238 | result: 1239 | content: 1240 | - type: "text" 1241 | text: "match:contains:ProductOption" 1242 | isError: false 1243 | stderr: "toBeEmpty" 1244 | 1245 | - it: "should return documentation for dw.catalog.ProductOptionModel class" 1246 | request: 1247 | jsonrpc: "2.0" 1248 | id: "adv-productoptionmodel" 1249 | method: "tools/call" 1250 | params: 1251 | name: "get_sfcc_class_documentation" 1252 | arguments: 1253 | className: "dw.catalog.ProductOptionModel" 1254 | expect: 1255 | response: 1256 | jsonrpc: "2.0" 1257 | id: "adv-productoptionmodel" 1258 | result: 1259 | content: 1260 | - type: "text" 1261 | text: "match:contains:ProductOptionModel" 1262 | isError: false 1263 | stderr: "toBeEmpty" 1264 | 1265 | - it: "should return documentation for dw.catalog.Recommendation class" 1266 | request: 1267 | jsonrpc: "2.0" 1268 | id: "adv-recommendation" 1269 | method: "tools/call" 1270 | params: 1271 | name: "get_sfcc_class_documentation" 1272 | arguments: 1273 | className: "dw.catalog.Recommendation" 1274 | expect: 1275 | response: 1276 | jsonrpc: "2.0" 1277 | id: "adv-recommendation" 1278 | result: 1279 | content: 1280 | - type: "text" 1281 | text: "match:contains:# Class Recommendation" 1282 | isError: false 1283 | stderr: "toBeEmpty" 1284 | 1285 | - it: "should return documentation for dw.catalog.ProductAttributeModel class" 1286 | request: 1287 | jsonrpc: "2.0" 1288 | id: "adv-productattributemodel" 1289 | method: "tools/call" 1290 | params: 1291 | name: "get_sfcc_class_documentation" 1292 | arguments: 1293 | className: "dw.catalog.ProductAttributeModel" 1294 | expect: 1295 | response: 1296 | jsonrpc: "2.0" 1297 | id: "adv-productattributemodel" 1298 | result: 1299 | content: 1300 | - type: "text" 1301 | text: "match:contains:ProductAttributeModel" 1302 | isError: false 1303 | stderr: "toBeEmpty" 1304 | 1305 | - it: "should return documentation for dw.order.LineItem class" 1306 | request: 1307 | jsonrpc: "2.0" 1308 | id: "adv-lineitem" 1309 | method: "tools/call" 1310 | params: 1311 | name: "get_sfcc_class_documentation" 1312 | arguments: 1313 | className: "dw.order.LineItem" 1314 | expect: 1315 | response: 1316 | jsonrpc: "2.0" 1317 | id: "adv-lineitem" 1318 | result: 1319 | content: 1320 | - type: "text" 1321 | text: "match:contains:# Class LineItem" 1322 | isError: false 1323 | stderr: "toBeEmpty" 1324 | 1325 | - it: "should return documentation for dw.order.OrderAddress class" 1326 | request: 1327 | jsonrpc: "2.0" 1328 | id: "adv-orderaddress" 1329 | method: "tools/call" 1330 | params: 1331 | name: "get_sfcc_class_documentation" 1332 | arguments: 1333 | className: "dw.order.OrderAddress" 1334 | expect: 1335 | response: 1336 | jsonrpc: "2.0" 1337 | id: "adv-orderaddress" 1338 | result: 1339 | content: 1340 | - type: "text" 1341 | text: "match:contains:OrderAddress" 1342 | isError: false 1343 | stderr: "toBeEmpty" 1344 | 1345 | - it: "should return documentation for dw.order.PaymentMethod class" 1346 | request: 1347 | jsonrpc: "2.0" 1348 | id: "adv-paymentmethod" 1349 | method: "tools/call" 1350 | params: 1351 | name: "get_sfcc_class_documentation" 1352 | arguments: 1353 | className: "dw.order.PaymentMethod" 1354 | expect: 1355 | response: 1356 | jsonrpc: "2.0" 1357 | id: "adv-paymentmethod" 1358 | result: 1359 | content: 1360 | - type: "text" 1361 | text: "match:contains:PaymentMethod" 1362 | isError: false 1363 | stderr: "toBeEmpty" 1364 | 1365 | - it: "should return documentation for dw.order.PaymentMgr class" 1366 | request: 1367 | jsonrpc: "2.0" 1368 | id: "adv-paymentmgr" 1369 | method: "tools/call" 1370 | params: 1371 | name: "get_sfcc_class_documentation" 1372 | arguments: 1373 | className: "dw.order.PaymentMgr" 1374 | expect: 1375 | response: 1376 | jsonrpc: "2.0" 1377 | id: "adv-paymentmgr" 1378 | result: 1379 | content: 1380 | - type: "text" 1381 | text: "match:contains:PaymentMgr" 1382 | isError: false 1383 | stderr: "toBeEmpty" 1384 | 1385 | - it: "should return documentation for dw.order.ShippingMgr class" 1386 | request: 1387 | jsonrpc: "2.0" 1388 | id: "adv-shippingmgr" 1389 | method: "tools/call" 1390 | params: 1391 | name: "get_sfcc_class_documentation" 1392 | arguments: 1393 | className: "dw.order.ShippingMgr" 1394 | expect: 1395 | response: 1396 | jsonrpc: "2.0" 1397 | id: "adv-shippingmgr" 1398 | result: 1399 | content: 1400 | - type: "text" 1401 | text: "match:contains:ShippingMgr" 1402 | isError: false 1403 | stderr: "toBeEmpty" 1404 | 1405 | - it: "should return documentation for dw.customer.AddressBook class" 1406 | request: 1407 | jsonrpc: "2.0" 1408 | id: "adv-addressbook" 1409 | method: "tools/call" 1410 | params: 1411 | name: "get_sfcc_class_documentation" 1412 | arguments: 1413 | className: "dw.customer.AddressBook" 1414 | expect: 1415 | response: 1416 | jsonrpc: "2.0" 1417 | id: "adv-addressbook" 1418 | result: 1419 | content: 1420 | - type: "text" 1421 | text: "match:contains:AddressBook" 1422 | isError: false 1423 | stderr: "toBeEmpty" 1424 | 1425 | - it: "should return documentation for dw.customer.CustomerAddress class" 1426 | request: 1427 | jsonrpc: "2.0" 1428 | id: "adv-customeraddress" 1429 | method: "tools/call" 1430 | params: 1431 | name: "get_sfcc_class_documentation" 1432 | arguments: 1433 | className: "dw.customer.CustomerAddress" 1434 | expect: 1435 | response: 1436 | jsonrpc: "2.0" 1437 | id: "adv-customeraddress" 1438 | result: 1439 | content: 1440 | - type: "text" 1441 | text: "match:contains:CustomerAddress" 1442 | isError: false 1443 | stderr: "toBeEmpty" 1444 | 1445 | - it: "should return documentation for dw.customer.CustomerPaymentInstrument class" 1446 | request: 1447 | jsonrpc: "2.0" 1448 | id: "adv-custpaymentinstrument" 1449 | method: "tools/call" 1450 | params: 1451 | name: "get_sfcc_class_documentation" 1452 | arguments: 1453 | className: "dw.customer.CustomerPaymentInstrument" 1454 | expect: 1455 | response: 1456 | jsonrpc: "2.0" 1457 | id: "adv-custpaymentinstrument" 1458 | result: 1459 | content: 1460 | - type: "text" 1461 | text: "match:contains:CustomerPaymentInstrument" 1462 | isError: false 1463 | stderr: "toBeEmpty" 1464 | 1465 | - it: "should return documentation for dw.customer.Wallet class" 1466 | request: 1467 | jsonrpc: "2.0" 1468 | id: "adv-wallet" 1469 | method: "tools/call" 1470 | params: 1471 | name: "get_sfcc_class_documentation" 1472 | arguments: 1473 | className: "dw.customer.Wallet" 1474 | expect: 1475 | response: 1476 | jsonrpc: "2.0" 1477 | id: "adv-wallet" 1478 | result: 1479 | content: 1480 | - type: "text" 1481 | text: "match:contains:# Class Wallet" 1482 | isError: false 1483 | stderr: "toBeEmpty" 1484 | 1485 | - it: "should return documentation for dw.system.Pipeline class" 1486 | request: 1487 | jsonrpc: "2.0" 1488 | id: "adv-pipeline" 1489 | method: "tools/call" 1490 | params: 1491 | name: "get_sfcc_class_documentation" 1492 | arguments: 1493 | className: "dw.system.Pipeline" 1494 | expect: 1495 | response: 1496 | jsonrpc: "2.0" 1497 | id: "adv-pipeline" 1498 | result: 1499 | content: 1500 | - type: "text" 1501 | text: "match:contains:Pipeline" 1502 | isError: false 1503 | stderr: "toBeEmpty" 1504 | 1505 | - it: "should return documentation for dw.system.HookMgr class" 1506 | request: 1507 | jsonrpc: "2.0" 1508 | id: "adv-hookmgr" 1509 | method: "tools/call" 1510 | params: 1511 | name: "get_sfcc_class_documentation" 1512 | arguments: 1513 | className: "dw.system.HookMgr" 1514 | expect: 1515 | response: 1516 | jsonrpc: "2.0" 1517 | id: "adv-hookmgr" 1518 | result: 1519 | content: 1520 | - type: "text" 1521 | text: "match:contains:HookMgr" 1522 | isError: false 1523 | stderr: "toBeEmpty" 1524 | 1525 | - it: "should return documentation for dw.system.CacheMgr class" 1526 | request: 1527 | jsonrpc: "2.0" 1528 | id: "adv-cachemgr" 1529 | method: "tools/call" 1530 | params: 1531 | name: "get_sfcc_class_documentation" 1532 | arguments: 1533 | className: "dw.system.CacheMgr" 1534 | expect: 1535 | response: 1536 | jsonrpc: "2.0" 1537 | id: "adv-cachemgr" 1538 | result: 1539 | content: 1540 | - type: "text" 1541 | text: "match:contains:CacheMgr" 1542 | isError: false 1543 | stderr: "toBeEmpty" 1544 | 1545 | - it: "should return documentation for dw.web.Forms class" 1546 | request: 1547 | jsonrpc: "2.0" 1548 | id: "adv-forms" 1549 | method: "tools/call" 1550 | params: 1551 | name: "get_sfcc_class_documentation" 1552 | arguments: 1553 | className: "dw.web.Forms" 1554 | expect: 1555 | response: 1556 | jsonrpc: "2.0" 1557 | id: "adv-forms" 1558 | result: 1559 | content: 1560 | - type: "text" 1561 | text: "match:contains:# Class Forms" 1562 | isError: false 1563 | stderr: "toBeEmpty" 1564 | 1565 | - it: "should return documentation for dw.web.PageMetaData class" 1566 | request: 1567 | jsonrpc: "2.0" 1568 | id: "adv-pagemetadata" 1569 | method: "tools/call" 1570 | params: 1571 | name: "get_sfcc_class_documentation" 1572 | arguments: 1573 | className: "dw.web.PageMetaData" 1574 | expect: 1575 | response: 1576 | jsonrpc: "2.0" 1577 | id: "adv-pagemetadata" 1578 | result: 1579 | content: 1580 | - type: "text" 1581 | text: "match:contains:PageMetaData" 1582 | isError: false 1583 | stderr: "toBeEmpty" 1584 | 1585 | - it: "should return documentation for dw.web.PagingModel class" 1586 | request: 1587 | jsonrpc: "2.0" 1588 | id: "adv-pagingmodel" 1589 | method: "tools/call" 1590 | params: 1591 | name: "get_sfcc_class_documentation" 1592 | arguments: 1593 | className: "dw.web.PagingModel" 1594 | expect: 1595 | response: 1596 | jsonrpc: "2.0" 1597 | id: "adv-pagingmodel" 1598 | result: 1599 | content: 1600 | - type: "text" 1601 | text: "match:contains:PagingModel" 1602 | isError: false 1603 | stderr: "toBeEmpty" 1604 | 1605 | - it: "should return documentation for dw.util.StringUtils class" 1606 | request: 1607 | jsonrpc: "2.0" 1608 | id: "adv-stringutils" 1609 | method: "tools/call" 1610 | params: 1611 | name: "get_sfcc_class_documentation" 1612 | arguments: 1613 | className: "dw.util.StringUtils" 1614 | expect: 1615 | response: 1616 | jsonrpc: "2.0" 1617 | id: "adv-stringutils" 1618 | result: 1619 | content: 1620 | - type: "text" 1621 | text: "match:contains:StringUtils" 1622 | isError: false 1623 | stderr: "toBeEmpty" 1624 | 1625 | - it: "should return documentation for dw.util.Map class" 1626 | request: 1627 | jsonrpc: "2.0" 1628 | id: "adv-map" 1629 | method: "tools/call" 1630 | params: 1631 | name: "get_sfcc_class_documentation" 1632 | arguments: 1633 | className: "dw.util.Map" 1634 | expect: 1635 | response: 1636 | jsonrpc: "2.0" 1637 | id: "adv-map" 1638 | result: 1639 | content: 1640 | - type: "text" 1641 | text: "match:contains:# Class Map" 1642 | isError: false 1643 | stderr: "toBeEmpty" 1644 | 1645 | - it: "should return documentation for dw.util.Locale class" 1646 | request: 1647 | jsonrpc: "2.0" 1648 | id: "adv-locale" 1649 | method: "tools/call" 1650 | params: 1651 | name: "get_sfcc_class_documentation" 1652 | arguments: 1653 | className: "dw.util.Locale" 1654 | expect: 1655 | response: 1656 | jsonrpc: "2.0" 1657 | id: "adv-locale" 1658 | result: 1659 | content: 1660 | - type: "text" 1661 | text: "match:contains:# Class Locale" 1662 | isError: false 1663 | stderr: "toBeEmpty" 1664 | 1665 | - it: "should return documentation for dw.util.List class" 1666 | request: 1667 | jsonrpc: "2.0" 1668 | id: "adv-list" 1669 | method: "tools/call" 1670 | params: 1671 | name: "get_sfcc_class_documentation" 1672 | arguments: 1673 | className: "dw.util.List" 1674 | expect: 1675 | response: 1676 | jsonrpc: "2.0" 1677 | id: "adv-list" 1678 | result: 1679 | content: 1680 | - type: "text" 1681 | text: "match:contains:# Class List" 1682 | isError: false 1683 | stderr: "toBeEmpty" 1684 | 1685 | - it: "should return documentation for dw.value.EnumValue class" 1686 | request: 1687 | jsonrpc: "2.0" 1688 | id: "adv-enumvalue" 1689 | method: "tools/call" 1690 | params: 1691 | name: "get_sfcc_class_documentation" 1692 | arguments: 1693 | className: "dw.value.EnumValue" 1694 | expect: 1695 | response: 1696 | jsonrpc: "2.0" 1697 | id: "adv-enumvalue" 1698 | result: 1699 | content: 1700 | - type: "text" 1701 | text: "match:contains:EnumValue" 1702 | isError: false 1703 | stderr: "toBeEmpty" 1704 | 1705 | - it: "should return documentation for dw.net.FTPClient class" 1706 | request: 1707 | jsonrpc: "2.0" 1708 | id: "adv-ftpclient" 1709 | method: "tools/call" 1710 | params: 1711 | name: "get_sfcc_class_documentation" 1712 | arguments: 1713 | className: "dw.net.FTPClient" 1714 | expect: 1715 | response: 1716 | jsonrpc: "2.0" 1717 | id: "adv-ftpclient" 1718 | result: 1719 | content: 1720 | - type: "text" 1721 | text: "match:contains:FTPClient" 1722 | isError: false 1723 | stderr: "toBeEmpty" 1724 | 1725 | - it: "should return documentation for dw.net.SFTPClient class" 1726 | request: 1727 | jsonrpc: "2.0" 1728 | id: "adv-sftpclient" 1729 | method: "tools/call" 1730 | params: 1731 | name: "get_sfcc_class_documentation" 1732 | arguments: 1733 | className: "dw.net.SFTPClient" 1734 | expect: 1735 | response: 1736 | jsonrpc: "2.0" 1737 | id: "adv-sftpclient" 1738 | result: 1739 | content: 1740 | - type: "text" 1741 | text: "match:contains:SFTPClient" 1742 | isError: false 1743 | stderr: "toBeEmpty" 1744 | 1745 | - it: "should return documentation for dw.io.CSVStreamWriter class" 1746 | request: 1747 | jsonrpc: "2.0" 1748 | id: "adv-csvstreamwriter" 1749 | method: "tools/call" 1750 | params: 1751 | name: "get_sfcc_class_documentation" 1752 | arguments: 1753 | className: "dw.io.CSVStreamWriter" 1754 | expect: 1755 | response: 1756 | jsonrpc: "2.0" 1757 | id: "adv-csvstreamwriter" 1758 | result: 1759 | content: 1760 | - type: "text" 1761 | text: "match:contains:CSVStreamWriter" 1762 | isError: false 1763 | stderr: "toBeEmpty" 1764 | 1765 | - it: "should return documentation for dw.io.XMLStreamWriter class" 1766 | request: 1767 | jsonrpc: "2.0" 1768 | id: "adv-xmlstreamwriter" 1769 | method: "tools/call" 1770 | params: 1771 | name: "get_sfcc_class_documentation" 1772 | arguments: 1773 | className: "dw.io.XMLStreamWriter" 1774 | expect: 1775 | response: 1776 | jsonrpc: "2.0" 1777 | id: "adv-xmlstreamwriter" 1778 | result: 1779 | content: 1780 | - type: "text" 1781 | text: "match:contains:XMLStreamWriter" 1782 | isError: false 1783 | stderr: "toBeEmpty" 1784 | 1785 | - it: "should return documentation for dw.system.Status class" 1786 | request: 1787 | jsonrpc: "2.0" 1788 | id: "adv-status" 1789 | method: "tools/call" 1790 | params: 1791 | name: "get_sfcc_class_documentation" 1792 | arguments: 1793 | className: "dw.system.Status" 1794 | expect: 1795 | response: 1796 | jsonrpc: "2.0" 1797 | id: "adv-status" 1798 | result: 1799 | content: 1800 | - type: "text" 1801 | text: "match:contains:# Class Status" 1802 | isError: false 1803 | stderr: "toBeEmpty" 1804 | 1805 | # ================================================================================== 1806 | # DOCUMENTATION CONTENT VALIDATION 1807 | # ================================================================================== 1808 | 1809 | - it: "should include class description in Order documentation" 1810 | request: 1811 | jsonrpc: "2.0" 1812 | id: "exec-order-description" 1813 | method: "tools/call" 1814 | params: 1815 | name: "get_sfcc_class_documentation" 1816 | arguments: 1817 | className: "dw.order.Order" 1818 | expect: 1819 | response: 1820 | jsonrpc: "2.0" 1821 | id: "exec-order-description" 1822 | result: 1823 | content: 1824 | - type: "text" 1825 | text: "match:contains:## Description" 1826 | isError: false 1827 | stderr: "toBeEmpty" 1828 | 1829 | - it: "should include constants in Order documentation" 1830 | request: 1831 | jsonrpc: "2.0" 1832 | id: "exec-order-constants" 1833 | method: "tools/call" 1834 | params: 1835 | name: "get_sfcc_class_documentation" 1836 | arguments: 1837 | className: "dw.order.Order" 1838 | expect: 1839 | response: 1840 | jsonrpc: "2.0" 1841 | id: "exec-order-constants" 1842 | result: 1843 | content: 1844 | - type: "text" 1845 | text: "match:contains:## Constants" 1846 | isError: false 1847 | stderr: "toBeEmpty" 1848 | 1849 | - it: "should include constructor summary in Order documentation" 1850 | request: 1851 | jsonrpc: "2.0" 1852 | id: "exec-order-constructors" 1853 | method: "tools/call" 1854 | params: 1855 | name: "get_sfcc_class_documentation" 1856 | arguments: 1857 | className: "dw.order.Order" 1858 | expect: 1859 | response: 1860 | jsonrpc: "2.0" 1861 | id: "exec-order-constructors" 1862 | result: 1863 | content: 1864 | - type: "text" 1865 | text: "match:contains:## Constructor Summary" 1866 | isError: false 1867 | stderr: "toBeEmpty" 1868 | 1869 | - it: "should include method signatures in documentation" 1870 | request: 1871 | jsonrpc: "2.0" 1872 | id: "exec-method-signatures" 1873 | method: "tools/call" 1874 | params: 1875 | name: "get_sfcc_class_documentation" 1876 | arguments: 1877 | className: "dw.catalog.Product" 1878 | expect: 1879 | response: 1880 | jsonrpc: "2.0" 1881 | id: "exec-method-signatures" 1882 | result: 1883 | content: 1884 | - type: "text" 1885 | text: "match:contains:**Signature:**" 1886 | isError: false 1887 | stderr: "toBeEmpty" 1888 | 1889 | - it: "should include property types in documentation" 1890 | request: 1891 | jsonrpc: "2.0" 1892 | id: "exec-property-types" 1893 | method: "tools/call" 1894 | params: 1895 | name: "get_sfcc_class_documentation" 1896 | arguments: 1897 | className: "dw.catalog.Product" 1898 | expect: 1899 | response: 1900 | jsonrpc: "2.0" 1901 | id: "exec-property-types" 1902 | result: 1903 | content: 1904 | - type: "text" 1905 | text: "match:contains:**Type:**" 1906 | isError: false 1907 | stderr: "toBeEmpty" 1908 | 1909 | - it: "should include return valid markdown format" 1910 | request: 1911 | jsonrpc: "2.0" 1912 | id: "exec-markdown-format" 1913 | method: "tools/call" 1914 | params: 1915 | name: "get_sfcc_class_documentation" 1916 | arguments: 1917 | className: "dw.catalog.Product" 1918 | expect: 1919 | response: 1920 | jsonrpc: "2.0" 1921 | id: "exec-markdown-format" 1922 | result: 1923 | content: 1924 | - type: "text" 1925 | text: "match:regex:[\\s\\S]*#{1,6}[\\s\\S]*" # Contains markdown headers 1926 | isError: false 1927 | stderr: "toBeEmpty" 1928 | 1929 | # ================================================================================== 1930 | # ERROR HANDLING TESTS 1931 | # ================================================================================== 1932 | 1933 | - it: "should handle invalid class names gracefully" 1934 | request: 1935 | jsonrpc: "2.0" 1936 | id: "error-invalid-class" 1937 | method: "tools/call" 1938 | params: 1939 | name: "get_sfcc_class_documentation" 1940 | arguments: 1941 | className: "NonExistentClass" 1942 | expect: 1943 | response: 1944 | jsonrpc: "2.0" 1945 | id: "error-invalid-class" 1946 | result: 1947 | content: 1948 | - type: "text" 1949 | text: "match:contains:Error" 1950 | isError: true 1951 | stderr: "toBeEmpty" 1952 | 1953 | - it: "should handle invalid class with specific error message" 1954 | request: 1955 | jsonrpc: "2.0" 1956 | id: "error-invalid-specific" 1957 | method: "tools/call" 1958 | params: 1959 | name: "get_sfcc_class_documentation" 1960 | arguments: 1961 | className: "InvalidClassName" 1962 | expect: 1963 | response: 1964 | jsonrpc: "2.0" 1965 | id: "error-invalid-specific" 1966 | result: 1967 | content: 1968 | - type: "text" 1969 | text: "match:contains:not found" 1970 | isError: true 1971 | stderr: "toBeEmpty" 1972 | 1973 | - it: "should handle empty class name" 1974 | request: 1975 | jsonrpc: "2.0" 1976 | id: "error-empty-class" 1977 | method: "tools/call" 1978 | params: 1979 | name: "get_sfcc_class_documentation" 1980 | arguments: 1981 | className: "" 1982 | expect: 1983 | response: 1984 | jsonrpc: "2.0" 1985 | id: "error-empty-class" 1986 | result: 1987 | content: 1988 | - type: "text" 1989 | text: "match:contains:non-empty string" 1990 | isError: true 1991 | stderr: "toBeEmpty" 1992 | 1993 | - it: "should handle missing className parameter with error response" 1994 | request: 1995 | jsonrpc: "2.0" 1996 | id: "error-missing-param" 1997 | method: "tools/call" 1998 | params: 1999 | name: "get_sfcc_class_documentation" 2000 | arguments: {} 2001 | expect: 2002 | response: 2003 | jsonrpc: "2.0" 2004 | id: "error-missing-param" 2005 | result: 2006 | content: 2007 | - type: "text" 2008 | text: "match:contains:non-empty string" 2009 | isError: true 2010 | stderr: "toBeEmpty" 2011 | 2012 | - it: "should handle null className gracefully" 2013 | request: 2014 | jsonrpc: "2.0" 2015 | id: "error-null-class" 2016 | method: "tools/call" 2017 | params: 2018 | name: "get_sfcc_class_documentation" 2019 | arguments: 2020 | className: null 2021 | expect: 2022 | response: 2023 | jsonrpc: "2.0" 2024 | id: "error-null-class" 2025 | result: 2026 | content: 2027 | - type: "text" 2028 | text: "match:contains:Error" 2029 | isError: true 2030 | stderr: "toBeEmpty" 2031 | 2032 | - it: "should handle numeric className gracefully" 2033 | request: 2034 | jsonrpc: "2.0" 2035 | id: "error-numeric-class" 2036 | method: "tools/call" 2037 | params: 2038 | name: "get_sfcc_class_documentation" 2039 | arguments: 2040 | className: 123 2041 | expect: 2042 | response: 2043 | jsonrpc: "2.0" 2044 | id: "error-numeric-class" 2045 | result: 2046 | content: 2047 | - type: "text" 2048 | text: "match:contains:Error" 2049 | isError: true 2050 | stderr: "toBeEmpty" 2051 | 2052 | # ================================================================================== 2053 | # EDGE CASE TESTING 2054 | # ================================================================================== 2055 | 2056 | - it: "should handle whitespace-only className" 2057 | request: 2058 | jsonrpc: "2.0" 2059 | id: "edge-whitespace" 2060 | method: "tools/call" 2061 | params: 2062 | name: "get_sfcc_class_documentation" 2063 | arguments: 2064 | className: " " 2065 | expect: 2066 | response: 2067 | jsonrpc: "2.0" 2068 | id: "edge-whitespace" 2069 | result: 2070 | content: 2071 | - type: "text" 2072 | text: "match:contains:Error" 2073 | isError: true 2074 | stderr: "toBeEmpty" 2075 | 2076 | - it: "should handle class names with special characters" 2077 | request: 2078 | jsonrpc: "2.0" 2079 | id: "edge-special-chars" 2080 | method: "tools/call" 2081 | params: 2082 | name: "get_sfcc_class_documentation" 2083 | arguments: 2084 | className: "dw.catalog.Product@#$" 2085 | expect: 2086 | response: 2087 | jsonrpc: "2.0" 2088 | id: "edge-special-chars" 2089 | result: 2090 | content: 2091 | - type: "text" 2092 | text: "match:contains:Error" 2093 | isError: true 2094 | stderr: "toBeEmpty" 2095 | 2096 | - it: "should handle very long invalid class names" 2097 | request: 2098 | jsonrpc: "2.0" 2099 | id: "edge-long-invalid" 2100 | method: "tools/call" 2101 | params: 2102 | name: "get_sfcc_class_documentation" 2103 | arguments: 2104 | className: "dw.very.long.nonexistent.package.that.does.not.exist.anywhere.InvalidClass" 2105 | expect: 2106 | response: 2107 | jsonrpc: "2.0" 2108 | id: "edge-long-invalid" 2109 | result: 2110 | content: 2111 | - type: "text" 2112 | text: "match:contains:Error" 2113 | isError: true 2114 | stderr: "toBeEmpty" 2115 | 2116 | # ================================================================================== 2117 | # COMPREHENSIVE CONTENT VALIDATION 2118 | # ================================================================================== 2119 | 2120 | - it: "should return substantial documentation content for Product class" 2121 | request: 2122 | jsonrpc: "2.0" 2123 | id: "content-substantial" 2124 | method: "tools/call" 2125 | params: 2126 | name: "get_sfcc_class_documentation" 2127 | arguments: 2128 | className: "dw.catalog.Product" 2129 | expect: 2130 | response: 2131 | jsonrpc: "2.0" 2132 | id: "content-substantial" 2133 | result: 2134 | content: 2135 | - type: "text" 2136 | text: "match:regex:[\\s\\S]{5000,}" # At least 5000 characters 2137 | isError: false 2138 | stderr: "toBeEmpty" 2139 | 2140 | - it: "should include multiple sections in complete documentation" 2141 | request: 2142 | jsonrpc: "2.0" 2143 | id: "content-multiple-sections" 2144 | method: "tools/call" 2145 | params: 2146 | name: "get_sfcc_class_documentation" 2147 | arguments: 2148 | className: "dw.catalog.Product" 2149 | expect: 2150 | response: 2151 | jsonrpc: "2.0" 2152 | id: "content-multiple-sections" 2153 | result: 2154 | content: 2155 | - type: "text" 2156 | text: "match:contains:## Properties" 2157 | isError: false 2158 | stderr: "toBeEmpty" 2159 | 2160 | - it: "should include detailed method information" 2161 | request: 2162 | jsonrpc: "2.0" 2163 | id: "content-method-info" 2164 | method: "tools/call" 2165 | params: 2166 | name: "get_sfcc_class_documentation" 2167 | arguments: 2168 | className: "dw.catalog.Product" 2169 | expect: 2170 | response: 2171 | jsonrpc: "2.0" 2172 | id: "content-method-info" 2173 | result: 2174 | content: 2175 | - type: "text" 2176 | text: "match:contains:**Parameters:**" 2177 | isError: false 2178 | stderr: "toBeEmpty" 2179 | 2180 | - it: "should include return value information" 2181 | request: 2182 | jsonrpc: "2.0" 2183 | id: "content-return-info" 2184 | method: "tools/call" 2185 | params: 2186 | name: "get_sfcc_class_documentation" 2187 | arguments: 2188 | className: "dw.catalog.Product" 2189 | expect: 2190 | response: 2191 | jsonrpc: "2.0" 2192 | id: "content-return-info" 2193 | result: 2194 | content: 2195 | - type: "text" 2196 | text: "match:contains:**Returns:**" 2197 | isError: false 2198 | stderr: "toBeEmpty" 2199 | 2200 | # ================================================================================== 2201 | # PERFORMANCE AND CONSISTENCY VALIDATION 2202 | # ================================================================================== 2203 | 2204 | - it: "should have consistent response structure across different classes" 2205 | request: 2206 | jsonrpc: "2.0" 2207 | id: "consistency-structure" 2208 | method: "tools/call" 2209 | params: 2210 | name: "get_sfcc_class_documentation" 2211 | arguments: 2212 | className: "dw.order.Order" 2213 | expect: 2214 | response: 2215 | jsonrpc: "2.0" 2216 | id: "consistency-structure" 2217 | result: 2218 | content: 2219 | - type: "text" 2220 | text: "match:type:string" 2221 | isError: false 2222 | stderr: "toBeEmpty" 2223 | 2224 | - it: "should not include isError field for successful responses" 2225 | request: 2226 | jsonrpc: "2.0" 2227 | id: "success-no-error-flag" 2228 | method: "tools/call" 2229 | params: 2230 | name: "get_sfcc_class_documentation" 2231 | arguments: 2232 | className: "dw.catalog.Product" 2233 | expect: 2234 | response: 2235 | jsonrpc: "2.0" 2236 | id: "success-no-error-flag" 2237 | result: 2238 | content: "match:type:array" 2239 | isError: false 2240 | stderr: "toBeEmpty" 2241 | 2242 | # ================================================================================== 2243 | # PERFORMANCE TIMING TESTS - CI-FRIENDLY 2244 | # ================================================================================== 2245 | 2246 | - it: "should respond within reasonable time for Product class lookup" 2247 | request: 2248 | jsonrpc: "2.0" 2249 | id: "perf-product-timing" 2250 | method: "tools/call" 2251 | params: 2252 | name: "get_sfcc_class_documentation" 2253 | arguments: 2254 | className: "dw.catalog.Product" 2255 | expect: 2256 | response: 2257 | jsonrpc: "2.0" 2258 | id: "perf-product-timing" 2259 | result: 2260 | content: 2261 | - type: "text" 2262 | text: "match:contains:dw.catalog.Product" 2263 | isError: false 2264 | performance: 2265 | maxResponseTime: "500ms" # CI-friendly timeout for documentation lookup 2266 | stderr: "toBeEmpty" 2267 | 2268 | - it: "should respond within reasonable time for Order class lookup" 2269 | request: 2270 | jsonrpc: "2.0" 2271 | id: "perf-order-timing" 2272 | method: "tools/call" 2273 | params: 2274 | name: "get_sfcc_class_documentation" 2275 | arguments: 2276 | className: "dw.order.Order" 2277 | expect: 2278 | response: 2279 | jsonrpc: "2.0" 2280 | id: "perf-order-timing" 2281 | result: 2282 | content: 2283 | - type: "text" 2284 | text: "match:contains:dw.order.Order" 2285 | isError: false 2286 | performance: 2287 | maxResponseTime: "500ms" # CI-friendly timeout for documentation lookup 2288 | stderr: "toBeEmpty" 2289 | 2290 | - it: "should respond within reasonable time for Customer class lookup" 2291 | request: 2292 | jsonrpc: "2.0" 2293 | id: "perf-customer-timing" 2294 | method: "tools/call" 2295 | params: 2296 | name: "get_sfcc_class_documentation" 2297 | arguments: 2298 | className: "dw.customer.Customer" 2299 | expect: 2300 | response: 2301 | jsonrpc: "2.0" 2302 | id: "perf-customer-timing" 2303 | result: 2304 | content: 2305 | - type: "text" 2306 | text: "match:contains:dw.customer.Customer" 2307 | isError: false 2308 | performance: 2309 | maxResponseTime: "500ms" # CI-friendly timeout for documentation lookup 2310 | stderr: "toBeEmpty" 2311 | 2312 | - it: "should handle error cases quickly" 2313 | request: 2314 | jsonrpc: "2.0" 2315 | id: "perf-error-timing" 2316 | method: "tools/call" 2317 | params: 2318 | name: "get_sfcc_class_documentation" 2319 | arguments: 2320 | className: "NonExistentClass" 2321 | expect: 2322 | response: 2323 | jsonrpc: "2.0" 2324 | id: "perf-error-timing" 2325 | result: 2326 | content: 2327 | - type: "text" 2328 | text: "match:contains:Error" 2329 | isError: true 2330 | performance: 2331 | maxResponseTime: "300ms" # Error handling should be faster 2332 | stderr: "toBeEmpty" 2333 | 2334 | - it: "should handle validation errors very quickly" 2335 | request: 2336 | jsonrpc: "2.0" 2337 | id: "perf-validation-timing" 2338 | method: "tools/call" 2339 | params: 2340 | name: "get_sfcc_class_documentation" 2341 | arguments: 2342 | className: "" 2343 | expect: 2344 | response: 2345 | jsonrpc: "2.0" 2346 | id: "perf-validation-timing" 2347 | result: 2348 | content: 2349 | - type: "text" 2350 | text: "match:contains:non-empty string" 2351 | isError: true 2352 | performance: 2353 | maxResponseTime: "200ms" # Validation errors should be very fast 2354 | stderr: "toBeEmpty" 2355 | 2356 | # ================================================================================== 2357 | # RESPONSE FORMAT VALIDATION 2358 | # ================================================================================== 2359 | 2360 | - it: "should return proper content array structure" 2361 | request: 2362 | jsonrpc: "2.0" 2363 | id: "format-content-array" 2364 | method: "tools/call" 2365 | params: 2366 | name: "get_sfcc_class_documentation" 2367 | arguments: 2368 | className: "dw.catalog.Product" 2369 | expect: 2370 | response: 2371 | jsonrpc: "2.0" 2372 | id: "format-content-array" 2373 | result: 2374 | content: "match:arrayLength:1" 2375 | isError: false 2376 | stderr: "toBeEmpty" 2377 | 2378 | - it: "should return content with proper type field" 2379 | request: 2380 | jsonrpc: "2.0" 2381 | id: "format-content-type" 2382 | method: "tools/call" 2383 | params: 2384 | name: "get_sfcc_class_documentation" 2385 | arguments: 2386 | className: "dw.catalog.Product" 2387 | expect: 2388 | response: 2389 | jsonrpc: "2.0" 2390 | id: "format-content-type" 2391 | result: 2392 | content: 2393 | - type: "text" 2394 | text: "match:type:string" 2395 | isError: false 2396 | stderr: "toBeEmpty" 2397 | 2398 | - it: "should maintain consistent error response format" 2399 | request: 2400 | jsonrpc: "2.0" 2401 | id: "format-error-consistent" 2402 | method: "tools/call" 2403 | params: 2404 | name: "get_sfcc_class_documentation" 2405 | arguments: 2406 | className: "InvalidClass" 2407 | expect: 2408 | response: 2409 | jsonrpc: "2.0" 2410 | id: "format-error-consistent" 2411 | result: 2412 | content: 2413 | - type: "text" 2414 | text: "match:type:string" 2415 | isError: true 2416 | stderr: "toBeEmpty" 2417 | ```