test_groupings   A
last analyzed

Complexity

Total Complexity 13

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 45
dl 0
loc 76
rs 10
c 0
b 0
f 0
wmc 13

4 Functions

Rating   Name   Duplication   Size   Complexity  
A test_initialization_argument_checks() 0 10 4
A test_notimplementederrors() 0 14 3
A test_mutable_mapping_groups() 0 12 3
A test_immutable_mapping_groups() 0 12 3
1
""" Specific tests for the `oemof.groupings` module.
2
3
Most parts of the `groupings` module are tested via other tests, but certain
4
code paths don't get covered by those, which is what this module is for.
5
6
This file is part of project oemof (github.com/oemof/oemof). It's copyrighted
7
by the contributors recorded in the version control history of the file,
8
available from its original location oemof/tests/tests_groupings.py
9
10
SPDX-License-Identifier: MIT
11
"""
12
13
from types import MappingProxyType as MaProTy
14
15
from nose.tools import assert_raises
16
from nose.tools import eq_
17
18
from oemof.network.groupings import Grouping
19
20
21
def test_initialization_argument_checks():
22
    """`Grouping` constructor should raise `TypeError` on bad arguments."""
23
24
    message = "\n`Grouping` constructor did not check mandatory arguments."
25
    with assert_raises(TypeError, msg=message):
26
        Grouping()
27
28
    message = "\n`Grouping` constructor did not check conflicting arguments."
29
    with assert_raises(TypeError, msg=message):
30
        Grouping(key=lambda x: x, constant_key="key")
31
32
33
def test_notimplementederrors():
34
    """`Grouping` should raise an error when reaching unreachable code."""
35
36
    message = "\n`Grouping.key` not overriden, but no error raised."
37
    with assert_raises(NotImplementedError, msg=message):
38
        g = Grouping(key="key")
39
        del g.key
40
        g.key("dummy argument")
41
42
    message = "\n`Grouping.filter` not overriden, but no error raised."
43
    with assert_raises(NotImplementedError, msg=message):
44
        g = Grouping(key="key")
45
        del g.filter
46
        g.filter("dummy argument")
47
48
49
def test_mutable_mapping_groups():
50
    g = Grouping(
51
        key=lambda x: len(x),
52
        value=lambda x: {y: len([z for z in x if z == y]) for y in x},
53
    )
54
    groups = {}
55
    expected = {3: {"o": 2, "f": 1}}
56
    g("foo", groups)
57
    eq_(
58
        groups,
59
        expected,
60
        "\n  Expected: {} \n  Got     : {}".format(expected, groups),
61
    )
62
63
64
def test_immutable_mapping_groups():
65
    g = Grouping(
66
        key=lambda x: len(x),
67
        value=lambda x: MaProTy({y: len([z for z in x if z == y]) for y in x}),
68
    )
69
    groups = {}
70
    expected = {3: MaProTy({"o": 2, "f": 1})}
71
    g("foo", groups)
72
    eq_(
73
        groups,
74
        expected,
75
        "\n  Expected: {} \n  Got     : {}".format(expected, groups),
76
    )
77