← back to Shopify Sample Shipping
order-info-designer.mjs
48 lines
// TK-11333: one LIVE test order for info@designerwallcoverings.com, customer tagged interior_designer.
// 3 samples ($12.75) -> within the free band -> should complete with $0 shipping. Unpaid. Reversible via cancel-test-order.mjs.
import {query} from './query.mjs';
import fs from 'node:fs';
const S=['gid://shopify/ProductVariant/44090076954675','gid://shopify/ProductVariant/44086096756787','gid://shopify/ProductVariant/44044973408307'];
const lineItems=[{variantId:S[0],quantity:1},{variantId:S[1],quantity:1},{variantId:S[2],quantity:1}]; // 3 samples = $12.75
const addr={address1:'15442 Ventura Blvd',city:'Sherman Oaks',provinceCode:'CA',countryCode:'US',zip:'91403',firstName:'Interior',lastName:'Designer'};
// 1) Confirm the free rate is offered for this cart
const rq=`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=(await query(rq,{items:lineItems})).draftOrderAvailableDeliveryOptions.availableShippingRates;
const freeRate=rates.find(x=>parseFloat(x.price.amount)===0);
console.log('rates offered:',rates.map(r=>r.title+' $'+r.price.amount).join(' | '));
if(!freeRate){console.log('ABORT: no free rate offered for 3 samples — unexpected, not creating an order.');process.exit(1);}
// 2) Create the draft with the free shipping line
const input={
email:'info@designerwallcoverings.com',
tags:['TK-11333-TEST','interior-designer-test'],
note:'Interior designer test order — 3 samples ($12.75), within free band; all samples should ship free (Free Shipping / No Tracking). Unpaid test, ships to DW office.',
shippingAddress:addr,
lineItems,
shippingLine:{title:freeRate.title,price:'0.00'}
};
const c=`mutation($input:DraftOrderInput!){draftOrderCreate(input:$input){draftOrder{id name subtotalPrice totalShippingPrice totalPrice} userErrors{field message}}}`;
const cr=await query(c,{input});
if(cr.draftOrderCreate.userErrors.length){console.log('CREATE ERR',JSON.stringify(cr.draftOrderCreate.userErrors));process.exit(1);}
const d=cr.draftOrderCreate.draftOrder;
console.log('\n=== DRAFT ===',d.name,'| subtotal $'+d.subtotalPrice,'| shipping $'+d.totalShippingPrice,'| total $'+d.totalPrice);
// 3) Complete unpaid
const cm=`mutation($id:ID!){draftOrderComplete(id:$id,paymentPending:true){draftOrder{order{id name displayFinancialStatus customer{id email tags} totalShippingPriceSet{shopMoney{amount}} totalPriceSet{shopMoney{amount}} shippingLine{title price}}} userErrors{field message}}}`;
const cmr=await query(cm,{id:d.id});
if(cmr.draftOrderComplete.userErrors.length){console.log('COMPLETE ERR',JSON.stringify(cmr.draftOrderComplete.userErrors));process.exit(1);}
const o=cmr.draftOrderComplete.draftOrder.order;
console.log('\n=== ORDER (unpaid) ===',o.name,'|',o.displayFinancialStatus,'| shipping $'+o.totalShippingPriceSet.shopMoney.amount,'| total $'+o.totalPriceSet.shopMoney.amount,'| ship:',o.shippingLine?.title,'$'+o.shippingLine?.price);
// 4) Tag the customer interior_designer
const cust=o.customer?.id;
if(cust){
const t=`mutation($id:ID!,$tags:[String!]!){tagsAdd(id:$id,tags:$tags){node{id} userErrors{field message}}}`;
const tr=await query(t,{id:cust,tags:['interior_designer']});
console.log('customer:',o.customer.email,'| tagged interior_designer:',JSON.stringify(tr.tagsAdd?.userErrors?.length?tr.tagsAdd.userErrors:'ok'));
}else{console.log('WARN: no customer id returned; tag not applied');}
console.log('\norder id (for teardown):',o.id);
fs.writeFileSync(new URL('./verification/order-info-designer-result.json',import.meta.url),JSON.stringify({rates,draft:d,order:o,createdAt:new Date().toISOString()},null,2)+'\n');