types_test.go (view raw)
1package tgbotapi
2
3import (
4 "testing"
5 "time"
6)
7
8func TestUserStringWith(t *testing.T) {
9 user := User{
10 ID: 0,
11 FirstName: "Test",
12 LastName: "Test",
13 UserName: "",
14 LanguageCode: "en",
15 IsBot: false,
16 }
17
18 if user.String() != "Test Test" {
19 t.Fail()
20 }
21}
22
23func TestUserStringWithUserName(t *testing.T) {
24 user := User{
25 ID: 0,
26 FirstName: "Test",
27 LastName: "Test",
28 UserName: "@test",
29 LanguageCode: "en",
30 }
31
32 if user.String() != "@test" {
33 t.Fail()
34 }
35}
36
37func TestMessageTime(t *testing.T) {
38 message := Message{Date: 0}
39
40 date := time.Unix(0, 0)
41 if message.Time() != date {
42 t.Fail()
43 }
44}
45
46func TestMessageIsCommandWithCommand(t *testing.T) {
47 message := Message{Text: "/command"}
48 message.Entities = []MessageEntity{{Type: "bot_command", Offset: 0, Length: 8}}
49
50 if !message.IsCommand() {
51 t.Fail()
52 }
53}
54
55func TestIsCommandWithText(t *testing.T) {
56 message := Message{Text: "some text"}
57
58 if message.IsCommand() {
59 t.Fail()
60 }
61}
62
63func TestIsCommandWithEmptyText(t *testing.T) {
64 message := Message{Text: ""}
65
66 if message.IsCommand() {
67 t.Fail()
68 }
69}
70
71func TestCommandWithCommand(t *testing.T) {
72 message := Message{Text: "/command"}
73 message.Entities = []MessageEntity{{Type: "bot_command", Offset: 0, Length: 8}}
74
75 if message.Command() != "command" {
76 t.Fail()
77 }
78}
79
80func TestCommandWithEmptyText(t *testing.T) {
81 message := Message{Text: ""}
82
83 if message.Command() != "" {
84 t.Fail()
85 }
86}
87
88func TestCommandWithNonCommand(t *testing.T) {
89 message := Message{Text: "test text"}
90
91 if message.Command() != "" {
92 t.Fail()
93 }
94}
95
96func TestCommandWithBotName(t *testing.T) {
97 message := Message{Text: "/command@testbot"}
98 message.Entities = []MessageEntity{{Type: "bot_command", Offset: 0, Length: 16}}
99
100 if message.Command() != "command" {
101 t.Fail()
102 }
103}
104
105func TestCommandWithAtWithBotName(t *testing.T) {
106 message := Message{Text: "/command@testbot"}
107 message.Entities = []MessageEntity{{Type: "bot_command", Offset: 0, Length: 16}}
108
109 if message.CommandWithAt() != "command@testbot" {
110 t.Fail()
111 }
112}
113
114func TestMessageCommandArgumentsWithArguments(t *testing.T) {
115 message := Message{Text: "/command with arguments"}
116 message.Entities = []MessageEntity{{Type: "bot_command", Offset: 0, Length: 8}}
117 if message.CommandArguments() != "with arguments" {
118 t.Fail()
119 }
120}
121
122func TestMessageCommandArgumentsWithMalformedArguments(t *testing.T) {
123 message := Message{Text: "/command-without argument space"}
124 message.Entities = []MessageEntity{{Type: "bot_command", Offset: 0, Length: 8}}
125 if message.CommandArguments() != "without argument space" {
126 t.Fail()
127 }
128}
129
130func TestMessageCommandArgumentsWithoutArguments(t *testing.T) {
131 message := Message{Text: "/command"}
132 if message.CommandArguments() != "" {
133 t.Fail()
134 }
135}
136
137func TestMessageCommandArgumentsForNonCommand(t *testing.T) {
138 message := Message{Text: "test text"}
139 if message.CommandArguments() != "" {
140 t.Fail()
141 }
142}
143
144func TestMessageEntityParseURLGood(t *testing.T) {
145 entity := MessageEntity{URL: "https://www.google.com"}
146
147 if _, err := entity.ParseURL(); err != nil {
148 t.Fail()
149 }
150}
151
152func TestMessageEntityParseURLBad(t *testing.T) {
153 entity := MessageEntity{URL: ""}
154
155 if _, err := entity.ParseURL(); err == nil {
156 t.Fail()
157 }
158}
159
160func TestChatIsPrivate(t *testing.T) {
161 chat := Chat{ID: 10, Type: "private"}
162
163 if !chat.IsPrivate() {
164 t.Fail()
165 }
166}
167
168func TestChatIsGroup(t *testing.T) {
169 chat := Chat{ID: 10, Type: "group"}
170
171 if !chat.IsGroup() {
172 t.Fail()
173 }
174}
175
176func TestChatIsChannel(t *testing.T) {
177 chat := Chat{ID: 10, Type: "channel"}
178
179 if !chat.IsChannel() {
180 t.Fail()
181 }
182}
183
184func TestChatIsSuperGroup(t *testing.T) {
185 chat := Chat{ID: 10, Type: "supergroup"}
186
187 if !chat.IsSuperGroup() {
188 t.Fail()
189 }
190}
191
192func TestFileLink(t *testing.T) {
193 file := File{FilePath: "test/test.txt"}
194
195 if file.Link("token") != "https://api.telegram.org/file/bottoken/test/test.txt" {
196 t.Fail()
197 }
198}
199
200// Ensure all configs are sendable
201var (
202 _ Chattable = AnimationConfig{}
203 _ Chattable = AudioConfig{}
204 _ Chattable = CallbackConfig{}
205 _ Chattable = ChatActionConfig{}
206 _ Chattable = ContactConfig{}
207 _ Chattable = DeleteChatPhotoConfig{}
208 _ Chattable = DeleteChatStickerSetConfig{}
209 _ Chattable = DeleteMessageConfig{}
210 _ Chattable = DocumentConfig{}
211 _ Chattable = EditMessageCaptionConfig{}
212 _ Chattable = EditMessageLiveLocationConfig{}
213 _ Chattable = EditMessageReplyMarkupConfig{}
214 _ Chattable = EditMessageTextConfig{}
215 _ Chattable = ForwardConfig{}
216 _ Chattable = GameConfig{}
217 _ Chattable = GetGameHighScoresConfig{}
218 _ Chattable = InlineConfig{}
219 _ Chattable = InvoiceConfig{}
220 _ Chattable = KickChatMemberConfig{}
221 _ Chattable = LocationConfig{}
222 _ Chattable = MediaGroupConfig{}
223 _ Chattable = MessageConfig{}
224 _ Chattable = PhotoConfig{}
225 _ Chattable = PinChatMessageConfig{}
226 _ Chattable = SetChatDescriptionConfig{}
227 _ Chattable = SetChatPhotoConfig{}
228 _ Chattable = SetChatTitleConfig{}
229 _ Chattable = SetGameScoreConfig{}
230 _ Chattable = StickerConfig{}
231 _ Chattable = UnpinChatMessageConfig{}
232 _ Chattable = UpdateConfig{}
233 _ Chattable = UserProfilePhotosConfig{}
234 _ Chattable = VenueConfig{}
235 _ Chattable = VideoConfig{}
236 _ Chattable = VideoNoteConfig{}
237 _ Chattable = VoiceConfig{}
238 _ Chattable = WebhookConfig{}
239)