JezK
Edit File: checkout-place-order-api.min.js
describe("createCheckoutPlaceOrderApi",()=>{let e,t,s,n,a;beforeEach(()=>{n=null;let o=0;a=(e=>{o=e});let l=!1;const i=new Set,r=new Set;s={addClass:jest.fn(e=>(e.split(" ").forEach(e=>r.add("terms-row")),e.split(" ").forEach(e=>i.add(e)),s)),removeClass:jest.fn(e=>(e.split(" ").forEach(e=>i["delete"](e)),e.includes("woocommerce-invalid")&&r["delete"]("terms-row"),s)),hasClass:jest.fn(e=>i.has(e)),length:1,offset:jest.fn(()=>({top:100}))},(t={length:1,is:jest.fn(e=>":checked"===e&&l),closest:jest.fn(()=>s),trigger:jest.fn()}).setChecked=(e=>{l=e}),(e={length:1,find:jest.fn(e=>{if('input[name="terms"]:visible'===e)return t;if(".input-text, select, input:checkbox"===e)return{trigger:jest.fn()};if(".woocommerce-invalid:visible"===e)return{length:r.size,first:jest.fn(()=>({length:r.size>0?1:0,offset:jest.fn(()=>({top:100}))}))};if(".woocommerce-invalid"===e){const e=r.size+o;return{length:e,first:jest.fn(()=>({length:e>0?1:0,offset:jest.fn(()=>({top:100}))}))}}return".validate-required:visible"===e?{each:jest.fn()}:'input[name="payment_method"]:checked'===e?{val:jest.fn(()=>"test-gateway")}:{length:0,trigger:jest.fn()}}),trigger:jest.fn()}).on=jest.fn(()=>e),e.attr=jest.fn(()=>e);const f=()=>{const e={length:0,on:jest.fn(()=>e),off:jest.fn(()=>e),attr:jest.fn(()=>e),find:jest.fn(()=>f()),first:jest.fn(()=>f()),filter:jest.fn(()=>f()),eq:jest.fn(()=>f()),trigger:jest.fn(()=>e),val:jest.fn(),prop:jest.fn(()=>e),each:jest.fn(()=>e),data:jest.fn(),serialize:jest.fn(()=>""),addClass:jest.fn(()=>e),removeClass:jest.fn(()=>e),hasClass:jest.fn(()=>!1),is:jest.fn(()=>!1),get:jest.fn(()=>[]),text:jest.fn(()=>""),html:jest.fn(()=>""),closest:jest.fn(()=>f()),parent:jest.fn(()=>f()),parents:jest.fn(()=>f()),siblings:jest.fn(()=>f()),children:jest.fn(()=>f()),append:jest.fn(()=>e),prepend:jest.fn(()=>e),remove:jest.fn(()=>e),empty:jest.fn(()=>e),show:jest.fn(()=>e),hide:jest.fn(()=>e),css:jest.fn(()=>e),slideUp:jest.fn(()=>e),slideDown:jest.fn(()=>e),fadeIn:jest.fn(()=>e),fadeOut:jest.fn(()=>e),offset:jest.fn(()=>({top:0,left:0})),width:jest.fn(()=>0),height:jest.fn(()=>0),outerWidth:jest.fn(()=>0),outerHeight:jest.fn(()=>0),scrollTop:jest.fn(()=>0),focus:jest.fn(()=>e),blur:jest.fn(()=>e),block:jest.fn(()=>e),unblock:jest.fn(()=>e)};return e},c={},d={on:jest.fn((e,t)=>(c[e]||(c[e]=[]),c[e].push(t),d)),trigger:jest.fn((e,t)=>{return(c[e]||[]).forEach(e=>e({},...t||[])),d}),hasClass:jest.fn(()=>!1)},h=jest.fn(t=>"function"==typeof t?(t(h),h):"form.checkout"===t?e:"#order_review"===t?{length:0,on:jest.fn(),attr:jest.fn(),find:jest.fn(()=>({length:0,val:jest.fn()}))}:"html, body"===t?{animate:jest.fn()}:t===document.body?d:f());h.blockUI={defaults:{overlayCSS:{}}},global.window.jQuery=h,global.window.$=h,global.jQuery=h,global.$=h,global.window.wc_checkout_params={gateways_with_custom_place_order_button:["test-gateway"]},global.window.wc={customPlaceOrderButton:{__getForm:jest.fn(()=>e),__maybeShow:jest.fn((e,t)=>{n=t}),__maybeHideDefaultButtonOnInit:jest.fn(),__cleanup:jest.fn()}},jest.resetModules(),require("../checkout"),d.trigger("wc_custom_place_order_button_registered",["test-gateway"])}),afterEach(()=>{jest.clearAllMocks()}),describe("Terms checkbox validation",()=>{test("should return hasError: true when terms checkbox is not checked",async()=>{t.setChecked(!1);const e=await n.validate();expect(e.hasError).toBe(!0),expect(s.addClass).toHaveBeenCalledWith("woocommerce-invalid")}),test("should return hasError: false when terms checkbox is checked",async()=>{t.setChecked(!0);const e=await n.validate();expect(e.hasError).toBe(!1)}),test("should clear stale invalid state before re-validating terms",async()=>{t.setChecked(!1),await n.validate(),expect(s.addClass).toHaveBeenCalledWith("woocommerce-invalid"),s.removeClass.mockClear(),s.addClass.mockClear(),t.setChecked(!0);const e=await n.validate();expect(s.removeClass).toHaveBeenCalledWith("woocommerce-invalid"),expect(s.addClass).not.toHaveBeenCalledWith("woocommerce-invalid"),expect(e.hasError).toBe(!1)}),test("should allow submission after checking terms following a failed validation",async()=>{t.setChecked(!1);const e=await n.validate();expect(e.hasError).toBe(!0),t.setChecked(!0);const s=await n.validate();expect(s.hasError).toBe(!1)})}),describe("Hidden field validation",()=>{test("should ignore invalid fields that are hidden (e.g. collapsed shipping address)",async()=>{t.setChecked(!0),a(5);const e=await n.validate();expect(e.hasError).toBe(!1)}),test("should only count visible invalid fields",async()=>{t.setChecked(!0),a(5),await n.validate(),expect(e.find).toHaveBeenCalledWith(".woocommerce-invalid:visible"),expect(e.find).not.toHaveBeenCalledWith(".woocommerce-invalid")})})});