ArchiveFeedTests   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 71
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 71
rs 10
wmc 9

5 Methods

Rating   Name   Duplication   Size   Complexity  
A tearDown() 0 2 1
A setUp() 0 2 1
A test_archive_feed_fail() 0 24 3
A test_archive_feed_not_enough_entries() 0 18 2
A test_archive_feed() 0 19 2
1
import os
2
from sqlalchemy import engine_from_config
3
import unittest
4
from oe_utils.scripts import archive_feed
5
try:
6
    from unittest.mock import Mock, patch, MagicMock, call
7
except:
8
    from mock import Mock, patch, MagicMock, call
9
from oe_utils.data.data_managers import AtomFeedManager
10
from sqlalchemy.orm import sessionmaker
11
import responses
12
from requests.exceptions import HTTPError
13
try:
14
    from initfeedgen import fill_db_feeds, Feed, FeedEntry
15
except:
16
    from tests.initfeedgen import fill_db_feeds, Feed, FeedEntry
17
import tempfile
18
19
here = os.path.dirname(os.path.abspath(__file__))
20
settings = {"sqlalchemy.url": "sqlite:///{}/test.sqlite".format(here)}
21
engine = engine_from_config(settings, prefix='sqlalchemy.')
22
here = os.path.dirname(os.path.abspath(__file__))
23
fixture_directory = tempfile.gettempdir()
24
25
26
def setUpModule():
27
    fill_db_feeds(engine)
28
29
30
class TestAtomFeedManager(AtomFeedManager):
31
    '''
32
    Een datamanager voor de feeds.
33
    '''
34
35
    def __init__(self, session, feed_repository):
36
        super(TestAtomFeedManager, self).__init__(session, feed_repository, Feed, FeedEntry)
37
38
39
class ArchiveFeedTests(unittest.TestCase):
40
41
    def setUp(self):
42
        self.db = sessionmaker(bind=engine)()
43
44
    def tearDown(self):
45
        self.db.close()
46
47
    @responses.activate
48
    def test_archive_feed_not_enough_entries(self):
49
        with patch('oe_utils.scripts.archive_feed.log') as log_mock:
50
            responses.add(
51
                responses.POST,
52
                url="https://host.be/rapporten/atomfeed/archive",
53
                status=200)
54
            feed_list = [{
55
                'atom_feed_folder': fixture_directory,
56
                'atom_feed_manager': TestAtomFeedManager,
57
                'max_entries': 100,
58
                'archive_feed_url': 'https://host.be/bron/atomfeed/archive'
59
            }]
60
            archive_feed.archive_entries(feed_list=feed_list, session=self.db, system_token='test_token')
61
            debug_calls = [
62
                call.debug('Number of entries: 10'),
63
            ]
64
            self.assertEqual(log_mock.debug.mock_calls, debug_calls)
65
66
    @responses.activate
67
    def test_archive_feed(self):
68
        with patch('oe_utils.scripts.archive_feed.log') as log_mock:
69
            responses.add(
70
                responses.POST,
71
                url="https://host.be/bron/atomfeed/archive",
72
                status=200)
73
            feed_list = [{
74
                'atom_feed_folder': fixture_directory,
75
                'atom_feed_manager': TestAtomFeedManager,
76
                'max_entries': 2,
77
                'archive_feed_url': 'https://host.be/bron/atomfeed/archive'
78
            }]
79
            archive_feed.archive_entries(feed_list=feed_list, session=self.db, system_token='test_token')
80
            debug_calls = [
81
                call.debug('Number of entries: 10'),
82
                call.debug('Archive current feed')
83
            ]
84
            self.assertEqual(log_mock.debug.mock_calls, debug_calls)
85
86
    @responses.activate
87
    def test_archive_feed_fail(self):
88
        with patch('oe_utils.scripts.archive_feed.log') as log_mock:
89
            responses.add(
90
                responses.POST,
91
                url="https://host.be/bron/atomfeed/archive",
92
                status=500)
93
            feed_list = [{
94
                'atom_feed_folder': fixture_directory,
95
                'atom_feed_manager': TestAtomFeedManager,
96
                'max_entries': 2,
97
                'archive_feed_url': 'https://host.be/bron/atomfeed/archive'
98
            }]
99
            with self.assertRaises(HTTPError):
100
                archive_feed.archive_entries(feed_list=feed_list, session=self.db, system_token='test_token')
101
            debug_calls = [
102
                call.debug('Number of entries: 10'),
103
                call.debug('Archive current feed')
104
            ]
105
            self.assertEqual(log_mock.debug.mock_calls, debug_calls)
106
            error_calls = [
107
                call.error('Failed to archive on url https://host.be/bron/atomfeed/archive'),
108
            ]
109
            self.assertEqual(log_mock.error.mock_calls, error_calls)
110