diff --git a/.gitignore b/.gitignore index 56c75ba..9296413 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +venv/ +.vscode/ # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/.travis.yml b/.travis.yml index d6ae41b..5bf7edf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ language: python python: - - "2.7" - - "3.4" + - "3.7" install: - "pip install -r requirements.txt" - "pip install -r test_requirements.txt" diff --git a/catinabox/catmath.py b/catinabox/catmath.py index b0579bb..c4d0574 100644 --- a/catinabox/catmath.py +++ b/catinabox/catmath.py @@ -1,7 +1,7 @@ NUM_HOOMAN_YEARS_IN_CAT_YEAR = 5 -def cat_years_to_hooman_years(age_in_cat_years): +def cat_years_to_hooman_years(age_in_cat_years: float) -> float: """Converts the cat's age to the equivalent in hooman years. :param age_in_cat_years: A float: cat's age in years diff --git a/tests/test_catactivities.py b/tests/test_catactivities.py index e2051b1..dea2e3e 100644 --- a/tests/test_catactivities.py +++ b/tests/test_catactivities.py @@ -1,14 +1,17 @@ -# import pytest -# import time +import pytest +import time -# from catinabox import catactivities +from catinabox import catactivities def test__cat_nap__satisfying_nap(mocker): - # mock_sleep = mocker.patch.object(time, "sleep", autospec=True) - assert True + mocker.patch.object(time, "sleep", autospec=True) + catactivities.cat_nap(400) + time.sleep.assert_called_with(400) def test__cat_nap__not_satisfying(mocker): - # mock_sleep = mocker.patch.object(time, "sleep", autospec=True) - assert True + mocker.patch.object(time, "sleep", autospec=True) + with pytest.raises(catactivities.NapWillNotBeSatisfying): + catactivities.cat_nap(1) + time.sleep.assert_not_called() diff --git a/tests/test_catmath.py b/tests/test_catmath.py index ced6358..ed32e6c 100644 --- a/tests/test_catmath.py +++ b/tests/test_catmath.py @@ -1,19 +1,20 @@ +import pytest from catinabox import catmath -def test__cat_years_to_hooman_years__middle_age__succeeds(): - assert True - - -def test__cat_years_to_hooman_years__less_than_one_year__succeeds(): - assert True - - -def test__cat_years_to_hooman_years__0__returns_0(): - assert True +@pytest.mark.parametrize("age, expected", [ + (10, 50), + (0.5, 2.5), + (0, 0) +]) +def test__cat_years_to_hooman_years(age, expected): + assert catmath.cat_years_to_hooman_years(age) == expected # BONUS MATERIAL FOR STEP 2 def test__is_cat_leap_year__succeeds(): assert catmath.is_cat_leap_year(2016) is True + assert catmath.is_cat_leap_year(2000) is True + assert catmath.is_cat_leap_year(2100) is False + assert catmath.is_cat_leap_year(1997) is False diff --git a/tests/test_cattery.py b/tests/test_cattery.py index b36692c..87787e3 100644 --- a/tests/test_cattery.py +++ b/tests/test_cattery.py @@ -1,39 +1,45 @@ import pytest from catinabox import cattery - +from catinabox import mccattery ########################################################################### # add_cats ########################################################################### -def test__add_cats__succeeds(): - c = cattery.Cattery() - c.add_cats(["Fluffy", "Snookums"]) - assert c.cats == ["Fluffy", "Snookums"] - assert c.num_cats == 2 + +@pytest.fixture(params=[ + cattery.Cattery, + mccattery.McCattery +]) +def cattery_client(request): + c = request.param() + return c + + +def test__add_cats__succeeds(cattery_client): + cattery_client.add_cats(["Fluffy", "Snookums"]) + assert cattery_client.cats == ["Fluffy", "Snookums"] + assert cattery_client.num_cats == 2 ########################################################################### # remove_cat ########################################################################### -def test__remove_cat__succeeds(): - c = cattery.Cattery() - c.add_cats(["Fluffy", "Junior"]) - c.remove_cat("Fluffy") - assert c.cats == ["Junior"] - assert c.num_cats == 1 +def test__remove_cat__succeeds(cattery_client): + cattery_client.add_cats(["Fluffy", "Junior"]) + cattery_client.remove_cat("Fluffy") + assert cattery_client.cats == ["Junior"] + assert cattery_client.num_cats == 1 -def test__remove_cat__no_cats__fails(): - c = cattery.Cattery() +def test__remove_cat__no_cats__fails(cattery_client): with pytest.raises(cattery.CatNotFound): - c.remove_cat("Fluffles") + cattery_client.remove_cat("Fluffles") -def test__remove_cat__cat_not_in_cattery__fails(): - c = cattery.Cattery() - c.add_cats(["Fluffy"]) +def test__remove_cat__cat_not_in_cattery__fails(cattery_client): + cattery_client.add_cats(["Fluffy"]) with pytest.raises(cattery.CatNotFound): - c.remove_cat("Snookums") + cattery_client.remove_cat("Snookums") diff --git a/tests/test_safecatmath.py b/tests/test_safecatmath.py index 3f85a35..3a65645 100644 --- a/tests/test_safecatmath.py +++ b/tests/test_safecatmath.py @@ -1,35 +1,25 @@ -# import pytest +import pytest from catinabox import safecatmath -def test__cat_years_to_hooman_years__middle_age__succeeds(): - hooman_age = safecatmath.cat_years_to_hooman_years(7) - assert hooman_age == 35 - - -def test__cat_years_to_hooman_years__less_than_one_year__succeeds(): - hooman_age = safecatmath.cat_years_to_hooman_years(0.1) - assert hooman_age == 0.5 - - -def test__cat_years_to_hooman_years__0__returns_0(): - hooman_age = safecatmath.cat_years_to_hooman_years(0) - assert hooman_age == 0 - - -def test__cat_years_to_hooman_years__less_0__raises(): - assert True - - -def test__cat_years_to_hooman_years__older_than_1000__raises(): - assert True - - -def test__cat_years_to_hooman_years__string__raises(): - assert True - - -def test__cat_years_to_hooman_years__nan__raises(): - # hooman_age = float('nan') - assert True +@pytest.mark.parametrize('cat_age, hooman_age', [ + (7, 35), + (0.1, 0.5), + (0, 0) +]) +def test__cat_years_to_hooman_years(cat_age, hooman_age): + assert safecatmath.cat_years_to_hooman_years(cat_age) == hooman_age + + +@pytest.mark.parametrize('cat_age', [ + -1, + 10001, + 'test', + [-3, 4], + {3: 4}, + float('nan') +]) +def test__cat_years_to_hooman_years_invalid_raises(cat_age): + with pytest.raises(safecatmath.InvalidAge): + safecatmath.cat_years_to_hooman_years(cat_age)