• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <gtest/gtest.h>
17 #include <memory>
18 #include <variant>
19 #include "native_calendar.h"
20 #include "calendar_log.h"
21 #include "native_calendar_manager.h"
22 #include "native_util.h"
23 
24 namespace OHOS::CalendarApi::Native {
25 class CalendarTest : public testing::Test {
26 public:
27     /* SetUpTestCase:The preset action of the test suite is executed before the first TestCase */
28     static void SetUpTestSuite(void);
29 
30     /* TearDownTestCase:The test suite cleanup action is executed after the last TestCase */
31     static void TearDownTestSuite(void);
32     /* SetUp:Execute before each test case */
SetUp()33     void SetUp() {};
34 
35     /* TearDown:Execute after each test case */
TearDown()36     void TearDown() {};
37     static std::shared_ptr<Calendar> calendar;
38 };
39 
40 std::shared_ptr<Calendar> CalendarTest::calendar = nullptr;
41 const std::string TEST_NAME = "unit_test";
42 static CalendarAccount account {
43     TEST_NAME,
44     "local",
45     "displayName_unit_test"
46 };
47 
SetUpTestSuite(void)48 void CalendarTest::SetUpTestSuite(void)
49 {
50     calendar = CalendarManager::GetInstance().GetCalendar(account);
51     if (calendar != nullptr && calendar->GetAccount().name == TEST_NAME) {
52         CalendarManager::GetInstance().DeleteCalendar(*calendar.get());
53     }
54     calendar = CalendarManager::GetInstance().CreateCalendar(account);
55     ASSERT_TRUE(calendar != nullptr);
56     LOG_INFO("SetUpTestCase SUCCESS");
57 }
58 
TearDownTestSuite(void)59 void CalendarTest::TearDownTestSuite(void)
60 {
61     // del calendar will del all event associated
62     LOG_INFO("DeleteCalendar");
63     auto ret = CalendarManager::GetInstance().DeleteCalendar(*calendar.get());
64     ASSERT_TRUE(ret);
65     LOG_INFO("TearDownTestSuite SUCCESS");
66 }
67 
68 HWTEST_F(CalendarTest, AddEvent_test_basic, testing::ext::TestSize.Level1)
69 {
70     Event event;
71     event.title = "AddEvent_test_basic";
72     auto eventId = calendar->AddEvent(event);
73     ASSERT_NE(eventId, 0);
74     auto events = calendar->GetEvents(FilterById({eventId}), {});
75     ASSERT_FALSE(events.empty());
76 }
77 
78 HWTEST_F(CalendarTest, AddEvent_test_title_is_Chinese, testing::ext::TestSize.Level1)
79 {
80     Event event;
81     event.title = "AddEvent_test_title_is_中文";
82     auto eventId = calendar->AddEvent(event);
83     ASSERT_NE(eventId, 0);
84     auto events = calendar->GetEvents(FilterById({eventId}), {});
85     ASSERT_FALSE(events.empty());
86 }
87 
88 HWTEST_F(CalendarTest, DeleteEvent_dupilcate, testing::ext::TestSize.Level1)
89 {
90     Event event;
91     event.title = "DeleteEvent_dupilcate";
92     auto eventId = calendar->AddEvent(event);
93     ASSERT_NE(eventId, 0);
94     auto events = calendar->GetEvents(FilterById({eventId}), {});
95     ASSERT_FALSE(events.empty());
96     auto ret = calendar->DeleteEvent(eventId);
97     EXPECT_EQ(ret, true);
98     ret = calendar->DeleteEvent(eventId);
99     EXPECT_EQ(ret, false);
100 }
101 
102 HWTEST_F(CalendarTest, AddEvents_test_normal, testing::ext::TestSize.Level1)
103 {
104     const string title_1 = "AddEvents_test_normal_1";
105     const string title_2 = "AddEvents_test_normal_2";
106     Event event1;
107     event1.title = title_1;
108     Event event2;
109     event2.title = title_2;
110     auto count = calendar->AddEvents({event1, event2});
111     EXPECT_EQ(count, 2);
112     auto queryResult = calendar->GetEvents(FilterByTitle(title_1), {});
113     ASSERT_EQ(1, queryResult.size());
114     EXPECT_EQ(queryResult.at(0).title.value(), title_1);
115     queryResult = calendar->GetEvents(FilterByTitle(title_2), {});
116     ASSERT_EQ(1, queryResult.size());
117     EXPECT_EQ(queryResult.at(0).title.value(), title_2);
118 }
119 
120 HWTEST_F(CalendarTest, AddEvents_input_empty, testing::ext::TestSize.Level1)
121 {
122     auto count = calendar->AddEvents({});
123     ASSERT_EQ(count, 0);
124 }
125 
126 HWTEST_F(CalendarTest, GetEvent_test_1, testing::ext::TestSize.Level1)
127 {
128     Event event;
129     const string title = "GetEvent_test_1";
130     event.title = title;
131     event.type = EventType::Important;
132     Location testLocation { "test", 123, 456 };
133     event.location = std::make_optional<Location>(testLocation);
134     event.startTime = 1766620800000;
135     event.endTime = 1766620800000;
136     event.isAllDay = true;
137     event.attendees = {{"xiaoming", "xiaoming@abc.com", NONE, UNKNOWN, REQUIRED},
138         {"xiaoqiang", "test_attendee1@abc.com", PARTICIPANT, TENTATIVE, OPTIONAL},
139         {"abc", "test_attendee2@abc.com", ORGANIZER, ACCEPTED, RESOURCE}};
140     event.timeZone = "UTC";
141     event.reminderTime = {0, 1, 2};
142     event.description = "UpdateEvent_test_2_disp";
143     const auto eventId = calendar->AddEvent(event);
144     ASSERT_NE(eventId, 0);
145     const auto events = calendar->GetEvents(FilterByTitle(title), {});
146     ASSERT_EQ(1, events.size());
147     const auto newEvent = events.at(0);
148     EXPECT_EQ(newEvent.title, event.title);
149     EXPECT_EQ(newEvent.type, event.type);
150     EXPECT_EQ(newEvent.location, event.location);
151     EXPECT_EQ(newEvent.startTime, event.startTime);
152     EXPECT_EQ(newEvent.endTime, event.endTime);
153     EXPECT_EQ(newEvent.isAllDay, event.isAllDay);
154     EXPECT_EQ(newEvent.attendees, event.attendees);
155     EXPECT_EQ(newEvent.timeZone, event.timeZone);
156     EXPECT_EQ(newEvent.reminderTime, event.reminderTime);
157     EXPECT_EQ(newEvent.description, event.description);
158 }
159 
160 HWTEST_F(CalendarTest, UpdateEvent_test_1, testing::ext::TestSize.Level1)
161 {
162     Event event;
163     event.title = "UpdateEvent_test_1";
164     auto eventId = calendar->AddEvent(event);
165     ASSERT_NE(eventId, 0);
166     auto events = calendar->GetEvents(FilterById({eventId}), {});
167     ASSERT_EQ(1, events.size());
168     auto newEvent = events.at(0);
169     string_view newTitle = "UpdateEvent_test_1_new";
170     newEvent.title = newTitle;
171     auto ret = calendar->UpdateEvent(newEvent);
172     EXPECT_EQ(ret, true);
173     events = calendar->GetEvents(FilterByTitle(newTitle), {});
174     ASSERT_EQ(1, events.size());
175     EXPECT_EQ(events.at(0).title.value(), newTitle);
176 }
177 
178 HWTEST_F(CalendarTest, UpdateEvents_test_1, testing::ext::TestSize.Level1)
179 {
180     Event event1;
181     event1.title = "UpdateEvents_test_1";
182     Event event2;
183     event2.title = "UpdateEvents_test_2";
184     auto count = calendar->AddEvents({event1, event2});
185     EXPECT_EQ(count, 2);
186 
187     auto queryResult = calendar->GetEvents(FilterByTitle("UpdateEvents_test_1"), {});
188     ASSERT_EQ(1, queryResult.size());
189 
190     auto newEvent1 = queryResult.at(0);
191     newEvent1.title = "title_test_update_1_new";
192     queryResult = calendar->GetEvents(FilterByTitle("UpdateEvents_test_2"), {});
193     ASSERT_EQ(1, queryResult.size());
194     auto newEvent2 = queryResult.at(0);
195     newEvent2.title = "title_test_update_2_new";
196     std::vector<Event> newEvents;
197     newEvents.emplace_back(newEvent1);
198     newEvents.emplace_back(newEvent2);
199     count = calendar->UpdateEvents(newEvents);
200     EXPECT_EQ(count, newEvents.size());
201     auto delRet = calendar->DeleteEvents({newEvent1.id.value(), newEvent2.id.value()});
202     ASSERT_EQ(delRet, newEvents.size());
203 }
204 
205 HWTEST_F(CalendarTest, GetConfig_default_test, testing::ext::TestSize.Level1)
206 {
207     auto config = calendar->GetConfig();
208     EXPECT_TRUE(config.enableReminder.has_value());
209     EXPECT_TRUE(std::get<1>(config.color) == 0);
210 }
211 
212 HWTEST_F(CalendarTest, SetConfig_empty_param_test, testing::ext::TestSize.Level1)
213 {
214     CalendarConfig config;
215     auto ret = calendar->SetConfig(config);
216     ASSERT_TRUE(ret);
217     auto configExpect = calendar->GetConfig();
218     EXPECT_TRUE(configExpect.enableReminder.has_value());
219     EXPECT_TRUE(std::get<0>(config.color).empty());
220 }
221 
222 HWTEST_F(CalendarTest, SetConfig_with_color_test, testing::ext::TestSize.Level1)
223 {
224     CalendarConfig config;
225     config.color = 0xaabbcc;
226     config.enableReminder = false;
227     ASSERT_TRUE(calendar->SetConfig(config));
228     auto configExpect = calendar->GetConfig();
229     EXPECT_EQ(config, configExpect);
230     config.color = 0xaabbccdd;
231     config.enableReminder = true;
232     ASSERT_TRUE(calendar->SetConfig(config));
233     configExpect = calendar->GetConfig();
234     EXPECT_EQ(config, configExpect);
235 }
236 
237 HWTEST_F(CalendarTest, UpdateEvent_test_3, testing::ext::TestSize.Level1)
238 {
239     Event event;
240     RecurrenceRule recurrenceRule;
241     recurrenceRule.recurrenceFrequency = YEARLY;
242     recurrenceRule.daysOfWeek = {1, 3, 5};
243     recurrenceRule.weeksOfMonth = {2, 3, 4};
244     recurrenceRule.monthsOfYear = {6, 7, 8};
245     recurrenceRule.excludedDates = {1713672150000};
246     event.recurrenceRule = std::make_optional<RecurrenceRule>(recurrenceRule);
247     event.title = std::make_optional<std::string>("UpdateEvent_test_3");
248     event.isLunar = std::make_optional<bool>(true);
249     auto eventId = calendar->AddEvent(event);
250     auto events = calendar->GetEvents(FilterById({eventId}), {"recurrenceRule", "identifier", "isLunar", "id"});
251     ASSERT_NE(eventId, 0);
252 }
253 
254 HWTEST_F(CalendarTest, AddEventInfoNoID, testing::ext::TestSize.Level1)
255 {
256     Event event;
257     RecurrenceRule recurrenceRule;
258     recurrenceRule.recurrenceFrequency = YEARLY;
259     recurrenceRule.daysOfWeek = {1, 3, 5};
260     recurrenceRule.weeksOfMonth = {2, 3, 4};
261     recurrenceRule.monthsOfYear = {6, 7, 8};
262     recurrenceRule.excludedDates = {1713672150000};
263     event.recurrenceRule = std::make_optional<RecurrenceRule>(recurrenceRule);
264     int channelId = 0;
265     int eventInfo = calendar->AddEventInfo(event, channelId);
266     ASSERT_NE(eventInfo, 0);
267 }
268 
269 HWTEST_F(CalendarTest, UpdateEventNoID, testing::ext::TestSize.Level1)
270 {
271     Event event;
272     bool isUpdataEvent = calendar->UpdateEvent(event);
273     ASSERT_EQ(isUpdataEvent, 0);
274 }
275 
276 HWTEST_F(CalendarTest, BuildValueEventIsLunar, testing::ext::TestSize.Level1)
277 {
278     Event event;
279     event.identifier = std::make_optional<std::string>("1111");
280     event.isLunar = std::make_optional<bool>(true);
281     DataShare::DataShareValuesBucket newShareValuesBucket;
282     newShareValuesBucket.Put("identifier", event.identifier.value());
283     newShareValuesBucket.Put("event_calendar_type", event.isLunar.value());
284     auto shareValuesBucket = BuildValueEvent(event, 0, 0);
285     auto itIdentifier = shareValuesBucket.valuesMap.find("identifier");
286     auto *itIdentifierVal = std::get_if<std::string>(&itIdentifier->second);
287     std::string identifierVal = *itIdentifierVal;
288     auto itIsLunar = shareValuesBucket.valuesMap.find("event_calendar_type");
289     auto *itIsLunarVal = std::get_if<bool>(&itIsLunar->second);
290     bool isLunarVal = *itIsLunarVal;
291     EXPECT_EQ(event.identifier.value(), identifierVal);
292     EXPECT_EQ(event.isLunar.value(), isLunarVal);
293 }
294 
295 }  // namespace OHOS::CalendarApi::Native
296