We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kuro-tomo/shopify-agentic-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
import { describe, it, expect } from 'vitest';
import { manageCart } from '../../src/tools/manage-cart.js';
// ─── create ───
describe('manageCart — create', () => {
it('returns an empty cart with an id', async () => {
const result = await manageCart({ action: 'create' });
expect(result.cart_id).toBeDefined();
expect(typeof result.cart_id).toBe('string');
expect(result.line_items).toHaveLength(0);
expect(result.item_count).toBe(0);
expect(result.totals.subtotal).toBe(0);
expect(result.totals.total).toBe(0);
});
});
// ─── add ───
describe('manageCart — add', () => {
it('adds an item to the cart with totals calculated', async () => {
const cart = await manageCart({ action: 'create' });
const result = await manageCart({
action: 'add',
cart_id: cart.cart_id,
variant_id: 'var-100',
quantity: 2,
});
expect(result.line_items).toHaveLength(1);
expect(result.line_items[0]!.variant_id).toBe('var-100');
expect(result.line_items[0]!.quantity).toBe(2);
expect(result.item_count).toBe(2);
});
it('throws when variant_id is missing', async () => {
const cart = await manageCart({ action: 'create' });
await expect(
manageCart({ action: 'add', cart_id: cart.cart_id, quantity: 1 }),
).rejects.toThrow('variant_id is required');
});
it('throws when quantity is missing', async () => {
const cart = await manageCart({ action: 'create' });
await expect(
manageCart({ action: 'add', cart_id: cart.cart_id, variant_id: 'var-100' }),
).rejects.toThrow('quantity is required');
});
it('throws when cart does not exist', async () => {
await expect(
manageCart({ action: 'add', cart_id: 'nonexistent', variant_id: 'v', quantity: 1 }),
).rejects.toThrow('Cart not found');
});
});
// ─── add duplicate (merge) ───
describe('manageCart — add duplicate', () => {
it('merges quantities when adding the same variant_id twice', async () => {
const cart = await manageCart({ action: 'create' });
await manageCart({
action: 'add',
cart_id: cart.cart_id,
variant_id: 'var-200',
quantity: 3,
});
const result = await manageCart({
action: 'add',
cart_id: cart.cart_id,
variant_id: 'var-200',
quantity: 2,
});
expect(result.line_items).toHaveLength(1);
expect(result.line_items[0]!.quantity).toBe(5); // 3 + 2
expect(result.item_count).toBe(5);
});
});
// ─── remove ───
describe('manageCart — remove', () => {
it('removes an item and recalculates totals', async () => {
const cart = await manageCart({ action: 'create' });
await manageCart({
action: 'add',
cart_id: cart.cart_id,
variant_id: 'var-300',
quantity: 1,
});
await manageCart({
action: 'add',
cart_id: cart.cart_id,
variant_id: 'var-301',
quantity: 2,
});
const result = await manageCart({
action: 'remove',
cart_id: cart.cart_id,
variant_id: 'var-300',
});
expect(result.line_items).toHaveLength(1);
expect(result.line_items[0]!.variant_id).toBe('var-301');
expect(result.item_count).toBe(2);
});
it('throws when removing a variant not in the cart', async () => {
const cart = await manageCart({ action: 'create' });
await manageCart({
action: 'add',
cart_id: cart.cart_id,
variant_id: 'var-400',
quantity: 1,
});
await expect(
manageCart({
action: 'remove',
cart_id: cart.cart_id,
variant_id: 'var-not-there',
}),
).rejects.toThrow('not found in cart');
});
it('throws when variant_id is missing', async () => {
const cart = await manageCart({ action: 'create' });
await expect(
manageCart({ action: 'remove', cart_id: cart.cart_id }),
).rejects.toThrow('variant_id is required');
});
});
// ─── get ───
describe('manageCart — get', () => {
it('returns the current cart state', async () => {
const cart = await manageCart({ action: 'create' });
await manageCart({
action: 'add',
cart_id: cart.cart_id,
variant_id: 'var-500',
quantity: 4,
});
const result = await manageCart({
action: 'get',
cart_id: cart.cart_id,
});
expect(result.cart_id).toBe(cart.cart_id);
expect(result.line_items).toHaveLength(1);
expect(result.item_count).toBe(4);
});
it('throws when cart does not exist', async () => {
await expect(
manageCart({ action: 'get', cart_id: 'nonexistent' }),
).rejects.toThrow('Cart not found');
});
it('throws when cart_id is missing', async () => {
await expect(
manageCart({ action: 'get' }),
).rejects.toThrow('cart_id is required');
});
});