Merge pull request #31338 from woocommerce/fix/28166-coupon-item-meta-data
Consistently Store Coupon Data in Order Item Meta
This commit is contained in:
commit
edcffa9912
|
@ -35,7 +35,9 @@ describe('Coupons API tests', () => {
|
|||
|
||||
it( 'can retrieve a coupon', async () => {
|
||||
const response = await couponsApi.retrieve.coupon( couponId );
|
||||
expect(response.statusCode).toEqual(couponsApi.retrieve.responseCode);
|
||||
expect( response.statusCode ).toEqual(
|
||||
couponsApi.retrieve.responseCode
|
||||
);
|
||||
expect( response.body.id ).toEqual( couponId );
|
||||
} );
|
||||
|
||||
|
@ -223,7 +225,9 @@ describe('Coupons API tests', () => {
|
|||
const actualCouponIdsList = listedCoupons.map( ( { id } ) => id );
|
||||
const expectedCouponIdsList = allCoupons.map( ( { id } ) => id );
|
||||
|
||||
expect(response.status).toEqual(couponsApi.listAll.responseCode);
|
||||
expect( response.status ).toEqual(
|
||||
couponsApi.listAll.responseCode
|
||||
);
|
||||
expect( actualCouponIdsList ).toEqual(
|
||||
expect.arrayContaining( expectedCouponIdsList )
|
||||
);
|
||||
|
@ -232,7 +236,9 @@ describe('Coupons API tests', () => {
|
|||
it( 'can limit result set to matching code', async () => {
|
||||
const matchingCoupon = allCoupons[ 1 ];
|
||||
const payload = { code: matchingCoupon.code };
|
||||
const { status, body } = await couponsApi.listAll.coupons(payload);
|
||||
const { status, body } = await couponsApi.listAll.coupons(
|
||||
payload
|
||||
);
|
||||
|
||||
expect( status ).toEqual( couponsApi.listAll.responseCode );
|
||||
expect( body ).toHaveLength( 1 );
|
||||
|
@ -245,7 +251,9 @@ describe('Coupons API tests', () => {
|
|||
page: 1,
|
||||
per_page: pageSize,
|
||||
};
|
||||
const { status, body } = await couponsApi.listAll.coupons(payload);
|
||||
const { status, body } = await couponsApi.listAll.coupons(
|
||||
payload
|
||||
);
|
||||
|
||||
expect( status ).toEqual( couponsApi.listAll.responseCode );
|
||||
expect( body ).toHaveLength( pageSize );
|
||||
|
@ -259,7 +267,9 @@ describe('Coupons API tests', () => {
|
|||
search: matchingString,
|
||||
};
|
||||
|
||||
const { status, body } = await couponsApi.listAll.coupons(payload);
|
||||
const { status, body } = await couponsApi.listAll.coupons(
|
||||
payload
|
||||
);
|
||||
|
||||
expect( status ).toEqual( couponsApi.listAll.responseCode );
|
||||
expect( body ).toHaveLength( 1 );
|
||||
|
@ -302,6 +312,18 @@ describe('Coupons API tests', () => {
|
|||
expect( status ).toEqual( ordersApi.create.responseCode );
|
||||
expect( body.coupon_lines ).toHaveLength( 1 );
|
||||
expect( body.coupon_lines[ 0 ].code ).toEqual( testCoupon.code );
|
||||
// Test that the coupon meta data exists.
|
||||
// See: https://github.com/woocommerce/woocommerce/issues/28166.
|
||||
expect( body.coupon_lines[ 0 ].meta_data ).toEqual(
|
||||
expect.arrayContaining( [
|
||||
expect.objectContaining( {
|
||||
key: 'coupon_data',
|
||||
value: expect.objectContaining( {
|
||||
code: testCoupon.code,
|
||||
} ),
|
||||
} ),
|
||||
] )
|
||||
);
|
||||
} );
|
||||
} );
|
||||
} );
|
|
@ -1323,6 +1323,16 @@ abstract class WC_Abstract_Order extends WC_Abstract_Legacy_Order {
|
|||
if ( ! $item_id ) {
|
||||
$coupon_item = new WC_Order_Item_Coupon();
|
||||
$coupon_item->set_code( $coupon_code );
|
||||
|
||||
// Add coupon data.
|
||||
$coupon_id = wc_get_coupon_id_by_code( $coupon_code );
|
||||
$coupon = new WC_Coupon( $coupon_id );
|
||||
|
||||
// Avoid storing used_by - it's not needed and can get large.
|
||||
$coupon_data = $coupon->get_data();
|
||||
unset( $coupon_data['used_by'] );
|
||||
|
||||
$coupon_item->add_meta_data( 'coupon_data', $coupon_data );
|
||||
} else {
|
||||
$coupon_item = $this->get_item( $item_id, false );
|
||||
}
|
||||
|
|
|
@ -246,4 +246,27 @@ class WC_Abstract_Order_Test extends WC_Unit_Test_Case {
|
|||
$this->assertEquals( 0, ( new WC_Coupon( $coupon_code_2 ) )->get_usage_count() );
|
||||
$this->assertEquals( 0, ( new WC_Coupon( $coupon_code_3 ) )->get_usage_count() );
|
||||
}
|
||||
|
||||
/**
|
||||
* Test apply_coupon() stores coupon meta data.
|
||||
* See: https://github.com/woocommerce/woocommerce/issues/28166.
|
||||
*/
|
||||
public function test_apply_coupon_stores_meta_data() {
|
||||
$coupon_code = 'coupon_test_meta_data';
|
||||
$coupon = WC_Helper_Coupon::create_coupon( $coupon_code );
|
||||
$order = WC_Helper_Order::create_order();
|
||||
$order->set_status( 'processing' );
|
||||
$order->save();
|
||||
$order->apply_coupon( $coupon_code );
|
||||
|
||||
$coupon_items = $order->get_items( 'coupon' );
|
||||
$this->assertCount( 1, $coupon_items );
|
||||
|
||||
$coupon_data = ( current( $coupon_items ) )->get_meta( 'coupon_data' );
|
||||
$this->assertNotEmpty( $coupon_data, 'WC_Order_Item_Coupon missing `coupon_data` meta.' );
|
||||
$this->assertArrayHasKey( 'id', $coupon_data );
|
||||
$this->assertArrayHasKey( 'code', $coupon_data );
|
||||
$this->assertEquals( $coupon->get_id(), $coupon_data['id'] );
|
||||
$this->assertEquals( $coupon_code, $coupon_data['code'] );
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue