Skip to content

donaldsiziba/sales-tax

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SALES TAXES

Basic sales tax is applicable at a rate of 10% on all goods, except books, food, and medical products that are exempt. Import duty is an additional sales tax applicable on all imported goods at a rate of 5%, with no exemptions. When I purchase items I receive a receipt which lists the name of all the items and their price (including tax), finishing with the total cost of the items, and the total amounts of sales taxes paid. The rounding rules for sales tax are that for a tax rate of n%, a shelf price of p contains (np/100 rounded up to the nearest 0.05) amount of sales tax. Write an application that prints out the receipt details for these shopping baskets...

INPUT

Input 1:
1 book at 12.49
1 music CD at 14.99
1 chocolate bar at 0.85

Input 2:
1 imported box of chocolates at 10.00
1 imported bottle of perfume at 47.50

Input 3:
1 imported bottle of perfume at 27.99
1 bottle of perfume at 18.99
1 packet of headache pills at 9.75
1 box of imported chocolates at 11.25

OUTPUT

Output 1:
1 book : 12.49
1 music CD: 16.49
1 chocolate bar: 0.85
Sales Taxes: 1.50
Total: 29.83

Output 2:
1 imported box of chocolates: 10.50
1 imported bottle of perfume: 54.65
Sales Taxes: 7.65
Total: 65.15

Output 3:
1 imported bottle of perfume: 32.19
1 bottle of perfume: 20.89
1 packet of headache pills: 9.75
1 imported box of chocolates: 11.85
Sales Taxes: 6.70
Total: 74.68

Note: For information on how to run the build, refer to the Build.md file

Solution

Normal developer instinct would dictate that you straight away write the implementation without the test case, but that is not the way how Test Driven Development (TDD) works...

TDD Primer

The basic premise of TDD is that you write a test before writing the code that actually provides the implementation, and then you refactor that implementation as needed.

The TDD 3-phase cycle

When TDD practitioners need to implement a feature, they first write a failing test that describes, or specifies, that feature. Next, they write just enough code to make the test pass. Finally, they refactor the code to help ensure that it will be easy to maintain.

TDD 3-phase cycle

Let us see how can apply these TDD techniques to fulfil the requirements given above.

Test Case Analysis

Before we even start any coding, I recommend we look at the requirements and try and deduce the test scenarios.

Input 1
Items Receipt Tax Test Scenario
1 book at 12.49 12.49 0.00 Item exempt from Sales Tax
1 music at 14.99 16.49 1.50 Taxable Item
1 chocolate box at 0.85 0.85 0.00 Item exempt from Sales Tax
Input 2
Items Receipt Tax Test Scenario
1 imported box of chocolates at 10.00 10.50 0.50 Imported and tax exempt item
1 imported bottle of perfume at 47.50 54.65 7.15 Imported and taxable item
Input 3
Items Receipt Tax Test Scenario
1 imported bottle of perfume at 27.99 32.19 4.20 Imported and taxable item
1 bottle of perfume at 18.99 20.89 1.90 Taxable Item
1 packet of headache pills at 9.75 9.75 0.00 Item exempt from Sales Tax
1 box of imported chocolates at 11.25 11.85 0.60 Imported and tax exempt item

There are clearly four test scenarios that need to be considered, namely:

  1. Item exempt from Sales Tax
  2. Taxable Item
  3. Imported and taxable item
  4. Imported and tax exempt item

Before we start with the test cases, lets do a preliminary domain design.

Domain Model

Sale Tax Domain Model

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published