diff --git a/python-pytest/.gitignore b/python-pytest/.gitignore new file mode 100644 index 00000000..8a0ce6bc --- /dev/null +++ b/python-pytest/.gitignore @@ -0,0 +1,5 @@ +*.pyc +.cache +.coverage +.idea/ +*.iml diff --git a/python-pytest/README.md b/python-pytest/README.md new file mode 100644 index 00000000..3f904264 --- /dev/null +++ b/python-pytest/README.md @@ -0,0 +1,19 @@ +# Test with [pytest](https://docs.pytest.org) + +Start test with: + +```shell +pytest +``` + +Or, if you have [pytest-watch](https://pypi.org/project/pytest-watch) installed: + +```shell +ptw +``` + +A convenience script for measuring code coverage is also privded: + +```shell +./run-with-cov-details.sh +``` diff --git a/python-pytest/gilded_rose.py b/python-pytest/gilded_rose.py new file mode 100755 index 00000000..4f21ea64 --- /dev/null +++ b/python-pytest/gilded_rose.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- + +class GildedRose(object): + + def __init__(self, items): + self.items = items + + def update_quality(self): + for item in self.items: + if item.name != "Aged Brie" and item.name != "Backstage passes to a TAFKAL80ETC concert": + if item.quality > 0: + if item.name != "Sulfuras, Hand of Ragnaros": + item.quality = item.quality - 1 + else: + if item.quality < 50: + item.quality = item.quality + 1 + if item.name == "Backstage passes to a TAFKAL80ETC concert": + if item.sell_in < 11: + if item.quality < 50: + item.quality = item.quality + 1 + if item.sell_in < 6: + if item.quality < 50: + item.quality = item.quality + 1 + if item.name != "Sulfuras, Hand of Ragnaros": + item.sell_in = item.sell_in - 1 + if item.sell_in < 0: + if item.name != "Aged Brie": + if item.name != "Backstage passes to a TAFKAL80ETC concert": + if item.quality > 0: + if item.name != "Sulfuras, Hand of Ragnaros": + item.quality = item.quality - 1 + else: + item.quality = item.quality - item.quality + else: + if item.quality < 50: + item.quality = item.quality + 1 + + +class Item: + def __init__(self, name, sell_in, quality): + self.name = name + self.sell_in = sell_in + self.quality = quality + + def __repr__(self): + return "%s, %s, %s" % (self.name, self.sell_in, self.quality) diff --git a/python-pytest/run-with-cov-details.sh b/python-pytest/run-with-cov-details.sh new file mode 100755 index 00000000..577d5e41 --- /dev/null +++ b/python-pytest/run-with-cov-details.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +pytest --cov --cov-report html +echo "Starting web server to present the coverage report. Visit at http://localhost:8000. Press 'Ctrl' + 'C' to exit." +python -m http.server 8000 --bind 127.0.0.1 --directory htmlcov 2>&1 | grep -v "GET /.* 200 -" diff --git a/python-pytest/test_gilded_rose.py b/python-pytest/test_gilded_rose.py new file mode 100644 index 00000000..f95d903f --- /dev/null +++ b/python-pytest/test_gilded_rose.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +import pytest + +from gilded_rose import Item, GildedRose + + +def test_foo(): + items = [Item("foo", 0, 0)] + gilded_rose = GildedRose(items) + gilded_rose.update_quality() + assert "fixme" == items[0].name + +if __name__ == '__main__': + pytest.main() diff --git a/python-pytest/texttest_fixture.py b/python-pytest/texttest_fixture.py new file mode 100644 index 00000000..86af5ef7 --- /dev/null +++ b/python-pytest/texttest_fixture.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +from __future__ import print_function + +from gilded_rose import * + +if __name__ == "__main__": + print ("OMGHAI!") + items = [ + Item(name="+5 Dexterity Vest", sell_in=10, quality=20), + Item(name="Aged Brie", sell_in=2, quality=0), + Item(name="Elixir of the Mongoose", sell_in=5, quality=7), + Item(name="Sulfuras, Hand of Ragnaros", sell_in=0, quality=80), + Item(name="Sulfuras, Hand of Ragnaros", sell_in=-1, quality=80), + Item(name="Backstage passes to a TAFKAL80ETC concert", sell_in=15, quality=20), + Item(name="Backstage passes to a TAFKAL80ETC concert", sell_in=10, quality=49), + Item(name="Backstage passes to a TAFKAL80ETC concert", sell_in=5, quality=49), + Item(name="Conjured Mana Cake", sell_in=3, quality=6), # <-- :O + ] + + days = 2 + import sys + if len(sys.argv) > 1: + days = int(sys.argv[1]) + 1 + for day in range(days): + print("-------- day %s --------" % day) + print("name, sellIn, quality") + for item in items: + print(item) + print("") + GildedRose(items).update_quality()