Add unittest for badge
[platform/core/appfw/badge.git] / tests / unit_tests / src / test_badge.cc
1 /*
2  * Copyright (c) 2020 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include <stdlib.h>
18 #include <gtest/gtest.h>
19 #include "badge.h"
20
21 #include <memory>
22
23 #include "system_info_mock.h"
24 #include "gio_mock.h"
25 #include "aul_mock.h"
26 #include "package_manager_mock.h"
27 #include "test_fixture.h"
28
29 using ::testing::_;
30 using ::testing::DoAll;
31 using ::testing::Return;
32 using ::testing::SetArgPointee;
33
34 class Mocks : public ::testing::NiceMock<SystemInfoMock>,
35               public ::testing::NiceMock<GioMock>,
36               public ::testing::NiceMock<AulMock>,
37               public ::testing::NiceMock<PackageManagerMock> {};
38
39 class BadgeTest : public TestFixture {
40  public:
41   BadgeTest() : TestFixture(std::make_unique<Mocks>()) {}
42   virtual ~BadgeTest() {}
43
44   virtual void SetUp() {
45   }
46
47   virtual void TearDown() {
48   }
49 };
50
51 TEST_F(BadgeTest, badge_new) {
52   int ret;
53   bool is_supported = true;
54   char *_pkgid = (char *)"mypkgid";
55   GDBusConnection *_conn = (GDBusConnection*)g_object_new(G_TYPE_OBJECT, NULL);
56   GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
57   GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
58
59   EXPECT_CALL(GetMock<SystemInfoMock>(),
60       system_info_get_platform_bool(_, _)).
61       WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
62                             Return(0)));
63
64   EXPECT_CALL(GetMock<AulMock>(),
65       aul_app_get_pkgname_bypid(_, _, _)).
66       WillOnce(DoAll(SetArgPointee<1>(*_pkgid),
67                       Return(0)));
68
69   EXPECT_CALL(GetMock<GioMock>(),
70       g_bus_get_sync(_, _, _)).
71       WillOnce(Return(_conn));
72
73   EXPECT_CALL(GetMock<GioMock>(),
74       g_dbus_message_new_method_call(_, _, _, _)).
75       WillOnce(Return(_msg));
76
77   EXPECT_CALL(GetMock<GioMock>(),
78       g_dbus_connection_send_message_with_reply_sync(
79         _, _, _, _, _, _, _)).
80       WillOnce(Return(_msg2));
81
82   EXPECT_CALL(GetMock<GioMock>(),
83       g_dbus_message_to_gerror(_, _)).
84       WillOnce(Return(FALSE));
85
86   ret = badge_new("testappid");
87
88   g_object_unref(_conn);
89
90   EXPECT_EQ(ret, BADGE_ERROR_NONE);
91 }
92
93 TEST_F(BadgeTest, badge_add) {
94   int ret;
95   bool is_supported = true;
96   char *_pkgid = (char *)"mypkgid";
97   package_manager_compare_result_type_e comp_ret = PACKAGE_MANAGER_COMPARE_MATCH;
98   GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
99   GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
100
101   EXPECT_CALL(GetMock<SystemInfoMock>(),
102       system_info_get_platform_bool(_, _)).
103       WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
104                 Return(0)));
105
106   EXPECT_CALL(GetMock<AulMock>(),
107       aul_app_get_pkgname_bypid(_, _, _)).
108       WillOnce(DoAll(SetArgPointee<1>(*_pkgid),
109                       Return(0)));
110
111   EXPECT_CALL(GetMock<PackageManagerMock>(),
112       package_manager_compare_app_cert_info(_, _, _)).
113       WillOnce(DoAll(SetArgPointee<2>(comp_ret),
114                       Return(0)));
115
116   EXPECT_CALL(GetMock<GioMock>(),
117       g_dbus_message_new_method_call(_, _, _, _)).
118       WillOnce(Return(_msg));
119
120   EXPECT_CALL(GetMock<GioMock>(),
121       g_dbus_connection_send_message_with_reply_sync(
122         _, _, _, _, _, _, _)).
123       WillOnce(Return(_msg2));
124
125   EXPECT_CALL(GetMock<GioMock>(),
126       g_dbus_message_to_gerror(_, _)).
127       WillOnce(Return(FALSE));
128
129   ret = badge_add("myappid");
130
131   EXPECT_EQ(ret, BADGE_ERROR_NONE);
132 }
133
134 TEST_F(BadgeTest, badge_remove) {
135   int ret;
136   bool is_supported = true;
137   char *_pkgid = (char *)"mypkgid";
138   GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
139   GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
140
141   EXPECT_CALL(GetMock<SystemInfoMock>(),
142       system_info_get_platform_bool(_, _)).
143       WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
144                 Return(0)));
145
146   EXPECT_CALL(GetMock<AulMock>(),
147       aul_app_get_pkgname_bypid(_, _, _)).
148       WillOnce(DoAll(SetArgPointee<1>(*_pkgid),
149                       Return(0)));
150
151   EXPECT_CALL(GetMock<GioMock>(),
152       g_dbus_message_new_method_call(_, _, _, _)).
153       WillOnce(Return(_msg));
154
155   EXPECT_CALL(GetMock<GioMock>(),
156       g_dbus_connection_send_message_with_reply_sync(
157         _, _, _, _, _, _, _)).
158       WillOnce(Return(_msg2));
159
160   EXPECT_CALL(GetMock<GioMock>(),
161       g_dbus_message_to_gerror(_, _)).
162       WillOnce(Return(FALSE));
163
164   ret = badge_remove("myappid");
165
166   EXPECT_EQ(ret, BADGE_ERROR_NONE);
167 }
168
169 TEST_F(BadgeTest, badge_set_count) {
170   int ret;
171   bool is_supported = true;
172   char *_pkgid = (char *)"mypkgid";
173   GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
174   GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
175
176   EXPECT_CALL(GetMock<SystemInfoMock>(),
177       system_info_get_platform_bool(_, _)).
178       WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
179                 Return(0)));
180
181   EXPECT_CALL(GetMock<AulMock>(),
182       aul_app_get_pkgname_bypid(_, _, _)).
183       WillOnce(DoAll(SetArgPointee<1>(*_pkgid),
184                       Return(0)));
185
186   EXPECT_CALL(GetMock<GioMock>(),
187       g_dbus_message_new_method_call(_, _, _, _)).
188       WillOnce(Return(_msg));
189
190   EXPECT_CALL(GetMock<GioMock>(),
191       g_dbus_connection_send_message_with_reply_sync(
192         _, _, _, _, _, _, _)).
193       WillOnce(Return(_msg2));
194
195   EXPECT_CALL(GetMock<GioMock>(),
196       g_dbus_message_to_gerror(_, _)).
197       WillOnce(Return(FALSE));
198
199   ret = badge_set_count("myappid", 9);
200
201   EXPECT_EQ(ret, BADGE_ERROR_NONE);
202 }
203
204 TEST_F(BadgeTest, badge_get_count) {
205   int ret;
206   bool is_supported = true;
207   unsigned int count = 0;
208   GVariant *body = g_variant_new("(i)", 3);
209   GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
210   GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
211
212   EXPECT_CALL(GetMock<SystemInfoMock>(),
213       system_info_get_platform_bool(_, _)).
214       WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
215                 Return(0)));
216
217   EXPECT_CALL(GetMock<GioMock>(),
218       g_dbus_message_new_method_call(_, _, _, _)).
219       WillOnce(Return(_msg));
220
221   EXPECT_CALL(GetMock<GioMock>(),
222       g_dbus_connection_send_message_with_reply_sync(
223         _, _, _, _, _, _, _)).
224       WillOnce(Return(_msg2));
225
226   EXPECT_CALL(GetMock<GioMock>(),
227       g_dbus_message_get_body(_)).
228       WillOnce(Return(body));
229
230   EXPECT_CALL(GetMock<GioMock>(),
231       g_dbus_message_to_gerror(_, _)).
232       WillOnce(Return(FALSE));
233
234   ret = badge_get_count("myappid", &count);
235
236   if (body)
237     g_variant_unref(body);
238
239   EXPECT_EQ(ret, BADGE_ERROR_NONE);
240 }
241
242 TEST_F(BadgeTest, badge_set_display) {
243   int ret;
244   bool is_supported = true;
245   char *_pkgid = (char *)"mypkgid";
246   GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
247   GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
248
249   EXPECT_CALL(GetMock<SystemInfoMock>(),
250       system_info_get_platform_bool(_, _)).
251       WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
252                 Return(0)));
253
254   EXPECT_CALL(GetMock<AulMock>(),
255       aul_app_get_pkgname_bypid(_, _, _)).
256       WillOnce(DoAll(SetArgPointee<1>(*_pkgid),
257                       Return(0)));
258
259   EXPECT_CALL(GetMock<GioMock>(),
260       g_dbus_message_new_method_call(_, _, _, _)).
261       WillOnce(Return(_msg));
262
263   EXPECT_CALL(GetMock<GioMock>(),
264       g_dbus_connection_send_message_with_reply_sync(
265         _, _, _, _, _, _, _)).
266       WillOnce(Return(_msg2));
267
268   EXPECT_CALL(GetMock<GioMock>(),
269       g_dbus_message_to_gerror(_, _)).
270       WillOnce(Return(FALSE));
271
272   ret = badge_set_display("myappid", 1);
273
274   EXPECT_EQ(ret, BADGE_ERROR_NONE);
275 }
276
277 TEST_F(BadgeTest, badge_get_display) {
278   int ret;
279   bool is_supported = true;
280   unsigned int is_display = 0;
281   GVariant *body = g_variant_new("(i)", 1);
282   GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
283   GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
284
285   EXPECT_CALL(GetMock<SystemInfoMock>(),
286       system_info_get_platform_bool(_, _)).
287       WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
288                 Return(0)));
289
290   EXPECT_CALL(GetMock<GioMock>(),
291       g_dbus_message_new_method_call(_, _, _, _)).
292       WillOnce(Return(_msg));
293
294   EXPECT_CALL(GetMock<GioMock>(),
295       g_dbus_connection_send_message_with_reply_sync(
296         _, _, _, _, _, _, _)).
297       WillOnce(Return(_msg2));
298
299   EXPECT_CALL(GetMock<GioMock>(),
300       g_dbus_message_get_body(_)).
301       WillOnce(Return(body));
302
303   EXPECT_CALL(GetMock<GioMock>(),
304       g_dbus_message_to_gerror(_, _)).
305       WillOnce(Return(FALSE));
306
307   ret = badge_get_display("myappid", &is_display);
308
309   if (body)
310     g_variant_unref(body);
311
312   EXPECT_EQ(ret, BADGE_ERROR_NONE);
313 }
314
315 bool _badge_foreach_cb(const char *app_id, unsigned int count, void *user_data) {
316   return true;
317 }
318
319 TEST_F(BadgeTest, badge_foreach) {
320   int ret;
321   bool is_supported = true;
322   GVariant *body = g_variant_new("(a(v))", NULL);
323   GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
324   GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
325
326   EXPECT_CALL(GetMock<SystemInfoMock>(),
327       system_info_get_platform_bool(_, _)).
328       WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
329                 Return(0)));
330
331   EXPECT_CALL(GetMock<GioMock>(),
332       g_dbus_message_new_method_call(_, _, _, _)).
333       WillOnce(Return(_msg));
334
335   EXPECT_CALL(GetMock<GioMock>(),
336       g_dbus_connection_send_message_with_reply_sync(
337           _, _, _, _, _, _, _)).
338       WillOnce(Return(_msg2));
339
340   EXPECT_CALL(GetMock<GioMock>(),
341       g_dbus_message_get_body(_)).
342       WillOnce(Return(body));
343
344   EXPECT_CALL(GetMock<GioMock>(),
345       g_dbus_message_to_gerror(_, _)).
346       WillOnce(Return(FALSE));
347
348   ret = badge_foreach(_badge_foreach_cb, NULL);
349
350   EXPECT_EQ(ret, BADGE_ERROR_NONE);
351 }
352
353 void _badge_change_cb(unsigned int action, const char *app_id,
354       unsigned int count, void *user_data) {
355 }
356
357 TEST_F(BadgeTest, badge_register_changed_cb) {
358   int ret;
359   bool is_supported = true;
360   GDBusMessage *_msg = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
361   GDBusMessage *_msg2 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
362   GDBusMessage *_msg3 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
363   GDBusMessage *_msg4 = (GDBusMessage*)g_object_new(G_TYPE_OBJECT, NULL);
364
365   EXPECT_CALL(GetMock<SystemInfoMock>(),
366       system_info_get_platform_bool(_, _)).
367       WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
368                 Return(0)));
369
370   EXPECT_CALL(GetMock<GioMock>(),
371       g_dbus_connection_signal_subscribe(
372         _, _, _, _, _, _, _, _, _, _)).
373       WillOnce(Return(99));
374
375   EXPECT_CALL(GetMock<GioMock>(),
376       g_dbus_message_new_method_call(_, _, _, _)).
377       WillOnce(Return(_msg)).
378       WillOnce(Return(_msg2));
379
380   EXPECT_CALL(GetMock<GioMock>(),
381       g_dbus_connection_send_message_with_reply_sync(
382         _, _, _, _, _, _, _)).
383       WillOnce(Return(_msg3)).
384       WillOnce(Return(_msg4));
385
386   EXPECT_CALL(GetMock<GioMock>(),
387       g_dbus_message_to_gerror(_, _)).
388       WillRepeatedly(Return(FALSE));
389
390   EXPECT_CALL(GetMock<GioMock>(),
391       g_bus_watch_name_on_connection(
392         _, _, _, _, _, _, _)).
393       WillOnce(Return(88));
394
395   ret = badge_register_changed_cb(_badge_change_cb, NULL);
396
397   EXPECT_EQ(ret, BADGE_ERROR_NONE);
398 }
399
400 TEST_F(BadgeTest, badge_unregister_changed_cb) {
401   int ret;
402   bool is_supported = true;
403
404   EXPECT_CALL(GetMock<SystemInfoMock>(),
405       system_info_get_platform_bool(_, _)).
406       WillRepeatedly(DoAll(SetArgPointee<1>(is_supported),
407                 Return(0)));
408
409   EXPECT_CALL(GetMock<GioMock>(),
410       g_bus_unwatch_name(_)).
411       Times(1);
412
413   EXPECT_CALL(GetMock<GioMock>(),
414       g_dbus_connection_signal_unsubscribe(_, _)).
415       Times(1);
416
417   ret = badge_unregister_changed_cb(_badge_change_cb);
418
419   EXPECT_EQ(ret, BADGE_ERROR_NONE);
420 }