All Releases
View all releases

April 4, 2024 release notes

Highlights

Mobile App

Find a product by scanning a bar code

In this release, we've added a cool new feature to your native commerce mobile app where your customers can quickly scan a bar code to find a product they are looking for.

956_kor_release_highlight_search_via_barcode.png

Customer Portal

View associated orders

In the customer portal, your customers can view order history, manage shiptos, add new users to their account and much more based on what permission levels they have.

In this release, we've added a new tab to the order history section where users can easily see any orders that are associated with the order they are viewing. For example, if two backorders were created for an order, the user would see them linked to the original order if they pull it up in the customer portal. Watch the video for a brief demonstration!

https://youtu.be/6wiBoGWcFwY?feature=shared

Tickets

  1. KOD-7077: Customer App - Scan barcodes for looking up / adding product to cart
    • Regression tests
    • Case 1
      • Test general search if it works correctly despite of addition of new "Scan barcode button".
    • Tests
    • Case 1
      • Test this case for both logged in customer and guest.
      • Press on "Scan", your camera should open.
      • Scan barcode with existing UPC code.
      • Your product should be opened after some loading.
      • You should be able to add products to the cart, select amount, etc.
    • Case 2
      • Test this case for both logged in customer and guest.
      • Press on "Scan", your camera should open.
      • Scan barcode with UPC code, which is not included in the product database.
      • You should see error heralding that product was not found with scanned barcode.
  2. KOD-13946: Refactor Category and CategoryLanguage Services
    • Regression Tests
    • Case 1
      • Endpoint: /api/system/product/{productID}/assignedCategory/list needs to function as it did prior to the changes.
      • Script:
        var searchObject = {
        filterFields: [],
        sorts: [],
        page: 0,
        size: 10 };
        var result = scriptServiceUtils.runAPIMethod('POST',
        '/api/system/product/{productID}/assignedCategory/list', {productID: 6374}, null, searchObject);
        print("result: " + app.toJson(result));
    • Case 2
      • Endpoint: /api/system/category/searchProductAndAttributeCategories needs to function as it did prior to the changes.
    • Case 3
      • Endpoint: /api/system/website/sitemap needs to function as it did prior to the changes.
    • Case 4
      • Endpoint: /api/system/category/list needs to function as it did prior to the changes.
    • Case 5
      • Endpoint: /api/system/category/list needs to function as it did prior to the changes.
      • Script:
        var searchObject = {
        filterFields: [],
        sorts: [],
        page: 0,
        size: 10};
        var result = scriptServiceUtils.runAPIMethod('POST', '/api/system/category/list', null, null, searchObject);
        print("result: " + app.toJson(result));
    • Case 6
      • Endpoint: /api/system/category/{categoryID}/products needs to function as it did prior to the changes.
      • Script:
        var searchObject = {
        filterFields: [],
        sorts: [],
        page: 0,
        size: 10};
        var result = scriptServiceUtils.runAPIMethod('POST', '/api/system/category/{categoryID}/products', {categoryID: 1}, null, searchObject);
        print("result: " + app.toJson(result));
    • Case 7
      • Endpoint: /api/system/category/search needs to function as it did prior to the changes.
      • Script:
        var searchObject = {
        filterFields: [],
        sorts: [],
        page: 0,
        size: 10};
        var result = scriptServiceUtils.runAPIMethod('POST', '/api/system/category/search', null, null, searchObject);
        print("result: " + app.toJson(result));
    • Case 8
      • Endpoint: /api/system/productFacet/facetCategory/export
    • Case 9
      • Endpoint: /api/system/contentPage/search needs to function as it did prior to the changes.
      • Script:
        var searchObject = {
        filterFields: [],
        sorts: [],
        page: 0,
        size: 10};
        var result = scriptServiceUtils.runAPIMethod('POST', '/api/system/contentPage/search', null, null, searchObject);
        print("result: " + app.toJson(result));
    • Case 10
      • Endpoint: /api/system/companyCategory/list needs to function as it did prior to the changes.
      • Script:
        var searchObject = {
        filterFields: [],
        sorts: [],
        page: 0,
        size: 10};
        var result = scriptServiceUtils.runAPIMethod('POST', '/api/system/companyCategory/list', null, null, searchObject);
        print("result: " + app.toJson(result));
    • Case 11
      • Endpoint: /api/system/companyCategory/search needs to function as it did prior to the changes.
      • Script:
        var searchObject = {
        filterFields: [],
        sorts: [],
        page: 0,
        size: 10};
        var result = scriptServiceUtils.runAPIMethod('POST', '/api/system/companyCategory/search', null, null, searchObject);
        print("result: " + app.toJson(result));
    • Case 12
      • Endpoint: /api/system/category/{categoryCode}/language/list needs to function as it did prior to the changes.
      • Script:
        var searchObject = {
        filterFields: [],
        sorts: [],
        page: 0,
        size: 10};
        var result = scriptServiceUtils.runAPIMethod('POST', '/api/system/category/{categoryCode}/language/list', {categoryCode: 'insulation_accessories'}, null, searchObject);
        print("result: " + app.toJson(result));
    • Case 13
      • Endpoint: /api/system/categoryLanguage/list needs to function as it did prior to the changes.
      • Script:
        var searchObject = {
        filterFields: [],
        sorts: [],
        page: 0,
        size: 10};
        var result = scriptServiceUtils.runAPIMethod('POST', '/api/system/categoryLanguage/list', null, null, searchObject);
        print("result: " + app.toJson(result));
    • Case 14
      • Endpoint: /api/system/contentPageLanguage/list needs to function as it did prior to the changes.
      • Script:
        var searchObject = {
        filterFields: [],
        sorts: [],
        page: 0,
        size: 10};
        var result = scriptServiceUtils.runAPIMethod('POST', '/api/system/contentPageLanguage/list', null, null, searchObject);
        print("result: " + app.toJson(result));
    • Case 15
      • Endpoint: /api/system/categoryLanguage/export needs to function as it did prior to the changes.
    • Case 16
      • Endpoint: /api/system/contentPage/{contentPageCode}/language/list needs to function as it did prior to the changes.
      • Script:
        var searchObject = {
        filterFields: [],
        sorts: [],
        page: 0,
        size: 10};
        var result = scriptServiceUtils.runAPIMethod('POST', '/api/system/contentPage/{contentPageCode}/language/list', {contentPageCode: 'test123'}, null, searchObject);
        print("result: " + app.toJson(result));
    • Case 17
      • Endpoint: /api/system/product/6374/assignedCategory/list needs to function as it did prior to the changes.
    • Case 18
      • Endpoint: /api/system/category/export needs to function as it did prior to the changes.
  3. KOD-16731: Add enableFromNameInEmails setting
    • Tests
    • Case 1
      • Go to Operations Portal → Settings
      • Check if setting with code enableFromNameInEmails exists, and has next data:
        • Type= EMAIL
        • Value Type= Integer
        • Value= 0
  4. KOD-18033: Create new DQ integration endpoint
    • Regression Tests
    • Case 1
      • Since a new field was added to trip entity, we want to verify we can still make common operations with this.
      • In operations portal go to Logistics -> Trip and verify you get a successful response.
      • Delete any row and make sure it works fine.
      • Update any row and make sure it works fine.
    • Case 2
      • Verify we can create and update Delivery entities and associate the Trip correctly. (from operations portal it seems we cannot associate the TripID, so we could verify we can still create and update Delivery from Portal → Logistic → Deliveries but then to update the TripID we need to use endpoint /api/system/delivery )
    • Tests
    • Case 1
      • Hit new endpoint /api/system/integration/dq/webhook/deliveryEvent. For now we will expect all fields come in the request. Some of the fields will be ignored since we don't have a table matching in database (Eg: shipTo, adjustedETA)
      • This endpoint only saves an Event that it will be run in the FiveMinuteIntervalJob.
      • So, verify a new Event was created with complete in false and jsonData has the request body you sent.
    • Case 2
      • Set jobProcessDQEvents to '1' in order to start processing the events coming from DQ.
      • Turn On FiveMinuteIntervalJob Job and verify the event is processed and it is updated to complete=true. If there was any error you should see the status of the event as 'SyncError'.
      • Verify data in the request was saved correctly in entities Trip, Delivery and OrderShipment.
      • Verify OrderShipment.code updated to: {deliveryID}_{orderNumber}_{sequenceNumber}_{sequenceNumber}
    • Case 3
      • Repeat same flow with same data but this time add a new field in the request 'sourceModifiedTime'.
      • This date will be used to determine if the record should be skipped or not.
      • If incoming date is older than saved date (sourceModifiedTime from Trip), then update will be skipped.
      • Verify if you send an older sourceModifiedTime, record is skipped.
      • Verify if you send a newer sourceModifiedTime, record is processed.
  5. KOD-18160: Project Saturn Updates
  6. KOD-18278: Base Impl - Enable email attachments on cms forms
    • Regression Tests
    • Case 1
      • Try submitting contact form and file upload form. Make sure they both submit correctly and the emails go out.
    • Tests
    • Case 1
      • On the file upload form, check that the attached files are added as internal files and are sent as attachments.
  7. KOD-18379: Migrate favorite lists to catalogs via import/export
  8. KOD-18386: Bank Account Vaulting Update
    • Tests
    • Case 1
      • Go to Operations Portal → System → Settings → giactCodes.
      • Verify the new value RT00 is appended correctly and the description appears correctly as well.
  9. KOD-18489: Variable Tax fix continued
    • Regression Tests
    • Case 1
      • Initiate the order, choose the shipping address, add items, then execute 'Calculate Totals'. There should be no errors, and the totals as well as taxes should be accurately calculated.
    • Tests
    • Case 1
      • Shipto address with variable tax does not make taxes added for taxable charges (addons) on Order.
  10. KOD-18565: Shipping methods
  11. KOD-18728: Associated Orders on Order Details
    • Regression Tests
    • Case 1
      • Upon logging into the customer portal, navigate to the Orders section and select one. All tabs should continue to load correctly.
    • Case 2
      • Upon logging into the customer portal, navigate to the Orders section and select one. Ensure that the breadcrumbs maintain their functionality.
    • Tests
    • Case 1
      • Log into customer portal.
      • Click on Orders then click into one that has associated orders
      • Notice Associated Orders tab has count of how many associated orders there are.
      • Click on Associated Orders.
      • Notice the list of associated orders in the grid just like the orders search screen.
      • Click on one of those orders and it will redirect you to the details tab of that order.
    • Case 2
      • Log into customer portal.
      • Click on Orders then click into one that has associated orders.
      • On details tab you will see the alert at top saying there are associated orders with a link that will navigate to the associated orders page.
    • Case 3
      • Log into customer portal.
      • Click on Orders then click into one that has associated orders and has tracking information.
      • On tracking tab you will see the alert at top saying there are associated orders with a link that will navigate to the associated orders page.
    • Case 4
      • Log into customer portal.
      • Click on Orders then click into one that doesn’t have associated orders.
      • Notice the Associated Orders tab has a count of 0.
      • Click into the associated orders tab and you will see no data present.
      • On details tab and tracking tab you will not see the alert.
    • Case 5
      • Log into customer portal.
      • Click on Orders then click into one that does have associated orders but one that doesn’t have tracking.
      • Click on the tracking tab.
      • Notice even though there are associated orders, you will not see the alert since there isn’t any tracking data.
      • Tracking tab no info with associated orders.
    • Case 6
      • Log into customer portal.
      • Click on Orders then click into one that has associated orders.
      • Click on Associated Orders tab.
      • Click on one of those associated orders.
      • You will be redirected to the orders page of the new order with the breadcrumbs that say
        Orders / {{original order num}} / Associated Orders / {{new order num}}
      • Click on associated orders tab and click one of the orders.
      • You’ll be redirected to that new order detail page along with breadcrumbs similar to above.
    • Case 7
      • Log into customer portal.
      • Click on Orders then click into one that has associated orders.
      • Click on Associated Orders tab.
      • Click on one of those associated orders.
      • Breadcrumb Example: Orders/2179/Associated Orders/2180
      • Click On / Result:
      • 2180 → redirected to order details page of that order.
      • Associated Orders → redirected to associated orders page for order 2179.
      • 2179 → redirected to order details page for this order.
      • Orders → redirected to orders page.
    • Case 8
      • Log into customer portal.
      • Click on Orders then click into one that has associated orders.
      • Click on Associated Orders tab.
      • You can click on web#, erp# or the arrow on the right and they will all redirect you to the same place.
  12. KOD-18839: Requested Mobile Inventory Update
    • Regression Tests
    • Case 1
      • Log in to the mobile app, select any category, and proceed to a product page with a price without waiting for prices to load on the search screen. Confirm that prices and inventory are successfully loaded on the product page.
    • Case 2
      • Test product detail screen for guest user. You should not see any bugs or strange behaviors.
    • Case 3
      • Test correctness of strings displayed on the Product details screen (the one with inventory).
    • Case 4
      • Utilize the app without collapsible inventory. You should observe either 'Call for Availability' or 'In Stock' displayed above the inventory.
    • Tests
    • Case 1
      • Login to mobile app.
      • Go to any product.
      • You should be able to press on "Show More" to open more warehouses.
      • You should be able to press on "Show Less"" to hide additional warehouses.
    • Case 2
      • Use account with delivery location set to default (might be you will need to create new customer).
      • Login to mobile app.
      • Go to any product.
      • You should have the same top warehouse, as was set in yours company location.
      • Confirm changing of default location by changing company location on the operational portal (reload of the app is required).
    • Case 3
      • Test case 2 without "location" in the company settings and without selected delivery address (default location).
      • WarehoseCode should be null in company location and delivery address.
      • You should see the first shown location to be selected (can be any location).
    • Case 4
      • Login to mobile app.
      • On the top of the home screen you can change your location (or use web to change location).
      • Go to any product.
      • You should have the same top warehouse, as was set in yours delivery location.
      • Confirm step 4 by going to the same product on the web, as you did on mobile. You should see the same data.
    • Case 5
      • You should see "Inventory" if you use app with collapsible inventory.
  13. KOD-18870: API user required to agree to terms when checking out
  14. KOD-18966: Items count seems to be off for some categories/ subcategories
  15. KOD-19150: Hide warehouses for the category page
    • Regression Tests
    • Case 1
      • Please conduct this test for both logged-in customers and guests. Navigate to the product list and verify that everything appears as expected across three different views: List, Grid, and Catalog.
    • Case 2
      • Please conduct this test for both logged-in customers and guests. Search for some products, navigate to the details page of the chosen product, and ensure that the page layout appears satisfactory.
    • Tests
    • Case 1
      • Log in as a customer.
      • Go to product list.
      • Check if you see "Inventory" under price on product.
      • Click on "Show more". You should be redirected to Inventory tab on product details page.
    • Case 2
      • Login as a customer and select an available product. Navigate to the details page of the chosen product. Verify if you can view the 'Inventory' information and if an 'Inventory' tab is present near 'Resources'. Additionally, confirm that clicking on 'Show More' redirects you to the 'Inventory' tab.
    • Case 3
      • You should not login as a customer (you should be as a guest).
      • Go to product list.
      • Check if you see only “In Stock” or “Out of Stock”.
    • Case 4
      • As a guest, select an available product. Proceed to the details page of the chosen product.
      • Check if you see only “In Stock” or “Out of Stock”.
  16. KOD-19195: Work Order PDF
    • Tests
    • Case 1
      • Go to the cash Quote and generate internal PDF. Choose workOrderPDF-EJS as a template. Please review the generated template.
  17. KOD-19235: UX to enter vendor code on SKU record when direct ship SKUs are created
    • Regression Tests
    • Case 1
      • On the operations portal navigate to the products screen.
      • Open specific product detail page.
      • Find “Direct Shipped“ dropdown and set value to “No”.
      • Press “More button“ then “Generate SKU“.
      • Set any Warehouse code and press “Generate“.
      • Refresh Skus grid and confirm the updates.
    • Case 2
      • On the operations portal navigate to the skus screen.
      • Press “More“ → “Generate SKUs for product“.
      • Set warehouse code and press “Generate“.
      • Open developer tools on the network tab.
      • Find API request “byProducts“ with set warehouse code. Open preview and confirm that all SKUs are generated properly.
    • Tests
    • Case 1
      • On the operations portal navigate to the products screen.
      • Open specific product detail page.
      • Find “Direct Shipped“ dropdown and set value to “Yes”.
      • Press “More“ → “Generate SKU“.
      • Enter Warehouse code and vendor code.
      • Add column “Vendor Code“ on the Skus grid.
      • Refresh this grid.
      • Find Skus with set “Vendor Code” equal to the value you provided.
      • Repeat step 4 without setting vendor code.
    • Case 2
      • On the operations portal navigate to the Skus screen.
      • Press “More“ → “Generate SKUs for Direct Ship Products”.
      • Set Warehouse code and Vendor code.
      • Confirm that skus were generated.
      • Repeat step 2 without setting vendor code.
  18. KOD-19242: Fix issue with saving modal window
    • Tests
    • Case 1
      • Login to operations portal.
      • Open any data-grid (CRM → Companies → Data).
      • Click on any Column Heading → Edit.
      • Change column type to Select.
      • Setup options.
      • Click Cancel.
      • Try to edit column cells.
      • Make sure it works properly.
  19. KOD-19271: Create generic vendor for direct ship flow
    • Regression Tests
    • Case 1
      • Use a Direct order with the setting ‘orderFrom' which has a value different.
      • You will expect message: "Vendor is not available for working with Direct Orders"
      • The value of the setting must be a Vendor company which has that value as a code. Besides, company needs the setting 'vendorIntegration' which is used in the code to verify
    • Tests
    • Case 1
      • We need to make a call to this endpoint: /api/system/order/{orderID}/pushDirectOrder and the order should have a Setting with code ‘orderFrom’ and value ‘ERP’.
      • Besides, we need a VENDOR company with code ‘ERP’ OrderSetting is pointing.
      • Verify you get the error "Direct Orders are processed by the ERP for this vendor"
  20. KOD-19281: Magento Update Real Time Order Insert
    • Tests
    • Case 1
      • Place an order from Magento with the setting syncMagentoOrdersToErpRealTime =1.
      • Also, a new setting should be added manually, which should have the field name that we are going to set the externalOrderNumber.
  21. KOD-19291: Supply Customer part number
    • Regression Tests
    • Case 1
      • Please check that we still can make order, print it and see the email as usual.
    • Case 2
      • Please check that list and grid view looks good without any problems.
    • Case 3
      • Please ensure that the product details page appears without any issues.
    • Tests
    • Case 1
      • Product Details: For logged-in customers, attempt to add and edit 'Your Part #' and verify its functionality.
    • Case 2
      • Product Details: Open the edit dialog for the part number, clicking out, cancel should work fine.
      • Same with clicking “Save” on the original value.
    • Case 3
      • Product List (grid and list views).
      • For logged-in customers, test adding and editing 'Your Part #' for products in both views. Verify correct functionality.
    • Case 4
      • Product List: Open the edit dialog for the part number, clicking out, cancel should work fine.
      • Same with clicking “Save” on the original value.
    • Case 5
      • Try scrolling on both product list and detail pages and opening the part editor.
      • The editor should always appear underneath the part number text.
    • Case 6
      • Make an order with product which have your part.
      • Your part should appear in email, pdf and in customer portal.
    • Case 7
      • Also check the cart item s page, it shouldn't break and also should have your part number if it exists.
  22. KOD-19293: Price breaks
    • Regression Tests
    • Case 1
      • Perform the test for both logged-in customers and guests. Navigate to a category, select an available product, and proceed to the product details page. Verify that the page layout appears satisfactory.
    • Tests
    • Case 1
      • Perform a test as a logged-in customer. Go to a product details page and verify if you can view the Price Break information.
    • Case 2
      • Conduct a test as a logged-in customer. Visit a product details page and confirm that the Price Break section is not visible.
    • Case 3
      • Conduct a test as a guest user. Navigate to a product details page and verify that the Price Break section is not visible.
  23. KOD-19298: Show company code in assign company dropdown
    • Regression Tests
    • Case 1
      • On the operations portal navigate to the Company Groups screen.
      • Go to the specific company group details page.
      • Confirm that everything works good.
    • Case 2
      • On the operations portal navigate to the orders screen.
      • Open specific order details page.
      • Press “Assign to company“ button if visible.
      • Note: this button appear for Guests orders (No companyID and customerID).
      • Confirm that this dialog works properly.
    • Tests
    • Case 1
      • On the operations portal navigate to the Company Groups screen.
      • Go to the specific company group details page.
      • Press on “+ Assign Company“ input and add company from the list.
      • Confirm that everything works properly.
    • Case 2
      • On the operations portal navigate to the orders screen.
      • Open specific order details page.
      • Press “Assign to company“ button if visible.
      • Note: this button appear for Guests orders (No companyID and customerID).
      • Select Company and press “Assign“.
      • Values of the companyID of the order should change.
  24. KOD-19304: Order Confirmation Issues
  25. KOD-19311: Display unit dropdown
    • Regression Tests
    • Case 1
      • Check category pages for category which don’t have products with UOM. Check grid, list, catalog views and product pages.
    • Tests
    • Case 1
      • Check category pages for category that have products with UOM. Check grid, list, catalog views and product pages.
  26. KOD-19321: Fix the GTM installation code
  27. KOD-19322: Add a label “sign in to see your price”
    • Regression Tests
    • Case 1
      • Please test that products list/grid and product pages works as usual.
    • Tests
    • Case 1
      • Please test that we can see ‘sign in to see your price’ message (for guest users) on product grid, list and product pages. by clicking on it - user should be redirected to sign in price.
  28. KOD-19334: Create substitute product list endpoint
  29. KOD-19340: Update product list endpoint to return unitConversions also
    • Regression Tests
    • Case 1
      • Verify you can still get the response properly in Product screen from Operations portal (PIM → Products)
    • Case 2
      • Execute /api/system/product/exportCompanyProductCategoryPriceList and verify you have response without any error.
      • Required fields in the payload:
        {"companyCategoryCode":"",
        "companyCode": "",
        "warehouse": ""}
    • Case 3
      • Go to swagger and hit /api/system/product/exportWarehouseProducts to download a new csv file with exported product.
      • Check unitConversionList is null no matter if you send or not the new parameter in SearchParams body.
    • Case 4
      • Generate Sitemap.
      • Go to operations portal → SEO screen → Generate Sitemap → View sitemap.
      • Ensure that it returns the xml file with the expected database records.
      • This endpoint applies three filters against products:
        • Display in true.
        • Active in true.
        • primaryCategoryCode is not hidden category.
      • After obtaining the sitemap you should see some urls like {environmentUrl}/sitemap_categories_1.xml.
      • Copy and paste it in a new tab to see the database records.
      • Verify:
        • You could see the products with correspondent filters.
        • If you have categories active and the code is not 'hiddencategory', you should see them as well under {environment_url}/sitemap_categories_1.xml.
    • Tests
    • Case 1.1
      • Execute /api/system/product/list and set in SearchParams the field "unitConversions" in true.
      • Verify that products contain the field 'unitConversionList' with their unitConversions.
      • Example of payload:
        { "unitConversions": true,
        "page": 0,
        "size": 30,
        "settings": true}
    • Case 1.2
      • Execute /api/system/product/draft/list and set in SearchParams the field "unitConversions" in true.
      • Verify that products contain the field 'unitConversionList' with their unitConversions.
      • Example of payload:
        { "unitConversions": true,
        "page": 0,
        "size": 30,
        "settings": true}
    • Case 2.1
      • Execute /api/system/product/list and set in SearchParams the field "unitConversions" in false (Or do NOT send it at all).
      • Verify that products response have the field 'unitConversionList' in null.
    • Case 2.2
      • Execute /api/system/product/draft/list and set in SearchParams the field "unitConversions" in false (Or do NOT send it at all).
      • Verify that products response have the field 'unitConversionList' in null.
    • Case 3
      • Go to UserScripts and execute the requests. Check the logs to verify the response.
      • Example of the requests to be used in UserSript:
        var result = scriptServiceUtils.runAPIMethod("POST", "/api/system/product/list",
        {},
        { 'version':2},
        {"unitConversions": true,
        "size" : 10});
        app.log(app.toJson(result));
      • and do the same but changing endpoint: /api/system/product/draft/list
  30. KOD-19343: AvaTax Commit When Order invoiced
    • Regression Tests
    • Case 1
      • Calculate order totals (which includes taxes calculation) works with no errors with Avalara tax engine.
    • Tests
    • Case 1
      • Tax transaction is committed in Avalara upon Order invoicing
  31. KOD-19348: Add error message to customer - maximum order feature
    • Regression Tests
    • Case 1
      • Making sure interval and max popup still appear.
      • Go to product that has min, max and interval set (Click on Insulation category and go to first product).
      • Product list page → Click + button until its > 20 → Click add to cart → notice popup will appear.
      • Now enter in a number not in an interval of 5 → notice the popup will appear.
    • Case 2
      • Same test as above just on product description page.
    • Tests
    • Case 1
      • Go to a product that has at least a max set.
      • Add some quantity below or at the max.
      • Now add some more so it goes over the max quantity
      • Notice a tooltip error message pops up.
    • Case 2
      • Same test as above just in the product description page.
  32. KOD-19361: Operations Portal - Add Vendor Emails and Events screen to the AR / AP tab
    • Tests
    • Case 1
      • In Operations portal, click on AR/AP in the sidebar, there should be AP Invoice Emails link.
      • Go to AP Invoice Emails screen. It should show emails with type of "AP Automation".
    • Case 2
      • In Operations portal, → AP Invoice Emails you should be able to preview the email and go to the details page of the email.
      • You should be able to see the details, customer files and internal files tab (read-only).
      • Please note, the detail pages would require the user to have either of the following roles as these detail pages are still using the email endpoints. {'administrator', 'superuser', 'emailEdit', 'emailView'}
    • Case 3
      • In Operations portal, click on AR/AP in the sidebar, there should be AP Events link.
      • Go to AP Invoice Events. It should show events with eventType of "DocumentUploadedForAPAutomation".
      • You should be able to download or preview the event if there’s a file linked to it.
  33. KOD-19363:Shipping
  34. KOD-19369: Change default image for products without an available image
    • Regression Tests
    • Case 1
      • Navigate to any category.
      • Change view from the grid to list.
      • Change view from the list to catalog.
      • Verify is everything displayed properly.
    • Case 2
      • Navigate to any category.
      • Open any product and check is image changing work as expected.
      • Add this product to cart.
      • Verify that it is displayed properly.
    • Tests
    • Case 1
      • Navigate to any category.
      • Find a product without image provided.
      • Change view from grid to list.
      • Confirm that image set right.
    • Case 2
      • Navigate to any category.
      • Add this product to cart.
      • Confirm that product image in cart is the same one.
    • Case 3
      • Open some products.
      • Navigate to the home page, chack is there is recently viewed products carousel.
      • Confirm that all products with default image have same image in this carousel.
    • Case 4
      • Go to “Menus“.
      • Navigate to the customizer.
      • Find “Top categories“ section.
      • Add new category to this section.
  35. KOD-19387: Top menu and help page redesign
  36. KOD-19391: Tweaks for disclaimer
    • Regression Tests
    • Case 1
      • Please test that all templates work as usual.
    • Case 2
      • Please test that we will not see "Cash Discount 0.00 If Paid Within Terms" with zero value on order templates.
  37. KOD-19393: Opening external links in the footer in a new tab
    • Regression Tests
    • Case 1
      • Make sure parent and child links in the header still work correctly.
    • Case 2
      • Check that non-external links still open in the current tab.
    • Tests
    • Case 1
      • Check that external links open in a new tab.
  38. KOD-19396: Fix Product Ranking
    • Regression Tests
    • Case 1
      • Endpoint: /api/system/product/updateProductOrderFromOrderItemsQuantityShippedSum
      • with the values by default, but only setting the "ordersCreatedLessThanDaysAgo" field. Then the endpoint should behave as it does always. It means that it is going to check the most ordered products and based on that it is going to modify the productOrder field in those products.
      • One change to notice, leaving the others parameters by default. The orderItems that it is going to check are going to be only from orders with status= Paid or Invoiced
    • Case 2
      • If you use the server side endpoint: api/system/product/updateProductOrderFromOrderItemsQuantityShippedSum
      • with the values by default, but only setting the "ordersCreatedLessThanDaysAgo" field. Then the server side endpoint should behave as it does always. It means that it is going to check the most ordered products and based on that it is going to modify the productOrder field in those products.
      • One change to notice, leaving the others parameters by default. The orderItems that it is going to check are going to be only from orders with status= Paid or Invoiced
    • Case 3
      • Be sure that the setting jobUpdateProductOrderFromOrderItemsQuantityShipped is turn off and run the monthlyInvervalJob.
      • Check that it is working as always.
    • Tests
    • Case 1
      • Endpoint: /api/system/product/updateProductOrderFromOrderItemsQuantityShippedSum
      • With the values:
        • ordersCreatedLessThanDaysAgo = 100.
        • rateByFrequency= true
        • orderStatuses= Received
      • you will see that the update is going to be done filtering the orders with status Received with creating date > today - 100.
      • Also, now we are not performing a sum of all amount of product inside the order, instead of that we are calculating the popularity, it means that if the product appear 1 or 400 times in one orderItem, then it is going to be taken as 1 always.
      • You can test this modifying the value for orderStatus, adding more statuses. Also, you must to check that if you do not select nothing, always for default you are going to have Paid,Invoiced.
      • Also you can test changing the value for rateByFrecuency to true or false.
    • Case 2
      • Here you must to test the same thing described in the previous test, but now using the server side endpoint.
      • Remember that all new params are request params:
      • orderStatus is a list of string, while rateByFrecuency is a boolean value true/false.
    • Case 3
      • Be sure that the setting jobUpdateProductOrderFromOrderItemsQuantityShipped is turn on and run the monthlyInvervalJob.
      • Check that now this job is going to run the same function than the API mentioned above.
      • Also, you can set the parameter for this job using the next json variables:
        • updateProductOrderWithOrdersCreatedLessThanDaysAgo: number of days before today.
        • updateProductOrderByFrequency: true/false.
        • orderStatuses: comma separated list (without spaces) with the status that you want to include in the filter to calculate max or popularity.
  39. KOD-19406: Fix the issue with displaying label in column
    • Tests
    • Case 1
      • Login to Operations portal.
      • Open any data-grid (CRM → Companies → Data).
      • Click on any Column Heading → Edit.
      • Change column type to Select.
      • Setup options.
      • Click Save.
      • Check in Column cell labels displayed instead of values.
  40. KOD-19411: Kodaris - Fix Website Links
    • Regression Tests
    • Case 1
      • Make sure the product document pages and menus work as expected and page content loads fine.
    • Tests
    • Case 1
      • Click on a page in navbar that doesn't have content.
      • The link should open and display a message of how to get started.
  41. KOD-19414: Fast sync direct orders job
    • Tests
    • Case 1
      • company setting vendorIntegration should be set
      • Order setting "orderFrom" should be set to company code.
      • Have at least 1 order in Kodaris
      • Enable "jobSyncDirectOrders" setting.
      • Run manually or wait for HourlyIntervalJob.
      • Make sure sync was successful, all fields, mentioned in interceptor, updated
  42. KOD-19416: Update /api/user/product/substitute endpoint to return multilingual product name
    • Regression Tests
    • Case 1
      • Test substitute product works as before on UX.
    • Tests
    • Case 1
      • Test new param "languageCode" for /api/user/product/substitute endpoint.
  43. KOD-19422: Update import report email to include UTF8 error on failed csv import
    • Regression Tests
    • Case 1
      • Import any file successfully. For example, import customer files.
    • Case 2
      • Now be sure that this setting "alwaysBatchUserUploads" is equal to 1 (or some import that put the import in queue to be executed later). Then import any file successfully with some error inside, like a missing column.
      • You must to wait that SyncPayloadJob is executed and it takes your import.
      • Check that you receive an email with the information about the error.
    • Case 3
      • Do the same thing that the test above, but now with no error.
      • Check that you receive an email with no error there.
    • Tests
    • Case 1
      • Be sure that this setting "alwaysBatchUserUploads" is equal to 1.
      • Create a file with a format different that UTF-8, for example ISO-8559, save the file and add the extension csv to the end of the file.
      • Repeat regression test 2 but now using this file.
      • Then you must receive an email with an error report saying that file could not be read.
  44. KOD-19424: Update Negative / 0 Inventory Display
  45. KOD-19425: Hide Kodaris Order # for Customer Confirmation Page
    • Regression Tests
    • Case 1
      • For all three templates, verify that everything appears as expected.
    • Tests
    • Case 1
      • For orders with status received check if you don't see value in invoice no column.
  46. KOD-19426: Disable add to cart button for unavailable products in case of guest user
    • Regression Tests
    • Case 1
      • Log in → find an unavailable product → add to cart button should still be disabled for both product list and product description pages.
    • Tests
    • Case 1
      • Do not log in → find a product that is unavailable → add to cart button should be disabled in both product list and product description pages.
  47. KOD-19427: Increase max number of coupons that can be generated
    • Tests
    • Case 1
      • In Operations portal → Discounts, click on Generate Coupons. You should be able to input until 1000 in Number of Coupons field.
      • There shouldnt be any issues generating coupons.
  48. KOD-19428: Change the placement of agree to terms checkbox
  49. KOD-19431: Saving attributes document remains even if the product no longer has any indexed attributes
    • Regression Tests
    • Case 1
      • Check that "documentDbEnabled" setting is true (integerValue should be '1').
      • Then we want to corroborate common flows of adding and deleting attributes still work:
      • Steps:
        • Go Operations Portal → Products → Attributes → Add new attributes.
        • After adding them, go to ‘Custom Record' tab, refresh the screen and make sure the attributes appear there.
        • Go back to attribute tab and delete one of them. Go to 'Custom Record’ tab and verify it disappear from there. (If it is not the last attribute, you should still see the document but without the value you have just deleted: eg:
        • In the same screen/Tab (Custom Record), delete the attribute using the trash icon. Make sure the value disappear from there but NOT from the product.
    • Tests
    • Case 1
      • Go to Operations Portal → Products → Select any product → attributes.
      • Delete the last attribute linked to any product → Delete all attributes one by one.
      • Verify the product document in tab ‘Custom Records’ disappears.
    • Case 2
      • Go to Operations Portal → Products → Select any product → attributes.
      • Delete the last attribute linked to any product → Delete all attributes selecting all at once.
      • Verify the product document in tab ‘Custom Records’ disappears.
  50. KOD-19432: Support NDJSON exports for Products
  51. KOD-19435: Terminals Management
    • Regression Tests
    • Case 1
      • Pay Order from operations portal (Order details screen).
    • Case 2
      • Issue charge from operations portal (Company details screen).
    • Tests
    • Case 1
      • New Terminal API /api/system/terminal
    • Case 2
      • Initialize order payment on a terminal: use stored "terminalID".
    • Case 3
      • Initialize custom amount payment (issue charge) on a terminal: use stored "terminalID"
  52. KOD-19438: Add Employee Send Email endpoint
    • Tests
    • Case 1
      • Execute: /api/system/employee/{administratorID}/sendEmail endpoint and confirm that the email is successfully sent to the administrator with the chosen template.
  53. KOD-19439: Add status field to InternalFile and CustomerFile
    • Regression Tests
    • Case 1
      • Verify the functionality of both the Customer Files and Internal Files screens.
    • Tests
    • Case 1
      • Test status field is working for Internal Files.
    • Case 2
      • Test status field is working for Customer Files.
  54. KOD-19442: Automation Email Flow - Process every pdf file on the email
  55. KOD-19448: Custom parser - Fix for Notes
  56. KOD-19449: Magento Update Real Time Order Insert When Error
  57. KOD-19457: Out of Order Attributes Update
  58. KOD-19460: Impl cookies
  59. KOD-19463: Pages - Add Header Code
    • Regression Tests
    • Case 1
      • Ensure that the page detail screen in the operation portal loads properly.
    • Tests
    • Case 1
      • Navigate to the "Pages" section and select the "Header" tab. Verify that the page loads correctly and that you can edit it without any issues.
  60. KOD-19479: Fix register CMS page
    • Tests
    • Case 1
      • Navigate to the register form page. Confirm that the text color within the input fields is now black.
    • Case 2
      • Access the page editor and ensure that all base template options are available:
        • blog post
        • blog
        • career
        • careers
        • page full
        • page medium
        • page small
        • default
      • Additionally, try selecting templates to confirm that the functionality works as expected.
  61. KOD-19493: Support category codes with slashes
    • Regression Tests
    • Case 1
      • You'll need to verify that loading categories still functions correctly.
    • Case 2
      • Verify that the category loads properly even when random special characters are present in the code.
      • This is for the public commerce category pages.