Passed
Push — master ( 812d55...611d69 )
by torrua
02:04
created

test_keyboa_maker   A

Complexity

Total Complexity 16

Size/Duplication

Total Lines 188
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 113
dl 0
loc 188
rs 10
c 0
b 0
f 0
wmc 16
1
# -*- coding:utf-8 -*-
2
"""
3
Test for keyboa_maker() function
4
"""
5
import os
6
import sys
7
8
sys.path.insert(0, "%s/../" % os.path.dirname(os.path.abspath(__file__)))
9
10
import pytest
11
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton
12
13
from keyboa.keyboards import keyboa_maker
14
15
16
def test_pass_none():
17
    """
18
19
    :return:
20
    """
21
    result = keyboa_maker()
22
    assert isinstance(result, InlineKeyboardMarkup)
23
    assert result.to_dict()["inline_keyboard"] == []
24
25
26
def test_pass_string_with_copy_to_callback():
27
    """
28
29
    :return:
30
    """
31
    result = keyboa_maker(
32
        items="Text", copy_text_to_callback=True)
33
    assert isinstance(result, InlineKeyboardMarkup)
34
    assert result.to_dict()["inline_keyboard"] == [[{'callback_data': 'Text', 'text': 'Text'}]]
35
36
37
def test_pass_string_without_copy_to_callback():
38
    """
39
40
    :return:
41
    """
42
    with pytest.raises(Exception) as _:
43
        assert isinstance(keyboa_maker(items="Text"), InlineKeyboardMarkup)
44
45
46
def test_pass_one_button():
47
    """
48
49
    :return:
50
    """
51
    result = keyboa_maker(
52
        items=InlineKeyboardButton(
53
            **{"text": "text", "callback_data": "callback_data"}))
54
    assert isinstance(result, InlineKeyboardMarkup)
55
    assert result.to_dict()["inline_keyboard"] == [[
56
        {'text': 'text', 'callback_data': 'callback_data'}]]
57
58
59
def test_pass_one_item_dict_with_text_field():
60
    """
61
62
    :return:
63
    """
64
    result = keyboa_maker(
65
        items={"text": "text", "callback_data": "callback_data"})
66
    assert isinstance(result, InlineKeyboardMarkup)
67
    assert result.to_dict()["inline_keyboard"] == [[
68
       {'text': 'text', 'callback_data': 'callback_data'}]]
69
70
71
def test_pass_one_item_dict_without_text_field():
72
    """
73
74
    :return:
75
    """
76
    result = keyboa_maker(
77
        items={"word": "callback_data", })
78
    assert isinstance(result, InlineKeyboardMarkup)
79
    assert result.to_dict()["inline_keyboard"] == [[
80
       {'text': 'word', 'callback_data': 'callback_data'}]]
81
82
83
def test_pass_multi_item_dict_without_text_field():
84
    """
85
86
    :return:
87
    """
88
    with pytest.raises(ValueError) as _:
89
        wrong_dict = {"word_1": "callback_data_1", "word_2": "callback_data_1", }
90
        keyboa_maker(items=wrong_dict)
91
92
93
def test_pass_one_row():
94
    """
95
96
    :return:
97
    """
98
    start = 0
99
    stop = 8
100
    result = keyboa_maker(
101
        items=list(range(start, stop)),
102
        front_marker="FRONT_",
103
        copy_text_to_callback=True,
104
    )
105
    assert isinstance(result, InlineKeyboardMarkup)
106
    assert len(result.to_dict()["inline_keyboard"]) == stop
107
    assert result.to_dict()["inline_keyboard"][0][0]["callback_data"] == "FRONT_%s" % start
108
109
110
def test_pass_structure():
111
    """
112
113
    :return:
114
    """
115
    result = keyboa_maker(
116
        items=[list(range(4)), list(range(2, 5)), "string", {"t": "cbd"}],
117
        front_marker="STRUCTURE_",
118
        copy_text_to_callback=True,
119
    )
120
121
    assert isinstance(result, InlineKeyboardMarkup)
122
    assert len(result.to_dict()["inline_keyboard"]) == 4
123
    assert result.to_dict()["inline_keyboard"][0][0]["callback_data"] == "STRUCTURE_0"
124
    assert result.to_dict()["inline_keyboard"][1][0]["callback_data"] == "STRUCTURE_2"
125
    assert result.to_dict()["inline_keyboard"][2][0]["callback_data"] == "STRUCTURE_string"
126
    assert result.to_dict()["inline_keyboard"][3][0]["callback_data"] == "STRUCTURE_cbd"
127
128
129
def test_auto_keyboa_maker_alignment():
130
    result = keyboa_maker(
131
        items=list(range(0, 36)),
132
        copy_text_to_callback=True,
133
        auto_alignment=True)
134
    assert isinstance(result, InlineKeyboardMarkup)
135
136
    with pytest.raises(TypeError) as _:
137
        keyboa_maker(
138
            items=list(range(0, 36)),
139
            copy_text_to_callback=True,
140
            auto_alignment="alignment")
141
142
    with pytest.raises(ValueError) as _:
143
        keyboa_maker(
144
            items=list(range(0, 36)),
145
            copy_text_to_callback=True,
146
            auto_alignment=[-1, 0])
147
148
    with pytest.raises(ValueError) as _:
149
        keyboa_maker(
150
            items=list(range(0, 36)),
151
            copy_text_to_callback=True,
152
            auto_alignment=[10, 11, 12])
153
154
    result = keyboa_maker(
155
            items=list(range(0, 36)),
156
            copy_text_to_callback=True,
157
            auto_alignment=[3, 4, 6, ])
158
    assert isinstance(result, InlineKeyboardMarkup)
159
160
    result = keyboa_maker(
161
            items=list(range(0, 36)),
162
            copy_text_to_callback=True,
163
            auto_alignment=True,
164
            reverse_alignment_range=True)
165
    assert isinstance(result, InlineKeyboardMarkup)
166
167
    result = keyboa_maker(
168
            items=list(range(0, 36)),
169
            copy_text_to_callback=True,
170
            auto_alignment=[3, 4, 6, ],
171
            reverse_alignment_range=True)
172
    assert isinstance(result, InlineKeyboardMarkup)
173
174
    result = keyboa_maker(
175
            items=list(range(0, 36)),
176
            copy_text_to_callback=True,
177
            auto_alignment=[5, 7, ],
178
            reverse_alignment_range=True)
179
    assert isinstance(result, InlineKeyboardMarkup)
180
181
182
def test_auto_keyboa_maker_items_in_row():
183
    result = keyboa_maker(
184
        items=list(range(0, 36)),
185
        copy_text_to_callback=True,
186
        items_in_row=6)
187
    assert isinstance(result, InlineKeyboardMarkup)
188