Completed
Push — master ( a78279...04d974 )
by
unknown
10s
created

AuditTests.test_audit_bijlage_with_request()   A

Complexity

Conditions 1

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
cc 1
c 1
b 0
f 1
dl 0
loc 10
rs 9.4285
1
# -*- coding: utf-8 -*-
2
import unittest
3
from oe_utils.audit import audit, audit_with_request
4
from oe_utils.data.data_managers import AuditManager
5
from oe_utils.data.models import Wijziging
6
from oe_utils.data.db_audit_manager import includeme
7
from oe_utils.data.db_audit_manager import audit_manager
8
9
try:
10
    from unittest.mock import Mock, MagicMock
11
except ImportError:
12
    from mock import Mock, MagicMock, call  # pragma: no cover
13
try:
14
    import configparser
15
except ImportError:
16
    import ConfigParser as configparser
17
import os
18
from sqlalchemy import engine_from_config
19
from sqlalchemy.orm import sessionmaker
20
from zope.sqlalchemy import ZopeTransactionExtension
21
from oe_utils.data.models import Base
22
from jsonpublish import register_adapter
23
24
25
def init_test_db(engine):
26
    Base.metadata.drop_all(engine)
27
    Base.metadata.create_all(engine)
28
    session_maker = sessionmaker(
29
        bind=engine
30
    )
31
    session = session_maker()
32
33
    session.commit()
34
    session.close()
35
36
37
class Resource:
38
    def __init__(self):
39
        self.id = None,
40
        self.naam = None
41
        self.voornaam = None
42
43
44
@register_adapter(Resource)
45
def resource_adapter(obj, request=None):
46
    return {
47
        'id': obj.id,
48
        'naam': obj.naam,
49
        'voornaam': obj.voornaam
50
}
51
52
53
class DummyParent(object):
54
55
    def __init__(self):
56
        self.request = MagicMock()
57
58
    @audit()
59
    def dummy(self):
60
        resource = Resource()
61
        resource.id = 123
62
        resource.naam = 'crash test'
63
        resource.voornaam = 'dummy'
64
        return resource
65
66
    @audit()
67
    def dummy_none(self):
68
        return 'test'
69
70
    @audit(actie='bijlage bewerken')
71
    def dummy_bijlage(self):
72
        return None
73
74
75
@audit_with_request(actie='bijlage blijven bewerken')
76
def dummy_bijlage_with_request(request):
77
    return None
78
79
80
class AuditTests(unittest.TestCase):
81
82 View Code Duplication
    @classmethod
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
83
    def setUpClass(cls):
84
        config = configparser.ConfigParser()
85
        config.read(os.path.join(os.path.dirname(__file__), 'test.ini'))
86
        settings = config.items('app:oe_utils')
87
        settings = dict((s[0], s[1]) for s in settings)
88
        cls.engine = engine_from_config(settings, prefix='sqlalchemy.')
89
        cls.session_maker = sessionmaker(
90
            bind=cls.engine,
91
            extension=ZopeTransactionExtension()
92
        )
93
94
    def setUp(self):
95
        init_test_db(self.engine)
96
        self.session = self.session_maker()
97
        self.dummy_parent = DummyParent()
98
        self.audit_manager = AuditManager(self.session)
99
        self.dummy_parent.request.audit_manager = self.audit_manager
100
101
    def tearDown(self):
102
        self.session.close()
103
104
    def test_audit_get(self):
105
        self.dummy_parent.request.user = {'actor': {'uri': 'uri', 'omschrijving': 'omschrijving'}}
106
        self.dummy_parent.request.method = 'GET'
107
        self.dummy_parent.request.matchdict = {'id': 123}
108
        self.dummy_parent.dummy()
109
        wijziging = self.session.query(Wijziging).order_by(Wijziging.updated_at.desc()).first()
110
        self.assertEqual('opvragen', wijziging.actie)
111
        self.assertEqual('omschrijving', wijziging.updated_by_omschrijving)
112
        self.assertEqual('crash test', wijziging.resource_object_json['naam'])
113
114
    def test_audit_put(self):
115
        self.dummy_parent.request.method = 'PUT'
116
        self.dummy_parent.request.matchdict = {'id': 123}
117
        self.dummy_parent.dummy()
118
        wijziging = self.session.query(Wijziging).order_by(Wijziging.updated_at.desc()).first()
119
        self.assertEqual('bewerken', wijziging.actie)
120
        self.assertEqual('crash test', wijziging.resource_object_json['naam'])
121
        self.assertEqual('publiek', wijziging.updated_by_omschrijving)
122
123
    def test_audit_post(self):
124
        self.dummy_parent.request.method = 'POST'
125
        self.dummy_parent.dummy()
126
        wijziging = self.session.query(Wijziging).order_by(Wijziging.updated_at.desc()).first()
127
        self.assertEqual('aanmaken', wijziging.actie)
128
        self.assertEqual('crash test', wijziging.resource_object_json['naam'])
129
        self.assertEqual('crash test', wijziging.resource_object_json['naam'])
130
131 View Code Duplication
    def test_audit_delete(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
132
        self.dummy_parent.request.method = 'DELETE'
133
        self.dummy_parent.request.matchdict = {'id': 123}
134
        self.dummy_parent.dummy_none()
135
        wijziging = self.session.query(Wijziging).order_by(Wijziging.updated_at.desc()).first()
136
        self.assertEqual('verwijderen', wijziging.actie)
137
        self.assertEqual(123, wijziging.resource_object_id)
138
        self.assertIsNone(wijziging.resource_object_json)
139
140 View Code Duplication
    def test_audit_other(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
141
        self.dummy_parent.request.method = 'HEAD'
142
        self.dummy_parent.request.matchdict = {'id': 123}
143
        self.dummy_parent.dummy_none()
144
        wijziging = self.session.query(Wijziging).order_by(Wijziging.updated_at.desc()).first()
145
        self.assertEqual('onbekend', wijziging.actie)
146
        self.assertEqual(123, wijziging.resource_object_id)
147
        self.assertIsNone(wijziging.resource_object_json)
148
149 View Code Duplication
    def test_audit_bijlage(self):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
150
        self.dummy_parent.request.method = 'PUT'
151
        self.dummy_parent.request.matchdict = {'id': 123}
152
        self.dummy_parent.dummy_bijlage()
153
        wijziging = self.session.query(Wijziging).order_by(Wijziging.updated_at.desc()).first()
154
        self.assertEqual('bijlage bewerken', wijziging.actie)
155
        self.assertEqual(123, wijziging.resource_object_id)
156
        self.assertIsNone(wijziging.resource_object_json)
157
158
    def test_db_audit_manager(self):
159
        config = Mock()
160
        includeme(config)
161
        request = MagicMock()
162
        request.db = self.session
163
        manager = audit_manager(request)
164
        self.assertIsInstance(manager, AuditManager)
165
166
    def test_audit_bijlage_with_request(self):
167
        request = MagicMock()
168
        request.audit_manager = AuditManager(self.session)
169
        request.method = 'PUT'
170
        request.matchdict = {'id': 1234}
171
        dummy_bijlage_with_request(request)
172
        wijziging = self.session.query(Wijziging).order_by(Wijziging.updated_at.desc()).first()
173
        self.assertEqual('bijlage blijven bewerken', wijziging.actie)
174
        self.assertEqual(1234, wijziging.resource_object_id)
175
        self.assertIsNone(wijziging.resource_object_json)
176
177
178