Advertisement
kstoyanov

7.**Warehouse – Unit Testing

Oct 27th, 2020
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. describe('Warehouse', () => {
  2.     function getInstance() {
  3.         return new Warehouse(100);
  4.     }
  5.     it('Test if class properties exists', () => {
  6.         const inst = getInstance();
  7.         expect(Object.getPrototypeOf(inst).hasOwnProperty('capacity')).to.be.equal(true);
  8.         expect(Object.getPrototypeOf(inst).hasOwnProperty('constructor')).to.be.equal(true);
  9.         expect(typeof Warehouse).to.be.equal('function');
  10.     });
  11.     it('capacity to throw with negative num', () => {
  12.         expect(() => {
  13.             const inst = new Warehouse(-100);
  14.         }).to.throw();
  15.     });
  16.     it('capacity to throw with zero', () => {
  17.         expect(() => {
  18.             const inst = new Warehouse(0);
  19.         }).to.throw();
  20.     });
  21.     it("should have a getter property 'capacity'", () => {
  22.         const paymentPackage = getInstance();
  23.         expect(paymentPackage.capacity).to.equal(100);
  24.     });
  25.  
  26.     it("should have a setter property 'capacity'", () => {
  27.         const paymentPackage = getInstance();
  28.         paymentPackage.capacity = 10;
  29.         expect(paymentPackage.capacity).to.equal(10);
  30.     });
  31.     describe('warehouse add products tests', () => {
  32.         it('add product should add product and return it\'s name', () => {
  33.             const warehouse = getInstance();
  34.             const product = 'rice';
  35.             const type = 'Food';
  36.             const quantity = 5;
  37.             const productObject = {
  38.                 rice: quantity,
  39.             };
  40.             const result = warehouse.addProduct(type, product, quantity);
  41.             expect(productObject).to.deep.equal(result);
  42.         });
  43.         it('add product should take right amount of capacity', () => {
  44.             const capacity = 10;
  45.             const warehouse = new Warehouse(capacity);
  46.             const product = 'rice';
  47.             const type = 'Food';
  48.             const quantity = 5;
  49.  
  50.             warehouse.addProduct(type, product, quantity);
  51.             const takenSpace = warehouse.occupiedCapacity();
  52.             const spaceThatShouldBeTaken = capacity - quantity;
  53.             expect(takenSpace).to.equal(spaceThatShouldBeTaken);
  54.         });
  55.  
  56.         it('add product should add product and increase its quantity if exists', () => {
  57.             const warehouse = getInstance();
  58.             const product = 'rice';
  59.             const type = 'Food';
  60.             const quantity = 5;
  61.  
  62.             warehouse.addProduct(type, product, quantity);
  63.             warehouse.addProduct(type, product, quantity);
  64.             const riceQuantity = warehouse.availableProducts.Food[product];
  65.             const expectedQuantity = quantity * 2;
  66.             expect(riceQuantity).to.equal(expectedQuantity);
  67.         });
  68.  
  69.         it('add product should throw string if not enough capacity', () => {
  70.             expect(() => {
  71.                 const warehouse = new Warehouse(5);
  72.                 const product = 'rice';
  73.                 const type = 'Food';
  74.                 const quantity = 10;
  75.  
  76.                 warehouse.addProduct(type, product, quantity);
  77.             }).to.throw('There is not enough space or the warehouse is already full');
  78.         });
  79.     });
  80.     describe('warehouse sort products test', () => {
  81.         it('sort products should sort products of the type descending', () => {
  82.             const warehouse = getInstance();
  83.             const productOne = 'rice';
  84.             const productType = 'Food';
  85.             const productOneQuantity = 10;
  86.             const productTwo = 'bread';
  87.             const productTwoQuantity = 5;
  88.             warehouse.addProduct(productType, productOne, productOneQuantity);
  89.             warehouse.addProduct(productType, productTwo, productTwoQuantity);
  90.             const result = warehouse.orderProducts(productType);
  91.             const expectedOrder = { rice: 10, bread: 5 };
  92.             expect(result).to.deep.equal(expectedOrder);
  93.         });
  94.     });
  95.     describe('warehouse revision tests', () => {
  96.         it('revision should return empty warehouse message', () => {
  97.             const warehouse = getInstance();
  98.             const revision = warehouse.revision();
  99.             const expectedOutput = 'The warehouse is empty';
  100.             expect(revision).to.equal(expectedOutput);
  101.         });
  102.  
  103.         it('revision should return  ordered list', () => {
  104.             const warehouse = getInstance();
  105.             const productOne = 'rice';
  106.             const productType = 'Food';
  107.             const productTypeTwo = 'Drink';
  108.             const productOneQuantity = 10;
  109.             const productTwo = 'bread';
  110.             const productTwoQuantity = 5;
  111.             warehouse.addProduct(productType, productOne, productOneQuantity);
  112.             warehouse.addProduct(productType, productTwo, productTwoQuantity);
  113.             const revision = warehouse.revision();
  114.             const expectedOutput = `Product type - [${productType}]\n`
  115.                 + `- ${productOne} ${productOneQuantity}\n`
  116.                 + `- ${productTwo} ${productTwoQuantity}\n`
  117.                 + `Product type - [${productTypeTwo}]\n`;
  118.             const expected = expectedOutput.trim();
  119.             expect(revision).to.equal(expected);
  120.         });
  121.     });
  122.  
  123.     describe('warehouse scrape a product tests', () => {
  124.         it('it should return nonexisting product', () => {
  125.             const noneExistingType = 'wine';
  126.             const expectedResult = `${noneExistingType} do not exists`;
  127.             expect(() => {
  128.                 const warehouse = getInstance();
  129.                 const productOne = 'rice';
  130.                 const productType = 'Food';
  131.                 const productOneQuantity = 10;
  132.                 const productTwo = 'bread';
  133.                 const productTwoQuantity = 5;
  134.                 warehouse.addProduct(productType, productOne, productOneQuantity);
  135.                 warehouse.addProduct(productType, productTwo, productTwoQuantity);
  136.                 warehouse.scrapeAProduct(noneExistingType, 5);
  137.             }).to.throw(expectedResult);
  138.         });
  139.  
  140.         it('it should reset amount of the product with not enough quantity', () => {
  141.             const warehouse = getInstance();
  142.             const product = 'rice';
  143.             const productType = 'Food';
  144.             const productQuantity = 5;
  145.             const productWantedQuantity = 10;
  146.             warehouse.addProduct(productType, product, productQuantity);
  147.             warehouse.scrapeAProduct(product, productWantedQuantity);
  148.             const currentCountProduct = warehouse.availableProducts.Food[product];
  149.             const expectedCount = 0;
  150.             expect(currentCountProduct).to.equal(expectedCount);
  151.         });
  152.  
  153.         it('it should return correct quantity of the product', () => {
  154.             const warehouse = getInstance();
  155.             const product = 'rice';
  156.             const productType = 'Food';
  157.             const productQuantity = 10;
  158.             const productWantedQuantity = 5;
  159.             warehouse.addProduct(productType, product, productQuantity);
  160.             warehouse.scrapeAProduct(product, productWantedQuantity);
  161.             const currentCountProduct = warehouse.availableProducts.Food[product];
  162.             const expectedCount = 5;
  163.             expect(currentCountProduct).to.equal(expectedCount);
  164.         });
  165.     });
  166. });
  167.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement