File: test_query.py

package info (click to toggle)
librouteros 3.4.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 376 kB
  • sloc: python: 1,579; makefile: 141; sh: 4
file content (154 lines) | stat: -rw-r--r-- 4,029 bytes parent folder | download | duplicates (2)
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# -*- coding: UTF-8 -*-
import pytest
from unittest.mock import MagicMock, patch
from librouteros.query import (
    Query,
    Key,
    And,
    Or,
    AsyncQuery,
)


class Test_Query:
    def setup_method(self):
        self.query = Query(
            path=MagicMock(),
            api=MagicMock(),
            keys=MagicMock(),
        )
        self.async_query = AsyncQuery(
            path=MagicMock(),
            api=MagicMock(),
            keys=MagicMock(),
        )

    def test_after_init_query_is_empty_tuple(self):
        assert self.query.query == tuple()
        assert self.async_query.query == tuple()

    def test_where_returns_self(self):
        assert self.query.where() == self.query
        assert self.async_query.where() == self.async_query

    def test_where_chains_from_args(self):
        self.query.where((1, 2, 3), (4, 5))
        assert self.query.query == (1, 2, 3, 4, 5)

        self.async_query.where((1, 2, 3), (4, 5))
        assert self.async_query.query == (1, 2, 3, 4, 5)

    @patch("librouteros.query.iter")
    def test_iter_with_proplist(self, iter_mock):
        self.query.keys = ("name", "disabled")
        self.query.query = ("key1", "key2")
        iter(self.query)
        self.query.api.rawCmd.assert_called_once_with(
            str(self.query.path.join.return_value),
            "=.proplist=name,disabled",
            "key1",
            "key2",
        )

    def test_iter_with_proplist_async(self):
        self.async_query.keys = ("name", "disabled")
        self.async_query.query = ("key1", "key2")
        self.async_query.__aiter__()
        self.async_query.api.rawCmd.assert_called_once_with(
            str(self.async_query.path.join.return_value),
            "=.proplist=name,disabled",
            "key1",
            "key2",
        )

    @patch("librouteros.query.iter")
    def test_iter_no_proplist(self, iter_mock):
        self.query.keys = ()
        self.query.query = ("key1", "key2")
        iter(self.query)
        self.query.api.rawCmd.assert_called_once_with(
            str(self.query.path.join.return_value),
            "key1",
            "key2",
        )

    def test_iter_no_proplist_async(self):
        self.async_query.keys = ()
        self.async_query.query = ("key1", "key2")
        self.async_query.__aiter__()
        self.async_query.api.rawCmd.assert_called_once_with(
            str(self.async_query.path.join.return_value),
            "key1",
            "key2",
        )


class Test_Key:
    def setup_method(self):
        self.key = Key(
            name="key_name",
        )

    @pytest.mark.parametrize(
        "param, expected",
        (
            (True, "yes"),
            (False, "no"),
            ("yes", "yes"),
            (1, "1"),
        ),
    )
    def test_eq(self, param, expected):
        result = tuple(self.key == param)[0]
        assert result == "?=key_name={}".format(expected)

    def test_ne(self):
        assert tuple(self.key != 1) == ("?=key_name=1", "?#!")

    @pytest.mark.parametrize(
        "param, expected",
        (
            (True, "yes"),
            (False, "no"),
            ("yes", "yes"),
            (1, "1"),
        ),
    )
    def test_lt(self, param, expected):
        result = tuple(self.key < param)[0]
        assert result == "?<key_name={}".format(expected)

    @pytest.mark.parametrize(
        "param, expected",
        (
            (True, "yes"),
            (False, "no"),
            ("yes", "yes"),
            (1, "1"),
        ),
    )
    def test_gt(self, param, expected):
        result = tuple(self.key > param)[0]
        assert result == "?>key_name={}".format(expected)


def test_And():
    assert tuple(
        And(
            (1,),
            (2,),
            (3,),
            (4,),
        )
    ) == (1, 2, 3, 4, "?#&", "?#&", "?#&")


def test_Or():
    assert tuple(
        Or(
            (1,),
            (2,),
            (3,),
            (4,),
        )
    ) == (1, 2, 3, 4, "?#|", "?#|", "?#|")