Skip to content

sachitsac/sachit-store

Repository files navigation

CodeQL Node.js CI

Store

Samy Co is starting a computer store. You have been engaged to build the checkout system. We will start with the following products in our catalogue

SKU Name Price
ipd Super iPad $549.99
mbp MacBook Pro $1399.99
atv Apple TV $109.50
vga VGA adapter $30.00

As we're launching our new computer store, we would like to have a few opening day specials.

  • we're going to have a 3 for 2 deal on Apple TVs. For example, if you buy 3 Apple TVs, you will pay the price of 2 only
  • the brand new Super iPad will have a bulk discounted applied, where the price will drop to $499.99 each, if someone buys more than 4

As our Sales manager is quite indecisive, we want the pricing rules to be as flexible as possible as they can change in the future with little notice.

Our checkout system can scan items in any order.

The interface to our checkout looks like this (shown in typescript):

const co = new Checkout(pricingRules);
co.scan(item1);
co.scan(item2);
co.total();

Your task is to implement a checkout system that fulfils the requirements described above.

Example scenarios

SKUs Scanned: atv, atv, atv, vga Total expected: $249.00

SKUs Scanned: atv, ipd, ipd, atv, ipd, ipd, ipd Total expected: $2718.95

Prerequisite

  • Nodejs version 14.16.0 as a minimum
  • Optional docker desktop to run the app using docker

Running the program

Using npm

# if you have nvm on your system
nvm use

# install dependencies
npm i

# testing the app
npm test

# lint
npm run lint

Using docker

Note, the entry point to docker is npm. So you can run any command using the container that you would normally using npm. Just the commands don't need to start with npm. See examples below.

# Build the docker image
docker build -t samyco-store .

# run tests
docker run -it samyco-store test

# run lint
docker run -it samyco-store run lint

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages