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 const int startTime = 12;
134 event.startTime = startTime;
135 const int endTime = 100;
136 event.endTime = endTime;
137 event.isAllDay = true;
138 event.attendees = {
139 {"xiaoming", "xiaoming@abc.com"},
140 {"xiaoqiang", "test_attendee1@abc.com"},
141 {"abc", "test_attendee2@abc.com"}
142 };
143 event.timeZone = "shanghai";
144 event.reminderTime = {0, 1, 2};
145 event.description = "UpdateEvent_test_2_disp";
146 const auto eventId = calendar->AddEvent(event);
147 ASSERT_NE(eventId, 0);
148 const auto events = calendar->GetEvents(FilterByTitle(title), {});
149 ASSERT_EQ(1, events.size());
150 const auto newEvent = events.at(0);
151 EXPECT_EQ(newEvent.title, event.title);
152 EXPECT_EQ(newEvent.type, event.type);
153 EXPECT_EQ(newEvent.location, event.location);
154 EXPECT_EQ(newEvent.startTime, event.startTime);
155 EXPECT_EQ(newEvent.endTime, event.endTime);
156 EXPECT_EQ(newEvent.isAllDay, event.isAllDay);
157 EXPECT_EQ(newEvent.attendees, event.attendees);
158 EXPECT_EQ(newEvent.timeZone, event.timeZone);
159 EXPECT_EQ(newEvent.reminderTime, event.reminderTime);
160 EXPECT_EQ(newEvent.description, event.description);
161 }
162
163 HWTEST_F(CalendarTest, UpdateEvent_test_1, testing::ext::TestSize.Level1)
164 {
165 Event event;
166 event.title = "UpdateEvent_test_1";
167 auto eventId = calendar->AddEvent(event);
168 ASSERT_NE(eventId, 0);
169 auto events = calendar->GetEvents(FilterById({eventId}), {});
170 ASSERT_EQ(1, events.size());
171 auto newEvent = events.at(0);
172 string_view newTitle = "UpdateEvent_test_1_new";
173 newEvent.title = newTitle;
174 auto ret = calendar->UpdateEvent(newEvent);
175 EXPECT_EQ(ret, true);
176 events = calendar->GetEvents(FilterByTitle(newTitle), {});
177 ASSERT_EQ(1, events.size());
178 EXPECT_EQ(events.at(0).title.value(), newTitle);
179 }
180
181 HWTEST_F(CalendarTest, UpdateEvents_test_1, testing::ext::TestSize.Level1)
182 {
183 Event event1;
184 event1.title = "UpdateEvents_test_1";
185 Event event2;
186 event2.title = "UpdateEvents_test_2";
187 auto count = calendar->AddEvents({event1, event2});
188 EXPECT_EQ(count, 2);
189
190 auto queryResult = calendar->GetEvents(FilterByTitle("UpdateEvents_test_1"), {});
191 ASSERT_EQ(1, queryResult.size());
192
193 auto newEvent1 = queryResult.at(0);
194 newEvent1.title = "title_test_update_1_new";
195 queryResult = calendar->GetEvents(FilterByTitle("UpdateEvents_test_2"), {});
196 ASSERT_EQ(1, queryResult.size());
197 auto newEvent2 = queryResult.at(0);
198 newEvent2.title = "title_test_update_2_new";
199 std::vector<Event> newEvents;
200 newEvents.emplace_back(newEvent1);
201 newEvents.emplace_back(newEvent2);
202 count = calendar->UpdateEvents(newEvents);
203 EXPECT_EQ(count, newEvents.size());
204 auto delRet = calendar->DeleteEvents({newEvent1.id.value(), newEvent2.id.value()});
205 ASSERT_EQ(delRet, newEvents.size());
206 }
207
208 HWTEST_F(CalendarTest, GetConfig_default_test, testing::ext::TestSize.Level1)
209 {
210 auto config = calendar->GetConfig();
211 EXPECT_FALSE(config.enableReminder.has_value());
212 EXPECT_TRUE(std::get<0>(config.color).empty());
213 }
214
215 HWTEST_F(CalendarTest, SetConfig_empty_param_test, testing::ext::TestSize.Level1)
216 {
217 CalendarConfig config;
218 auto ret = calendar->SetConfig(config);
219 ASSERT_TRUE(ret);
220 auto configExpect = calendar->GetConfig();
221 EXPECT_FALSE(configExpect.enableReminder.has_value());
222 EXPECT_TRUE(std::get<0>(config.color).empty());
223 }
224
225 HWTEST_F(CalendarTest, SetConfig_with_color_test, testing::ext::TestSize.Level1)
226 {
227 CalendarConfig config;
228 config.color = 0xaabbcc;
229 config.enableReminder = false;
230 ASSERT_TRUE(calendar->SetConfig(config));
231 auto configExpect = calendar->GetConfig();
232 EXPECT_EQ(config, configExpect);
233 config.color = 0xaabbccdd;
234 config.enableReminder = true;
235 ASSERT_TRUE(calendar->SetConfig(config));
236 configExpect = calendar->GetConfig();
237 EXPECT_EQ(config, configExpect);
238 }
239
240 }