const models = require('vn-loopback/server/server').models; describe('sale canEdit()', () => { it('should return true if the role is production regardless of the saleTrackings', async() => { const tx = await models.Sale.beginTransaction({}); try { const options = {transaction: tx}; const productionUserID = 49; const ctx = {req: {accessToken: {userId: productionUserID}}}; const sales = [25]; const result = await models.Sale.canEdit(ctx, sales, options); expect(result).toEqual(true); await tx.rollback(); } catch (e) { await tx.rollback(); throw e; } }); it('should return true if the role is not production and none of the sales has saleTracking', async() => { const tx = await models.Sale.beginTransaction({}); try { const options = {transaction: tx}; const salesPersonUserID = 18; const ctx = {req: {accessToken: {userId: salesPersonUserID}}}; const sales = [10]; const result = await models.Sale.canEdit(ctx, sales, options); expect(result).toEqual(true); await tx.rollback(); } catch (e) { await tx.rollback(); throw e; } }); it('should return false if any of the sales has a saleTracking record', async() => { const tx = await models.Sale.beginTransaction({}); try { const options = {transaction: tx}; const buyerId = 35; const ctx = {req: {accessToken: {userId: buyerId}}}; const sales = [31]; const result = await models.Sale.canEdit(ctx, sales, options); expect(result).toEqual(false); await tx.rollback(); } catch (e) { await tx.rollback(); throw e; } }); it('should return false if any of the sales is cloned', async() => { const tx = await models.Sale.beginTransaction({}); try { const options = {transaction: tx}; const buyerId = 35; const ctx = {req: {accessToken: {userId: buyerId}}}; const sales = [27]; const result = await models.Sale.canEdit(ctx, sales, options); expect(result).toEqual(false); await tx.rollback(); } catch (e) { await tx.rollback(); throw e; } }); it('should return true if any of the sales is cloned and has the correct role', async() => { const tx = await models.Sale.beginTransaction({}); const roleEnabled = await models.ACL.findOne({ where: { model: 'Sale', property: 'editCloned' } }); if (!roleEnabled || !roleEnabled.principalId) return; try { const options = {transaction: tx}; const roleId = await models.Role.findOne({ where: { name: roleEnabled.principalId } }); const ctx = {req: {accessToken: {userId: roleId}}}; const sales = [27]; const result = await models.Sale.canEdit(ctx, sales, options); expect(result).toEqual(true); await tx.rollback(); } catch (e) { await tx.rollback(); throw e; } }); it('should return false if any of the sales is of ticket weekly', async() => { const tx = await models.Sale.beginTransaction({}); try { const options = {transaction: tx}; const employeeId = 1; const ctx = {req: {accessToken: {userId: employeeId}}}; const sales = [33]; const result = await models.Sale.canEdit(ctx, sales, options); expect(result).toEqual(false); await tx.rollback(); } catch (e) { await tx.rollback(); throw e; } }); it('should return true if any of the sales is of ticketWeekly and has the correct role', async() => { const tx = await models.Sale.beginTransaction({}); const roleEnabled = await models.ACL.findOne({ where: { model: 'Sale', property: 'editWeekly' } }); if (!roleEnabled || !roleEnabled.principalId) return; try { const options = {transaction: tx}; const roleId = await models.Role.findOne({ where: { name: roleEnabled.principalId } }); const ctx = {req: {accessToken: {userId: roleId}}}; const sales = [33]; const result = await models.Sale.canEdit(ctx, sales, options); expect(result).toEqual(true); await tx.rollback(); } catch (e) { await tx.rollback(); throw e; } }); });