@tomei/product
Version:
NestJS package for product module
188 lines • 9.93 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const product_repository_1 = require("../src/base/product/product.repository");
const globals_1 = require("@jest/globals");
const product_with_inventory_base_1 = require("../src/base/product-with-inventory/product-with-inventory.base");
const product_with_inventory_repository_1 = require("../src/base/product-with-inventory/product-with-inventory.repository");
const sso_1 = require("@tomei/sso");
const config_1 = require("@tomei/config");
const activity_history_1 = require("@tomei/activity-history");
(0, globals_1.describe)('ProductWithInventoryBase', () => {
class TestProduct extends product_with_inventory_base_1.ProductWithInventoryBase {
constructor(product) {
super(product);
}
}
const data = {
ProductId: '123',
Name: 'Test',
Description: 'Test',
SKU: 'Test',
Type: 'Test',
Remark: 'Test',
IsTaxableYN: 'N',
TaxCode: 'Test',
IsPriceInclusiveTaxYN: 'N',
Status: 'Active',
VerifiedYN: 'Y',
VerifiedById: '123',
VerifiedAt: new Date(),
VariantLevels: 0,
VariantTypeLevel1: '',
VariantTypeLevel2: '',
VariantTypeLevel3: '',
CreatedById: '123',
CreatedAt: new Date(),
UpdatedById: '123',
UpdatedAt: new Date(),
UpdatedSSYN: 'Y',
UOM: 'Test',
TotalUnits: 1,
TotalUnitsAvailable: 2,
TotalUnitsInCurrentOrder: 3,
TotalUnitsSold: 4,
TotalUnitsReserved: 5,
TotalUnitsOnConsignment: 6,
TotalUnitsUnderMaintenance: 7,
TotalUnitsVoid: 8,
TotalUnitsInTransit: 9,
TotalUnitsBackOrdered: 10,
TotalUnitsPreOrdered: 11,
StockLowAlertLevel: 12,
StockReorderLevel: 13,
BufferStockLevel: 14,
};
(0, globals_1.beforeAll)(() => { });
const pRepoCreate = globals_1.jest
.spyOn(product_repository_1.ProductRepository.prototype, 'create')
.mockResolvedValue(Object.assign(Object.assign({}, data), { get: () => data }));
globals_1.jest.spyOn(product_repository_1.ProductRepository.prototype, 'findByPk').mockResolvedValue(Object.assign(Object.assign({}, data), { get: () => data }));
globals_1.jest.spyOn(sso_1.SessionService, 'init').mockResolvedValue({
setUserSession: globals_1.jest.fn(),
retrieveUserSession: globals_1.jest.fn(),
refreshDuration: globals_1.jest.fn(),
});
globals_1.jest.spyOn(config_1.ApplicationConfig, 'getComponentConfigValue').mockResolvedValue("ezc");
globals_1.jest.spyOn(sso_1.LoginUser.prototype, 'checkPrivileges').mockResolvedValue(true);
globals_1.jest.spyOn(activity_history_1.Activity.prototype, 'create').mockResolvedValue(undefined);
(0, globals_1.afterEach)(() => {
globals_1.jest.clearAllMocks();
});
(0, globals_1.describe)('init', () => {
(0, globals_1.it)('should initialize the product base with existing data', async () => {
const product = new TestProduct(Object.assign({}, data));
(0, globals_1.expect)(product.ProductId).toBe('123');
(0, globals_1.expect)(product.Name).toBe('Test');
(0, globals_1.expect)(product.Description).toBe('Test');
(0, globals_1.expect)(product.SKU).toBe('Test');
(0, globals_1.expect)(product.Type).toBe('Test');
(0, globals_1.expect)(product.Remark).toBe('Test');
(0, globals_1.expect)(product.IsTaxableYN).toBe('N');
(0, globals_1.expect)(product.TaxCode).toBe('Test');
(0, globals_1.expect)(product.IsPriceInclusiveTaxYN).toBe('N');
(0, globals_1.expect)(product.Status).toBe('Active');
(0, globals_1.expect)(product.VerifiedYN).toBe('Y');
(0, globals_1.expect)(product.VerifiedById).toBe('123');
(0, globals_1.expect)(product.VerifiedAt).toBeInstanceOf(Date);
(0, globals_1.expect)(product.VariantLevels).toBe(0);
(0, globals_1.expect)(product.VariantTypeLevel1).toBe('');
(0, globals_1.expect)(product.VariantTypeLevel2).toBe('');
(0, globals_1.expect)(product.VariantTypeLevel3).toBe('');
(0, globals_1.expect)(product.CreatedById).toBe('123');
(0, globals_1.expect)(product.CreatedAt).toBeInstanceOf(Date);
(0, globals_1.expect)(product.UpdatedById).toBe('123');
(0, globals_1.expect)(product.UpdatedAt).toBeInstanceOf(Date);
(0, globals_1.expect)(product.UpdatedSSYN).toBe('Y');
(0, globals_1.expect)(product.UOM).toBe('Test');
(0, globals_1.expect)(product.TotalUnits).toBe(1);
(0, globals_1.expect)(product.TotalUnitsAvailable).toBe(2);
(0, globals_1.expect)(product.TotalUnitsInCurrentOrder).toBe(3);
(0, globals_1.expect)(product.TotalUnitsSold).toBe(4);
(0, globals_1.expect)(product.TotalUnitsReserved).toBe(5);
(0, globals_1.expect)(product.TotalUnitsOnConsignment).toBe(6);
(0, globals_1.expect)(product.TotalUnitsUnderMaintenance).toBe(7);
(0, globals_1.expect)(product.TotalUnitsVoid).toBe(8);
(0, globals_1.expect)(product.TotalUnitsInTransit).toBe(9);
(0, globals_1.expect)(product.TotalUnitsBackOrdered).toBe(10);
(0, globals_1.expect)(product.TotalUnitsPreOrdered).toBe(11);
(0, globals_1.expect)(product.StockLowAlertLevel).toBe(12);
(0, globals_1.expect)(product['StockReorderLevel']).toBe(13);
(0, globals_1.expect)(product.BufferStockLevel).toBe(14);
});
});
(0, globals_1.describe)('create', () => {
(0, globals_1.it)('should create a new product', async () => {
globals_1.jest
.spyOn(product_repository_1.ProductRepository.prototype, 'findOne')
.mockReturnValueOnce(null);
globals_1.jest
.spyOn(product_with_inventory_repository_1.ProductWithInventoryRepository.prototype, 'create')
.mockReturnValue(Object.assign(Object.assign({}, data), { get: () => data }));
const product = new TestProduct(Object.assign({}, data));
const sessionService = await sso_1.SessionService.init();
const loginUser = await sso_1.LoginUser.init(sessionService);
loginUser.ObjectId = '1234567890';
await product.create(loginUser);
(0, globals_1.expect)(pRepoCreate).toBeCalledTimes(1);
});
(0, globals_1.it)('should throw error if SKU is already existed', async () => {
globals_1.jest.spyOn(product_repository_1.ProductRepository.prototype, 'findOne').mockReturnValueOnce(Object.assign(Object.assign({}, data), { get: () => data }));
const product = new TestProduct(Object.assign({}, data));
try {
const sessionService = await sso_1.SessionService.init();
const loginUser = await sso_1.LoginUser.init(sessionService);
loginUser.ObjectId = '1234567890';
await product.create(loginUser);
}
catch (error) {
(0, globals_1.expect)(error.message).toEqual('SKU is already existed.');
}
(0, globals_1.expect)(pRepoCreate).toBeCalledTimes(0);
});
(0, globals_1.it)('should throw error if IsPriceInclusiveTaxYN not defined if IsTaxable equal to Y', async () => {
const wrongData = data;
wrongData.IsTaxableYN = 'Y';
wrongData.IsPriceInclusiveTaxYN = 'Y';
globals_1.jest
.spyOn(product_repository_1.ProductRepository.prototype, 'findByPk')
.mockResolvedValueOnce(Object.assign(Object.assign({}, wrongData), { get: () => wrongData }));
globals_1.jest
.spyOn(product_repository_1.ProductRepository.prototype, 'findOne')
.mockReturnValueOnce(null);
const product = new TestProduct(Object.assign({}, data));
try {
const sessionService = await sso_1.SessionService.init();
const loginUser = await sso_1.LoginUser.init(sessionService);
loginUser.ObjectId = '1234567890';
await product.create(loginUser);
}
catch (error) {
(0, globals_1.expect)(error.message).toEqual('IsPriceInclusiveTaxYN is required if IsTaxableYN equal Y.');
}
(0, globals_1.expect)(pRepoCreate).toBeCalledTimes(0);
});
(0, globals_1.it)('should throw error if TaxCode not defined if IsTaxable equal to Y', async () => {
const wrongData = data;
wrongData.IsTaxableYN = 'Y';
wrongData.TaxCode = null;
globals_1.jest
.spyOn(product_repository_1.ProductRepository.prototype, 'findByPk')
.mockResolvedValueOnce(Object.assign(Object.assign({}, wrongData), { get: () => wrongData }));
globals_1.jest
.spyOn(product_repository_1.ProductRepository.prototype, 'findOne')
.mockReturnValueOnce(null);
const product = new TestProduct(Object.assign({}, data));
try {
const sessionService = await sso_1.SessionService.init();
const loginUser = await sso_1.LoginUser.init(sessionService);
loginUser.ObjectId = '1234567890';
await product.create(loginUser);
}
catch (error) {
(0, globals_1.expect)(error.message).toEqual('TaxCode is required if IsTaxableYN equal Y.');
}
(0, globals_1.expect)(pRepoCreate).toBeCalledTimes(0);
});
});
});
//# sourceMappingURL=product-with-inventory.base.spec.js.map