← back to Shopify Sample Shipping

verify-5x.mjs

27 lines

import {query} from './query.mjs';
const S=['gid://shopify/ProductVariant/44090076954675','gid://shopify/ProductVariant/44086096756787','gid://shopify/ProductVariant/44044973408307'];
const ROLL='gid://shopify/ProductVariant/40348093055027'; // $168 4lb roll
const qq=`query($items:[DraftOrderLineItemInput!]!){draftOrderAvailableDeliveryOptions(input:{lineItems:$items,shippingAddress:{address1:"15442 Ventura Blvd",city:"Sherman Oaks",provinceCode:"CA",countryCode:US,zip:"91403"}}){availableShippingRates{title price{amount currencyCode}}}}`;
const rates=async items=>(await query(qq,{items})).draftOrderAvailableDeliveryOptions.availableShippingRates;
const hasFree=r=>r.some(x=>parseFloat(x.price.amount)===0);
const hasTitle=(r,t)=>r.some(x=>x.title.includes(t));
const spread=(n)=>{const it=[];let l=n;for(let i=0;i<S.length;i++){const q=Math.ceil(l/(S.length-i));if(q>0)it.push({variantId:S[i],quantity:q});l-=q;}return it;};

// live profile state
const prof=(await query(`{deliveryProfile(id:"gid://shopify/DeliveryProfile/29033627699"){profileLocationGroups{locationGroupZones(first:20){nodes{zone{name}methodDefinitions(first:30){nodes{name rateProvider{__typename ... on DeliveryRateDefinition{price{amount}}} methodConditions{operator conditionCriteria{__typename ... on MoneyV2{amount}}}}}}}}}}`)).deliveryProfile;
let freeBand=null, hasPriority=false;
for(const g of prof.profileLocationGroups)for(const z of g.locationGroupZones.nodes){if(z.zone.name!=='Domestic')continue;for(const m of z.methodDefinitions.nodes){if(m.name==='Free Shipping (No Tracking)'){const c=m.methodConditions.filter(x=>x.conditionCriteria?.__typename==='MoneyV2').map(x=>x.conditionCriteria.amount);freeBand=`$${m.rateProvider?.price?.amount} [${c.join('-')}]`;}if(m.name==='Priority Sample Only')hasPriority=true;}}

const r6=await rates(spread(6)), r17=await rates([{variantId:S[0],quantity:2},{variantId:S[1],quantity:1},{variantId:S[2],quantity:1}]), r8=await rates(spread(8)), rRoll=await rates([{variantId:ROLL,quantity:1}]);
const checks=[
  ['INV1 samples free (6 samples $25.50)', hasFree(r6)===true],
  ['INV2 redundant $24.95 gone (profile + $17 cart)', hasPriority===false && hasTitle(r17,'Priority Sample Only')===false],
  ['INV3 >$30 roll NOT free ($168 roll)', hasFree(rRoll)===false],
  ['INV4 free band intact ($0, $0-30)', freeBand==='$0.0 [0.0-30.0]'],
  ['INV5 accepted cliff: 8 samples NOT free (expected)', hasFree(r8)===false],
];
let fails=0; for(const [n,ok] of checks){ if(!ok)fails++; console.log(`${ok?'PASS':'FAIL'}  ${n}`); }
console.log(`\nfreeBand=${freeBand} priorityStillPresent=${hasPriority}`);
console.log(`RESULT: ${fails===0?'CLEAN':fails+' DEFECT(S)'}`);
process.exitCode=fails===0?0:1;