Navigate to the 'Gear > Watches' category listing and return only the name of the first product by ascending position.


Rate the product "Hero Hoodie" with 4 stars.

[...document.querySelectorAll('tbody tr')].some(row => row.querySelector('td[data-th="Product Name"] .product-name a')?.innerText.trim() === 'Hero Hoodie' && row.querySelector('td[data-th="Rating"] .rating-summary .rating-result span span')?.innerText.trim() === '80%') ? 1 : 0

Check if there is any row in the review table where the product name is 'Hero Hoodie' and the rating is '80%'.


Go to the "Women > Pants" category and open the detail page of the 13th listed product, based on ascending position in the listing.


Purchase 3 units of 'Push It Messenger Bag' using the cheapest shipping method and return only the total order value.


Check if the user is logged in by verifying the presence of 'Welcome,' text.


Add the product "Push It Messenger Bag" to the shopping cart and navigate to the cart page.


Subscribe to the website via the subscription field with email "account.test.4@mynes.com"

Verify that the success message 'Thank you for your subscription.' is displayed after subscribing.


Navigate to Watches, apply filter results by price $40–$49.99.

Verify the price filter $40.00–$49.99 is applied.


Place an order as a guest and reach the checkout success page.


Save the product 'Josie Yoga Jacket' to wishlist.

[...document.querySelectorAll('strong.product-item-name a')].some(a => a.innerText.includes('Josie Yoga Jacket'))


Place an order for any available product on behalf of the user with the email address 'account.test.2@mynes.com'


Navigate to the latest comment for order #000000003 and return the latest comment text only.


Open order #000000004 and return the tracking number only from its tracking details page.


Apply coupon code "save5percent" to the product "Erika Running Short" (size 32, color Red) and return the final total price only.


Create a cart price rule named '10% Off on Orders Over $15' with the coupon code 'save10percentfororderover15dollar' for the Main Website and the General customer group.
The rule must give 10% off for orders with a subtotal of $15 or more.
After creating the rule, open its edit page and expand (click to open) both the 'Conditions' and 'Actions' sections.

(document.querySelector('#conditions__1--1__operator')?.selectedOptions[0]?.textContent.trim() === 'equals or greater than' && document.querySelector('#conditions__1--1__value')?.value === '15' && document.querySelector('[name="discount_amount"]')?.value === '10' && document.querySelector('[name="simple_action"]')?.value === 'by_percent') ? 1 : 0

Verify discount settings of the created cart price rule.


Create a product named "Bag hand made" with the attribute set "Bag", priced at $30, quantity 100, marked as in stock, assigned to the "Bag" category, and make it visible on the storefront.


Change the stock status of the product "Endurance Watch" to "Out of Stock."


Go to page 2 of the Women > Pants listing and return the number of products displayed on that page.


Disable the product 'Compete Track Tote'.


Modify content heading of About US page to 'About Our Company'


Compare two products 'Rival Field Messenger' and 'Fusion Backpack'

[...document.querySelectorAll('td.cell.product.info a')].map(a => a.title).some(t => ['Rival Field Messenger', 'Fusion Backpack'].includes(t))


Perform Full Refund Using Default Values for Order "000000009"


Perform partial refund using default values for product 'Josie Yoga Jacket (Size XL, Gray)' in Order '000000010' .


Reorder the most recent order of customer 'Veronica Costello' and return the Grand Total price of the new order.

Order Placed by Admin User using Admin Panel


Reorder the very first order associated with my account.


Update the heading on the Customer Service CMS page from 'Luma Delivery and Returns' to 'Luna Service Team'.


document.querySelector('.breadcrumbs ul.items li.item.cms_page strong').innerText


Update the price of the product with SKU 24-WG088 to $15.


Update the URL key of the product "Overnight Duffle" to overnight-duffle-bag and save the changes

Verify the product page is accessible after updating the URL key.


Create a new project named :  "Demo Website"


Update the description of project "Demo Shop" to "Demo Shop is an eCommerce website based on the Magento platform."


Disable WIKI module in Demo Shop project

You are not authorized to access this page.


Enable the "News" module in the "Demo Shop" project, then create a new news item titled "Project Sponsorship Announcement"

Official Customer Demo Scheduled for Next Thursday


Your account was created and is now pending administrator approval.


Assign user with email "nguyen.nguyen.6bk@gmail.com" to project "Demo Shop" with role "Developer"

document.querySelector('tbody tr:last-child td.project.name a').innerText


Enforce a password change on next login for the user whose email is "account.test.3@mynes.com".


Register a new user with email "account.test.1@mynes.com"


Display the "Status" column in the user list


Create new version "version3" for project "Demo Shop"


Assign feature "3" to version "version2" in project "Demo Shop"


Create a custom field named 'Environment' for the 'Bug' tracker across all projects, using a dropdown list with the values Internal, UAT, and Production.


Create a custom field named "Start Date" of type Date in the "Projects" module, and make it visible to all users.

document.querySelector(`input#${[...document.querySelectorAll('label')].find(l => l.querySelector('span')?.textContent.trim() === 'Start Date')?.getAttribute('for')}`)?.getAttribute('type')


Modify the workflow for Developers in the Bug Tracker so that they cannot transition issues from New to the Closed status.


Configure the workflow to allow users with the "Developer" role to transition a bug from the "Rejected" status back to "In Progress".


Configure the workflow to allow users with the "Manager" role to transition issues in the "Feature" tracker from the "Closed" status back to "New".


Create a new role named "QC", and configure the workflow so that users with this role can set issues in the "Bug" tracker to the "In Progress" status.


[...document.querySelectorAll('.ui-sortable .givable .name')].some(el => el.textContent.includes('QA'))


[...document.querySelectorAll('.ui-sortable .name')].some(el => el.textContent.includes('Pending'))


Create a custom field named "Test Case Link" of type Link in the Bug Tracker module, visible to all users and applicable to all projects.

[...document.querySelectorAll('a')].find(a => a.textContent.trim() === 'Test Case Link')?.closest('tr')?.children[1]?.textContent.trim()


Move the "Closed" issue status to the last position in the "Issue statuses" board configuration.


Create a new quotation for customer "Abigail Peterson" with 1 unit of the product "Cheese Burger"

Verify the total amount displayed in the 'amount_total' column of the data table.


Convert quotation "S00003" to a confirmed sales order.

Array.from(document.querySelectorAll('button[role="radio"]')).find(btn => btn.textContent.trim() === 'Sales Order')?.getAttribute('aria-checked') === 'true'

Verify that the 'Sales Order' radio button is selected (aria-checked is true).


Create a new product named 'Pizza Pineapple' and set its sale price to 10 dollars.

Array.from(document.querySelectorAll('.oe_kanban_details')).find(c => c.querySelector('.o_kanban_record_title span')?.textContent.trim() === 'Pizza Pineapple')?.querySelector('[name="list_price"] span')?.textContent.trim()

Verify that the product 'Pizza Pineapple' has a list price of 10 in the kanban view.


Create a new restaurant floor layout named 'Ground Floor' for Restaurant

!!Array.from(document.querySelectorAll('.floor-selector button')).find(btn => btn.textContent.trim() === 'Main Floor')

Verify that the 'Main Floor' button exists in the floor selector.


Add a new table named 'Table 5' to floor 'Second Floor' of NYC Shop

[...document.querySelectorAll('tbody.ui-sortable tr.o_data_row')].some(tr => tr.querySelector('td[name="name"]')?.innerText.includes('Table 5'))

Check if there is a row in the table containing the text 'Table 5' in the 'name' column.


Create a Point of Sale named 'Purple Shop'

!!Array.from(document.querySelectorAll('tbody.ui-sortable tr')).find(tr => tr.querySelector('td[name="name"]')?.textContent.trim() === 'Purple Shop')

Verify that a row with the exact text 'Purple Shop' exists in the 'name' column of the table.


Start a new Point of Sale session for "New Shop"

!!Array.from(document.querySelectorAll('.o_kanban_record')).find(card => card.textContent.includes('NYC Shop') && card.querySelector('button')?.textContent.trim() === 'Continue Selling')

Verify that the kanban card for 'NYC Shop' contains a button labeled 'Continue Selling'.


Close the current PoS session for 'NM Shop', automatically validating any open or unpaid orders.

!!Array.from(document.querySelectorAll('.o_kanban_record')).find(card => card.textContent.includes('NM Shop') && card.querySelector('button')?.textContent.trim() === 'New Session')

Verify that the kanban card for 'NM Shop' contains a button labeled 'New Session'.


Split the bill for "Table 3" in the Main Floor of the "Restaurant" by moving the item 'Cheese Burger' to a separate bill.

Verify that the total amount in the first order row is '$ 8.05'.


Create a new lead for customer with email "account.test.2@mynes.com" interested in 'Website Design Services'.

Verify that a CRM lead exists with email containing 'account.test.2@mynes.com' and title containing 'Web design'.


Assign a salesperson "Marc Demo" to a lead "Website Development"

Verify that the lead named 'Web design' is assigned to the user 'Marc Demo'.


Create a regular invoice from the sales order with reference number S00021.

Verify that the sale order 'S00021' has invoice status 'Fully Invoiced'.


Register "Cash Restaurant" for invoice "INV/2025/00005"

Verify that the invoice 'INV/2025/00005' has payment state 'Paid'.


Create a new employee profile named "Employee 1" with the email "account.test.5@mynes.com".

Verify that the employee card with email 'account.test.5@mynes.com' has the name 'Employee 1'.


Update the employee named "Employee 2" by setting their Job Position to "Web Developer" using the Job Position placeholder field.

Verify that the employee named 'Employee 2' has the job title 'Web Developer'.


[...document.querySelectorAll('tbody.ui-sortable tr.o_data_row')].some(tr => tr.querySelector('td[name="name"]')?.innerText.includes('QC Manager'))

Verify that job position 'QC Manager' has been created by agent.


Verify that the contract type list contains at least one entry with the name 'Internship'.


Move "Full-Time" to the first position in the list of employment types.

Verify that the first contract type in the list is labeled 'Full-time'.


Allocate 2 days of Paid Time Off exclusively to Cherry Nguyen.

Verify that the leave duration for employee 'Cherry Nguyen' is '2 days'.


List the names of all direct reports under Paul Williams in the org chart and return them as a comma-separated string.


Create a new Time off type named 'Marriage Leave'.

!![...document.querySelectorAll('td[name="display_name"]')].find(td => td.innerText.includes('Marriage Leave'))

Verify that a leave type containing 'Marriage Leave' exists in the list.


Approve all time off requests submitted by Anita Olivier.

!![...document.querySelectorAll('td[name="all_employee_ids"] .o_tag_badge_text')].find(el => el.textContent.trim().includes('Anita Oliver'))

Verify that 'Anita Oliver' is no longer listed in the employee tags for leave records.


Activate the Project module from the Apps menu

Verify that the 'Project' module has the state 'Installed'.


Change the email address of "Alaska Company" to email "account.test.4@mynes.com".

!![...document.querySelectorAll('.o_kanban_record')].find(div => div.innerText.includes('Alaska Company') && div.innerText.includes('account.test.4@mynes.com'))

Verify that the kanban card for 'Alaska Company' contains the email 'account.test.4@mynes.com'.


Create a stock adjustment for product 'Pizza Starfruit' with quantity 200

Verify that the product 'Pizza Starfruit' has an available quantity of 200.00.


Verify that the total amount in the first sale order row is '$ 862.50'.


Create a new warehouse location named 'Freezer Room'.

[...document.querySelectorAll('tbody.ui-sortable tr.o_data_row')].some(tr => tr.querySelector('td[name="complete_name"]')?.innerText.includes('Freezer Room'))

Verify that a warehouse named 'Freezer Room' exists in the list.


Verify that the sale order 'S00033' has a status of 'Cancelled'.


Change the stage of opportunity 'AI Agent Development' to 'Won'.

Array.from(document.querySelectorAll('tr.o_data_row')).find(tr => tr.querySelector('td[name="name"]')?.textContent.trim() === 'AI Agent Development')?.querySelector('td[name="stage_id"]').innerText.trim()

Verify that the CRM opportunity 'AI Agent Development' is in the 'Won' stage.


Terminate employee 'Employee 4' effective today.

Verify that the employee's status is shown as 'ARCHIVED' on the form view.


Send a message to user "Alice Lam" with the content "Please review the sales report."

Verify that the last message in the discussion channel is 'Please review the sales report.'.


Start a new channel named "Dev Team Chat".

[...document.querySelectorAll('button.o-mail-DiscussSidebarChannel')].some(btn => btn.innerText.includes('Dev Team Chat'))

Verify that the sidebar contains a discussion channel named 'Dev Team Chat'.


Add Alice Lam and Marc Demo to an existing channel called 'QC Team'.

[...document.querySelectorAll('.o_mail_notification')].map(div => div.innerText).some(t => t.includes('invited') && t.includes('Alice Lam')) && [...document.querySelectorAll('.o_mail_notification')].map(div => div.innerText).some(t => t.includes('invited') && t.includes('Marc Demo'))

Verify that both 'Khanh Nguyen' and 'Marc Demo' were invited to the discussion channel, based on notification messages.


Send a message "Standup at 9 AM" in channel "Company Portal".

Verify that the last message in the discussion channel is 'Standup at 9 AM'.


React to the latest message in 'Company Portal' with a 'thumbs up' emoji.

Verify that the last reaction in the message thread is a thumbs up (👍).


Mention user "Marc Demo" in a message inside channel "Company Portal".

Verify that the most recent message in the discussion mentions '@Marc Demo'.


Find the content of the latest pinned message in "Company Portal" and return the text only.


Find the status of the sales record with reference S00002 and return the value only.


Find the untaxed total amount of sales order S00004 and return the value only.


Find the weight of the product 'Office Chair Black' and return the value only.


Find the shipping policy for sales order S00004 and return the policy text only.


Find the most recent school attended by Tina Williamson in the Education section and return only the school name.


View the work address of employee "Randall Lewis."

250 Executive Park Blvd, Suite 3400
San Francisco CA 94134
United States

Verify that Randall Lewis' work address is displayed correctly.


Find the parental leave days for Ronnie Hart and return the value only.


Convert the lead named "Website Development" into an opportunity and set the expected revenue to $50,000.

Verify that the expected revenue for the lead titled 'Website Development' is '$ 50,000.00'.


Transfer 10 units of "Office Chair Black" from  POS/Shop to WH/Stock.


Apply a 10% discount to the product Pizza Starfruit and return the final total value displayed in quotation S00028.


Change the tags of the opportunity titled "5 VP Chairs" to "Product"


Add "Overnight Duffle" to comparison, then add "Strive Shoulder Pack" to comparison, and open the Compare Products page.

Both compared products appear in the table


Add a new shipping address: 55 Nguyen Van Cu Street, Ho Chi Minh City, 70000, Vietnam, with the phone number 0912345678, and set it as the default shipping address.


Update the street of my default billing address to "2222 Sai Gon".

Verify the street of the default billing address is updated to '2222 Sai Gon'.


Add a product review for "Didi Sport Watch" with a 4-star rating and a short comment.

You submitted your review for moderation.

Verify review submission success message after adding a review for 'Didi Sport Watch'.


View details of the last Men’s Indoor Short.


Empty the shopping cart and add three products:  "Deirdre Relaxed-Fit", "Sylvia Capri", and "Aeon Capri"  to cart

(() => { const items = [...document.querySelectorAll('#shopping-cart-table tbody.cart.item')]; const names = items.map(t => t.querySelector('.product-item-name a')?.innerText); return (items.length === 3 && names.includes('Deirdre Relaxed-Fit Capri') && names.includes('Sylvia Capri') && names.includes('Aeon Capri')) ? "1" : "0"; })()

Verify the shopping cart contains exactly three items: Deirdre Relaxed-Fit Capri, Sylvia Capri, and Aeon Capri.


View the lowest-priced product detail page in Women > Pants.


Find all products with keyword "short" priced between $40 and $42.

Verify product search results for keyword 'short' priced between $40 and $42


Navigate to Returns and Replacements service


Navigate to the default shipping address of customer "Veronica Costello."

Verify the caption of the default shipping address block for customer 'Veronica Costello'.


Update the approval status of rating "291" to 'Not Approved'.

Verify selected review status equals 'Not Approved' for review ID 291.


Create a customer group named "Wholesale-10", then assign the customer "account.test.5@mynes.com" to this group.
.

([...document.querySelectorAll('tbody tr')].some(r => r.cells[3]?.innerText.trim() === 'account.test.5@mynes.com' && r.cells[4]?.innerText.trim() === 'Wholesale-10')) ? '1' : '0'

Verify there is a table row where Email = 'account.test.5@mynes.com' and Group = 'Wholesale-10'.


Create a configurable product "Aether Gym Short" with attributes Size (S, M, L) and Color (Black, Gray), priced at $55.

JSON.stringify(Array.from(document.querySelectorAll('table.admin__dynamic-rows.data-grid tbody tr.data-row')).map(r => r.querySelector('td[data-index="name_container"] .control-table-text span[data-index="name_text"]').innerText.trim()))

Aether Gym Short-Black-S
Aether Gym Short-Black-M
Aether Gym Short-Black-L
Aether Gym Short-Gray-S
Aether Gym Short-Gray-M
Aether Gym Short-Gray-L

Verify all 6 generated simple products for configurable item.


Verify Cash On Delivery method is enabled (value=1).


View the Coupons Report for the date range from March 10, 2025 to March 31, 2025.

((document.querySelector('.page-title')?.innerText.trim() === 'Coupons Report') && (document.querySelector('#sales_report_from')?.value.trim() === '3/10/25') && (document.querySelector('#sales_report_to')?.value.trim() === '3/31/25')) ? '1' : '0'

Verify the Coupons Report page is displayed and the date range is correctly set to March 10–31, 2025.


show all products with color Lavender


Customer grid is filtered to show female customers.


Change the order status from "Suspected Fraud" to "Suspected Fraud (Untrusted)".

Array.from(document.querySelectorAll('table tbody tr')).find(r => r.querySelector('.col-status')?.innerText.trim() === 'fraud')?.querySelector('.col-label')?.innerText.trim()

Verify the order status changed from 'Suspected Fraud' to 'Suspected Fraud (Untrusted)'.


Change the payment method name from "Bank Transfer Payment" to "Offline Bank Payment".

Verify the payment method name was updated.


Change the Admin Session Lifetime to 12 hours.

Verify Admin Session Lifetime is set to 12 hours (43200 seconds).


Edit the status to "Not Approved" for the review with content "These looked really ugly on my feet…"

Verify selected review status equals 'Not Approved' for review ID 299.


Create user "account.test.2@mynes.com ", set its manager to "account.test.1@mynes.com ", then open its Edit page.

(document.querySelector('#email')?.value === 'account.test.2@mynes.com' && document.querySelector('#txtManager')?.value === 'qc ONE') ? '1' : '0'

Ensure email and manager fields are correctly set for the newly created user.


Log in as employee using username "qc.lead.1" and password "Admin@123"

Verify that the logged-in username 'qc ONE' is displayed in the top-right navigation bar.


Assign account.test.1@mynes.com as the manager of account.test.3@mynes.com.

Verify that user ID 3 has manager 'qc ONE'.


Submit a two-day "Paid leave" request from Dec 6 to Dec 7, 2025, then open its edit page.

(document.querySelector('input[name="startdate"]')?.value === '06/12/2025' && document.querySelector('input[name="enddate"]')?.value === '06/13/2025' && document.querySelector('select[name="type"] option:checked')?.innerText.trim().toLowerCase() === 'paid leave') ? '1' : '0'

Verify the two-day Paid leave request (Dec 6–7, 2025) is correctly shown in the edit page.


Submit a half-day 'Paid leave' request for the morning of January 16, 2026, and then open its detail page.

(document.querySelector('input[name="startdate"]')?.value === '01/16/2026' && document.querySelector('input[name="enddate"]')?.value === '01/16/2026' && document.querySelector('select[name="type"] option:checked')?.innerText.trim().toLowerCase() === 'paid leave' && document.querySelector('select[name="enddatetype"] option:checked')?.innerText.trim() === 'Morning') ? '1' : '0'

Verify the half-day 'Paid leave' request for the morning of January 16, 2026 is correctly shown on the detail page.


View the list of submitted leave requests.


Cancel the submitted Pending leave request on Oct 9

Verify the leave request status is Canceled.


Approve a leave request for "pm ONE" on December 28.

Verify the leave request status is Accepted.


Reject all leave requests for December 25 and enter a comment indicating that the date is reserved for the wellness day.

Array.from(document.querySelectorAll('#leaves tbody tr')).filter(r => r.cells[2]?.innerText.includes('12/25/2025')).every(r => r.cells[6]?.innerText.trim() === 'Rejected') ? '1' : '0'

Verify all leave requests for December 25, 2025 are marked as Rejected.


Filter pending leave requests by employee "employee FOUR"

(() => { const r=[...document.querySelectorAll('#leaves tbody tr')].filter(x=>x.offsetParent); return r.length && r.every(x=>x.cells[1]?.innerText.trim()==='employee FOUR') ? '1' : '0'; })();

Verify that all displayed pending leave requests belong to employee FOUR.


Update a pending leave request to switch from paid leave to sick leave on September 12.

(document.querySelector('input[name="startdate"]')?.value === '09/12/2025' && document.querySelector('input[name="enddate"]')?.value === '09/12/2025' && document.querySelector('input[name="duration"]')?.value === '1.000' && document.querySelector('select[name="type"] option[selected]')?.innerText.trim() === 'Sick leave') ? '1' : '0'

Verify the leave request on September 12, 2025 has the correct start date, end date, duration, and leave type updated to Sick leave.


Add an internal note to quotation S00002 saying 'Customer requests fast delivery'.

document.querySelector('.o-mail-Thread .o-mail-Message .o-mail-Message-body p')?.innerText

Verify that an internal note saying 'Customer requests fast delivery' was added to the quotation.


Create the product 'Ice Cream Vanilla' and assign it to the PoS category 'Food'.

((document.querySelector('#name_0')?.value === 'Ice Cream Vanilla') && (document.querySelector('#categ_id_0')?.value === 'All / Saleable / PoS / Food')) ? '1' : '0'

Verify product name is exactly 'Ice Cream Vanilla' and PoS Category is exactly 'All / Saleable / PoS / Food'.


Change the manager of user = "account.test.3@mynes.com" to manager = "account.test.5@mynes.com".

(document.querySelector('input[name="email"]')?.value === 'account.test.3@mynes.com' && document.querySelector('#txtManager')?.value.trim() === 'pm ONE') ? '1' : '0'

Verify that the manager of user account.test.3@mynes.com is updated correctly.


Assign a 3-day compensate leave entitlement for "account.test.3@mynes.com" for full year 2025.

([...document.querySelectorAll('#entitleddaysemployee tbody tr')].some(r => r.cells[0]?.innerText.trim()==='01/01/2025' && r.cells[1]?.innerText.trim()==='12/31/2025' && r.cells[2]?.innerText.trim()==='3.00' && r.cells[3]?.innerText.trim()==='compensate')) ? '1' : '0'

Verify a 3-day compensate leave entitlement was added for full year 2025.


Change the login username of "account.test.4@mynes.com" to "developer4".

(document.querySelector('input[name="email"]')?.value === 'account.test.4@mynes.com' && document.querySelector('input[name="login"]')?.value === 'developer4') ? '1' : '0'

Verify that the login username for account.test.4@mynes.com is updated to developer4.


Submit a 3-hour overtime request for Dec 31, 2025 with the reason 'Regression testing after bug fixing'.

[...document.querySelectorAll('table tbody tr')].some(r => r.cells[1]?.innerText.trim() === '12/31/2025' && r.cells[2]?.innerText.trim() === '0.375' && r.cells[3]?.innerText.trim() === 'Regression testing after bug fixing') ? '1' : '0'

Verify the overtime request (0.375 day = 3 hours) on Dec 31 2025 with correct reason exists.


Delete the account of user "account.test.6@mynes.com".

document.querySelector('#email') ? '0' : '1'

Verify that the user account.test.6@mynes.com no longer exists and the email field is not present.


Update the email of user "account.test.7@mynes.com" to "internship.test.7@mynes.com".

Verify the updated email value for this user.


Change the position of user "account.test.4@mynes.com" from Employee to Manager.

Verify the user's position is updated to Manager.


Grant administrator rights to "admin.test.8@mynes.com".

document.querySelector('select[name="role[]"] option[value="1"]')?.selected ? '1' : '0'

Verify that administrator role is selected.


Reject the leave request submitted by the user "pm ONE" for December 10, adding a comment indicating insufficient balance.

Verify the leave request is marked as Rejected.


Edit the leave date from "September 9" to "September 11".

(document.querySelector('input[name="startdate"]')?.value === '09/11/2025' && document.querySelector('input[name="enddate"]')?.value === '09/11/2025' && document.querySelector('input[name="duration"]')?.value === '1.000' && document.querySelector('select[name="type"] option[selected]')?.innerText.trim().toLowerCase() === 'paid leave') ? '1' : '0'

Verify the leave request was updated to Sept 11, 2025 with duration 1.000 and type Paid Leave.


Set the default time zone of user account.test.1@mynes.com to Asia/Ho_Chi_Minh.

Verify that the user's default time zone is set to Asia/Ho_Chi_Minh.


Grant a 12-day "Paid Leave" entitlement to "account.test.3@mynes.com" for the full year 2025.

([...document.querySelectorAll('#entitleddaysemployee tbody tr')].some(r => r.cells[0]?.innerText.trim()==='01/01/2025' && r.cells[1]?.innerText.trim()==='12/31/2025' && r.cells[2]?.innerText.trim()==='12.00' && r.cells[3]?.innerText.trim()==='paid leave')) ? '1' : '0'

Verify a 12-day Paid Leave entitlement is granted for full year 2025.


Create a new department named "Accountant", then assign user "account.test.8@mynes.com" to this department

Verify that the user's department is set to Accountant.


Create a new position named "Internship" and change position of user  "internship2" to internship

Verify that the user's position is set to Internship.


Display all my leave requests currently marked as Requested.

([...document.querySelectorAll('tbody tr')].every(r => r.cells[6]?.innerText.trim() === 'Requested')) ? '1' : '0'

Verify that all displayed leave requests are marked as Requested.


Set a yearly cap of 5 days for 'paternity leave' for all employees in this full year

[...document.querySelectorAll('#balance tbody tr')].every(r => r.cells[[...document.querySelectorAll('#balance thead th')].findIndex(th => th.innerText.trim() === 'paternity leave')]?.innerText.trim() === '5') ? '1' : '0'

Verify that the paternity leave yearly cap is set to 5 days for all employees


Create a 'Sick leave' request for employee 'account.test.1@mynes.com' on Jan, 3 2026

[...document.querySelectorAll('tbody tr')].some(r => r.innerText.includes('01/03/2026') && r.innerText.includes('Sick leave')) ? '1' : '0'

Verify that a Sick leave request exists on 01/03/2026


Create a new product attribute named "Fabric" using Dropdown as the Catalog Input Type, with the options Cotton, Wool, and Polyester. After saving, reopen the attribute and review its properties.

return (() => { const values = [...document.querySelectorAll('#manage-options-panel tbody input[name^="option[value]"][name$="[0]"]')].map(i => i.value.trim()); const expected = ['Cotton','Wool','Polyester']; return (values.length === 3 && expected.every(v => values.includes(v))) ? '1' : '0'; })();

Verify the attribute contains exactly three options: Cotton, Wool, Polyester


Create a customer group named "Wholesale-5" and create a catalog price rule that applies a 5% discount to this customer group. After saving, reopen this catalog price rule, expand the Actions section, and review the customer group and discount details.

(() => { const simpleAction = document.querySelector('select[name="simple_action"]')?.value; const discountAmount = document.querySelector('input[name="discount_amount"]')?.value || ''; const selectedGroups = [...document.querySelector('select[name="customer_group_ids"]')?.selectedOptions || []].map(o => o.textContent.trim()); return (simpleAction === 'by_percent' && discountAmount.includes('5') && selectedGroups.includes('Wholesale-5')) ? '1' : '0'; })()

Verify discount rule uses by_percent, discount amount contains 5, and Wholesale-5 customer group is selected


Create a new attribute set named "CustomSet01" based on the Default attribute set. Then add the unassigned attribute "color" to this attribute set under the Product Details group. After saving, reopen this attribute set and review its details.

(() => document.querySelector('input[name="attribute_set_name"]')?.value?.trim() === 'CustomSet01' && [...document.querySelectorAll('li')].some(li => li.textContent.includes('Product Details') && li.textContent.toLowerCase().includes('color')) ? '1' : '0')()

Verify attribute set name is CustomSet01 and Color exists under Product Details


Create a new admin user with the email "admin.test.8@mynes.com
". In the Current User Identity Verification section, enter the current admin password "Admin@123" to confirm the action.

(() => [...document.querySelectorAll('tbody tr')].some(tr => tr.querySelector('[data-column="email"]')?.textContent.trim() === 'admin.test.8@mynes.com' && tr.querySelector('[data-column="role_name"]')?.textContent.trim() === 'Administrators') ? '1' : '0')()

Verify the new admin user with email admin.test.8@mynes.com appears in the Users grid and has Administrators role


Create a new CMS block named "Homepage Promo Banner" with identifier "homepage-promo-banner". Set the content HTML to "
Spring Sale Up to 30%
". After saving, reopen this CMS block and review its details.

Verify PageBuilder HTML content contains 'Spring Sale Up to 30%'


Refresh the lifetime statistics for all reports, then view the Invoice Report for the date range from March 10, 2025 to March 31, 2025.

((document.querySelector('#sales_report_from')?.value.trim() === '3/10/25') && (document.querySelector('#sales_report_to')?.value.trim() === '3/31/25') && [...document.querySelectorAll('tr.totals')].some(r => r.cells[1]?.innerText.trim() === '2' && r.cells[3]?.innerText.trim() === '$76.03')) ? '1' : '0'

Verify invoice report for March 10–31, 2025 has total orders = 2 and total invoiced = $76.03.


Create an API integration named "CatalogAPIOnly" with email "account.test.2@mynes.com" and confirm password "Admin@123".
Grant access to Catalog API resources only, then open the integration details to review API Resources.

[...document.querySelectorAll('tbody tr')].some(tr => tr.querySelector('[data-column="name"]')?.innerText.trim() === 'CatalogAPIOnly') ? '1' : '0'

Verify there is an API integration named CatalogAPIOnly


Open the Customers Orders Total report and verify the order total value on March 21, 2025.

Verify total order amount is $29.00


Create a new bug in project 'Demo-Project' with subject 'Homepage Banner Not Loading', and assign it to 'Agent Merkle'.

document.querySelector('h2')?.innerText.includes('Bug') && document.querySelector('.assigned-to .value')?.innerText.includes('Agent Merkle') ? '1' : '0'

Verify the issue is a Bug and assigned to Agent Merkle


Change the priority of issue #1 in project 'Demo-Project' to 'Urgent'.

Verify issue priority is exactly Urgent


Log 4 hours and 30 minutes of time to issue #1 in the 'Demo-Project' project with the activity 'Development'.

[...document.querySelectorAll('tbody tr')].some(tr => tr.querySelector('td.issue')?.innerText.includes('Bug #1') && tr.querySelector('td.activity')?.innerText.trim() === 'Development' && tr.querySelector('td.hours')?.innerText.trim() === '4:30') ? '1' : '0'

Verify there is a time entry for Bug #1 with activity Development and logged time 4:30


Update the % Done of the time entry for issue #1 in 'Demo-Project' to 50%.

Verify % Done of issue #1 is updated to 50%


Create a new tracker named 'Security Bug' and enable it for all projects.

[...document.querySelectorAll('table.trackers tbody tr')].some(tr => tr.querySelector('td.name')?.innerText.trim().toLowerCase() === 'security bug') ? '1' : '0'

Verify there is a tracker named Security Bug


Create a new time tracking activity named 'Bug Fixing'.

[...document.querySelectorAll('table.enumerations tbody tr')].some(tr => tr.querySelector('td.name')?.innerText.trim() === 'Bug Fixing') ? '1' : '0'

Verify there is a time tracking activity named Bug Fixing


Update my Date of Birth to Dec 31, 2000 and then save the changes, and verify the updated value

Verify Date of Birth is updated to Dec 31, 2000


Add and enable custom checkbox 'Allow Remote Work' for employee Anita Olivier and save the changes

[...document.querySelectorAll('.o_property_field')].some(f => f.querySelector('label span')?.innerText.trim() === 'Allow Remote Work' && f.querySelector('input[type="checkbox"]')) ? '1' : '0'

Verify the property 'Allow Remote Work' exists and is a checkbox


Mark the opportunity 'Modern Open Space' as Lost with reason "Budget Issue"

document.querySelector('.o_widget_web_ribbon .ribbon-top-right span')?.innerText.trim() === 'LOST' && document.querySelector('input[id^="lost_reason_id"]')?.value.trim() === 'Budget Issue' ? '1' : '0'

Opportunity is marked as LOST and Lost Reason is Budget Issue


Lost opportunities list is displayed