Skip to content

Instantly share code, notes, and snippets.

@psixdev
Created June 13, 2018 08:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save psixdev/9d6a069ff001fbf26a249415e7575ced to your computer and use it in GitHub Desktop.
Save psixdev/9d6a069ff001fbf26a249415e7575ced to your computer and use it in GitHub Desktop.
setbundle
const _ = require('underscore');
const t = require('tap');
const testHelpers = require('../helpers');
const {reservationsResource, ticketsPoolsResource} = require('../../tickets');
t.test('reservations api', async (t) => {
await testHelpers.initDb();
await t.skip('get', async (t) => {
const {user, organization} = await testHelpers.createAdmin();
const first = await testHelpers.createReservation();
const second = await testHelpers.createReservation();
const {total, reservations} = await testHelpers.apiRequest({
method: 'get',
path: '/reservations',
query: {sort: '_id'},
auth: user.auth,
organization
});
t.is(total, 2, 'check total');
t.same(reservations, [first, second], 'check reservations');
await testHelpers.cleanDb();
await testHelpers.cleanTicketsDb();
});
await t.skip('getOne', async (t) => {
const reservation = await testHelpers.createReservation();
const result = await testHelpers.apiRequest({
method: 'get',
path: `/reservations/${reservation.number}`
});
t.same(result, {reservation}, 'check reservation');
await testHelpers.cleanDb();
await testHelpers.cleanTicketsDb();
});
await t.skip('create', async (t) => {
const {reservation} = await testHelpers.apiRequest({
method: 'post',
path: '/reservations',
body: {}
});
t.same(
reservation,
await reservationsResource.getOne(reservation.number),
'check reservation'
);
await testHelpers.cleanDb();
await testHelpers.cleanTicketsDb();
});
await t.skip('expire', async (t) => {
const reservation = await testHelpers.createReservation();
const response = await testHelpers.apiRequest({
method: 'put',
path: '/reservations/expire',
body: {
number: reservation.number
}
});
t.notOk(response, 'empty response');
});
await t.skip('set', async (t) => {
const organization = await testHelpers.createEntity('organizations');
const user = await testHelpers.createUserWithOrganization(organization);
const place = await testHelpers.createEntity('places');
const batch = await testHelpers.createTicketsBatch({
type: 'place',
entity: {
type: 'place',
place: place._id
},
user: user._id,
organization: organization._id
});
const pool = await testHelpers.createTicketsPool({
batch: batch._id,
status: 'available',
entity: {
type: 'place',
place: place._id
},
prices: [{
price: 10000,
rests: [{
total: 10
}]
}]
});
const restId = pool.prices[0].rests[0]._id;
const reservation = await testHelpers.createReservation();
const response = await testHelpers.apiRequest({
method: 'put',
path: '/reservations/set',
body: {
number: reservation.number,
rest: restId,
count: 5
}
});
t.notOk(response, 'empty response');
});
await t.skip('unset', async (t) => {
const organization = await testHelpers.createEntity('organizations');
const user = await testHelpers.createUserWithOrganization(organization);
const place = await testHelpers.createEntity('places');
const batch = await testHelpers.createTicketsBatch({
type: 'place',
entity: {
type: 'place',
place: place._id
},
user: user._id,
organization: organization._id
});
const pool = await testHelpers.createTicketsPool({
batch: batch._id,
status: 'available',
entity: {
type: 'place',
place: place._id
},
prices: [{
price: 10000,
rests: [{
total: 10
}]
}]
});
const restId = pool.prices[0].rests[0]._id;
const reservation = await testHelpers.createReservation();
await reservationsResource.set(reservation.number, {
restId,
count: 2
});
const response = await testHelpers.apiRequest({
method: 'put',
path: '/reservations/unset',
body: {
number: reservation.number,
rest: restId
}
});
t.notOk(response, 'empty response');
});
async function createPool(type, user, organization) {
const entity = await testHelpers.createEntity(type + 's');
const batch = await testHelpers.createTicketsBatch({
type,
entity: {
type,
[type]: entity._id
},
user: user._id,
organization: organization._id
});
return testHelpers.createTicketsPool({
batch: batch._id,
status: 'available',
entity: {
type,
[type]: entity._id
},
prices: [{
bundlePrice: 5000,
price: 10000,
rests: [{
total: 5
}]
}]
});
}
await t.test('setbundle', async (t) => {
const organization = await testHelpers.createEntity('organizations');
const user = await testHelpers.createUserWithOrganization(organization);
const platform = await testHelpers.createEntity('platforms');
const event = await testHelpers.createEntity('events', {
user: user._id,
organization: organization._id
});
const seance1 = await testHelpers.createEntity('seances', {event: event._id});
const seance2 = await testHelpers.createEntity('seances', {event: event._id});
const batch = await testHelpers.createTicketsBatch({
user: user._id,
organization: organization._id,
type: 'seances',
entity: {
type: 'event',
event: event._id
}
});
const seancePool1 = await testHelpers.createTicketsPool({
entity: {
type: 'seance',
seance: seance1._id
},
status: 'available',
user: user._id,
organization: organization._id,
batch: batch._id,
prices: [{
bundlePrice: 5000,
price: 10000,
rests: [{
total: 5
}]
}]
});
const seancePool2 = await testHelpers.createTicketsPool({
entity: {
type: 'seance',
seance: seance2._id
},
status: 'available',
user: user._id,
organization: organization._id,
batch: batch._id,
prices: [{
bundlePrice: 5000,
price: 10000,
rests: [{
total: 5
}]
}]
});
const articlePool = await createPool('article', user, organization);
const placePool = await createPool('place', user, organization);
console.log('initial values');
console.error(_(articlePool.prices[0].rests[0]).pick('total', 'available', 'reserved'));
console.error(_(placePool.prices[0].rests[0]).pick('total', 'available', 'reserved'));
console.error(_(seancePool1.prices[0].rests[0]).pick('total', 'available', 'reserved'));
console.error(_(seancePool2.prices[0].rests[0]).pick('total', 'available', 'reserved'));
const bundle = await testHelpers.createTicketsBundle({
user: user._id,
organization: organization._id,
platforms: [platform._id],
ticketsPools: [
{ticketsPool: placePool._id, count: 2},
{ticketsPool: articlePool._id, count: 2},
{ticketsPool: seancePool1._id, count: 2},
{ticketsPool: seancePool2._id, count: 2}
]
});
const reservation = await testHelpers.createReservation({bundle: bundle._id});
{
const response = await testHelpers.apiRequest({
method: 'put',
path: '/reservations/setbundle',
body: {
number: reservation.number,
counters: [{
rest: articlePool.prices[0].rests[0]._id,
count: 2
}, {
rest: placePool.prices[0].rests[0]._id,
count: 2
}, {
rest: seancePool1.prices[0].rests[0]._id,
count: 2
}]
}
});
t.notOk(response, 'empty response');
console.log('first setbundle');
const updatedReservation = await reservationsResource.getOne(reservation.number);
console.error(updatedReservation.counters);
const updatedArticlePool = await ticketsPoolsResource.getOne(articlePool._id);
console.error(_(updatedArticlePool.prices[0].rests[0]).pick('total', 'available', 'reserved'));
const updatedPlacePool = await ticketsPoolsResource.getOne(placePool._id);
console.error(_(updatedPlacePool.prices[0].rests[0]).pick('total', 'available', 'reserved'));
const updatedSeancePool1 = await ticketsPoolsResource.getOne(seancePool1._id);
console.error(_(updatedSeancePool1.prices[0].rests[0]).pick('total', 'available', 'reserved'));
const updatedSeancePool2 = await ticketsPoolsResource.getOne(seancePool2._id);
console.error(_(updatedSeancePool2.prices[0].rests[0]).pick('total', 'available', 'reserved'));
}
{
const response = await testHelpers.apiRequest({
method: 'put',
path: '/reservations/setbundle',
body: {
number: reservation.number,
counters: [{
rest: articlePool.prices[0].rests[0]._id,
count: 2
}, {
rest: placePool.prices[0].rests[0]._id,
count: 2
}, {
rest: seancePool2.prices[0].rests[0]._id,
count: 2
}]
}
});
t.notOk(response, 'empty response');
console.log('second setbundle');
const updatedReservation = await reservationsResource.getOne(reservation.number);
console.error(updatedReservation.counters);
const updatedArticlePool = await ticketsPoolsResource.getOne(articlePool._id);
console.error(_(updatedArticlePool.prices[0].rests[0]).pick('total', 'available', 'reserved'));
const updatedPlacePool = await ticketsPoolsResource.getOne(placePool._id);
console.error(_(updatedPlacePool.prices[0].rests[0]).pick('total', 'available', 'reserved'));
const updatedSeancePool1 = await ticketsPoolsResource.getOne(seancePool1._id);
console.error(_(updatedSeancePool1.prices[0].rests[0]).pick('total', 'available', 'reserved'));
const updatedSeancePool2 = await ticketsPoolsResource.getOne(seancePool2._id);
console.error(_(updatedSeancePool2.prices[0].rests[0]).pick('total', 'available', 'reserved'));
}
});
await testHelpers.destroyDb();
await testHelpers.destroyTicketsDb();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment