Document Automation Studio now supports creating XML adapters alongside existing PDF and JSON adapter types. This enhancement expands the platform's document processing capabilities to handle structured XML data for both invoice and order processing workflows.
Users can now create XML adapters through the same intuitive interface used for other file types. When creating a new adapter, simply select "XML" from the File Type dropdown in either the Invoice Adapters or Order Adapters sections. The system automatically adjusts the configuration options, removing the Analysis Methods section since XML files don't require the same processing approach as PDFs.
The XML adapter workflow maintains the familiar drag-and-drop functionality for file uploads, with built-in validation to ensure only XML files are accepted. Users can preview uploaded XML content directly in the interface and access the adapter script editor to customize processing logic for their specific XML data structures.
This feature follows the same architectural pattern as the recently introduced JSON adapter support, providing consistent user experience across different file types.
XML adapter support is now available in Document Automation Studio for all users. For a complete walkthrough of the new functionality, refer to the demonstration video showing both invoice and order adapter creation processes.
https://youtu.be/4FUUUQ9s91Q
Tickets
KOD-24291: Price Lists Mass Email off Company Group Catalog
Regression Tests
Case 1
Validate Single-Company price book generation continues working fine.
Pre-requirements:
At least one company with an active CompanyProductCategory linked to a catalog.
Steps:
From the Operations portal go to Company Groups → Company Group.
Go to the Catalog tab.
Click on Actions dropdown.
Select Generate Price Book.
Fill the form in the popup (Template, Company) – you can add an email and check the Attach file to the email field for a full test.
Wait for the FiveMinuteBulkJobsJob to process the event or trigger it manually.
Verify the price book was generated successfully for that company (check Company Categories screen).
If you checked Attach file to email, review your email and validate the file was received.
Tests
Case 1
Validate new bulk endpoint creates events only for active companies in a customer group.
Pre-requirements:
A CustomerGroup with at least 2-3 companies assigned, where at least 1 is inactive and at least 1 is active.
A group catalog (CompanyProductCategory ) linked to that customer group (i.e. customerGroupID is set on the catalog).
Steps:
From Swagger, call POST /api/system/companyProductCategory/customerGroup/createCompanyProductCategoryPriceBookEvents/async under Company ProductCategory API section.
Pass customerGroupID , companyProductCategoryID , and priceBook (e.g. priceBook1 ).
Wait for the FiveMinuteBulkJob to pick up and process the event – or run it manually, if possible.
Expected Results:
The endpoint returns 200 OK with the message: "Price book event creation started. This process runs in the background."
From the Operations Portal, go to the System Events screen. There must be a system event with code GroupCatalogPriceBookEvents containing the result payload (successCount matching the number of active companies).
In the Events screen, verify there is one CompanyProductCategoryPriceBook event per active company (check the companyCode in the Json Data column).
No event is created for the inactive company.
Price book data is generated for the active group’s companies and catalogs.
Case 2
Validate invalid catalog-group combination is reported as an error in system events.
Pre-requirements:
A valid customerGroupID.
A companyProductCategoryID that belongs to a different customer group (or to a company, not a group)
Steps:
Call POST /api/system/companyProductCategory/customerGroup/createCompanyProductCategoryPriceBookEvents/async under Company ProductCategory API section with the mismatched customerGroupID and companyProductCategoryID.
Pass a valid priceBook.
Click on the execute button.
Expected Results:
The endpoint returns 200 OK with the message: "Price book event creation started. This process runs in the background." (since the endpoint is async, it always returns 200 immediately).
From the Operations Portal, go to the Events screen. There must be a system event with code GroupCatalogPriceBookEvents_ERROR indicating the entity was not found for the given customer group combination.
Case 3
Validate empty group creates no events and reports zero companies.
Pre-requirements:
A CustomerGroup with no companies assigned (or only inactive companies).
A group catalog linked to that customer group.
Steps:
Call POST /api/system/companyProductCategory/customerGroup/createCompanyProductCategoryPriceBookEvents/async under Company ProductCategory API section with the empty group's customerGroupID and companyProductCategoryID.
Pass a valid priceBook.
Expected Results:
The endpoint returns 200 OK with the message: "Price book event creation started. This process runs in the background."
From the Operations Portal, go to the Events screen. There must be a system event with code GroupCatalogPriceBookEvents with successCount: 0 and failCount: 0 in the payload.
KOD-24936: Automated processing of Commerce Hub Orders
KOD-28293: Quote description changes
Regression Tests
Case 1
Check that templates are still loads fine for Orders, Cash Quotes, Quotes and Request Quote
Tests
Case 1
For Cash Quotes, Quotes and Request Quote, we need to check that when items have record in order notes screen, we are showing it on template.
We are filtering in next way:
primary code → product code
notes type → p
and then showing the result in templates.
KOD-28584: Roll Out Payments Report API Integration
KOD-29349: Developer Document - Mapping new account in Kodaris to InforCSD
KOD-29694: Kodaris - Date Range Picker
Tests
Case 1
Open the date range picker by clicking the trigger button.
Verify that the "Relative" tab is active by default.
Click on the "Last 7 days" option from the list.
Verify that the picker closes automatically.
Verify that the trigger button displays "Last 7 days".
Case 2
Open the date range picker by clicking the trigger button.
Click on the "Absolute" tab to switch modes.
Select "2026-01-01" in the start date input field.
Select "2026-01-31" in the end date input field.
Click the "Apply" button to confirm the selection.
Verify that the picker closes.
Verify that the trigger button displays "2026-01-01 to 2026-01-31".
Case 3
Open the date range picker by clicking the trigger button.
Switch to the "Absolute" tab.
Click on the start date input field to focus it.
Manually type "2026-03-15" in the start date field.
Verify that the input accepts the manually entered date.
Click on the end date input field to focus it.
Manually type "2026-03-25" in the end date field.
Verify that the input accepts the manually entered date.
Click the "Apply" button to confirm the selection.
Verify that the picker closes.
Verify that the trigger button displays "2026-03-15 to 2026-03-25".
Case 4
Test mode="relative".
Open page with <kr-date-range-picker mode="relative">.
Click on the picker trigger.
Expected: Dropdown opens WITHOUT tabs.
Expected: Relative date options are displayed immediately (Last 5 minutes, Last 30 minutes, etc.).
Click on any relative option (e.g., "Last 7 days").
Expected: Option is selected and dropdown closes.
Test mode="absolute".
Open page with <kr-date-range-picker mode="absolute">.
Click on the picker trigger.
Expected: Dropdown opens WITHOUT tabs.
Expected: Date input fields are displayed immediately (Start and End).
Enter start date: 2026-01-01.
Enter end date: 2026-01-31.
Click the "Apply" button.
Expected: Date range is selected and dropdown closes.
KOD-29786: Send email alert when new superseded items are added
Tests
Case 1
Need to add setting supersededConfiguratorProductsEmailTo with the correct emails.
When daily job runs and there are products in the configurator products that are superseded, an email should be sent out to whoever is listed in that setting above with the details of the configurator product and the configurator variant product and the item that supersedes it.
If there are no superseded products within configurator products, then no email should be sent.
If a configurator product has a superseded item (highly unlikely, but just in case), the superseded variant name/code will have a dash.
KOD-29836: Pricing Records - Customer Level 0 in CSD
KOD-29885: Add Time Report page to Services app
Tests
Case 1 — Page Load
Verify that the breadcrumb shows "Services > Time Report".
Verify that the date range defaults to the current week (Monday–Sunday).
Verify that the grid shows day columns for each day of the current week with correct day names and dates.
Verify that the logged-in user is auto-selected in the employee filter and their worklogs are loaded.
Case 2 — Date Range Filtering Switch the date range to "This Month"
Verify that the grid updates to show all days of the current month and worklogs are reloaded.
Switch to a custom absolute range (e.g., two specific dates).
Verify that columns and worklogs update to match the selected range.
Switch back to "This Week".
Verify that the grid returns to the current Monday–Sunday range.
Case 3 — Employee Selection Read-Only
Select another employee — verify their worklogs load and the "+ Log Time" button and cell editing are disabled.
Re-select your own username — verify editing is enabled again.
Case 4 — Add Time Entry (Cell Popover)
Click an empty day cell — verify popover opens with Hours, Minutes, Description fields and "Add" button.
Try to add without hours/minutes — verify warning "Please enter hours or minutes".
Try to add without description — verify warning "Please enter a description".
Fill in all fields, click "Add" — verify the cell value, row total, and footer totals update.
Case 5 — Edit Delete Time Entry (Cell Popover)
Click a cell with an existing entry — verify popover lists the entry with edit and delete buttons.
Click edit — verify fields populate with the entry's values; change them and click "Save" — verify all totals update.
Click delete on an entry — verify it is removed and totals update.
Case 6 — Log Time Dialog
Click "+ Log Time" — verify dialog opens with empty fields and today's date.
Search for a ticket — verify results exclude Worklog and Activity type tickets.
Fill in all fields, click "Log" — verify button shows loading, dialog closes, and the grid reloads.
Open a ticket page, click Actions > "Log Time" — verify the Ticket field is pre-filled and disabled.
Case 7 — Log Time Validation
Open the Log Time dialog, leave all fields empty, click "Log" — verify warning "Please select a ticket, date, and enter hours or minutes".
Select a ticket, enter hours, leave Description empty, click "Log" — verify warning "Please enter a description".
Verify that negative values cannot be entered in Hours and Minutes fields.
KOD-29989: Invoice Parser
KOD-30029: Add column sorting to kr-table component
Tests
Case 1
Navigate to a table and if the column is sortable, when you hover over a column title, you should now see an arrow show.
If you click that arrow, it should sort the column in ascending order. If you click it again, it should sort in descending order. If you click it a third time, it should remove the sort.
Case 2
Sort one of the columns → now hold the shift key and click another column → notice that both columns are now sorting and you will see a number next to the arrow with which sort has precedence.
Case 3
Navigate to a different page on the table (ie: move to the second, third, etc page on the table) → now click the arrow to sort and notice the table resets back to page 1.
KOD-30046: Make table rows clickable and remove edit icons/buttons across all list screens
KOD-30078: Add ability to search by oldest or newest order
Regression Tests
Case 1
Validate add item to a return order from customer portal is working as always.
Pre-requirements:
At least 2 orders under the same company that:
Have status Invoiced or Paid.
Share at least one product code in common (e.g. both contain WIDGET-001 ).
That shared item has Shipped quantity greater than 0 on each order.
The 2 orders have different invoice dates so you can distinguish which is newer.
The generalReturnsEnabled setting is enabled.
Steps:
From the Customer Portal go to the Returns page.
Click the Action button (top-right corner) and select Start New Return.
You may optionally select a location name, but it must match the delivery address on the orders you are testing.
In the Product Code field, search for the product code that is shared between your 2 orders.
Click the Add button (do not pass any sortDirection parameter – this tests the default).
After the item is added, click the View button in the Invoice column to see the original order the item was matched.
Expected Results :
The item is added successfully to the return order.
The original order shown in the Invoice column is the newest order that contains this product (the one with the most recent invoice date).
This confirms the default behavior (DESC / newest first) is preserved.
Tests
Case 1
Validate that the new sortDirection param added to endpoint POST /api/account/order/return/{orderID}/addItem controls which original order an item is matched from based on the invoice date ( extra3Date ).
Pre-requirements:
At least 2 orders under the same company that:
Have status Invoiced or Paid.
Share at least one product code in common.
That shared item has Shipped quantity greater than 0 on each order.
The 2 orders have different invoice dates ( extra3Date ) so you can distinguish which is older/newer.
The generalReturnsEnabled setting is enabled.
Steps:
From the Customer Portal go to the Returns page.
Click the Action button (top-right corner) and select Start New Return (you can select or not the location name, but remember that it must match with the orders you are testing) – this will create a new Return Order
From Swagger go to endpoint POST /api/account/order/return/{orderID}/addItem} under the Customer Order API section.
Set the orderID field to the ID of the just-created Return Order.
Set the sortDirection param (this field is case-insensitive) and pass a body like the one below.
Click Execute.
Expected Result:
If sortDirection is DESC – the item is added from the newest order it appears in.
If sortDirection is ASC – the item is added from the oldest order it appears in.
If sortDirection is an invalid value (e.g. INVALID ) or is empty/not provided – DESC is applied by default (newest first)NOTES:
Notes:
The sorting is applied by the extra3Date field (ERP invoiced date).
Verify the originalOrderID field in the response to check which order the item was matched from.
Start a new Return Order for each test run to avoid return quantity validation errors from leftover items.
/*
* <ITEM_CODE>: It is the code of the product item which is shared between the different orders
*/
{
"code" : "<ITEM_CODE>" ,
"quantity" :1,
"receivedReason" : null ,
"sscReceivedNote" : null
}
KOD-30103: Kodaris - Company Custom Fields Followup - Ability to Update on Grids
Regression Tests
Prerequisites
In Settings, find integrationIndexedCompanyFields and ensure at least one custom field entry has settingName , settingType , and settingDescription populated. Example:
{ "settingCode" : "myField" , "settingName" : "My Field" , "settingType" : "CUSTOM" , "settingDescription" : "My custom field description" , "solrField" : "custom_myField_s" , "isIndexed" : true }
Note the settingCode — it will be used throughout this test-
NOTE: the key changes in the app behavior (Company):
custom fields are editable from the data grid (for those who could edit them before)-
new functionality is available for the roles companyView or companyEdit-
users with companyView or companyEdit role can view custom fields in data grid, Custom Fields tab, Developer Fields tab, but cannot see other settings in Developer Fields tab-
users with companyEdit role can edit custom fields in data grid, Custom Fields tab, Developer Fields tab
Case 1
Company: Custom Fields via Standard PUT (Detail Page)-
Login as a user with the role administrator / superuser / companySettingEdit-
Regular field update on grid — Edit a standard company column (e.g., name). Verify PATCH goes to /api/system/company/{id} with normal fields (no customFields key if no custom fields were changed).
Verify changes save and persist after page refresh.
Open a company detail page, change a standard field (e.g., name), and save.
Refresh the page.
Verify the standard fields are still correct.
Verify the custom fields are still present after save (not cleared by the PUT).
Export/Import — Verify custom field export/import with custom_ prefix still works.
Case 2
Login as a user with the role administrator / superuser / companySettingEdit.
Go back to Companies, open Company Details by clicking the > button at the end of a row.
Switch to the Custom Fields tab.
Remember the name of a not empty custom field or set any value in any custom field and remember it.
Switch to the Developers Fields tab.
Find the custom field in the list.
Try to update, delete and insert (make a screenshot with all columns before deleting) a custom field via the Developers Fields tab this way: do an action, refresh the grid, verify the change.
Verify there are no error messages during the update/delete/insert.
Try to insert, update and delete a setting via the Developers Fields tab this way: do an action, refresh the grid, verify the change.
Verify there are no error messages during the update/delete/insert.
Tests
Case 1
Company: Custom Field Create via Data Grid
Login as a user with the role administrator / superuser / companySettingEdit.
Go to Companies.
Switch to the Data grid.
Click the Show/Hide Columns button.
Enable checkbox for at least one custom field (the one from prerequisites).
Set a value for the custom field (choose one with no value) and click on another field (to trigger save).
If the UX part if the feature is not released go to Swagger = System API - Company API - /api/system/company/{id} PATCH. Use company ID and request body like this:
Make sure that the deleted filed is not present in the grid on the page Developer Fields.
Company: Custom Field Re-Creation via Detail Page + Attribute Verification.
Go back to Companies, open Company Details by clicking the > button at the end of a row.
Switch to the Custom Fields tab.
Set the same custom field to the value from the saved file, click on another field to save.
Go to the Developer Fields tab (click More and then Developer Fields).
Verify the custom field is present.
Compare all fields in the row with the saved screenshot — verify name , type , description , valueType , and value all match. This confirms that the backend correctly resolved attributes from integrationIndexedCompanyFields when re-creating the deleted setting.
Case 2
Permissions: companyView
(optional) Login as a user with the role administrator / superuser / companySettingEdit and Find/create a company with not empty custom fields and not empty non-custom-field.
Login as a user with the role companyView.
Go to Companies, open Company Details by clicking the > button at the end of a row.
Make sure that the user can add custom field columns to the grid and see the values.
Make sure that the user cannot add non-custom-field setting columns to the grid (they should not appear in the dropdown list).
Login as a user with the role companyEdit.
Case 3
Permissions: Custom Fields and Developers Fields edit view.
Login as a user with the role administrator / superuser / companySettingEdit
Find/create a company with not empty custom fields and not empty non-custom-field (code NOT in integrationIndexedCompanyFields ).
If any items (custom fields, settings) were created, verify that they are still present after refreshing the page.
Remember the company and some of custom-field/non-custom-field names and codes or make screenshots.
Log in as a user with companyView but without companySettingEdit , administrator , or superuser
Go to Companies, open Company Details by clicking the > button at the end of a row.
Verify that the user can open the Custom Fields tab.
If you use a user without companySettingEdit , administrator , or superuser and UX part if the feature is not released use /api/system/company/{companyID}/settings POST instead of using UI.
Verify that the custom field values on the Custom Fields tab are correct (the custom fields that you remember are not empty).
Verify that /api/system/company/{companyID}/settings GET returns the same list of Custom fields as you can see in UX / returned by POST (restricted roles can see Custom Fields but can not see other Settings).
Verify that the user can open the Developers Fields tab.
If you use a user without companySettingEdit , administrator , or superuser and UX part if the feature is not released go back to.
/api/system/company/{companyID}/settings POST instead of using UI.
Verify that the user can see custom fields on the Developers Fields tab.
Log in as a user with companyEdit but without companySettingEdit , administrator , or superuser
Repeat steps 5-12.
Verify that the user CANNOT see non-custom-field settings on the Developers Fields tab.
Log in as a user with companyView but without companySettingEdit , administrator , or superuser.
Verify that a user with only companyView (no edit roles) can view custom fields but cannot modify them on the Custom Fields tab.
Verify that a user with only companyView (no edit roles) can view custom fields but cannot modify them on the Developers Fields tab.
Case 4
Permissions: Custom Fields and Developers Fields edit
Login as a user with the role administrator / superuser / companySettingEdit (skip steps 1..5 if you already have a company with a not empty non-custom-field setting).
Go to Companies, open Company Details by clicking the > button at the end of a row.
Switch to the Developers Fields tab.
Create a setting with a code that is not in integrationIndexedCompanyFields (use a wired code with letters and numbers).
Remember the code of the setting.
Log in as a user with companyEdit but without companySettingEdit , administrator , or superuser.
Go to Companies, open Company Details by clicking the > button at the end of a row.
Switch to the Custom Fields tab.
Remember the name of a not empty custom field or set any value in any custom field and remember it.
Switch to the Developers Fields tab.
Find the custom field in the list.
Try to update, delete and insert (make a screenshot with all columns before deleting) a custom field via the Developers Fields tab this way (do an action, refresh the grid, verify the change).
If you use a user without companySettingEdit , administrator , or superuser and UX part if the feature is not released use
/api/system/company/{companyID}/setting POST and /api/system/company/{companyID}/setting/
GET, PATCH, DELETE instead of using UI.
Verify there are no error messages during the update/delete/insert.
Try to insert, update and delete a setting via the Developers Fields tab this way (do an action, close an error message, refresh the page),
If you use a user without companySettingEdit , administrator , or superuser and UX part if the feature is not released use.
/api/system/company/{companyID}/settingPOST and /api/system/company/{companyID}/setting/
GET, PATCH, DELETE instead of using UI.
Verify that an error message (about missing permissions) appears after every of these actions (update/delete/insert) and changes are not saved.
Login as a user with role administrator / superuser / companySettingEdit (optional part, can be done after passing all these tests).
Go to Companies, open Company Details by clicking the > button at the end of a row
Switch to the Developers Fields tab.
Delete a setting that was created in step 4.
KOD-30114: Product Category Assignment
KOD-30164: Batch Report Phase 2 to Identify where to Send Email
Regression Tests
Case 1
Verify that the batch report generates without errors.
Tests
Case 1
Verify that email is sent to the address from the terminal's reportingEmail field.
KOD-30188: Update email templates for account activation
KOD-30215: Credit App - Save to ERP Updates
Regression Tests
Case 1
Go to the credit application form.
Fill the form.
Submit the application
Go to the operations portal.
Go to the companies tab.
Go to the details of the company that you just created.
Click on the “save to ERP” button.
Expected:
You should be able to create the company in the ERP. You can check if the company now has a new developer field with the code “custno”.
You should be able to see a new developer field with code pushedToTrendBy .
The value of the developer field should be the email of who clicked the button to release to the ERP.
Already covered in the feature test on tropic environment.
Case 2
Go to the operations portal.
Go to the companies tab.
Go to the details of the company that you just created in the test case 1.
Change the email address field to something different.
Click on the “save to ERP” button.
Expected:
You should be able to update the company in the ERP successfully. You can wait sometime till CSD syncs back and be sure that your field won’t be overwritten.
Tests
Case 1
Go to the credit application form.
Fill the form.
Submit the application
Go to the operations portal.
Go to the companies tab.
Go to the details of the company that you just created and get the ID.
Go to swagger (the UX for this ticket is not ready yet).
Go to the company controller.
Call the POST /api/system/company/{companyID}/addCompanyToErp
Endpoint with the ID that you got from step 6.
Expected:
You should receive statusCode = 200 And status = success.
You should be able to see a new developer field with code pushedToTrendBy .
The value of the developer field should be the email of who clicked the button to release to the ERP.
Case 2
Go to the companies tab in the operations portal.
Go to the details of the company that you just created in the test case 1 and get the ID.
Update a field of the company, for example, the primary email.
Go to swagger (the UX for this ticket is not ready yet).
Go to the company controller.
Call the POST /api/system/company/{companyID}/updateCompanyInErp
Endpoint with the ID that you got from step 6.
Expected:
You should receive statusCode = 200 And status = success.
KOD-30236: Invoice Processing Issue
KOD-30246: Kodaris - UX for Company custom fields updates
Regression Tests
Case 1
Verify that company fields can be edited and saved in the grid.
Verify that custom fields are not cleared after editing a standard field.
Tests
Case 1
Verify that custom fields can be edited in the Company Data Grid.
Verify that after editing a custom field, the value is saved and displayed after a refresh.
Verify that users with companyView or companyEdit permissions can open the Custom Fields tab.
Verify that users with companyEdit permissions can edit custom fields in the Custom Fields tab.
KOD-30254: Integration Check if We Support Inventory API
KOD-30290: Set up shipping methods / Shipvias
KOD-30326: Alert about unclosed old batches
KOD-30333: Vendor Tax Processing Failure
KOD-30338: Сhange the footer from black background to reflex blue
You can click on a file to preview it (if allowed).
You can create a new folder, upload a file, and upload a folder.
Tests
Case 1
Notice the + New button is now larger than it was before and you can still click it to choose which action you want to perform.
Case 2
In the grid view, on the folders, notice when you hover over it, there are 3 dots and if you click it a list appears to either move or delete.
On the files, click the 3 dots and notice there is one new option of move (along with download and delete).
In the list view, if you hover over the folder or file, you will see the new icon of move in addition to the ones that were there before (and now if you hover over those icons, there is a tooltip of what the icons mean).
Case 3
For both list and grid view.
When you click move, a popup should appear that lists the folders and files in the top level (all files will be greyed out similar to google drive) → click into folders and notice the file path up top → the parent folders are clickable and will take you back to that folder → if there are a lot of folders to click into, you will see … after All which is clickable and the rest of the folder path will be shown and you can see and click on those folder names → once you find the folder you want it in, click Move and the folder and/or file will be moved to the correct place.
This will work for both folders and files.
Case 4
For both list and grid view.
When uploading a folder, the files inside that folder should now be named the same as how they were on your computer (no more prefix of the folder name first).
KOD-30395: taxing missing
KOD-30405: B2C Customer Address Management
KOD-30408: Kodaris - Add Parent to FAQ Drafts
Regression Tests
Case 1
Navigate to Pages and click on an existing page to open it (/pages/:contentPageID).
Locate the parent page autocomplete field in the detail form.
Type a search query in the autocomplete field.
Verify that suggestions appear and the current page is excluded from results.
Select a parent page and verify it is saved correctly.
Case 2
Navigate to Blog Posts > Data tab and click on an existing blog post (/blog-posts/data/:blogPostID).
Locate the parent blog post autocomplete field in the detail form.
Type a search query in the autocomplete field.
Verify that suggestions appear and the current blog post is excluded from results.
Select a parent page and verify it is saved correctly.
Case 3
Navigate to Intranet Pages > Data tab and click on an existing intranet page (/intranet-pages/data/:intranetPageID).
Locate the parent page autocomplete field in the detail form.
Type a search query in the autocomplete field.
Verify that suggestions appear and the current intranet page is excluded from results.
Select a parent page and verify it is saved correctly.
Case 4
Navigate to Page Layouts > Data tab and click on an existing page layout (/page-layouts/data/:pageLayoutID).
Locate the parent page template autocomplete field in the detail form.
Type a search query in the autocomplete field.
Verify that suggestions appear and the current page layout is excluded from results.
Select a parent page and verify it is saved correctly.
Case 5
Navigate to FAQs > Data tab (/faq/data).
Click on a cell in the parentCategory column to enter edit mode.
Type a search query in the autocomplete.
Verify the dropdown shows suggestions with two columns: code (first column) and name (second column).
Repeat the same verification on Internal FAQs (/internal-faq), FAQ Drafts (/faq-drafts), and Internal FAQ Drafts (/internal-faq-drafts).
Tests
Case 1
Navigate to FAQs > Data tab (/faq/data).
Locate the parentCategory column in the grid.
Click on a cell in the parentCategory column to enter edit mode.
Type a search query in the autocomplete field.
Verify that suggestions appear with two columns: code first, then name.
Select a parent from the suggestions.
Verify the parent is saved correctly.
Case 2
Navigate to FAQ Drafts (/faq-drafts).
Locate the parentCategory column in the grid.
Click on a cell in the parentCategory column to enter edit mode.
Type a search query in the autocomplete field.
Verify that suggestions appear with two columns: code first, then name.
Select a parent from the suggestions.
Verify the parent is saved correctly.
Case 3
Navigate to Internal FAQs (/internal-faq).
Locate the parentInternalCategoryID column in the grid.
Click on a cell in the parentInternalCategoryID column to enter edit mode.
Type a search query in the autocomplete field.
Verify that suggestions appear with two columns: code first, then name.
Select a parent from the suggestions.
Verify the parent is saved correctly.
Case 4
Navigate to Internal FAQ Drafts (/internal-faq-drafts).
Locate the parentInternalCategoryID column in the grid.
Click on a cell in the parentInternalCategoryID column to enter edit mode.
Type a search query in the autocomplete field.
Verify that suggestions appear with two columns: code first, then name.
Select a parent from the suggestions.
Verify the parent is saved correctly.
Case 5
Navigate to FAQs > Search tab and click on an existing FAQ to open it (/faq/:faqID).
Locate the Parent Page autocomplete field in the detail form.
Type a search query in the autocomplete field.
Verify that suggestions appear showing name and code.
Verify the current FAQ page does not appear in the suggestions (self-reference prevention).
Select a parent page and verify it is saved.
Clear the parent page using the clear button and verify it is removed.
Case 6
Navigate to FAQ Drafts and click on an existing draft to open it (/faq-drafts/:faqID).
Locate the Parent Page autocomplete field in the detail form.
Type a search query in the autocomplete field.
Verify that suggestions appear showing name and code.
Verify the current FAQ draft does not appear in the suggestions (self-reference prevention).
Select a parent page and verify it is saved.
Clear the parent page using the clear button and verify it is removed.
Case 7
Navigate to Internal FAQs and click on an existing internal FAQ to open it (/internal-faq/:internalFaqID).
Locate the Parent Page autocomplete field in the detail form.
Type a search query in the autocomplete field.
Verify that suggestions appear showing name and code.
Verify the current internal FAQ does not appear in the suggestions (self-reference prevention).
Select a parent page and verify it is saved.
Clear the parent page using the clear button and verify it is removed.
Case 8
Navigate to Internal FAQ Drafts and click on an existing draft to open it (/internal-faq-drafts/:internalFaqID).
Locate the Parent Page autocomplete field in the detail form.
Type a search query in the autocomplete field.
Verify that suggestions appear showing name and code.
Verify the current internal FAQ draft does not appear in the suggestions (self-reference prevention).
Select a parent page and verify it is saved.
Clear the parent page using the clear button and verify it is removed.
KOD-30412: Public Files - Video
Regression Tests
Case 1
Ensure the Resources section on the product page displays correctly.
Ensure that regular files (PDFs, documents) display the document icon (bi-file-earmark-text).
Ensure that file links open correctly in a new tab.
Ensure there are no errors in the console on the product page.
Tests
Case 1
Make sure YouTube links in the Resources section display the video icon.
KOD-30426: Taxes not picked up
KOD-30440: New Kodaris Website Product Marketing & Help
Click on inline edit for "Status" column of any draft.
Open status dropdown.
Expected Result:
Dropdown shows only customerFAQStatuses values.
Case 3
Navigate to separate detail faq page /operations/faq-drafts/:id
Locate the "Status" field on the form.
Open dropdown.
Select status "Published".
Save changes.
Refresh page (F5).
Expected Result:
Dropdown contains only Submitted and Published.
After saving, status changes to "Published".
After page reload, status remains "Published".
KOD-30529: UX Document Automation Studio - Support JSON Adapters
Regression Tests
Case 1
Verify that PDF Order adapters are created and function as expected.
Verify that PDF Invoice adapters are created and function as expected.
Verify that Analysis Methods are displayed for PDF adapters.
Verify that PDF file uploads and previews work correctly.
Tests
Case 1
Verify that the JSON option appears in the File Type dropdown when creating an adapter.
Verify that the Analysis Methods section is hidden when JSON is selected.
Verify that the JSON adapter is created with an empty analysisMethods array and the correct default code.
Verify that a JSON file can be uploaded on the Details and Configure pages and that it is displayed in the correct format.
Verify that the JSON adapter can be run on the Configure page.
Verify that JSON preview uses Monaco editor on Details and Configure pages.
KOD-30536: AP Automation - Invoice Parser
KOD-30535: AP Automation - AP Invoice Parser
KOD-30534: Add Amount to Invoices
KOD-30537: AP Automation - Invoice Parser
KOD-30540: Add lastModified timestamp field to Customer entity for tracking record changes
KOD-30547: Account Automation Text Wrap Updates
Regression Tests
Case 1
Make sure that company notes are saved in CSD.
Tests
Case 1
Make sure that when saving company notes in CSD, spaces are added at the end of each line.
KOD-30546: Cookie/consent modal pop up
Regression Tests
Case 1
Open the website with the cookie banner visible (clear cookies if needed)
Expected Result:
A cookie consent banner appears at the bottom of the page.
The banner shows a description text, "Accept" and "Decline" buttons.
Visit different pages across the website.
Expected Result:
Cookie banner appears at the bottom of each page.
Banner is fully visible and not hidden behind other elements.
Case 2
Make sure the cookie banner displays correctly and all text is displayed without any issues.
Since some changes affect the cookie banner on other sites, make sure to test it there as well.
Tests
Case 1
Open site (cookie banner visible).
Open themer.
Verify themer is clickable and not blocked by the banner.
Open site in translate mode.
Ctrl+click on banner text to translate.
Verify popover appears above the banner and is interactive.
Case 1 Translations Work for Different Languages
Precondition: In Operations Portal, add translations for a second language
To support additional languages, create entries with the same codes but with translated messages
Switch website to the translated language
Expected Result:
Cookie banner displays in the selected language.
Case 2 Changing English Text Updates the Banner
In the Operations Portal, change any English message for the cookie banner.
Open the website in English.
Expected Result:
Changes in the “Message” value of the item are reflected on the website.
Case 3 Translation Mode - Banner Display
Enable Translation Mode on the website.
Expected Result:
Cookie banner is visible.
"Accept" and "Decline" buttons are highlighted as translatable and can be edited directly.
Description text is highlighted but cannot be edited directly in Translation Mode.
Note: This is expected behavior. The description text contains more than 100 characters, which exceeds the Translation Mode limit for inline editing. To update the description translation, make changes in the Operations Portal.
KOD-30550: Invoice total is doubled
Regression Tests
Case 1
Verify that regular orders (not returns) display totals without any changes.
Verify that email, HTML, and PDF invoice templates display and render correctly.
Tests
Case 1
Verify that the Downpayment field for the Return Order with a total amount displays a negative value (e.g., ($1.13))
Verify that the Invoice Balance Due for the Return Order is calculated correctly.
KOD-30556: Upgrade to latest templates
Regression Tests
Case 1
Addressed in test cases of just navigating around and making sure all looks good still.
Tests
Case 1
Make sure when navigating across the website, everything still looks good.
Also check the customer portal for orders/quotes.
And the operations portal for orders/quotes emails and pdfs.
Case 2
Instead of saved lists up top, you should now see catalogs and if you click on the link, it will take you to the catalogs page (if logged out, you will be prompted to log in first).
Case 3
All the text that was translatable before should now have messages of >=100 characters.
For the example in the ticket, Enter your username or email address and we'll email you instructions on how to reset your password. is the code (before username was user name, but with it one word its >=100 characters - this change came from the demo repo).
KOD-30560: Set up host for Commerce
KOD-30562: Order/quote email confirmations in English when French customer
Regression Tests
Case 1
Log in as an English-language customer.
Place a standard order.
Check the order confirmation email.
Expected: Email content remains in English.
Case 2
Log in as a customer without language code selected in the customer portal.
Place a standard order through checkout.
Check the order confirmation email received.
Expected: All translatable text in the email (labels like "Bill To", "Ship To", "Subtotal", "Tax", "Total", etc.) should be in English.
Tests
Case 1
Log in as a French-language customer.
Place a standard order through checkout.
Check the order confirmation email received.
Expected: All translatable text in the email (labels like "Bill To", "Ship To", "Subtotal", "Tax", "Total", etc.) should be in French.
Case 2
Quote Request Email — French Customer
Log in as a French-language customer.
Submit a quote request.
Check the quote request email received.
Expected: Email content is in French.
KOD-30570: Edit the checkout pages
Regression Tests
Case 1 — Full checkout flow
Add items to cart and complete full checkout flow.
Verify that order submission completes successfully.
Verify that order confirmation page loads.
Verify that order confirmation email is received.
Tests
Case 1 — Checkout page layout
Proceed to checkout Step 3 (Payments).
Verify that Order Totals shows only: Subtotal, Estimated Tax, Grand Total.
Verify that FAQ boxes appear on the LEFT side, Payment buttons on the RIGHT side.
Verify that the "Previous" button is positioned below the content.
Case 2 — Order page with ERP number
Open an order that has been released to ERP.
Verify that the header shows "Web Order".
Verify that order number shows "Web Order # / ERP Order #" with both values.
Verify that tax breakdown shows individual lines per jurisdiction.
Case 3 — Order email with ERP number
Check the order confirmation email for the same order.
Verify that the email header shows "Web Order".
Verify that the order number column shows both Web and ERP numbers.
Verify that top and bottom table borders align correctly.
Verify that tax breakdown shows individual lines per jurisdiction.
Case 4 — Order page without ERP number
Open an order that has NOT been released to ERP.
Verify that order number label shows "Web Order #" (no "/ ERP Order #").
Verify that order number value shows only the web order number (no trailing " / ").
Case 5 — Tax jurisdiction breakdown
Open an order with a Canadian shipping address.
Verify that the tax section shows individual lines per jurisdiction (e.g., "GST: $5.00", "PST: $7.00").
Open an order without tax jurisdiction data (e.g., US order).
Verify that the tax section shows a single "Tax:" line with the total tax amount.
KOD-30572: Implementation - Taxes
KOD-30575: Display Superseded/Inactive messaging only for users not logged in
Regression Tests
Case 1
Log out or open incognito/private browser window.
Navigate to a regular product that has NO replacement.
Expected Result:
NO superseded message banner appears.
Add-to-cart form is visible and functional.
Product page displays normally.
Case 2
Log in with a valid customer account.
Navigate to a superseded product page.
Expected Result:
NO superseded message banner appears (element should not exist in DOM).
Add-to-cart form is visible and functional.
Product page displays normally.
Navigate to a regular product that has NO replacement.
Expected Result:
NO superseded message banner appears.
Add-to-cart form is visible and functional.
Product page displays normally.
Tests
Case 1
Log out or open incognito/private browser window.
Navigate directly to a superseded product page.
Expected Result:
Superseded message banner appears in the product info area.
Message shows: "This item has been replaced by item [Product B code] ".
Link shows: "Click here to view the replacement item".
Add-to-cart form (quantity input, add to cart button) is HIDDEN.
Case 2
Log out or open incognito/private browser window.
Navigate to a superseded product page (Product A).
Click the "Click here to view the replacement item" link.
Expected Result:
User is navigated to the replacement product page.
Case 3
Log out or open incognito/private browser window.
Navigate to a configurator product page.
Select options that result in a superseded variant.
Then select options for a non-superseded variant.
Expected Result:
When the superseded variant is selected: message appears, form hidden.
When a non-superseded variant is selected: message hidden, form visible.
Message updates dynamically with each variant change.
Case 4
Log out or open incognito/private browser window.
Navigate to a superseded product on mobile device or resize browser to mobile width.
Expected Result:
The superseded message banner displays correctly.
Text wraps appropriately.
Icon and text remain aligned.
No horizontal scrolling required.
KOD-30576: Add business events for comments to tickets
KOD-30584: Move box for Discount / Promo Code
Regression Tests
Case 1
Open the commerce site, and add a product to the cart.
Open the Cart page and proceed to step "3. Delivery Payment":
Everything should work as expected.
Tests
Case 1
Log in the Operations Portal, and open the Settings page.
Check if the checkoutCouponsEnabled setting value is 1 . If it’s not, change it to 1.
Open the commerce site, log in as a customer, and add a product to the cart.
Open the Cart page and proceed to step 3. Delivery Payment:
The “Coupon Code” accordion box position should be on the right column, below the "Order Totals” accordion box.
KOD-30592: Register/Signup Page Modification
Tests
Case 1
Go to the commerce site Register page.
It should show the text: "Need a business account instead? To use credit terms, tax exemptions, and local delivery, a business account is required. Please click here ."
The "click here” should be a clickable link.
KOD-30593: Text/Punctuation Edits
KOD-30599: Manual Fraud Flag Button with Order Blocking
KOD-30619: Shop by Category Add "All Products"
KOD-30622: Core Return Flow - Create return Core item name with reference to original item
Regression Tests
Case 1 - Make sure returns still work fine
Go to Customer Portal → Account → Orders → Find some order with status Invoiced or Paid and shipped items.
Initiate a new consumer return and navigate to the return items screen.
Select some item, enter a valid return quantity, and select a Return Reason.
Click "Submit Return".
Verify the return is submitted successfully.
KOD-30625: Shipping Methods - LTL local carrier logic
Regression Tests
Case 1
Make sure an order that is less than 90 lbs still uses the ground shipping method.
Tests
Case 1
For an order > 90 lbs → if the delivery address postal code is in the list of postal codes in the operations portal, you should only see LTL Local Carrier as the shipping option on checkout and the price is determined based on weight.
90-600 lbs = 1 increment = $115
601-1200 lbs = 2 increments = $230
1201-1800 lbs = 3 increments = $345
etc…
Case 2
For an order > 90 lbs but the delivery address postal code is not in the list, the delivery options should be the same as before of what was returned in the FedEx ltl response.
Case 3
If an order is < 90 lbs and the delivery address postal code on the order is in the list, it should not matter and still show the FedEx ground options.
KOD-30626: Shipping Address Rules and Ship-To Management
Regression Tests
Case 1
Billing address can be changed via address selector.
Navigate to `/spcu/cart` with items in the cart.
Proceed to the Addresses step of checkout.
Select a billing address from the "Search for a billing address" autocomplete.
Verify the billing fields are populated with the first address.
Select a different billing address from the autocomplete.
Verify all billing fields update to reflect the newly selected address.
Case 2
Shipping address fields remain editable.
Navigate to `/spcu/cart` with items in the cart.
Proceed to the Addresses step of checkout.
Verify all shipping address fields (Company, First Name, Last Name, Email, Phone #, Country, Street Address, Appt / Suite #, City, State, Postal Code) are editable.
Enter or modify values in each shipping address field.
Verify the values are accepted and can be changed freely.
Case 3
"Shipping same as billing" copies billing data correctly.
Navigate to `/spcu/cart` with items in the cart.
Proceed to the Addresses step of checkout.
Select a billing address from the "Search for a billing address" autocomplete.
Check the "Shipping same as billing" checkbox.
Verify all shipping address fields are populated with the billing address values.
Case 4
Checkout flow completes successfully with disabled billing fields.
Navigate to `/spcu/cart` with items in the cart.
Proceed to the Addresses step of checkout.
Select a billing address from the "Search for a billing address" autocomplete.
Fill in a valid shipping address.
Click "Next" to proceed past the Addresses step.
Verify the checkout advances to the next step without errors.
Tests
Case 1
Billing address fields are non-editable.
Navigate to `/spcu/cart` with items in the cart.
Proceed to the Addresses step of checkout.
Select a billing address from the "Search for a billing address" autocomplete.
Verify all billing fields (Company, First Name, Last Name, Email, Phone #, Country, Street Address, Appt / Suite #, City, State, Postal Code) are populated with the selected address data.
Attempt to click into and type in each billing address field.
Verify all billing fields are disabled and cannot be edited manually.
KOD-30628: Order Item Price Issue
KOD-30636: Updates to manage category banner
KOD-30637: Add an Whitelist Setting
KOD-30640: Add option to the Contact Us page
KOD-30641: Remove Down Arrows from Header Menus
KOD-30646: UX Document Automation Studio - Support XML Adapters
Regression Tests
Case 1
Verify that PDF Order/Invoice adapters are created and function correctly.
Verify that the Analysis Methods section is displayed for PDF adapters.
Verify that PDF file upload and preview work correctly.
Verify that JSON Order adapters are created and function correctly.
Verify that JSON Invoice adapters are created and function correctly.
Verify that JSON file upload and preview work correctly.
Tests
Case 1
Verify that the XML option appears in the File Type dropdown when creating an adapter.
Verify that the Analysis Methods section is hidden when XML is selected.
Verify that the XML adapter is created with an empty analysisMethods array and the correct default code.
Verify that an XML file can be uploaded on the Details and Configure pages.
Verify that XML preview uses Monaco editor with XML syntax.
Verify that an XML file can be uploaded via drag and drop on the Details and Configure pages.
Verify that dragging and dropping a non-XML file on an XML adapter shows an error.
Verify that the XML adapter can be run on the Configure page.
Verify that the Monaco editor for XML preview has automaticLayout: true (resizes correctly when the panel size changes).
KOD-30647: Custom Field columns on Category Assignment Screen
Regression Tests
Setup
Go to Settings → Search for integrationIndexedProductFields → Paste this JSON into its value:
Create some new product → Open its details → Open Custom Fields tab.
Set some value to its “Test Custom Field“ field.
Case 1 - Category Assignment tab still works
Go to Products → Category Assignment.
Make sure it shows data correctly.
Case 2 - Products tab still works
Go to Products.
Make sure it shows data correctly.
Make sure it has a column Test custom field with its values.
Tests
Case 1 - Verify Category Assignment tab returns custom fields
Open Developer tools of your browser → Network.
Go to Products → Category Assignment tab.
Verify listWithCategories request has products with custom fields in its response. Verify the product with the custom field value has the correct value.
KOD-30649: Add Product Details Link to Required Attribute Assignment
Tests
Case 1
Log in the Operations Portal, and open the PIM → Categories page.
Click the Search tab, then click to show columns and select “Products Missing Required Attributes”.
Click to filter “Products Missing Required Attributes”, then select filter “Greater than” and input “0”.
Open a Category item that has “Products Missing Required Attributes”, then click the “Required Attribute Assignment” tab:
The grid should show an arrow icon at the right side of each item’s row.
Choose an item's row then click its arrow icon:
It should open the related Product Details page.
This product page should show a breadcrumb containing the related product code, following the Category previous breadcrumb.
In the breadcrumb, click in “Required Attribute Assignment”:
It should navigate back to the Category page, in the “Required Attribute Assignment” tab.
Case 2
Log in the Operations Portal, and open the PIM → Categories page.
Click the Data tab, then click to show columns and select “Products Missing Required Attributes”.
Click to filter “Products Missing Required Attributes”, then select filter “Greater than” and input “0”.
Open a Category item that has “Products Missing Required Attributes”, then click the “Required Attribute Assignment” tab:
The grid should show an arrow icon at the right side of each item’s row.
Choose an item's row then click its arrow icon:
It should open the related Product Details page.
This product page should show a breadcrumb containing the related product code, following the Category previous breadcrumb.
In the breadcrumb, click in “Required Attribute Assignment”:
It should navigate back to the Category page, in the “Required Attribute Assignment” tab.
KOD-30651: Add Custom Fields support to Opportunities details and grid
Regression Tests
Case 1
Ensure that the Opportunities grid looks and functions correctly.
Ensure that Lead details open correctly.
Ensure that Quote details open correctly.
Tests
Case 1
Ensure that the Custom Fields tab appears on the Lead page.
Ensure that the Custom Fields tab appears on the Quote page.
Ensure that Custom Fields tab is only displayed if integrationIndexedLeadAndQuoteFields setting contains values.
Ensure that fields in the Custom Fields form match the setting: settingCode - value, settingName - label.
Ensure that columns from integrationIndexedLeadAndQuoteFields setting are available in the Column Picker on Opportunities page.
Ensure that custom field columns on Opportunities are read-only.
Ensure that when changing values in the Custom Fields form, data is saved in Developer Fields.
KOD-30652: Update email templates for account activation
KOD-30654: Split Order custom fields to Quote/Lead/Order
KOD-30655: AI PIM Marketing Page – Improve Step Section Layout and Fix Gutenberg
KOD-30657: Punchout - Limit characters
KOD-30663: Payment Portal Login Issue
KOD-30668: UX for Custom Field columns on Category Assignment Screen
Regression Tests
Case 1
Ensure that the Category Assignment grid looks and functions correctly.
Tests
Case 1
Ensure that the Custom Fields columns appear on the Category Assignment grid → Column selector.
Verify that columns from integrationIndexedProductFields setting are available in the Category Assignment grid.
Ensure that the Custom Fields columns on Category Assignment grid are read-only.
KOD-30671: Install Applications
KOD-30673: Install Applications
KOD-30675: Disable session expiry popups
Regression Tests
Case 1
If you log in to the website without checking the “ Keep me logged in “ checkbox and wait approximately 12 minutes without doing anything on the commerce website - the session expiry popup should appear.
Tests
Case 1
When you are a guest user - add some items to the cart, then also wait for approximately 12 minutes without doing anything on the website. The session expiry popup should not appear.
KOD-30678: Configurator product does not display French description
Regression Tests
Case 1
Make sure on both regular products and configurator products, the product details page still loads properly and the product details show.
Case 2
On a regular product, when switching to French, the product details on the product should still update to French.
Tests
Case 1
On a configurator product, when the language is set to French, the product details should now show the French translations.
Can also change the variants of the product and the French translation should still show.
KOD-30679: Create Catalog Feature Over
Regression Tests
Case 1
Navigate to the category page.
Verify: Page loads without errors, product list displays, breadcrumbs work.
Tests
Case 1
Log in as a user with "companyAdmin" or "companyCatalogEdit" role.
Navigate to a category page.
Verify: "Create Catalog" button is displayed.
Log out from the account.
Navigate to the same category page.
Verify: "Create Catalog" button is NOT displayed.
Case 2
Navigate to a category page.
Click the "Create Catalog" button.
Enter any catalog name.
Click "Create".
Verify:
The loading spinner appears on the button.
Success screen displays with message "Catalog Creation in Progress".
"Your catalog will be created within the next few minutes." message is shown.
Click "Go to Catalogs".
Verify:
The user is redirected to /spcu/catalogs page.
Wait a few minutes and refresh the page.
Verify:
Created catalog appears in the catalog list.
Note: It may take up to 5 minutes to appear.
Open the created catalog.
Verify:
Product list matches the products from the original category page.
"Create Catalog" button is NOT displayed.
Case 3
Input validation (Error Handling).
Click the "Create Catalog" button.
Test empty name:
Leave the name field empty.
Click "Create".
Verify: Form is not submitted, modal stays open.
Test name length (>200 characters):
Enter a catalog name with 201+ characters.
Click "Create".
Verify: Error message "Catalog name must be less than 200 characters." is displayed.
Test unsafe characters:
Enter a catalog name with forbidden characters (e.g., "Test/Catalog" or "Test<Catalog>").
Click "Create".
Verify: Error message about forbidden characters is displayed.
Test duplicate name (API error):
Enter a catalog name that already exists.
Click "Create".
Verify: Error message from server is displayed, loading spinner is removed, user can retry.
Сase 4
Test modal reset on close:
Click the "Create Catalog" button.
Enter catalog name: "Test".
Close the modal (click X or outside).
Click the "Create Catalog" again.
Verify: Name field is empty, no error messages, form content visible.
Test double-click prevention:
Click "Create Catalog" button.
Enter catalog name: "Test Catalog".
Quickly click "Create" multiple times.
Verify: Only one API request is sent, button shows loading state after first click.
Test close after success:
Complete a successful catalog creation.
Click "Close" instead of "Go to Catalogs".
Verify: Modal closes.
Click "Create Catalog" again.
Verify: Modal shows form (not success screen), form is reset.
KOD-30684: New Messaging for Home Page and Order Confirmation Email
KOD-30685: Rounding Causing Taxes in Kodaris to Differ from CSD
KOD-30686: Site: adding GTM
Tests
Case 1: Verify That Required Elements Are Present in the DOM Tree
Open the website.
Open browser developer tools.
Navigate to the Elements (DOM) tab.
Verify configuration from the Operations Portal.
(Google Analytics settings page) has been correctly added and is present in the DOM (Google Tag Manager, Google Tag Manager (noscript)).
Navigate to a product detail page with at least one image.
Hover the mouse over the main product image.
Verify the zoom effect activates and a larger version of the image is displayed over the main image area.
Case 2
Product detail page displays correctly on mobile viewport.
Navigate to a product detail page with multiple images.
Resize the browser to a mobile viewport (960px or narrower).
Verify the Swiper thumbnail strip is hidden.
Verify the layout stacks vertically (image on top, product details below).
Verify the standard Bootstrap carousel dot indicators are visible for image navigation.
Tests
Case 1
Swiper thumbnail carousel on product with 5+ images.
Navigate to a product detail page for a product with 5 or more images.
Verify the image thumbnails appear in a vertical Swiper strip to the left of the main product image.
Verify up/down arrow buttons are visible above and below the thumbnail strip.
Click the down arrow to scroll to additional thumbnails.
Click a thumbnail that was not initially visible.
Verify the main product image changes to match the selected thumbnail.
Case 2
Swiper thumbnail carousel on product with 2-4 images.
Navigate to a product detail page for a product with 2 or 4 images.
Verify the thumbnails appear vertically on the left.
Verify no up/down arrow buttons are displayed.
Click each thumbnail and verify the main product image changes accordingly.
KOD-30689: Product Barcode Sync Job for Mobile Scanner
KOD-30695: Bulk Welcome Email Send from Kodaris
KOD-30699: Enable Checkout with Purchase Order and Credit Card Options
KOD-30700: Account Automation Shipto Update
Regression Tests
Case 1
Make sure the company address is successfully saved in the ERP.
Tests
Case 1
Make sure the following fields are saved in the ERP when saving the address: cyclecd = COD, statementty = N
KOD-30711: page: /operations/quotes/data uses wrong POST: api/system/quote/list for exporting file, need to use /export
Tests
Case 1
Go to Operations Portal, CRM → Quotes.
Open the Network tab in the DevTools to check that we’re using the new endpoint.
Open File dropdown and click on Export.
Perform export of the data. Check in the Network tab that we’re using a new request for export.
Check that the exported file looks good and we don’t have any broken data.
KOD-30720: Update CRM Notes Formatting
KOD-30735: Kodaris - Auto redirect customers into the customer portal after log in
KOD-30739: Kodaris - Fix cross ref unit conversion number error on quote
Regression Tests
Case 1
On both quotes and orders screen → Make sure if there is no cross reference, you still get the modal displaying ‘This Item doesn’t have an associated cross reference'.
Tests
Case 1
On orders screen → go to the order items tab and click an item that has a cross reference (non stock will work) (if there is no nonstock, you can add it) → then fill out the data in the modal → click submit and now you should not get an error and the modal should close.
Should also test this on an item that isn’t a non stock that has a cross reference and you need to make sure the order item has customerProductCode set on it (this is to test the update section in the code instead of the create).
Case 2
Repeat case 1 but on the quotes screen.
KOD-30748: Revert changing the footer from black background to reflex blue