Skip to content

Commit ddc16ed

Browse files
committed
✅ Migrate tests to new factory pattern
1 parent e9d8506 commit ddc16ed

5 files changed

Lines changed: 281 additions & 253 deletions

File tree

modules/ppcp-store-sync/src/CartValidation/ShippingValidator.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -377,12 +377,17 @@ private function get_country_name( string $country_code ): string {
377377
return $countries[ $country_code ] ?? $country_code;
378378
}
379379

380-
private function get_wc_countries(): ?WC_Countries {
380+
/**
381+
* @return \WC_Countries|null
382+
*/
383+
private function get_wc_countries() {
381384
if ( ! function_exists( 'WC' ) ) {
382385
return null;
383386
}
384387

385388
// The only place in the class that has a `WC()` dependency.
386-
return WC()->countries;
389+
$wc = WC();
390+
391+
return $wc ? $wc->countries : null;
387392
}
388393
}

tests/PHPUnit/StoreSync/CartValidation/CouponValidatorTest.php

Lines changed: 13 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@
44
namespace WooCommerce\PayPalCommerce\StoreSync\CartValidation;
55

66
use Mockery;
7-
use WooCommerce\PayPalCommerce\StoreSync\Enums\Priority;
87
use WooCommerce\PayPalCommerce\StoreSync\Helper\ProductManager;
98
use WooCommerce\PayPalCommerce\StoreSync\Schema\PayPalCart;
10-
use WooCommerce\PayPalCommerce\StoreSync\Schema\ResolutionOption;
11-
use WooCommerce\PayPalCommerce\StoreSync\Validation\CouponInvalid;
9+
use WooCommerce\PayPalCommerce\StoreSync\Validation\ValidationIssue;
1210
use WooCommerce\PayPalCommerce\StoreSync\CartValidation\CouponValidator\CouponValidator;
1311
use WooCommerce\PayPalCommerce\StoreSync\CartValidation\CouponValidator\CouponContextBuilder;
1412
use WooCommerce\PayPalCommerce\StoreSync\CartValidation\CouponValidator\DiscountCalculator;
@@ -114,63 +112,28 @@ public function test_validate_filters_only_apply_actions(): void
114112

115113
public function test_coupon_invalid_issue_has_correct_error_code(): void
116114
{
117-
$issue = new CouponInvalid(
118-
'Test message',
119-
'Test user message',
120-
'coupons[0]',
121-
''
122-
);
123-
124-
$data = $issue->to_array();
125-
126-
$this->assertSame('PRICING_ERROR', $data['code']);
127-
$this->assertSame('BUSINESS_RULE', $data['type']);
128-
}
129-
130-
public function test_coupon_invalid_issue_includes_context_and_resolution(): void
131-
{
132-
$context = array(
133-
'specific_issue' => 'COUPON_NOT_EXIST',
134-
'coupon_code' => 'INVALID',
135-
);
136-
137-
$resolution_options = array(
138-
ResolutionOption::apply_different_coupon( 'Try again', Priority::HIGH ),
139-
);
140-
141-
$issue = new CouponInvalid(
142-
'Coupon does not exist',
143-
'The coupon is not valid.',
144-
'coupons[0]',
145-
'',
146-
$context,
147-
$resolution_options
148-
);
115+
$issue = ValidationIssue::create_coupon_invalid( 'Test message' )
116+
->user_message( 'Test user message' )
117+
->for_field( 'coupons[0]' );
149118

150119
$data = $issue->to_array();
151120

152-
$this->assertArrayHasKey('context', $data);
153-
$this->assertArrayHasKey('resolution_options', $data);
154-
$this->assertSame('COUPON_NOT_EXIST', $data['context']['specific_issue']);
155-
$this->assertSame('APPLY_DIFFERENT_COUPON', $data['resolution_options'][0]['action']);
121+
$this->assertSame( 'PRICING_ERROR', $data['code'] );
122+
$this->assertSame( 'BUSINESS_RULE', $data['type'] );
156123
}
157124

158125
public function test_coupon_invalid_truncates_long_messages(): void
159126
{
160-
$long_message = str_repeat('a', 300);
161-
$long_user_message = str_repeat('b', 600);
162-
163-
$issue = new CouponInvalid(
164-
$long_message,
165-
$long_user_message,
166-
'coupons[0]',
167-
''
168-
);
127+
$long_message = str_repeat( 'a', 300 );
128+
$long_user_message = str_repeat( 'b', 600 );
129+
130+
$issue = ValidationIssue::create_coupon_invalid( $long_message )
131+
->user_message( $long_user_message );
169132

170133
$data = $issue->to_array();
171134

172-
$this->assertSame(255, strlen($data['message']));
173-
$this->assertSame(500, strlen($data['user_message']));
135+
$this->assertSame( 255, strlen( $data['message'] ) );
136+
$this->assertSame( 500, strlen( $data['user_message'] ) );
174137
}
175138

176139
/**

tests/PHPUnit/StoreSync/CartValidation/CurrencyValidatorTest.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
namespace WooCommerce\PayPalCommerce\StoreSync\CartValidation;
55

66
use WooCommerce\PayPalCommerce\StoreSync\Schema\PayPalCart;
7-
use WooCommerce\PayPalCommerce\StoreSync\Validation\CurrencyMismatch;
7+
use WooCommerce\PayPalCommerce\StoreSync\Validation\ValidationIssue;
88
use WooCommerce\PayPalCommerce\TestCase;
99

1010
use function Brain\Monkey\Functions\when;
@@ -51,7 +51,7 @@ public function test_validate_detects_mixed_currencies(): void {
5151

5252
$this->assertIsArray( $result );
5353
$this->assertCount( 1, $result );
54-
$this->assertInstanceOf( CurrencyMismatch::class, $result[0] );
54+
$this->assertInstanceOf( ValidationIssue::class, $result[0] );
5555

5656
$issue_data = $result[0]->to_array();
5757
$this->assertStringContainsString( 'Mixed currencies detected', $issue_data['message'] );
@@ -72,7 +72,7 @@ public function test_validate_detects_store_currency_mismatch(): void {
7272

7373
$this->assertIsArray( $result );
7474
$this->assertCount( 1, $result );
75-
$this->assertInstanceOf( CurrencyMismatch::class, $result[0] );
75+
$this->assertInstanceOf( ValidationIssue::class, $result[0] );
7676

7777
$issue_data = $result[0]->to_array();
7878
$this->assertStringContainsString( 'Cart currency EUR does not match store currency USD', $issue_data['message'] );
@@ -165,7 +165,7 @@ public function test_detects_mismatch_skipping_empty_items(): void {
165165

166166
$this->assertIsArray( $result );
167167
$this->assertCount( 1, $result );
168-
$this->assertInstanceOf( CurrencyMismatch::class, $result[0] );
168+
$this->assertInstanceOf( ValidationIssue::class, $result[0] );
169169

170170
$issue_data = $result[0]->to_array();
171171
$this->assertStringContainsString( 'Mixed currencies detected', $issue_data['message'] );
@@ -203,7 +203,7 @@ public function test_store_mismatch_points_to_correct_index(): void {
203203

204204
$this->assertIsArray( $result );
205205
$this->assertCount( 1, $result );
206-
$this->assertInstanceOf( CurrencyMismatch::class, $result[0] );
206+
$this->assertInstanceOf( ValidationIssue::class, $result[0] );
207207

208208
$issue_data = $result[0]->to_array();
209209
$this->assertStringContainsString( 'Cart currency EUR does not match store currency USD', $issue_data['message'] );
@@ -224,7 +224,7 @@ public function test_mixed_currency_prevents_store_check(): void {
224224

225225
$this->assertIsArray( $result );
226226
$this->assertCount( 1, $result );
227-
$this->assertInstanceOf( CurrencyMismatch::class, $result[0] );
227+
$this->assertInstanceOf( ValidationIssue::class, $result[0] );
228228

229229
$issue = $result[0]->to_array();
230230
$this->assertStringContainsString( 'Mixed currencies detected', $issue['message'] );

tests/PHPUnit/StoreSync/CartValidation/ShippingValidatorTest.php

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55

66
use WooCommerce\PayPalCommerce\StoreSync\Helper\ProductManager;
77
use WooCommerce\PayPalCommerce\StoreSync\Schema\PayPalCart;
8-
use WooCommerce\PayPalCommerce\StoreSync\Validation\InvalidAddress;
9-
use WooCommerce\PayPalCommerce\StoreSync\Validation\ShippingUnavailable;
8+
use WooCommerce\PayPalCommerce\StoreSync\Validation\ValidationIssue;
109
use WooCommerce\PayPalCommerce\TestCase;
1110

1211
use function Brain\Monkey\Functions\when;
@@ -65,7 +64,7 @@ public function test_validate_detects_disallowed_country(): void {
6564

6665
$this->assertIsArray( $result );
6766
$this->assertCount( 1, $result );
68-
$this->assertInstanceOf( ShippingUnavailable::class, $result[0] );
67+
$this->assertInstanceOf( ValidationIssue::class, $result[0] );
6968

7069
$issue_data = $result[0]->to_array();
7170
$this->assertStringContainsString( 'Shipping to FR is not available', $issue_data['message'] );
@@ -79,6 +78,9 @@ public function test_validate_returns_null_for_cart_without_shipping_address():
7978
array( 'US' => 'United States' )
8079
);
8180

81+
$this->product_manager->shouldReceive( 'find_product' )
82+
->andReturn( null );
83+
8284
$cart = PayPalCart::from_array(
8385
array(
8486
'items' => array(
@@ -134,7 +136,7 @@ public function test_validate_detects_missing_street_address(): void {
134136

135137
$this->assertIsArray( $result );
136138
$this->assertCount( 1, $result );
137-
$this->assertInstanceOf( InvalidAddress::class, $result[0] );
139+
$this->assertInstanceOf( ValidationIssue::class, $result[0] );
138140

139141
$issue_data = $result[0]->to_array();
140142
$this->assertStringContainsString( 'missing street address', $issue_data['message'] );
@@ -159,7 +161,7 @@ public function test_validate_detects_missing_city(): void {
159161

160162
$this->assertIsArray( $result );
161163
$this->assertCount( 1, $result );
162-
$this->assertInstanceOf( InvalidAddress::class, $result[0] );
164+
$this->assertInstanceOf( ValidationIssue::class, $result[0] );
163165

164166
$issue_data = $result[0]->to_array();
165167
$this->assertStringContainsString( 'missing city', $issue_data['message'] );
@@ -184,7 +186,7 @@ public function test_validate_detects_missing_postal_code(): void {
184186

185187
$this->assertIsArray( $result );
186188
$this->assertCount( 1, $result );
187-
$this->assertInstanceOf( InvalidAddress::class, $result[0] );
189+
$this->assertInstanceOf( ValidationIssue::class, $result[0] );
188190

189191
$issue_data = $result[0]->to_array();
190192
$this->assertStringContainsString( 'missing postal code', $issue_data['message'] );
@@ -207,9 +209,9 @@ public function test_validate_detects_multiple_missing_fields(): void {
207209

208210
$this->assertIsArray( $result );
209211
$this->assertCount( 3, $result );
210-
$this->assertInstanceOf( InvalidAddress::class, $result[0] );
211-
$this->assertInstanceOf( InvalidAddress::class, $result[1] );
212-
$this->assertInstanceOf( InvalidAddress::class, $result[2] );
212+
$this->assertInstanceOf( ValidationIssue::class, $result[0] );
213+
$this->assertInstanceOf( ValidationIssue::class, $result[1] );
214+
$this->assertInstanceOf( ValidationIssue::class, $result[2] );
213215
}
214216

215217
// Scenario 2: PO Box Restriction Tests
@@ -241,20 +243,22 @@ public function test_validate_detects_po_box_with_signature_required_items(): vo
241243

242244
$this->assertIsArray( $result );
243245
$this->assertCount( 1, $result );
244-
$this->assertInstanceOf( ShippingUnavailable::class, $result[0] );
246+
$this->assertInstanceOf( ValidationIssue::class, $result[0] );
245247

246248
$issue_data = $result[0]->to_array();
247249
$this->assertStringContainsString( 'PO Box delivery not available', $issue_data['message'] );
248250
$this->assertStringContainsString( 'signature confirmation', $issue_data['user_message'] );
249251
$this->assertSame( 'shipping_address', $issue_data['field'] );
250252

251-
// Verify context
253+
// Verify context (context is a list of IssueContext::to_array() results)
252254
$this->assertArrayHasKey( 'context', $issue_data );
253-
$this->assertArrayHasKey( 'restricted_items', $issue_data['context'] );
254-
$this->assertArrayHasKey( 'restriction_reason', $issue_data['context'] );
255-
$this->assertArrayHasKey( 'po_box_detected', $issue_data['context'] );
256-
$this->assertSame( 'signature_required', $issue_data['context']['restriction_reason'] );
257-
$this->assertTrue( $issue_data['context']['po_box_detected'] );
255+
$this->assertCount( 1, $issue_data['context'] );
256+
$context = $issue_data['context'][0];
257+
$this->assertArrayHasKey( 'restricted_items', $context );
258+
$this->assertArrayHasKey( 'restriction_reason', $context );
259+
$this->assertArrayHasKey( 'po_box_detected', $context );
260+
$this->assertSame( 'signature_required', $context['restriction_reason'] );
261+
$this->assertTrue( $context['po_box_detected'] );
258262

259263
// Verify resolution_options
260264
$this->assertArrayHasKey( 'resolution_options', $issue_data );
@@ -340,7 +344,7 @@ public function test_validate_detects_po_box_with_dots_and_spaces(): void {
340344

341345
$this->assertIsArray( $result );
342346
$this->assertCount( 1, $result );
343-
$this->assertInstanceOf( ShippingUnavailable::class, $result[0] );
347+
$this->assertInstanceOf( ValidationIssue::class, $result[0] );
344348
}
345349

346350
public function test_validate_handles_product_not_found_for_signature_check(): void {

0 commit comments

Comments
 (0)