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#include <gtest/gtest.h>
16#include <gmock/gmock.h>
17#include <memory>
18#include "native_calendar.h"
19#include "calendar_log.h"
20#include "native_calendar_manager.h"
21
22
23namespace OHOS::CalendarApi::Native {
24const std::string TEST_NAME = "EventReminderTest";
25static CalendarAccount account {
26    TEST_NAME,
27    "local",
28    "EventReminderTest"
29};
30class EventReminderTest : public testing::Test {
31public:
32    static void SetUpTestSuite(void)
33    {
34        calendar = CalendarManager::GetInstance().CreateCalendar(account);
35        ASSERT_TRUE(calendar != nullptr);
36        LOG_INFO("SetUpTestCase SUCCESS");
37    }
38
39    static void TearDownTestSuite(void)
40    {
41        auto ret = CalendarManager::GetInstance().DeleteCalendar(*calendar.get());
42        ASSERT_TRUE(ret);
43        LOG_INFO("TearDownTestSuite SUCCESS");
44    }
45    void SetUp() {};
46    void TearDown() {};
47    static std::shared_ptr<Calendar> calendar;
48};
49
50std::shared_ptr<Calendar> EventReminderTest::calendar = nullptr;
51
52HWTEST_F(EventReminderTest, AddEventWithReminder, testing::ext::TestSize.Level1)
53{
54    Event event;
55    const string title = "AddEventWithReminder";
56    const std::vector<int> reminderTime = {0, 1, 2};
57    event.title = title;
58    event.reminderTime = reminderTime;
59    auto eventId = calendar->AddEvent(event);
60    std::vector<string> eventKey;
61    ASSERT_NE(eventId, 0);
62    auto events = calendar->GetEvents(FilterByTitle(title), eventKey);
63    ASSERT_EQ(events.size(), 1);
64    auto resultEvent = events.at(0);
65    EXPECT_NE(resultEvent.reminderTime, std::nullopt);
66    ASSERT_THAT(resultEvent.reminderTime.value(), ::testing::ElementsAreArray(reminderTime));
67}
68
69HWTEST_F(EventReminderTest, DelEventWithReminder, testing::ext::TestSize.Level1)
70{
71    Event event;
72    const string title = "DelEventWithReminder";
73    const std::vector<int> reminderTime = {0, 1, 2};
74    event.title = title;
75    event.reminderTime = reminderTime;
76    auto eventId = calendar->AddEvent(event);
77    ASSERT_NE(eventId, 0);
78    std::vector<string> eventKey;
79    auto events = calendar->GetEvents(FilterByTitle(title), eventKey);
80    ASSERT_EQ(events.size(), 1);
81    auto resultEvent = events.at(0);
82    EXPECT_NE(resultEvent.reminderTime, std::nullopt);
83    ASSERT_THAT(resultEvent.reminderTime.value(), ::testing::ElementsAreArray(reminderTime));
84    auto ret = calendar->DeleteEvent(eventId);
85    ASSERT_EQ(ret, 1);
86    auto reminders = calendar->GetRemindersByEventId(eventId);
87    ASSERT_EQ(reminders, std::nullopt);
88}
89
90HWTEST_F(EventReminderTest, UpdateEventWithReminder, testing::ext::TestSize.Level1)
91{
92    Event event;
93    const string title = "UpdateEventWithReminder";
94    const std::vector<int> reminderTime = {0, 1, 2};
95    event.title = title;
96    event.reminderTime = reminderTime;
97    auto eventId = calendar->AddEvent(event);
98    ASSERT_NE(eventId, 0);
99    std::vector<string> eventKey;
100    auto events = calendar->GetEvents(FilterByTitle(title), eventKey);
101    ASSERT_EQ(events.size(), 1);
102    auto resultEvent = events.at(0);
103    EXPECT_NE(resultEvent.reminderTime, std::nullopt);
104    ASSERT_THAT(resultEvent.reminderTime.value(), ::testing::ElementsAreArray(reminderTime));
105    const std::vector<int> newReminderTime = {4, 5, 6};
106    resultEvent.reminderTime = newReminderTime;
107    auto ret = calendar->UpdateEvent(resultEvent);
108    ASSERT_EQ(ret, 1);
109    events = calendar->GetEvents(FilterByTitle(title), eventKey);
110    ASSERT_EQ(events.size(), 1);
111    auto newResultEvent = events.at(0);
112    EXPECT_NE(newResultEvent.reminderTime, std::nullopt);
113    ASSERT_THAT(newResultEvent.reminderTime.value(), ::testing::ElementsAreArray(newReminderTime));
114}
115}