test_describe.py

Last source

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
"""Module holding BDD tests for isshub Repository code_repository entity."""
from functools import partial
from uuid import uuid4

import pytest
from pytest import mark
from pytest_bdd import given, parsers, scenario, scenarios, then

from isshub.domain.utils.testing.validation import (
    FrozenAttributeError,
    check_field,
    check_field_not_nullable,
    check_field_value,
    string_only,
    uuid4_only,
)

from ...namespace.tests.fixtures import namespace
from .fixtures import repository_factory


FEATURE_FILE = "../features/describe.feature"
scenario = partial(scenario, FEATURE_FILE)


@mark.parametrize(["value", "exception"], uuid4_only)
@scenario("A repository identifier is a uuid")
def test_repository_identifier_is_a_uuid(value, exception):
    pass


@mark.parametrize(["value", "exception"], string_only)
@scenario("A repository name is a string")
def test_repository_name_is_a_string(value, exception):
    pass


@mark.parametrize(
    ["value", "exception"],
    [(pytest.lazy_fixture("namespace"), None), ("foo", TypeError), (1, TypeError)],
)
@scenario("A repository namespace is a Namespace")
def test_repository_namespace_is_a_namespace(value, exception):
    pass


@given("a repository", target_fixture="repository")
def a_repository(repository_factory):
    return repository_factory()


@then(parsers.parse("it must have a field named {field_name:w}"))
def repository_has_field(repository, field_name):
    check_field(repository, field_name)


@then(parsers.parse("its {field_name:w} must be a {field_type}"))
def repository_field_is_of_a_certain_type(
    repository_factory,
    field_name,
    field_type,
    # next args are for parametrize
    value,
    exception,
):
    check_field_value(repository_factory, field_name, value, exception)


@then(parsers.parse("its {field_name:w} is mandatory"))
def repository_field_is_mandatory(repository_factory, field_name):
    check_field_not_nullable(repository_factory, field_name)


@scenario("A repository identifier cannot be changed")
def test_repository_identifier_cannot_be_changed():
    pass


@then("its identifier cannot be changed")
def repository_identifier_cannot_be_changed(repository):
    with pytest.raises(FrozenAttributeError):
        repository.identifier = uuid4()


# To make pytest-bdd fail if some scenarios are not implemented. KEEP AT THE END
scenarios(FEATURE_FILE)

Changes

feat(repository): Add domain repositories

Commit
Hash

27f013e2a3722926a9bbe300a77a493604f0993c

Date

2020-10-06 17:30:45 +0200

Type

Modified

Stats

+14 -8

@@ -1,4 +1,5 @@
 """Module holding BDD tests for isshub Repository code_repository entity."""
+from functools import partial
 from uuid import uuid4

 import pytest
@@ -18,14 +19,18 @@ from ...namespace.tests.fixtures import namespace
 from .fixtures import repository_factory


+FEATURE_FILE = "../features/describe.feature"
+scenario = partial(scenario, FEATURE_FILE)
+
+
 @mark.parametrize(["value", "exception"], uuid4_only)
-@scenario("../features/describe.feature", "A Repository identifier is a uuid")
+@scenario("A repository identifier is a uuid")
 def test_repository_identifier_is_a_uuid(value, exception):
     pass


 @mark.parametrize(["value", "exception"], string_only)
-@scenario("../features/describe.feature", "A Repository name is a string")
+@scenario("A repository name is a string")
 def test_repository_name_is_a_string(value, exception):
     pass

@@ -34,15 +39,12 @@ def test_repository_name_is_a_string(value, exception):
     ["value", "exception"],
     [(pytest.lazy_fixture("namespace"), None), ("foo", TypeError), (1, TypeError)],
 )
-@scenario("../features/describe.feature", "A Repository namespace is a Namespace")
+@scenario("A repository namespace is a Namespace")
 def test_repository_namespace_is_a_namespace(value, exception):
     pass


-scenarios("../features/describe.feature")
-
-
-@given("a Repository", target_fixture="repository")
+@given("a repository", target_fixture="repository")
 def a_repository(repository_factory):
     return repository_factory()

@@ -69,7 +71,7 @@ def repository_field_is_mandatory(repository_factory, field_name):
     check_field_not_nullable(repository_factory, field_name)


-@scenario("../features/describe.feature", "A Repository identifier cannot be changed")
+@scenario("A repository identifier cannot be changed")
 def test_repository_identifier_cannot_be_changed():
     pass

@@ -78,3 +80,7 @@ def test_repository_identifier_cannot_be_changed():
 def repository_identifier_cannot_be_changed(repository):
     with pytest.raises(FrozenAttributeError):
         repository.identifier = uuid4()
+
+
+# To make pytest-bdd fail if some scenarios are not implemented. KEEP AT THE END
+scenarios(FEATURE_FILE)

fix(entity): id changed from int to uuid4, renamed to identifier

Commit
Hash

79f704bde4575a9ddeb623d67d8965a62138adc9

Date

2020-10-05 10:51:49 +0200

Type

Modified

Stats

+10 -9

@@ -1,4 +1,5 @@
 """Module holding BDD tests for isshub Repository code_repository entity."""
+from uuid import uuid4

 import pytest
 from pytest import mark
@@ -9,17 +10,17 @@ from isshub.domain.utils.testing.validation import (
     check_field,
     check_field_not_nullable,
     check_field_value,
-    positive_integer_only,
     string_only,
+    uuid4_only,
 )

 from ...namespace.tests.fixtures import namespace
 from .fixtures import repository_factory


-@mark.parametrize(["value", "exception"], positive_integer_only)
-@scenario("../features/describe.feature", "A Repository id is a positive integer")
-def test_repository_id_is_a_positive_integer(value, exception):
+@mark.parametrize(["value", "exception"], uuid4_only)
+@scenario("../features/describe.feature", "A Repository identifier is a uuid")
+def test_repository_identifier_is_a_uuid(value, exception):
     pass


@@ -68,12 +69,12 @@ def repository_field_is_mandatory(repository_factory, field_name):
     check_field_not_nullable(repository_factory, field_name)


-@scenario("../features/describe.feature", "A Repository id cannot be changed")
-def test_repository_id_cannot_be_changed():
+@scenario("../features/describe.feature", "A Repository identifier cannot be changed")
+def test_repository_identifier_cannot_be_changed():
     pass


-@then("its id cannot be changed")
-def repository_id_cannot_be_changed(repository):
+@then("its identifier cannot be changed")
+def repository_identifier_cannot_be_changed(repository):
     with pytest.raises(FrozenAttributeError):
-        repository.id = repository.id + 1
+        repository.identifier = uuid4()

fix(entities): Entities id field are frozen once set

Commit
Hash

ef8edc20b6a674bfc98c79028684279bcc9ed324

Date

2020-09-27 09:56:59 +0200

Type

Modified

Stats

+12 -0

@@ -5,6 +5,7 @@ from pytest import mark
 from pytest_bdd import given, parsers, scenario, scenarios, then

 from isshub.domain.utils.testing.validation import (
+    FrozenAttributeError,
     check_field,
     check_field_not_nullable,
     check_field_value,
@@ -65,3 +66,14 @@ def repository_field_is_of_a_certain_type(
 @then(parsers.parse("its {field_name:w} is mandatory"))
 def repository_field_is_mandatory(repository_factory, field_name):
     check_field_not_nullable(repository_factory, field_name)
+
+
+@scenario("../features/describe.feature", "A Repository id cannot be changed")
+def test_repository_id_cannot_be_changed():
+    pass
+
+
+@then("its id cannot be changed")
+def repository_id_cannot_be_changed(repository):
+    with pytest.raises(FrozenAttributeError):
+        repository.id = repository.id + 1

fix(bdd): Rename “can/cannot be none” describing scenarios

Commit
Hash

cf1ea754ee276b16ddce53692a59174b2b583369

Date

2020-09-26 17:13:51 +0200

Type

Modified

Stats

+2 -2

@@ -62,6 +62,6 @@ def repository_field_is_of_a_certain_type(
     check_field_value(repository_factory, field_name, value, exception)


-@then(parsers.parse("its {field_name:w} cannot be none"))
-def repository_field_cannot_be_none(repository_factory, field_name):
+@then(parsers.parse("its {field_name:w} is mandatory"))
+def repository_field_is_mandatory(repository_factory, field_name):
     check_field_not_nullable(repository_factory, field_name)

chore: Fix breaking changes from updated dependencies

Commit
Hash

7c6dfe01ac4ffbaac21d5d3836d5fda9c8391cf7

Date

2020-09-25 22:54:00 +0200

Type

Modified

Stats

+2 -2

@@ -40,8 +40,8 @@ def test_repository_namespace_is_a_namespace(value, exception):
 scenarios("../features/describe.feature")


-@given("a Repository")
-def repository(repository_factory):
+@given("a Repository", target_fixture="repository")
+def a_repository(repository_factory):
     return repository_factory()

refactor(core): Rename core domain context to code_repository

Commit
Hash

07e279b370c0924f2b2cf32aea016b307001dfa0

Date

2019-08-15 23:31:33 +0200

Type

Renamed

Old path

isshub/domain/contexts/core/entities/repository/tests/test_describe.py

Stats

+1 -1

@@ -1,4 +1,4 @@
-"""Module holding BDD tests for isshub Repository core entity."""
+"""Module holding BDD tests for isshub Repository code_repository entity."""

 import pytest
 from pytest import mark