fix(admin): stabilize courier and shipment lists - #253
Merged
Conversation
Keep the last successful courier response during API failures and surface actionable admin errors. Clamp stale pagination so user-specific URLs cannot render false empty lists.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Testing
ParaTest v7.3.2 upon PHPUnit 10.5.63 by Sebastian Bergmann and contributors.
Processes: 8
Runtime: PHP 8.2.29
Configuration: /Volumes/Data/Kerjaa/plugin-wp/paratest.xml
............................................................... 63 / 446 ( 14%)
............................................................... 126 / 446 ( 28%)
............................................................... 189 / 446 ( 42%)
............................................................... 252 / 446 ( 56%)
............................................................... 315 / 446 ( 70%)
............................................................... 378 / 446 ( 84%)
............................................................... 441 / 446 ( 98%)
..... 446 / 446 (100%)
Time: 00:36.296, Memory: 12.00 MB
Access Control
✔ Admin ajax handlers require manage woocommerce
✔ Admin controllers use correct capability
✔ Resi print handler requires manage woocommerce
✔ Admin templates have inline capability check
✔ Admin post register requires manage woocommerce
✔ Menu pages require manage woocommerce
✔ Nopriv handlers are not blocked by capability check
Request Pickup Payment Flow
✔ Request pickup list auto opens payment only with explicit flag
✔ Request pickup detail page does not auto open payment modal
✔ Pick schedule redirect adds open payment only when backend opt in exists
✔ Top payment rows do not render scan to pay actions
✔ Qris payment stays waiting until remote payment is paid
✔ Cod only pickup does not fall back to qris
✔ Payment list fees column subtracts platform shipping discount
✔ Request pickup preserves checkout postcode for destination zipcode
✔ Platform shipping discount label distinguishes from user coupon
✔ Deficit rows with non negative effective cod payout remain pickup processable
Shipping Discount Coupon Runtime
✔ Coupon controller registers runtime shipping coupon hooks
✔ Shipping method applies runtime shipping coupon pricing metadata
✔ Woocommerce template overrides are limited to kiriminaja custom templates
✔ Kiriminaja custom cart templates have current woocommerce versions
✔ Kiriminaja shipping method is available in shipping zones
✔ Shipping coupon physical product check ignores virtual items and discounted totals
✔ Shipping coupon combinations accept percentage like smart coupon types
✔ Store api shipping coupon validation allows all region coupons without posted district
✔ Shipping coupon registers as runtime cart coupon without item discount
✔ Coupon changes invalidate cached shipping rates for store api
✔ Cart and checkout templates render shipping coupon rows as shipping scoped
Transaction Process Recipient Fallback
✔ Transaction process view falls back to wc order recipient fields
✔ Transaction process view renders resolved recipient name and phone
Admin Courier Shipment Resilience
✔ Courier service preserves last successful list during api failures
✔ Whitelist save does not delete remote courier catalog cache
✔ Manual courier refresh keeps fallback data until live fetch succeeds
✔ Courier screen displays ajax errors instead of an empty state
✔ Transaction list bounds page size and requeries the last valid page
✔ Payment list clamps page and whitelists status before querying
Plugin Structure
✔ Main plugin file exists
✔ Main plugin file has required headers
✔ Text domain matches slug
✔ Version defined in main file
✔ Version header matches constant
✔ Readme txt exists
✔ Readme stable tag matches version
✔ Readme has required sections
✔ Uninstall php exists
✔ Uninstall checks wp uninstall plugin
✔ Composer json has correct autoload
✔ License file exists
✔ No php files in build differ from source
Shipping Process Resi Print Sanitization
✔ Resi print normalizes oids without forcing array through sanitize text field
✔ Resi print redirects to api label url after marking transactions printed
✔ Resi print logs failure reasons and accepts multiple api url shapes
✔ Print awb repository tries fallback payload shapes
✔ Transaction list exposes print controls for all tab and unprinted badge
Callback Url Registration
✔ Setup registers feed query callback url
Logging Feature
✔ Logger utility exists and uses woocommerce logger shortcuts
✔ Main plugin bootstraps logging helper and filters
✔ Legacy error log calls are replaced in core logging surfaces
✔ Kiriminaja api requests send plugin user agent header
✔ Settings and webhook flows use structured logging
✔ Technical section downloads only plugin logs with consent disclaimer
Profile Cache Feature
✔ Api service caches profile result for one minute
✔ Api service falls back to cached profile when api is throttled
Shipping Discount Coupon Admin
✔ Init registers shipping discount coupon controller
✔ Migration creates region cache tables
✔ Api repository supports province and city endpoints
✔ Region cache service normalizes documented region fields
✔ Coupon controller registers required hooks and meta keys
✔ Activation schedules region cache warmup
✔ Activation registers kiriminaja shipping method without deleting zones
✔ Coupon admin assets exist
✔ Coupon admin script surfaces ajax error messages
✔ Coupon admin normalizes leading zero amounts
Shop Verse Block Checkout Compatibility
✔ Shopverse uses woocommerce checkout blocks
✔ Billing address script is registered and template enqueues config before asset
✔ Block checkout script must run on cart page when shopverse redirects empty checkout to cart
✔ Classic checkout refresh flags must be available to updated checkout handlers
✔ Classic district selector uses woocommerce selectwoo fallback
✔ Classic district selection keeps selected label through checkout refresh
✔ Classic destination ajax does not alert system trouble for parseable 200 response
✔ Subdistrict ajax accepts select2 top level search terms
✔ Block checkout no district state must not make place order a dead button
✔ Block checkout valid district during restore must reenable place order
✔ Checkout pricing must use variation dimensions when cart item is variable
✔ Checkout pricing inherits missing variation attributes from parent
✔ Checkout pricing must stack multiple quantities using smallest volumetric box
✔ Volumetric box uses smallest packable axis aligned stack
✔ Volumetric box prefers rotation that reduces package volume
✔ Volumetric box does not fake conservatism by only expanding volume
✔ Classic checkout template must render real cart total not hardcoded zero
✔ Classic checkout review order must not render payment methods
✔ Classic checkout shipping method must not require payment selection before showing rates
✔ Cod shipping filter must only return cod capable rates
✔ Legacy pricing ajax cod filter has same cod capable restriction
✔ Legacy pricing ajax must use available money formatter
✔ Block checkout field registration uses supported select field without invalid before attribute
✔ Frontend block checkout script uses store api extension cart update for fees
✔ Block checkout triggers store api session persist before legacy ajax fee request
✔ Block checkout district postcode lookup uses localized ajax url
✔ Block checkout district lookup also watches postcode dom inputs
✔ Block checkout district select keeps react text field as hidden source of truth
✔ Block checkout cod insurance reads namespaced district field
✔ Block checkout district field lookup handles react rendered inputs
✔ Block checkout initializer must only bind subscribers once
✔ Block checkout district change updates checkout additional fields store
✔ Block checkout registers district only for shipping address
✔ Block checkout requires district before showing shipping options
✔ Shipping method hides rates until checkout address is long enough
✔ Block checkout district selection persists destination session before shipping rate refetch
✔ Block checkout raw update customer uses store api nonce header
✔ Block checkout valid district hides all stale district warnings
✔ Block checkout resyncs all district source fields after blocks rerender
✔ Block checkout restores saved district selection for the same postcode
✔ Block checkout shipping rate refresh uses cart dispatch invalidation fallbacks
✔ Shipping method supports block checkout destination and payment session fallbacks
✔ Block checkout cod fee reads and watches wc payment store
✔ Block checkout cod fee keeps cod when store api payment response lags
✔ Block checkout payment reader must not fall back to first payment input value
✔ Store api update callback persists and clears payment method explicitly
✔ Store api update callback persists force insurance in session
✔ Store api update callback does not overwrite visible block postcode from session
✔ Store api update callback recalculates totals after block destination changes
✔ Block checkout payment change refreshes cod rates and fee totals
✔ Cod checkout validation rejects selected non cod courier
✔ Cod gateway is removed when selected kiriminaja rate is not cod capable
✔ Admin ajax cod fee only sets cod payload for cod payment
✔ Admin ajax fee refresh preserves selected shipping method before caching fees
✔ Block checkout district select uses dedicated wrapper without overlapping source field
✔ Block checkout district select matches woocommerce blocks select markup
✔ Checkout fee amounts show skeleton while recalculating
✔ Classic checkout does not register district twice through default address fields
✔ Classic checkout normalizes selected district before required field validation
✔ Classic checkout short address replaces generic missing shipping notice
✔ Classic checkout uses native wc fee rows instead of hidden placeholder rows
✔ Classic checkout updated checkout handler must not recalculate fees recursively
✔ Checkout refresh handlers must not accumulate duplicate change listeners
✔ Fee refresh must collapse inflight requests instead of stacking more ajax
✔ Block checkout fee refreshes must be scheduled and skip classic fragment cycles
✔ Block checkout does not render optional insurance checkbox but classic uses updated wording
✔ Classic checkout renders one theme compatible insurance checkbox above order notes
✔ Classic checkout shipping radio change persists selected method before fee refresh
✔ Classic cart and checkout shipping methods use generic select2 dropdown
✔ Block checkout shipping radio click prefers recent user selection over stale store rate
✔ Block checkout shipping radio click syncs wc blocks selected rate for order summary
✔ Block checkout native fee detection includes store api requests
✔ Virtual cart clears stale logistics session before fee or store api sync
✔ Virtual cart skips district field script registration and validation
✔ Virtual products skip kiriminaja weight and volumetric requirements
✔ Fee cache matcher invalidates non cod insurance when checkout context changes
✔ Shipping chosen method filter preserves posted ajax selection and prefixed session mirror
✔ Plugin ajax shipping metode id wins over wc default method during recalculation
✔ Block checkout shipping chosen method filter trusts wc resolved method
✔ Block checkout select shipping rate request body wins over logged in stale session
✔ Block checkout store api recalculation prefers plugin session mirror before wc default
✔ Block checkout fee fallback strips shipping method prefix before calculation
✔ Block checkout fee sync prefers store selected shipping rate over stale dom radio
✔ Cod fee calculation matches main branch amount field
✔ Php registers store api update callback for block checkout fees
✔ Block checkout order creation reads store api checkout context
✔ Native block checkout cod fee fallback reads all store api payment session keys
✔ Native checkout fees must clear stale cod cache when payment is not cod
✔ Cached fee amounts are keyed by checkout context so courier rule changes recalculate
✔ Block checkout order creation falls back to woo order payment method for cod
✔ Transaction process page defaults to all and labels payment from woo order
✔ Transaction process page only lists orders with shippable products
✔ Block checkout uses native order summary fee rows
✔ Block checkout order fees are not added or rendered twice after checkout
✔ Order received fee fallback never renders zero or null transaction fees
✔ Order received renders courier and tracking outside financial totals
✔ Transaction creation honors block checkout insurance payload when post data is empty
✔ Admin shipping breakdown shows net shipping paid by buyer after shipping coupon
Cancel Transaction Feature
✔ Cancel transaction service file exists
✔ Cancel transaction service has correct namespace
✔ Cancel transaction service extends base service
✔ Cancel transaction service has required methods
✔ Cancel transaction service validates reason length
✔ Cancel transaction service checks non cancelable statuses
✔ Cancel transaction service has abspath check
✔ Cancel transaction service requires awb
✔ Cancel transaction service calls cancel shipment api
✔ Cancel transaction service updates transaction status
✔ Api repository has cancel shipment method
✔ Api repository cancel uses correct endpoint
✔ Api repository cancel sends awb and reason
✔ Controller registers cancel ajax action
✔ Cancel ajax handler checks capability
✔ Cancel ajax handler verifies nonce
✔ Cancel ajax handler sanitizes inputs
✔ Controller hooks into wc order status cancelled
✔ Handle wc order cancelled method exists
✔ Handle wc order cancelled uses cancel service
✔ Handle wc order cancelled provides default reason
✔ Handle wc order cancelled skips terminal statuses
✔ Handle wc order cancelled skips when no awb
✔ Webhook canceled packages unhooks wc listener
✔ Webhook canceled packages checks order status before update
✔ Cancel modal template is rendered from controller
✔ Cancel modal template has reason input
✔ Cancel modal template has order id hidden field
✔ Cancel modal template has character counter
✔ Cancel modal template has submit button
✔ Transaction list no longer includes legacy cancel modal partial
✔ Transaction list has cancel button
✔ Transaction list has actions column
✔ Transaction list js has cancel modal function
✔ Transaction list js handles cancel with backbone modal event
✔ Cancel js sends correct ajax action
✔ Cancel js sends nonce
✔ Cancel js validates reason min length
✔ Cancel js has confirmation prompt
✔ Cancel button only shown when awb exists
✔ Cancel button only shown for cancelable statuses
Security Validation
✔ All php files have abspath check
✔ No raw superglobal access
✔ Ajax handlers have nonce verification
✔ No direct post variable assignment
✔ No unescaped echo statements
Checkout Shipping Performance
✔ Checkout shipping rate cache uses stable context key
✔ Pricing requests include enabled courier whitelist
✔ Shipping price response is reused for selected courier fee calculation
✔ Plugin ajax fee cache context matches checkout fee context
✔ Plugin ajax handlers defer totals recalculation to woocommerce update checkout
Syntax Validation
✔ Every php file has valid syntax with data set "inc/Base/Activate.php"
✔ Every php file has valid syntax with data set "inc/Base/BaseInit.php"
✔ Every php file has valid syntax with data set "inc/Base/BaseService.php"
✔ Every php file has valid syntax with data set "inc/Base/Deactivate.php"
✔ Every php file has valid syntax with data set "inc/Base/Enqueue.php"
✔ Every php file has valid syntax with data set "inc/Base/Helper.php"
✔ Every php file has valid syntax with data set "inc/Base/KiriminAjaApi.php"
✔ Every php file has valid syntax with data set "inc/Base/PageGenerator.php"
✔ Every php file has valid syntax with data set "inc/Base/Validator.php"
✔ Every php file has valid syntax with data set "inc/Controllers/CallbackController.php"
✔ Every php file has valid syntax with data set "inc/Controllers/CheckoutController.php"
✔ Every php file has valid syntax with data set "inc/Controllers/CodAdjustmentController.php"
✔ Every php file has valid syntax with data set "inc/Controllers/EditOrderController.php"
✔ Every php file has valid syntax with data set "inc/Controllers/GeneralAjaxController.php"
✔ Every php file has valid syntax with data set "inc/Controllers/ProductController.php"
✔ Every php file has valid syntax with data set "inc/Controllers/SettingController.php"
✔ Every php file has valid syntax with data set "inc/Controllers/ShippingDiscountCouponController.php"
✔ Every php file has valid syntax with data set "inc/Controllers/ShippingProcessController.php"
✔ Every php file has valid syntax with data set "inc/Controllers/TrackingFrontPageController.php"
✔ Every php file has valid syntax with data set "inc/Controllers/TransactionProcessController.php"
✔ Every php file has valid syntax with data set "inc/Init.php"
✔ Every php file has valid syntax with data set "inc/Migration/SetupMigration.php"
✔ Every php file has valid syntax with data set "inc/Pages/Admin.php"
✔ Every php file has valid syntax with data set "inc/Pages/AdminPost.php"
✔ Every php file has valid syntax with data set "inc/Repositories/CodFeeApiRepository.php"
✔ Every php file has valid syntax with data set "inc/Repositories/KiriminajaApiRepository.php"
✔ Every php file has valid syntax with data set "inc/Repositories/PaymentRepository.php"
✔ Every php file has valid syntax with data set "inc/Repositories/SettingRepository.php"
✔ Every php file has valid syntax with data set "inc/Repositories/ShippingDiscountRegionRepository.php"
✔ Every php file has valid syntax with data set "inc/Repositories/TransactionRepository.php"
✔ Every php file has valid syntax with data set "inc/Repositories/WpPostMetaRepository.php"
✔ Every php file has valid syntax with data set "inc/Repositories/WpWcOrderProductLookup.php"
✔ Every php file has valid syntax with data set "inc/Repositories/WpWcOrderStatRepository.php"
✔ Every php file has valid syntax with data set "inc/Services/CallbackHandlerService.php"
✔ Every php file has valid syntax with data set "inc/Services/CheckoutServices/CheckoutCalculationService.php"
✔ Every php file has valid syntax with data set "inc/Services/CheckoutServices/CodDeficitService.php"
✔ Every php file has valid syntax with data set "inc/Services/CheckoutServices/CreateTransactionService.php"
✔ Every php file has valid syntax with data set "inc/Services/CheckoutServices/OngkirPricingService.php"
✔ Every php file has valid syntax with data set "inc/Services/CheckoutServices/PricingCacheService.php"
✔ Every php file has valid syntax with data set "inc/Services/CheckoutServices/ValidationCodCalculationService.php"
✔ Every php file has valid syntax with data set "inc/Services/KiriminAja/GenerateOrderId.php"
✔ Every php file has valid syntax with data set "inc/Services/KiriminAjaTrackingService.php"
✔ Every php file has valid syntax with data set "inc/Services/KiriminajaApiService.php"
✔ Every php file has valid syntax with data set "inc/Services/OrderEditPageServices/ShippingInfoServices.php"
✔ Every php file has valid syntax with data set "inc/Services/SettingService.php"
✔ Every php file has valid syntax with data set "inc/Services/ShippingDiscountCouponService.php"
✔ Every php file has valid syntax with data set "inc/Services/ShippingDiscountRegionCacheService.php"
✔ Every php file has valid syntax with data set "inc/Services/ShippingProcessServices/GetShippingProcessDetailService.php"
✔ Every php file has valid syntax with data set "inc/Services/ShippingProcessServices/GetShippingProcessPayment.php"
✔ Every php file has valid syntax with data set "inc/Services/TransactionProcessServices/CancelTransactionService.php"
✔ Every php file has valid syntax with data set "inc/Services/TransactionProcessServices/GetCreditBalanceService.php"
✔ Every php file has valid syntax with data set "inc/Services/TransactionProcessServices/GetRequestPickupScheduleService.php"
✔ Every php file has valid syntax with data set "inc/Services/TransactionProcessServices/SendRequestPickupTransactionService.php"
✔ Every php file has valid syntax with data set "inc/Services/TransactionProcessServices/ValidatePinService.php"
✔ Every php file has valid syntax with data set "inc/Services/UtilServices/GetWCCartAttributeService.php"
✔ Every php file has valid syntax with data set "inc/Services/WooCommerceShippingMethodRegistrationService.php"
✔ Every php file has valid syntax with data set "inc/Utils/DimensionConverter.php"
✔ Every php file has valid syntax with data set "inc/Utils/Logger.php"
✔ Every php file has valid syntax with data set "inc/Utils/ServiceResponse.php"
✔ Every php file has valid syntax with data set "inc/Utils/Volumetric.php"
✔ Every php file has valid syntax with data set "inc/Utils/WeightConverter.php"
✔ Every php file has valid syntax with data set "kiriminaja.php"
✔ Every php file has valid syntax with data set "scripts/changelog.php"
✔ Every php file has valid syntax with data set "scripts/fetch-regions.php"
✔ Every php file has valid syntax with data set "scripts/inject-api-url.php"
✔ Every php file has valid syntax with data set "templates/_header.php"
✔ Every php file has valid syntax with data set "templates/_setup-guide.php"
✔ Every php file has valid syntax with data set "templates/cache/index.php"
✔ Every php file has valid syntax with data set "templates/front/form-billing-address.php"
✔ Every php file has valid syntax with data set "templates/front/form-shipping-address.php"
✔ Every php file has valid syntax with data set "templates/front/partials/form-billing-address-config.php"
✔ Every php file has valid syntax with data set "templates/front/partials/form-billing-address-fields.php"
✔ Every php file has valid syntax with data set "templates/front/tracking.php"
✔ Every php file has valid syntax with data set "templates/order/edit.php"
✔ Every php file has valid syntax with data set "templates/order/metabox-shipping.php"
✔ Every php file has valid syntax with data set "templates/order/partials/cod-adjustment-modal.php"
✔ Every php file has valid syntax with data set "templates/product/general-wc-tab-setting.php"
✔ Every php file has valid syntax with data set "templates/request-pickup-detail/index.php"
✔ Every php file has valid syntax with data set "templates/request-pickup-detail/view/index.php"
✔ Every php file has valid syntax with data set "templates/request-pickup/index.php"
✔ Every php file has valid syntax with data set "templates/request-pickup/view/index.php"
✔ Every php file has valid syntax with data set "templates/request-pickup/view/modal-payment.php"
✔ Every php file has valid syntax with data set "templates/request-pickup/view/modal-request-pickup.php"
✔ Every php file has valid syntax with data set "templates/setting/index.php"
✔ Every php file has valid syntax with data set "templates/setting/setuped/_section-css-shared.php"
✔ Every php file has valid syntax with data set "templates/setting/setuped/_section-js-shared.php"
✔ Every php file has valid syntax with data set "templates/setting/setuped/index.php"
✔ Every php file has valid syntax with data set "templates/setting/setuped/section-account.php"
✔ Every php file has valid syntax with data set "templates/setting/setuped/section-address.php"
✔ Every php file has valid syntax with data set "templates/setting/setuped/section-couriers.php"
✔ Every php file has valid syntax with data set "templates/setting/setuped/section-technical.php"
✔ Every php file has valid syntax with data set "templates/setting/setuped/section-tracking.php"
✔ Every php file has valid syntax with data set "templates/setting/setuped/section-webhooks.php"
✔ Every php file has valid syntax with data set "templates/setting/unsetuped/index.php"
✔ Every php file has valid syntax with data set "templates/transaction-process/index.php"
✔ Every php file has valid syntax with data set "templates/transaction-process/view/_filters.php"
✔ Every php file has valid syntax with data set "templates/transaction-process/view/index.php"
✔ Every php file has valid syntax with data set "templates/woocommerce/cart/cart-shipping.php"
✔ Every php file has valid syntax with data set "templates/woocommerce/cart/cart-totals.php"
✔ Every php file has valid syntax with data set "templates/woocommerce/cart/cart.php"
✔ Every php file has valid syntax with data set "templates/woocommerce/cart/shipping-calculator.php"
✔ Every php file has valid syntax with data set "templates/woocommerce/checkout/cart-errors.php"
✔ Every php file has valid syntax with data set "templates/woocommerce/checkout/form-billing.php"
✔ Every php file has valid syntax with data set "templates/woocommerce/checkout/form-checkout.php"
✔ Every php file has valid syntax with data set "templates/woocommerce/checkout/form-coupon.php"
✔ Every php file has valid syntax with data set "templates/woocommerce/checkout/form-login.php"
✔ Every php file has valid syntax with data set "templates/woocommerce/checkout/form-pay.php"
✔ Every php file has valid syntax with data set "templates/woocommerce/checkout/form-shipping.php"
✔ Every php file has valid syntax with data set "templates/woocommerce/checkout/form-verify-email.php"
✔ Every php file has valid syntax with data set "templates/woocommerce/checkout/order-receipt.php"
✔ Every php file has valid syntax with data set "templates/woocommerce/checkout/order-received.php"
✔ Every php file has valid syntax with data set "templates/woocommerce/checkout/payment-method.php"
✔ Every php file has valid syntax with data set "templates/woocommerce/checkout/payment.php"
✔ Every php file has valid syntax with data set "templates/woocommerce/checkout/review-order.php"
✔ Every php file has valid syntax with data set "templates/woocommerce/checkout/terms.php"
✔ Every php file has valid syntax with data set "templates/woocommerce/checkout/thankyou.php"
✔ Every php file has valid syntax with data set "uninstall.php"
✔ Every php file has valid syntax with data set "wc/AdminWoocommerceSetting.php"
✔ Every php file has valid syntax with data set "wc/KiriminajaShippingMethod.php"
✔ Every php file has valid syntax with data set "wc/OverwriteWoocommercePlugin.php"
✔ At least one php file found
Cod Deficit Feature
✔ Cod deficit service file exists
✔ Cod deficit service has correct namespace
✔ Cod deficit service extends base service
✔ Cod deficit service has detect method
✔ Cod deficit service has api detection
✔ Cod deficit service has fallback detection
✔ Cod deficit service uses two api calls
✔ Cod deficit service floors custom cod at 100k
✔ Cod deficit service uses kiriof max cod amount constant
✔ Cod deficit service passes discount amount to api
✔ Cod fee api repository file exists
✔ Cod fee api repository has correct namespace
✔ Cod fee api repository extends kiriminaja api
✔ Cod fee api repository has calculate bulk cod method
✔ Cod fee api repository uses correct endpoint
✔ Cod fee api repository reads results key from response
✔ Cod fee api repository does not send member id
✔ Cod fee api repository sends couriers array
✔ Cod adjustment controller file exists
✔ Cod adjustment controller has correct namespace
✔ Cod adjustment controller registers ajax actions
✔ Cod adjustment controller handle adjust checks capability
✔ Cod adjustment controller handle adjust verifies nonce
✔ Cod adjustment controller checks is deficit flag
✔ Cod adjustment controller recalculates via api
✔ Cod adjustment controller updates wc order
✔ Cod adjustment controller is registered in init
✔ Create transaction service calls cod deficit detect
✔ Create transaction service stores is deficit
✔ Create transaction service stores cod minimum
✔ Create transaction service passes discount amount to deficit detect
✔ Cancel deficit handler requires awb
✔ Cancel deficit handler calls cancel shipment api
✔ Cancel deficit handler updates wc order to cancelled
✔ Cancel deficit handler clears deficit flag in db
✔ Validation cod service file exists
✔ Validation cod service uses setting repository for min
✔ Validation cod service uses kiriof max cod constant as default
✔ Validation cod service validates only for kiriminaja shipping
✔ Validation cod service validates only for cod payment
✔ Cod adjustment ajax handlers check capability before logic
✔ Cod adjustment ajax handlers verify nonce before logic
✔ Kiriof max cod amount constant is defined
✔ Setting service resolves is top from profile api
✔ Setting repository stores is top on integration
✔ Migration ensures is top row exists
✔ Shipping discount coupon service does not gate top merchants
✔ Shipping discount coupon service blocks free shipping stacking
Prefix Validation
✔ No kj underscore prefix in source files
✔ No kj camelcase methods in source files
✔ All defines use kiriof prefix
✔ All global functions use kiriof prefix
✔ All ajax actions use kiriof prefix
I18n Validation
✔ Translation functions use correct text domain
✔ Lang directory exists
✔ Custom json translation helper is not used
✔ Wordpress translation catalog files exist
✔ Bahasa translation catalog covers native i18n source strings
✔ Domain path header matches
✔ Plugin loads textdomain from lang directory
Insurance Feature
✔ Migration seeds enable insurance key
✔ Repository has store insurance data method
✔ Repository store insurance data has insert or update logic
✔ Service has store insurance data method
✔ Service store insurance validates yes no
✔ Service store insurance calls repository
✔ Controller registers insurance ajax action
✔ Controller insurance handler checks capability
✔ Controller insurance handler verifies nonce
✔ Controller insurance handler sanitizes input
✔ Checkout controller forces insurance when global enabled
✔ Checkout controller shows insurance row when global enabled
✔ Checkout calculation includes global insurance check
✔ Create transaction service includes global insurance
✔ Pickup service sends is with insurance flag
✔ Pickup service sends insurance amount
✔ Pickup service uses customer name for destination name
✔ Pickup service sanitizes origin and destination names for api
✔ Pickup service only sends discount fields when meaningful
✔ Settings list has insurance toggle
✔ Settings list no longer shows insurance todo
✔ Settings list checks woocommerce shipping locations
✔ Woocommerce general settings include kiriminaja origin mirror fields
✔ Kiriminaja origin address syncs with woocommerce store options
✔ Origin mirror repository updates partial origin fields
✔ Admin assets load on woocommerce general settings for origin mirror
✔ Settings list checks product volumetric configuration progress
✔ Setup notice includes kiriminaja shipping option step
✔ Setup notice includes product volumetric progress step
✔ Product list has volumetric configuration label column
Shipping Discount Coupon Combinations
✔ Controller registers combinations hooks and meta key
✔ Controller exposes non kiriminaja discount type combination options
✔ Service blocks double shipping discount coupons
✔ Service enforces disabled native coupon combinations at checkout
✔ Controller forces individual use off for kiriminaja types
✔ Js disables combinations when individual use is checked
✔ Admin styles include combination badges and options
Tracking Shortcode Lookup
✔ Tracking lookup accepts awb kiriminaja order id and wc order id
✔ Tracking service uses resolved wc order id for fallback order details
✔ Tracking shortcode uses enqueued script for frontend behavior
✔ Tracking page is configurable from woocommerce advanced settings
✔ Activation reuses existing tracking shortcode page
✔ Tracking links use configured tracking page
OK (446 tests, 1582 assertions) (446 tests passed)
-rw-r--r--@ 1 yanuaraditia staff 53511 Jul 24 09:55 lang/kiriminaja-official-id_ID.mo
rm -rf build/kiriminaja-official kiriminaja-official.zip
mkdir -p build/kiriminaja-official
rsync -a --exclude=.git/ --exclude=.github/ --exclude=.idea/ --exclude=.vscode/ --exclude=node_modules/ --exclude=build/ --exclude=scripts/ --exclude=.DS_Store --exclude=.distignore --exclude=.editorconfig --exclude=.gitattributes --exclude=.gitignore --exclude=.env --exclude=.env.example --exclude=AGENTS.md --exclude=Makefile --exclude=*.zip --exclude=paratest.xml --exclude=tests/ --exclude=build/ --exclude=.paratest.cache/ --exclude=.wordpress-org/ ./ build/kiriminaja-official/
cp composer.json build/kiriminaja-official/
(cd build/kiriminaja-official && composer install --no-dev --optimize-autoloader --no-interaction 2>/dev/null)
rm -f build/kiriminaja-official/composer.json build/kiriminaja-official/composer.lock build/kiriminaja-official/vendor/bin/.phpunit.result.cache
(cd build && zip -r ../kiriminaja-official.zip kiriminaja-official)
adding: kiriminaja-official/ (stored 0%)
adding: kiriminaja-official/inc/ (stored 0%)
adding: kiriminaja-official/inc/Init.php (deflated 65%)
adding: kiriminaja-official/inc/Utils/ (stored 0%)
adding: kiriminaja-official/inc/Utils/Logger.php (deflated 75%)
adding: kiriminaja-official/inc/Utils/ServiceResponse.php (deflated 62%)
adding: kiriminaja-official/inc/Utils/Volumetric.php (deflated 76%)
adding: kiriminaja-official/inc/Utils/WeightConverter.php (deflated 55%)
adding: kiriminaja-official/inc/Utils/DimensionConverter.php (deflated 59%)
adding: kiriminaja-official/inc/Repositories/ (stored 0%)
adding: kiriminaja-official/inc/Repositories/KiriminajaApiRepository.php (deflated 79%)
adding: kiriminaja-official/inc/Repositories/PaymentRepository.php (deflated 78%)
adding: kiriminaja-official/inc/Repositories/CodFeeApiRepository.php (deflated 71%)
adding: kiriminaja-official/inc/Repositories/TransactionRepository.php (deflated 84%)
adding: kiriminaja-official/inc/Repositories/SettingRepository.php (deflated 87%)
adding: kiriminaja-official/inc/Repositories/ShippingDiscountRegionRepository.php (deflated 82%)
adding: kiriminaja-official/inc/Repositories/WpWcOrderProductLookup.php (deflated 66%)
adding: kiriminaja-official/inc/Repositories/WpWcOrderStatRepository.php (deflated 48%)
adding: kiriminaja-official/inc/Repositories/WpPostMetaRepository.php (deflated 76%)
adding: kiriminaja-official/inc/Controllers/ (stored 0%)
adding: kiriminaja-official/inc/Controllers/CheckoutController.php (deflated 83%)
adding: kiriminaja-official/inc/Controllers/TrackingFrontPageController.php (deflated 56%)
adding: kiriminaja-official/inc/Controllers/GeneralAjaxController.php (deflated 79%)
adding: kiriminaja-official/inc/Controllers/CodAdjustmentController.php (deflated 79%)
adding: kiriminaja-official/inc/Controllers/TransactionProcessController.php (deflated 85%)
adding: kiriminaja-official/inc/Controllers/CallbackController.php (deflated 72%)
adding: kiriminaja-official/inc/Controllers/SettingController.php (deflated 83%)
adding: kiriminaja-official/inc/Controllers/ShippingProcessController.php (deflated 79%)
adding: kiriminaja-official/inc/Controllers/ShippingDiscountCouponController.php (deflated 82%)
adding: kiriminaja-official/inc/Controllers/ProductController.php (deflated 74%)
adding: kiriminaja-official/inc/Controllers/EditOrderController.php (deflated 78%)
adding: kiriminaja-official/inc/Data/ (stored 0%)
adding: kiriminaja-official/inc/Data/regions.json (deflated 80%)
adding: kiriminaja-official/inc/Pages/ (stored 0%)
adding: kiriminaja-official/inc/Pages/Admin.php (deflated 76%)
adding: kiriminaja-official/inc/Pages/AdminPost.php (deflated 75%)
adding: kiriminaja-official/inc/Migration/ (stored 0%)
adding: kiriminaja-official/inc/Migration/SetupMigration.php (deflated 85%)
adding: kiriminaja-official/inc/Base/ (stored 0%)
adding: kiriminaja-official/inc/Base/Validator.php (deflated 68%)
adding: kiriminaja-official/inc/Base/KiriminAjaApi.php (deflated 76%)
adding: kiriminaja-official/inc/Base/Deactivate.php (deflated 26%)
adding: kiriminaja-official/inc/Base/Enqueue.php (deflated 75%)
adding: kiriminaja-official/inc/Base/BaseInit.php (deflated 55%)
adding: kiriminaja-official/inc/Base/PageGenerator.php (deflated 68%)
adding: kiriminaja-official/inc/Base/Activate.php (deflated 57%)
adding: kiriminaja-official/inc/Base/Helper.php (deflated 78%)
adding: kiriminaja-official/inc/Base/BaseService.php (deflated 67%)
adding: kiriminaja-official/inc/Services/ (stored 0%)
adding: kiriminaja-official/inc/Services/KiriminajaApiService.php (deflated 80%)
adding: kiriminaja-official/inc/Services/ShippingDiscountRegionCacheService.php (deflated 81%)
adding: kiriminaja-official/inc/Services/CheckoutServices/ (stored 0%)
adding: kiriminaja-official/inc/Services/CheckoutServices/PricingCacheService.php (deflated 76%)
adding: kiriminaja-official/inc/Services/CheckoutServices/CreateTransactionService.php (deflated 77%)
adding: kiriminaja-official/inc/Services/CheckoutServices/OngkirPricingService.php (deflated 72%)
adding: kiriminaja-official/inc/Services/CheckoutServices/CheckoutCalculationService.php (deflated 78%)
adding: kiriminaja-official/inc/Services/CheckoutServices/CodDeficitService.php (deflated 75%)
adding: kiriminaja-official/inc/Services/CheckoutServices/ValidationCodCalculationService.php (deflated 71%)
adding: kiriminaja-official/inc/Services/ShippingProcessServices/ (stored 0%)
adding: kiriminaja-official/inc/Services/ShippingProcessServices/GetShippingProcessDetailService.php (deflated 74%)
adding: kiriminaja-official/inc/Services/ShippingProcessServices/GetShippingProcessPayment.php (deflated 76%)
adding: kiriminaja-official/inc/Services/UtilServices/ (stored 0%)
adding: kiriminaja-official/inc/Services/UtilServices/GetWCCartAttributeService.php (deflated 80%)
adding: kiriminaja-official/inc/Services/OrderEditPageServices/ (stored 0%)
adding: kiriminaja-official/inc/Services/OrderEditPageServices/ShippingInfoServices.php (deflated 71%)
adding: kiriminaja-official/inc/Services/TransactionProcessServices/ (stored 0%)
adding: kiriminaja-official/inc/Services/TransactionProcessServices/CancelTransactionService.php (deflated 70%)
adding: kiriminaja-official/inc/Services/TransactionProcessServices/GetRequestPickupScheduleService.php (deflated 68%)
adding: kiriminaja-official/inc/Services/TransactionProcessServices/ValidatePinService.php (deflated 69%)
adding: kiriminaja-official/inc/Services/TransactionProcessServices/GetCreditBalanceService.php (deflated 54%)
adding: kiriminaja-official/inc/Services/TransactionProcessServices/SendRequestPickupTransactionService.php (deflated 82%)
adding: kiriminaja-official/inc/Services/KiriminAjaTrackingService.php (deflated 73%)
adding: kiriminaja-official/inc/Services/CallbackHandlerService.php (deflated 85%)
adding: kiriminaja-official/inc/Services/KiriminAja/ (stored 0%)
adding: kiriminaja-official/inc/Services/KiriminAja/GenerateOrderId.php (deflated 59%)
adding: kiriminaja-official/inc/Services/SettingService.php (deflated 84%)
adding: kiriminaja-official/inc/Services/ShippingDiscountCouponService.php (deflated 83%)
adding: kiriminaja-official/inc/Services/WooCommerceShippingMethodRegistrationService.php (deflated 74%)
adding: kiriminaja-official/LICENSE (deflated 66%)
adding: kiriminaja-official/wc/ (stored 0%)
adding: kiriminaja-official/wc/OverwriteWoocommercePlugin.php (deflated 71%)
adding: kiriminaja-official/wc/AdminWoocommerceSetting.php (deflated 78%)
adding: kiriminaja-official/wc/KiriminajaShippingMethod.php (deflated 80%)
adding: kiriminaja-official/README.md (deflated 56%)
adding: kiriminaja-official/lang/ (stored 0%)
adding: kiriminaja-official/lang/kiriminaja-official-id_ID.mo (deflated 62%)
adding: kiriminaja-official/lang/kiriminaja-official.pot (deflated 83%)
adding: kiriminaja-official/lang/kiriminaja-official-id_ID.po (deflated 80%)
adding: kiriminaja-official/uninstall.php (deflated 52%)
adding: kiriminaja-official/kiriminaja.php (deflated 69%)
adding: kiriminaja-official/templates/ (stored 0%)
adding: kiriminaja-official/templates/order/ (stored 0%)
adding: kiriminaja-official/templates/order/edit.php (deflated 75%)
adding: kiriminaja-official/templates/order/metabox-shipping.php (deflated 80%)
adding: kiriminaja-official/templates/order/partials/ (stored 0%)
adding: kiriminaja-official/templates/order/partials/cod-adjustment-modal.php (deflated 79%)
adding: kiriminaja-official/templates/woocommerce/ (stored 0%)
adding: kiriminaja-official/templates/woocommerce/checkout/ (stored 0%)
adding: kiriminaja-official/templates/woocommerce/checkout/payment-method.php (deflated 56%)
adding: kiriminaja-official/templates/woocommerce/checkout/terms.php (deflated 57%)
adding: kiriminaja-official/templates/woocommerce/checkout/form-login.php (deflated 46%)
adding: kiriminaja-official/templates/woocommerce/checkout/review-order.php (deflated 72%)
adding: kiriminaja-official/templates/woocommerce/checkout/form-coupon.php (deflated 55%)
adding: kiriminaja-official/templates/woocommerce/checkout/payment.php (deflated 58%)
adding: kiriminaja-official/templates/woocommerce/checkout/order-receipt.php (deflated 58%)
adding: kiriminaja-official/templates/woocommerce/checkout/order-received.php (deflated 46%)
adding: kiriminaja-official/templates/woocommerce/checkout/form-billing.php (deflated 65%)
adding: kiriminaja-official/templates/woocommerce/checkout/form-checkout.php (deflated 61%)
adding: kiriminaja-official/templates/woocommerce/checkout/cart-errors.php (deflated 44%)
adding: kiriminaja-official/templates/woocommerce/checkout/form-verify-email.php (deflated 51%)
adding: kiriminaja-official/templates/woocommerce/checkout/thankyou.php (deflated 68%)
adding: kiriminaja-official/templates/woocommerce/checkout/form-pay.php (deflated 65%)
adding: kiriminaja-official/templates/woocommerce/checkout/form-shipping.php (deflated 65%)
adding: kiriminaja-official/templates/woocommerce/cart/ (stored 0%)
adding: kiriminaja-official/templates/woocommerce/cart/cart.php (deflated 80%)
adding: kiriminaja-official/templates/woocommerce/cart/cart-shipping.php (deflated 75%)
adding: kiriminaja-official/templates/woocommerce/cart/shipping-calculator.php (deflated 74%)
adding: kiriminaja-official/templates/woocommerce/cart/cart-totals.php (deflated 70%)
adding: kiriminaja-official/templates/_setup-guide.php (deflated 72%)
adding: kiriminaja-official/templates/request-pickup/ (stored 0%)
adding: kiriminaja-official/templates/request-pickup/index.php (deflated 72%)
adding: kiriminaja-official/templates/request-pickup/view/ (stored 0%)
adding: kiriminaja-official/templates/request-pickup/view/index.php (deflated 85%)
adding: kiriminaja-official/templates/request-pickup/view/modal-request-pickup.php (deflated 75%)
adding: kiriminaja-official/templates/request-pickup/view/modal-payment.php (deflated 39%)
adding: kiriminaja-official/templates/cache/ (stored 0%)
adding: kiriminaja-official/templates/cache/index.php (stored 0%)
adding: kiriminaja-official/templates/product/ (stored 0%)
adding: kiriminaja-official/templates/product/general-wc-tab-setting.php (deflated 78%)
adding: kiriminaja-official/templates/_header.php (deflated 59%)
adding: kiriminaja-official/templates/transaction-process/ (stored 0%)
adding: kiriminaja-official/templates/transaction-process/index.php (deflated 86%)
adding: kiriminaja-official/templates/transaction-process/view/ (stored 0%)
adding: kiriminaja-official/templates/transaction-process/view/_filters.php (deflated 74%)
adding: kiriminaja-official/templates/transaction-process/view/index.php (deflated 83%)
adding: kiriminaja-official/templates/request-pickup-detail/ (stored 0%)
adding: kiriminaja-official/templates/request-pickup-detail/index.php (deflated 55%)
adding: kiriminaja-official/templates/request-pickup-detail/view/ (stored 0%)
adding: kiriminaja-official/templates/request-pickup-detail/view/index.php (deflated 88%)
adding: kiriminaja-official/templates/setting/ (stored 0%)
adding: kiriminaja-official/templates/setting/index.php (deflated 62%)
adding: kiriminaja-official/templates/setting/setuped/ (stored 0%)
adding: kiriminaja-official/templates/setting/setuped/_section-js-shared.php (deflated 52%)
adding: kiriminaja-official/templates/setting/setuped/index.php (deflated 81%)
adding: kiriminaja-official/templates/setting/setuped/_section-css-shared.php (deflated 67%)
adding: kiriminaja-official/templates/setting/setuped/section-tracking.php (deflated 71%)
adding: kiriminaja-official/templates/setting/setuped/section-webhooks.php (deflated 56%)
adding: kiriminaja-official/templates/setting/setuped/section-technical.php (deflated 78%)
adding: kiriminaja-official/templates/setting/setuped/section-couriers.php (deflated 73%)
adding: kiriminaja-official/templates/setting/setuped/section-account.php (deflated 74%)
adding: kiriminaja-official/templates/setting/setuped/section-address.php (deflated 68%)
adding: kiriminaja-official/templates/setting/unsetuped/ (stored 0%)
adding: kiriminaja-official/templates/setting/unsetuped/index.php (deflated 75%)
adding: kiriminaja-official/templates/front/ (stored 0%)
adding: kiriminaja-official/templates/front/tracking.php (deflated 75%)
adding: kiriminaja-official/templates/front/form-shipping-address.php (deflated 68%)
adding: kiriminaja-official/templates/front/partials/ (stored 0%)
adding: kiriminaja-official/templates/front/partials/form-billing-address-config.php (deflated 63%)
adding: kiriminaja-official/templates/front/partials/form-billing-address-fields.php (deflated 61%)
adding: kiriminaja-official/templates/front/form-billing-address.php (deflated 58%)
adding: kiriminaja-official/readme.txt (deflated 65%)
adding: kiriminaja-official/assets/ (stored 0%)
adding: kiriminaja-official/assets/js/ (stored 0%)
adding: kiriminaja-official/assets/js/chunks/ (stored 0%)
adding: kiriminaja-official/assets/js/templates/ (stored 0%)
adding: kiriminaja-official/assets/js/templates/after-checkout.js (deflated 84%)
adding: kiriminaja-official/assets/js/kiriof-cod-adjustment.js (deflated 78%)
adding: kiriminaja-official/assets/admin/ (stored 0%)
adding: kiriminaja-official/assets/admin/css/ (stored 0%)
adding: kiriminaja-official/assets/admin/css/kj-admin-style.css (deflated 80%)
adding: kiriminaja-official/assets/admin/css/print.min.css (deflated 57%)
adding: kiriminaja-official/assets/admin/css/bootstrap-grid.css (deflated 90%)
adding: kiriminaja-official/assets/admin/css/kj-coupon-admin.css (deflated 74%)
adding: kiriminaja-official/assets/admin/js/ (stored 0%)
adding: kiriminaja-official/assets/admin/js/print.min.js (deflated 64%)
adding: kiriminaja-official/assets/admin/js/kj-admin-script.js (deflated 64%)
adding: kiriminaja-official/assets/admin/js/kj-coupon-admin.js (deflated 77%)
adding: kiriminaja-official/assets/wp/ (stored 0%)
adding: kiriminaja-official/assets/wp/css/ (stored 0%)
adding: kiriminaja-official/assets/wp/css/kj-tracking.css (deflated 61%)
adding: kiriminaja-official/assets/wp/css/kj-wp-style.css (deflated 77%)
adding: kiriminaja-official/assets/wp/js/ (stored 0%)
adding: kiriminaja-official/assets/wp/js/kj-tracking.js (deflated 75%)
adding: kiriminaja-official/assets/wp/js/kj-wp-script.js (deflated 55%)
adding: kiriminaja-official/assets/wp/js/kiriof-block-checkout.js (deflated 77%)
adding: kiriminaja-official/assets/wp/js/form-billing-address.js (deflated 84%)
adding: kiriminaja-official/assets/lib/ (stored 0%)
adding: kiriminaja-official/assets/lib/leaflet/ (stored 0%)
adding: kiriminaja-official/assets/lib/leaflet/leaflet.js (deflated 71%)
adding: kiriminaja-official/assets/lib/leaflet/images/ (stored 0%)
adding: kiriminaja-official/assets/lib/leaflet/images/marker-icon.png (stored 0%)
adding: kiriminaja-official/assets/lib/leaflet/images/marker-icon-2x.png (stored 0%)
adding: kiriminaja-official/assets/lib/leaflet/images/marker-shadow.png (stored 0%)
adding: kiriminaja-official/assets/lib/leaflet/leaflet.css (deflated 76%)
adding: kiriminaja-official/assets/lib/qr-code-styling/ (stored 0%)
adding: kiriminaja-official/assets/lib/qr-code-styling/qr-code-styling.min.js (deflated 71%)
adding: kiriminaja-official/assets/lib/pin-input/ (stored 0%)
adding: kiriminaja-official/assets/lib/pin-input/pin-input.js (deflated 71%)
adding: kiriminaja-official/vendor/ (stored 0%)
adding: kiriminaja-official/vendor/autoload.php (deflated 40%)
adding: kiriminaja-official/vendor/bin/ (stored 0%)
adding: kiriminaja-official/vendor/composer/ (stored 0%)
adding: kiriminaja-official/vendor/composer/autoload_namespaces.php (deflated 19%)
adding: kiriminaja-official/vendor/composer/LICENSE (deflated 41%)
adding: kiriminaja-official/vendor/composer/ClassLoader.php (deflated 79%)
adding: kiriminaja-official/vendor/composer/autoload_psr4.php (deflated 22%)
adding: kiriminaja-official/vendor/composer/autoload_classmap.php (deflated 86%)
adding: kiriminaja-official/vendor/composer/autoload_static.php (deflated 86%)
adding: kiriminaja-official/vendor/composer/autoload_real.php (deflated 64%)
adding: kiriminaja-official/vendor/composer/installed.json (deflated 33%)
adding: kiriminaja-official/vendor/composer/InstalledVersions.php (deflated 81%)
adding: kiriminaja-official/vendor/composer/installed.php (deflated 67%)
Archive created: kiriminaja-official.zip