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
23 namespace OHOS::CalendarApi::Native {
24 class CalendarTest : public testing::Test {
25 public:
26 /* SetUpTestCase:The preset action of the test suite is executed before the first TestCase */
27 static void SetUpTestSuite(void);
28
29 /* TearDownTestCase:The test suite cleanup action is executed after the last TestCase */
30 static void TearDownTestSuite(void);
31 /* SetUp:Execute before each test case */
SetUp()32 void SetUp() {};
33
34 /* TearDown:Execute after each test case */
TearDown()35 void TearDown() {};
36 static std::shared_ptr<Calendar> calendar;
37 };
38
39 std::shared_ptr<Calendar> CalendarTest::calendar = nullptr;
40 const std::string TEST_NAME = "unit_test";
41 static CalendarAccount account {
42 TEST_NAME,
43 "local",
44 "displayName_unit_test"
45 };
46
SetUpTestSuite(void)47 void CalendarTest::SetUpTestSuite(void)
48 {
49 calendar = CalendarManager::GetInstance().GetCalendar(account);
50 if (calendar != nullptr && calendar->GetAccount().name == TEST_NAME) {
51 CalendarManager::GetInstance().DeleteCalendar(*calendar.get());
52 }
53 calendar = CalendarManager::GetInstance().CreateCalendar(account);
54 ASSERT_TRUE(calendar != nullptr);
55 LOG_INFO("SetUpTestCase SUCCESS");
56 }
57
TearDownTestSuite(void)58 void CalendarTest::TearDownTestSuite(void)
59 {
60 // del calendar will del all event associated
61 LOG_INFO("DeleteCalendar");
62 auto ret = CalendarManager::GetInstance().DeleteCalendar(*calendar.get());
63 ASSERT_TRUE(ret);
64 LOG_INFO("TearDownTestSuite SUCCESS");
65 }
66
67 HWTEST_F(CalendarTest, AddEvent_test_basic, testing::ext::TestSize.Level1)
68 {
69 Event event;
70 event.title = "AddEvent_test_basic";
71 auto eventId = calendar->AddEvent(event);
72 ASSERT_NE(eventId, 0);
73 auto events = calendar->GetEvents(FilterById({eventId}), {});
74 ASSERT_FALSE(events.empty());
75 }
76
77 HWTEST_F(CalendarTest, AddEvent_test_title_is_Chinese, testing::ext::TestSize.Level1)
78 {
79 Event event;
80 event.title = "AddEvent_test_title_is_中文";
81 auto eventId = calendar->AddEvent(event);
82 ASSERT_NE(eventId, 0);
83 auto events = calendar->GetEvents(FilterById({eventId}), {});
84 ASSERT_FALSE(events.empty());
85 }
86
87 HWTEST_F(CalendarTest, DeleteEvent_dupilcate, testing::ext::TestSize.Level1)
88 {
89 Event event;
90 event.title = "DeleteEvent_dupilcate";
91 auto eventId = calendar->AddEvent(event);
92 ASSERT_NE(eventId, 0);
93 auto events = calendar->GetEvents(FilterById({eventId}), {});
94 ASSERT_FALSE(events.empty());
95 auto ret = calendar->DeleteEvent(eventId);
96 EXPECT_EQ(ret, true);
97 ret = calendar->DeleteEvent(eventId);
98 EXPECT_EQ(ret, false);
99 }
100
101 HWTEST_F(CalendarTest, AddEvents_test_normal, testing::ext::TestSize.Level1)
102 {
103 const string title_1 = "AddEvents_test_normal_1";
104 const string title_2 = "AddEvents_test_normal_2";
105 Event event1;
106 event1.title = title_1;
107 Event event2;
108 event2.title = title_2;
109 auto count = calendar->AddEvents({event1, event2});
110 EXPECT_EQ(count, 2);
111 auto queryResult = calendar->GetEvents(FilterByTitle(title_1), {});
112 ASSERT_EQ(1, queryResult.size());
113 EXPECT_EQ(queryResult.at(0).title.value(), title_1);
114 queryResult = calendar->GetEvents(FilterByTitle(title_2), {});
115 ASSERT_EQ(1, queryResult.size());
116 EXPECT_EQ(queryResult.at(0).title.value(), title_2);
117 }
118
119 HWTEST_F(CalendarTest, AddEvents_input_empty, testing::ext::TestSize.Level1)
120 {
121 auto count = calendar->AddEvents({});
122 ASSERT_EQ(count, 0);
123 }
124
125 HWTEST_F(CalendarTest, GetEvent_test_1, testing::ext::TestSize.Level1)
126 {
127 Event event;
128 const string title = "GetEvent_test_1";
129 event.title = title;
130 event.type = EventType::Important;
131 Location testLocation { "test", 123, 456 };
132 event.location = std::make_optional<Location>(testLocation);
133 event.startTime = 17230000;
134 event.endTime = 17630000;
135 event.isAllDay = true;
136 event.attendees = {
137 {"xiaoming", "xiaoming@abc.com"},
138 {"xiaoqiang", "test_attendee1@abc.com"},
139 {"abc", "test_attendee2@abc.com"}
140 };
141 event.timeZone = "UTC";
142 event.reminderTime = {0, 1, 2};
143 event.description = "UpdateEvent_test_2_disp";
144 const auto eventId = calendar->AddEvent(event);
145 ASSERT_NE(eventId, 0);
146 const auto events = calendar->GetEvents(FilterByTitle(title), {});
147 ASSERT_EQ(1, events.size());
148 const auto newEvent = events.at(0);
149 EXPECT_EQ(newEvent.title, event.title);
150 EXPECT_EQ(newEvent.type, event.type);
151 EXPECT_EQ(newEvent.location, event.location);
152 EXPECT_EQ(newEvent.startTime, event.startTime);
153 EXPECT_EQ(newEvent.endTime, event.endTime);
154 EXPECT_EQ(newEvent.isAllDay, event.isAllDay);
155 EXPECT_EQ(newEvent.attendees, event.attendees);
156 EXPECT_EQ(newEvent.timeZone, event.timeZone);
157 EXPECT_EQ(newEvent.reminderTime, event.reminderTime);
158 EXPECT_EQ(newEvent.description, event.description);
159 }
160
161 HWTEST_F(CalendarTest, UpdateEvent_test_1, testing::ext::TestSize.Level1)
162 {
163 Event event;
164 event.title = "UpdateEvent_test_1";
165 auto eventId = calendar->AddEvent(event);
166 ASSERT_NE(eventId, 0);
167 auto events = calendar->GetEvents(FilterById({eventId}), {});
168 ASSERT_EQ(1, events.size());
169 auto newEvent = events.at(0);
170 string_view newTitle = "UpdateEvent_test_1_new";
171 newEvent.title = newTitle;
172 auto ret = calendar->UpdateEvent(newEvent);
173 EXPECT_EQ(ret, true);
174 events = calendar->GetEvents(FilterByTitle(newTitle), {});
175 ASSERT_EQ(1, events.size());
176 EXPECT_EQ(events.at(0).title.value(), newTitle);
177 }
178
179 HWTEST_F(CalendarTest, UpdateEvents_test_1, testing::ext::TestSize.Level1)
180 {
181 Event event1;
182 event1.title = "UpdateEvents_test_1";
183 Event event2;
184 event2.title = "UpdateEvents_test_2";
185 auto count = calendar->AddEvents({event1, event2});
186 EXPECT_EQ(count, 2);
187
188 auto queryResult = calendar->GetEvents(FilterByTitle("UpdateEvents_test_1"), {});
189 ASSERT_EQ(1, queryResult.size());
190
191 auto newEvent1 = queryResult.at(0);
192 newEvent1.title = "title_test_update_1_new";
193 queryResult = calendar->GetEvents(FilterByTitle("UpdateEvents_test_2"), {});
194 ASSERT_EQ(1, queryResult.size());
195 auto newEvent2 = queryResult.at(0);
196 newEvent2.title = "title_test_update_2_new";
197 std::vector<Event> newEvents;
198 newEvents.emplace_back(newEvent1);
199 newEvents.emplace_back(newEvent2);
200 count = calendar->UpdateEvents(newEvents);
201 EXPECT_EQ(count, newEvents.size());
202 auto delRet = calendar->DeleteEvents({newEvent1.id.value(), newEvent2.id.value()});
203 ASSERT_EQ(delRet, newEvents.size());
204 }
205
206 HWTEST_F(CalendarTest, GetConfig_default_test, testing::ext::TestSize.Level1)
207 {
208 auto config = calendar->GetConfig();
209 EXPECT_FALSE(config.enableReminder.has_value());
210 EXPECT_TRUE(std::get<0>(config.color).empty());
211 }
212
213 HWTEST_F(CalendarTest, SetConfig_empty_param_test, testing::ext::TestSize.Level1)
214 {
215 CalendarConfig config;
216 auto ret = calendar->SetConfig(config);
217 ASSERT_TRUE(ret);
218 auto configExpect = calendar->GetConfig();
219 EXPECT_FALSE(configExpect.enableReminder.has_value());
220 EXPECT_TRUE(std::get<0>(config.color).empty());
221 }
222
223 HWTEST_F(CalendarTest, SetConfig_with_color_test, testing::ext::TestSize.Level1)
224 {
225 CalendarConfig config;
226 config.color = 0xaabbcc;
227 config.enableReminder = false;
228 ASSERT_TRUE(calendar->SetConfig(config));
229 auto configExpect = calendar->GetConfig();
230 EXPECT_EQ(config, configExpect);
231 config.color = 0xaabbccdd;
232 config.enableReminder = true;
233 ASSERT_TRUE(calendar->SetConfig(config));
234 configExpect = calendar->GetConfig();
235 EXPECT_EQ(config, configExpect);
236 }
237
238 }