Skip to content

Commit

Permalink
feat: #49 (composable) add unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Baroshem committed Aug 20, 2021
1 parent cca6719 commit 529a451
Show file tree
Hide file tree
Showing 2 changed files with 203 additions and 0 deletions.
101 changes: 101 additions & 0 deletions packages/composables/__tests__/useBilling/useBilling.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import { useBilling } from '../../src/composables/useBilling';
import { useCart } from '../../src/composables/useCart';

jest.mock('../../src/composables/useCart', () => ({
useCart: jest.fn()
}));

jest.mock('@vue-storefront/core', () => ({
useBillingFactory: (params) => () => params
}));

describe('[vendure-composables] useBilling', () => {
beforeEach(() => {
jest.clearAllMocks();
});

it('provides cart', async () => {
const { provide } = useBilling() as any;
const mockedCart = '12312312';
(useCart as jest.Mock).mockImplementation(() => mockedCart);

const toProvide = provide();

expect(toProvide).toMatchObject({ cart: mockedCart });
expect(useCart).toHaveBeenCalled();
});

it('loads billing address via request if cart is not present', async () => {
const { load } = useBilling() as any;
const loadedBillingAddress = 'loadedBillingAddress';
const context = {
cart: {
cart: {
value: {
billingAddress: null
}
},
load: jest.fn(() => {
context.cart.cart.value.billingAddress = loadedBillingAddress;
})
}
};

const response = await load(context, {});

expect(response).toBe(loadedBillingAddress);
expect(context.cart.load).toHaveBeenCalled();
});

it('loads billing address from cart if cart is present', async () => {
const { load } = useBilling() as any;
const loadedBillingAddress = 'loadedBillingAddress';
const context = {
cart: {
cart: {
value: {
billingAddress: loadedBillingAddress
}
},
load: jest.fn()
}
};

const response = await load(context, {});

expect(response).toBe(loadedBillingAddress);
expect(context.cart.load).not.toHaveBeenCalled();
});

it('saves billing details, updates cart and returns billing details', async () => {
const { save } = useBilling() as any;
const newBillingAddress = 'newBillingAddress';
const context = {
cart: {
cart: {
value: {
billingAddress: null
}
},
setCart: jest.fn(address => {
context.cart.cart.value.billingAddress = address;
})
},
$vendure: {
api: {
updateAddressDetails: jest.fn(() => ({
data: {
setOrderBillingAddress: {
billingAddress: newBillingAddress
}
}
}))
}
}
};

const response = await save(context, { billingAddress: newBillingAddress });

expect(response).toBe(newBillingAddress);
});
});
102 changes: 102 additions & 0 deletions packages/composables/__tests__/useShipping/useShipping.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
import { useShipping } from '../../src/composables/useShipping';
import { useCart } from '../../src/composables/useCart';

jest.mock('../../src/composables/useCart', () => ({
useCart: jest.fn()
}));

jest.mock('@vue-storefront/core', () => ({
useShippingFactory: (params) => () => params
}));

describe('[vendure-composables] useShipping', () => {
beforeEach(() => {
jest.clearAllMocks();
});

it('provides cart', async () => {
const { provide } = useShipping() as any;
const mockedCart = '12312312';
(useCart as jest.Mock).mockImplementation(() => mockedCart);

const toProvide = provide();

expect(toProvide).toMatchObject({ cart: mockedCart });
expect(useCart).toHaveBeenCalled();
});

it('loads shipping address via request if cart is not present', async () => {
const { load } = useShipping() as any;
const loadedShippingAddress = 'loadedShippingAddress';
const context = {
cart: {
cart: {
value: {
shippingAddress: null
}
},
load: jest.fn(() => {
context.cart.cart.value.shippingAddress = loadedShippingAddress;
})
}
};

const response = await load(context, {});

expect(response).toBe(loadedShippingAddress);
expect(context.cart.load).toHaveBeenCalled();
});

it('loads shipping address from cart if cart is present', async () => {
const { load } = useShipping() as any;
const loadedShippingAddress = 'loadedShippingAddress';
const context = {
cart: {
cart: {
value: {
shippingAddress: loadedShippingAddress
}
},
load: jest.fn()
}
};

const response = await load(context, {});

expect(response).toBe(loadedShippingAddress);
expect(context.cart.load).not.toHaveBeenCalled();
});

it('saves shipping details, updates cart and returns shipping details', async () => {
const { save } = useShipping() as any;
const newShippingAddress = 'newShippingAddress';
const context = {
cart: {
cart: {
value: {
shippingAddress: null
}
},
setCart: jest.fn(address => {
context.cart.cart.value.shippingAddress = address;
})
},
$vendure: {
api: {
updateAddressDetails: jest.fn(() => ({
data: {
setOrderShippingAddress: {
shippingAddress: newShippingAddress
}
}
}))
}
}
};

const response = await save(context, { shippingDetails: newShippingAddress });

expect(response).toBe(newShippingAddress);
});
});

0 comments on commit 529a451

Please sign in to comment.