Commit 5419d4f
committed
Fix - Scope nexus address validation to the fields the value object reads.
Addresses review feedback on the TaxJar request seam.
Two regressions, both introduced by validating the nexus address through the
shared address schema.
The origin state is now required for the US only. Address::validate() defaults to
requiring country and state and errors on present-but-blank, where the loop it
replaced only errored when the key was absent. The nexus address this plugin
builds for the merchant's own store always carries a 'state' key, and
WC()->countries->get_base_state() is '' for 19 of the 31 countries in
get_supported_countries() -- GB, FR, NL, BE, DK, SE, PL, PT and the rest of the
stateless EU. Every tax calculation for those merchants therefore dropped the
store's own nexus block from the request and wrote a forced error log plus a
persistent admin error notice.
The US-only boundary is measured, not assumed. Probed against the live TaxJar
API (scripts under .issues/WOOTAX-313/work/): GB, FR, NL, DK, DE, ES, IT, IE, CA
and AU all return an identical rate whether the nexus carries its state or an
empty string, because VAT and GST are rated from the destination. A US nexus with
a blank state returns HTTP 200 with has_nexus:false and zero tax -- it fails
silently, so the check has to stay there. Keying the requirement off whether
WooCommerce models states for the country would have kept wrongly rejecting DE,
ES, IT, IE, GR, HU, HR, RO, BG, CA and AU, which matters because TaxJar supports
those markets for legacy accounts even though it documents US/CA only.
The non-scalar guard no longer inspects unknown keys. It iterated every key of
the filter-supplied address, so a custom key holding an array rejected the whole
nexus address -- silently changing which nexus TaxJar was asked about, and
logging "field must be a string" for a field that is never cast to string. Only
the six fields the value object actually reads are checked; everything else is
merged back untouched, which is what the documented array-in / array-out
contract promises.
Adds eleven tests. Nine non-US store countries and the unknown-key case fail
before this change; the US blank-state case bounds the relaxation and passes
either way.1 parent 5ef947d commit 5419d4f
2 files changed
Lines changed: 186 additions & 3 deletions
File tree
- classes
- tests/php
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1444 | 1444 | | |
1445 | 1445 | | |
1446 | 1446 | | |
| 1447 | + | |
| 1448 | + | |
| 1449 | + | |
| 1450 | + | |
| 1451 | + | |
| 1452 | + | |
| 1453 | + | |
| 1454 | + | |
1447 | 1455 | | |
1448 | 1456 | | |
1449 | 1457 | | |
| |||
1463 | 1471 | | |
1464 | 1472 | | |
1465 | 1473 | | |
1466 | | - | |
| 1474 | + | |
1467 | 1475 | | |
1468 | | - | |
| 1476 | + | |
| 1477 | + | |
| 1478 | + | |
| 1479 | + | |
| 1480 | + | |
| 1481 | + | |
| 1482 | + | |
| 1483 | + | |
| 1484 | + | |
| 1485 | + | |
| 1486 | + | |
| 1487 | + | |
1469 | 1488 | | |
1470 | 1489 | | |
1471 | 1490 | | |
1472 | 1491 | | |
1473 | 1492 | | |
1474 | 1493 | | |
1475 | 1494 | | |
1476 | | - | |
| 1495 | + | |
| 1496 | + | |
| 1497 | + | |
| 1498 | + | |
| 1499 | + | |
| 1500 | + | |
| 1501 | + | |
| 1502 | + | |
| 1503 | + | |
| 1504 | + | |
| 1505 | + | |
| 1506 | + | |
| 1507 | + | |
| 1508 | + | |
| 1509 | + | |
| 1510 | + | |
| 1511 | + | |
| 1512 | + | |
| 1513 | + | |
| 1514 | + | |
| 1515 | + | |
| 1516 | + | |
| 1517 | + | |
| 1518 | + | |
| 1519 | + | |
1477 | 1520 | | |
1478 | 1521 | | |
1479 | 1522 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2548 | 2548 | | |
2549 | 2549 | | |
2550 | 2550 | | |
| 2551 | + | |
| 2552 | + | |
| 2553 | + | |
| 2554 | + | |
| 2555 | + | |
| 2556 | + | |
| 2557 | + | |
| 2558 | + | |
| 2559 | + | |
| 2560 | + | |
| 2561 | + | |
| 2562 | + | |
| 2563 | + | |
| 2564 | + | |
| 2565 | + | |
| 2566 | + | |
| 2567 | + | |
| 2568 | + | |
| 2569 | + | |
| 2570 | + | |
| 2571 | + | |
| 2572 | + | |
| 2573 | + | |
| 2574 | + | |
| 2575 | + | |
| 2576 | + | |
| 2577 | + | |
| 2578 | + | |
| 2579 | + | |
| 2580 | + | |
| 2581 | + | |
| 2582 | + | |
| 2583 | + | |
| 2584 | + | |
| 2585 | + | |
| 2586 | + | |
| 2587 | + | |
| 2588 | + | |
| 2589 | + | |
| 2590 | + | |
| 2591 | + | |
| 2592 | + | |
| 2593 | + | |
| 2594 | + | |
| 2595 | + | |
| 2596 | + | |
| 2597 | + | |
| 2598 | + | |
| 2599 | + | |
| 2600 | + | |
| 2601 | + | |
| 2602 | + | |
| 2603 | + | |
| 2604 | + | |
| 2605 | + | |
| 2606 | + | |
| 2607 | + | |
| 2608 | + | |
| 2609 | + | |
| 2610 | + | |
| 2611 | + | |
| 2612 | + | |
| 2613 | + | |
| 2614 | + | |
| 2615 | + | |
| 2616 | + | |
| 2617 | + | |
| 2618 | + | |
| 2619 | + | |
| 2620 | + | |
| 2621 | + | |
| 2622 | + | |
| 2623 | + | |
| 2624 | + | |
| 2625 | + | |
| 2626 | + | |
| 2627 | + | |
| 2628 | + | |
| 2629 | + | |
| 2630 | + | |
| 2631 | + | |
| 2632 | + | |
| 2633 | + | |
| 2634 | + | |
| 2635 | + | |
| 2636 | + | |
| 2637 | + | |
| 2638 | + | |
| 2639 | + | |
| 2640 | + | |
| 2641 | + | |
| 2642 | + | |
| 2643 | + | |
| 2644 | + | |
| 2645 | + | |
| 2646 | + | |
| 2647 | + | |
| 2648 | + | |
| 2649 | + | |
| 2650 | + | |
| 2651 | + | |
| 2652 | + | |
| 2653 | + | |
| 2654 | + | |
| 2655 | + | |
| 2656 | + | |
| 2657 | + | |
| 2658 | + | |
| 2659 | + | |
| 2660 | + | |
| 2661 | + | |
| 2662 | + | |
| 2663 | + | |
| 2664 | + | |
| 2665 | + | |
| 2666 | + | |
| 2667 | + | |
| 2668 | + | |
| 2669 | + | |
| 2670 | + | |
| 2671 | + | |
| 2672 | + | |
| 2673 | + | |
| 2674 | + | |
| 2675 | + | |
| 2676 | + | |
| 2677 | + | |
| 2678 | + | |
| 2679 | + | |
| 2680 | + | |
| 2681 | + | |
| 2682 | + | |
| 2683 | + | |
| 2684 | + | |
| 2685 | + | |
| 2686 | + | |
| 2687 | + | |
| 2688 | + | |
| 2689 | + | |
| 2690 | + | |
2551 | 2691 | | |
0 commit comments