expressCart/test/specs/customers.js

227 lines
6.6 KiB
JavaScript

import{ serial as test }from'ava';
const {
runBefore,
g
} = require('../helper');
test.before(async () => {
await runBefore();
});
test('[Success] Create a customer', async t => {
const customer = {
email: 'sarah.jones@test.com',
company: 'Acme Co',
firstName: 'Sarah',
lastName: 'Jones',
address1: '1 Sydney Street',
address2: '',
country: 'Australia',
state: 'NSW',
postcode: '2000',
phone: '0400000000',
password: 'password'
};
const res = await g.request
.post('/customer/create')
.send(customer)
.expect(200);
t.deepEqual(res.body.email, customer.email);
t.deepEqual(res.body.firstName, customer.firstName);
});
test('[Fail] Try create a duplicate customer', async t => {
const customer = {
email: 'sarah.jones@test.com',
company: 'Acme Co',
firstName: 'Sarah',
lastName: 'Jones',
address1: '1 Sydney Street',
address2: '',
country: 'Australia',
state: 'NSW',
postcode: '2000',
phone: '0400000000',
password: 'password'
};
const res = await g.request
.post('/customer/create')
.send(customer)
.expect(400);
t.deepEqual(res.body.message, 'A customer already exists with that email address');
});
test('[Fail] Create with invalid email address', async t => {
const customer = {
email: 'sarah.jones@test',
company: 'Acme Co',
firstName: 'Sarah',
lastName: 'Jones',
address1: '1 Sydney Street',
address2: '',
country: 'Australia',
state: 'NSW',
postcode: '2000',
phone: '0400000000',
password: 'password'
};
const res = await g.request
.post('/customer/create')
.send(customer)
.expect(400);
t.deepEqual(res.body[0].message, 'should match format "emailAddress"');
});
test('[Success] Update existing customer from dashboard', async t => {
const customer = {
customerId: g.customers[1]._id,
company: 'Acme Co',
email: 'sarah.jones@test.com',
firstName: 'Sarah',
lastName: 'Jones',
address1: '1 Sydney Street',
address2: '',
country: 'Australia',
state: 'NSW',
postcode: '2000',
phone: '0444444444'
};
const res = await g.request
.post('/admin/customer/update')
.send(customer)
.set('apiKey', g.users[0].apiKey)
.expect(200);
t.deepEqual(res.body.message, 'Customer updated');
t.deepEqual(res.body.customer.company, customer.company);
t.deepEqual(res.body.customer.email, customer.email);
t.deepEqual(res.body.customer.firstName, customer.firstName);
t.deepEqual(res.body.customer.lastName, customer.lastName);
t.deepEqual(res.body.customer.address1, customer.address1);
t.deepEqual(res.body.customer.country, customer.country);
t.deepEqual(res.body.customer.state, customer.state);
t.deepEqual(res.body.customer.postcode, customer.postcode);
t.deepEqual(res.body.customer.phone, customer.phone);
});
test('[Success] Update existing customer from customer page', async t => {
const customer = {
customerId: g.customers[1]._id,
company: 'Acme Company',
email: 'sarah.jones@test.com',
firstName: 'Tina',
lastName: 'Smith',
address1: '2 Sydney Street',
address2: '',
country: 'Australia',
state: 'NSW',
postcode: '2000',
phone: '0444444444'
};
await g.request
.post('/customer/login_action')
.send({
loginEmail: 'sarah.jones@test.com',
loginPassword: 'test'
})
.expect(200);
const res = await g.request
.post('/customer/update')
.send(customer)
.expect(200);
t.deepEqual(res.body.message, 'Customer updated');
t.deepEqual(res.body.customer.company, customer.company);
t.deepEqual(res.body.customer.email, customer.email);
t.deepEqual(res.body.customer.firstName, customer.firstName);
t.deepEqual(res.body.customer.lastName, customer.lastName);
t.deepEqual(res.body.customer.address1, customer.address1);
t.deepEqual(res.body.customer.country, customer.country);
t.deepEqual(res.body.customer.state, customer.state);
t.deepEqual(res.body.customer.postcode, customer.postcode);
t.deepEqual(res.body.customer.phone, customer.phone);
});
test('[Success] Get customer list', async t => {
const res = await g.request
.get('/admin/customers')
.set('apiKey', g.users[0].apiKey)
.expect(200);
// Check the returned customers length
t.deepEqual(3, res.body.length);
});
test('[Success] Filter customers', async t => {
const res = await g.request
.get('/admin/customers/filter/Testy')
.set('apiKey', g.users[0].apiKey)
.expect(200);
// Check the returned customers length
t.deepEqual(1, res.body.customers.length);
});
test('[Success] Get single customer', async t => {
const res = await g.request
.get('/admin/customer/view/' + g.customers[0]._id)
.set('apiKey', g.users[0].apiKey)
.expect(200);
// Check the returned customer matches ID
t.deepEqual(g.customers[0]._id.toString(), res.body._id);
});
test('[Fail] Customer login with incorrect email', async t => {
const res = await g.request
.post('/customer/login_action')
.send({
loginEmail: 'test1111@test.com',
loginPassword: 'test'
})
.expect(400);
t.deepEqual(res.body.message, 'A customer with that email does not exist.');
});
test('[Success] Customer login with correct email', async t => {
const res = await g.request
.post('/customer/login_action')
.send({
loginEmail: g.customers[0].email,
loginPassword: 'test'
})
.expect(200);
t.deepEqual(res.body.message, 'Successfully logged in');
});
test('[Success] Delete a customer', async t => {
const res = await g.request
.delete('/admin/customer')
.send({
customerId: g.customers[0]._id
})
.set('apiKey', g.users[0].apiKey)
.expect(200);
t.deepEqual(res.body.message, 'Customer deleted');
});
test('[Success] Failed deleting an incorrect customer', async t => {
const res = await g.request
.delete('/admin/customer')
.send({
customerId: g.customers[0]._id
})
.set('apiKey', g.users[0].apiKey)
.expect(400);
t.deepEqual(res.body.message, 'Failed to delete customer. Customer not found');
});