GildedRose-Refactoring-Kata/README.md
2025-02-06 16:33:03 +10:30

2.2 KiB

This is my implementation of the Gilded Rose Kata.

Tidy first, then change behavior

main

In the main branch is only refactored from the original, with the new requirement yet to implemented. I used the lift up conditional refactoring, inspired by Emily Bache and Llewellyn Falco.

See their videos here:

I time boxed myself to get this all done in under an hour. 20 minutes for achieving 100% test coverage, 20 for refactoring, and 20 for implementing the new requirement.

feature/implement-new-requirement

In this branch, I have implemented the new requirement.

archive/original-code

This branch contains the original code, before the refactoring.

Getting setup

Firstly, setup a python 3.12 environment using venv

Then, install the requirements:

pip install -r requirements.txt

Running the tests

This project uses characterisation testing to ensure the behavior of the code remains the same during refactoring. Specifically, it uses pytest-approvals

coverage run --branch -m pytest --approvaltests-add-reporter=diffuse -s ;
coverage html ;
coverage report --fail-under=100

This will run the tests, and will also:

  • automatically bring up diffuse to view differences side by side, if there are any behavior changes.
    • feel free to install and use a diff reporter of your choice. See pytest docs for more info on configuring reporters: selecting a reporter
  • warn you if your coverage falls below 100% (either you need more tests, or there is dead code)
  • generate a coverage report (You can view this in the htmlcov directory by opening index.html in a browser)