1115cd2caSopenharmony_ci/*
2115cd2caSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3115cd2caSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4115cd2caSopenharmony_ci * you may not use this file except in compliance with the License.
5115cd2caSopenharmony_ci * You may obtain a copy of the License at
6115cd2caSopenharmony_ci *
7115cd2caSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8115cd2caSopenharmony_ci *
9115cd2caSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10115cd2caSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11115cd2caSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12115cd2caSopenharmony_ci * See the License for the specific language governing permissions and
13115cd2caSopenharmony_ci * limitations under the License.
14115cd2caSopenharmony_ci */
15115cd2caSopenharmony_ci
16115cd2caSopenharmony_ci#ifndef VOICEMAILABILITY_TEST_H
17115cd2caSopenharmony_ci#define VOICEMAILABILITY_TEST_H
18115cd2caSopenharmony_ci
19115cd2caSopenharmony_ci#include "base_test.h"
20115cd2caSopenharmony_ci#include "test_common.h"
21115cd2caSopenharmony_ci
22115cd2caSopenharmony_cinamespace Contacts {
23115cd2caSopenharmony_cinamespace Test {
24115cd2caSopenharmony_cinamespace Lock {
25115cd2caSopenharmony_cistd::mutex voicemailMtx_;
26115cd2caSopenharmony_ci}
27115cd2caSopenharmony_ci
28115cd2caSopenharmony_ciclass VoicemailAsync {
29115cd2caSopenharmony_cipublic:
30115cd2caSopenharmony_ci    OHOS::DataShare::DataShareValuesBucket values;
31115cd2caSopenharmony_ci    std::map<int, OHOS::DataShare::DataShareValuesBucket> result;
32115cd2caSopenharmony_ci    OHOS::DataShare::DataShareValuesBucket updateValues;
33115cd2caSopenharmony_ci    int predicatesId;
34115cd2caSopenharmony_ci    std::vector<std::shared_ptr<OHOS::DataShare::DataShareResultSet>> resultSet;
35115cd2caSopenharmony_ci    std::vector<int64_t> predicatesQueryId;
36115cd2caSopenharmony_ci    int predicatesDeleteId;
37115cd2caSopenharmony_ci    VoicemailAsync(OHOS::DataShare::DataShareValuesBucket &values, std::map<int,
38115cd2caSopenharmony_ci        OHOS::DataShare::DataShareValuesBucket> &result)
39115cd2caSopenharmony_ci    {
40115cd2caSopenharmony_ci        this->values = values;
41115cd2caSopenharmony_ci        this->result = result;
42115cd2caSopenharmony_ci        this->predicatesId = -1;
43115cd2caSopenharmony_ci        this->predicatesDeleteId = -1;
44115cd2caSopenharmony_ci    }
45115cd2caSopenharmony_ci    VoicemailAsync(OHOS::DataShare::DataShareValuesBucket &updateValues, int &predicatesId)
46115cd2caSopenharmony_ci    {
47115cd2caSopenharmony_ci        this->updateValues = updateValues;
48115cd2caSopenharmony_ci        this->predicatesId = predicatesId;
49115cd2caSopenharmony_ci        this->predicatesDeleteId = -1;
50115cd2caSopenharmony_ci    }
51115cd2caSopenharmony_ci
52115cd2caSopenharmony_ci    VoicemailAsync(std::vector<std::shared_ptr<OHOS::DataShare::DataShareResultSet>> resultSet,
53115cd2caSopenharmony_ci        std::vector<int64_t> predicatesQueryId)
54115cd2caSopenharmony_ci    {
55115cd2caSopenharmony_ci        this->resultSet = resultSet;
56115cd2caSopenharmony_ci        this->predicatesQueryId = predicatesQueryId;
57115cd2caSopenharmony_ci        this->predicatesId = -1;
58115cd2caSopenharmony_ci        this->predicatesDeleteId = -1;
59115cd2caSopenharmony_ci    }
60115cd2caSopenharmony_ci
61115cd2caSopenharmony_ci    explicit VoicemailAsync(int &predicatesDeleteId)
62115cd2caSopenharmony_ci    {
63115cd2caSopenharmony_ci        this->predicatesId = -1;
64115cd2caSopenharmony_ci        this->predicatesDeleteId = predicatesDeleteId;
65115cd2caSopenharmony_ci    }
66115cd2caSopenharmony_ci    void Insert()
67115cd2caSopenharmony_ci    {
68115cd2caSopenharmony_ci        OHOS::AbilityRuntime::VoiceMailAbility voicemailAbility;
69115cd2caSopenharmony_ci        OHOS::Uri voicemailUri(VoicemailUri::VOICEMAIL);
70115cd2caSopenharmony_ci        int64_t code = voicemailAbility.Insert(voicemailUri, this->values);
71115cd2caSopenharmony_ci        int callLogId = code;
72115cd2caSopenharmony_ci        EXPECT_GT(callLogId, 0);
73115cd2caSopenharmony_ci        Lock::voicemailMtx_.lock();
74115cd2caSopenharmony_ci        this->result.insert(std::map<int, OHOS::DataShare::DataShareValuesBucket>::value_type(callLogId, this->values));
75115cd2caSopenharmony_ci        Lock::voicemailMtx_.unlock();
76115cd2caSopenharmony_ci        HILOG_INFO("--- VoicemailAsync insert---%{public}s", VoicemailUri::VOICEMAIL);
77115cd2caSopenharmony_ci    }
78115cd2caSopenharmony_ci    void Update()
79115cd2caSopenharmony_ci    {
80115cd2caSopenharmony_ci        OHOS::Uri voicemailUri(VoicemailUri::VOICEMAIL);
81115cd2caSopenharmony_ci        OHOS::DataShare::DataSharePredicates predicates;
82115cd2caSopenharmony_ci        predicates.EqualTo("id", std::to_string(this->predicatesId));
83115cd2caSopenharmony_ci        OHOS::AbilityRuntime::VoiceMailAbility voicemailAbility;
84115cd2caSopenharmony_ci        int resultCode = voicemailAbility.Update(voicemailUri, predicates, this->updateValues);
85115cd2caSopenharmony_ci        EXPECT_EQ(0, resultCode);
86115cd2caSopenharmony_ci        HILOG_INFO("--- VoicemailAsync Update---%{public}s", VoicemailUri::VOICEMAIL);
87115cd2caSopenharmony_ci    }
88115cd2caSopenharmony_ci    void Query()
89115cd2caSopenharmony_ci    {
90115cd2caSopenharmony_ci        OHOS::Uri voicemailUri(VoicemailUri::VOICEMAIL);
91115cd2caSopenharmony_ci        OHOS::DataShare::DataSharePredicates predicates;
92115cd2caSopenharmony_ci        int size = this->predicatesQueryId.size();
93115cd2caSopenharmony_ci        for (int i = 0; i < size; i++) {
94115cd2caSopenharmony_ci            predicates.EqualTo("id", std::to_string(this->predicatesQueryId[i]));
95115cd2caSopenharmony_ci            if (i < size - 1) {
96115cd2caSopenharmony_ci                predicates.Or();
97115cd2caSopenharmony_ci            }
98115cd2caSopenharmony_ci        }
99115cd2caSopenharmony_ci        OHOS::AbilityRuntime::VoiceMailAbility voicemailAbility;
100115cd2caSopenharmony_ci        std::vector<std::string> columns;
101115cd2caSopenharmony_ci        std::shared_ptr<OHOS::DataShare::DataShareResultSet> resultSet =
102115cd2caSopenharmony_ci            voicemailAbility.Query(voicemailUri, predicates, columns);
103115cd2caSopenharmony_ci        Lock::voicemailMtx_.lock();
104115cd2caSopenharmony_ci        this->resultSet.push_back(resultSet);
105115cd2caSopenharmony_ci        Lock::voicemailMtx_.unlock();
106115cd2caSopenharmony_ci        HILOG_INFO("--- VoicemailAsync Query---%{public}s", VoicemailUri::VOICEMAIL);
107115cd2caSopenharmony_ci    }
108115cd2caSopenharmony_ci
109115cd2caSopenharmony_ci    void Delete()
110115cd2caSopenharmony_ci    {
111115cd2caSopenharmony_ci        OHOS::Uri voicemailUri(VoicemailUri::VOICEMAIL);
112115cd2caSopenharmony_ci        OHOS::DataShare::DataSharePredicates predicates;
113115cd2caSopenharmony_ci        predicates.EqualTo("id", std::to_string(this->predicatesDeleteId));
114115cd2caSopenharmony_ci        OHOS::AbilityRuntime::VoiceMailAbility voicemailAbility;
115115cd2caSopenharmony_ci        int resultCode = voicemailAbility.Delete(voicemailUri, predicates);
116115cd2caSopenharmony_ci        HILOG_INFO("--- VoicemailAsync Delete---%{public}s", VoicemailUri::VOICEMAIL);
117115cd2caSopenharmony_ci        EXPECT_EQ(0, resultCode);
118115cd2caSopenharmony_ci    }
119115cd2caSopenharmony_ci};
120115cd2caSopenharmony_ci
121115cd2caSopenharmony_ciclass VoicemailAbilityTest : public BaseTest {
122115cd2caSopenharmony_cipublic:
123115cd2caSopenharmony_ci    VoicemailAbilityTest();
124115cd2caSopenharmony_ci    ~VoicemailAbilityTest();
125115cd2caSopenharmony_ci    int64_t VoicemailStatusInsert(std::string phoneNumber, int status);
126115cd2caSopenharmony_ci    int VoicemailUpdate(OHOS::DataShare::DataShareValuesBucket updateValues,
127115cd2caSopenharmony_ci        OHOS::DataShare::DataSharePredicates predicates);
128115cd2caSopenharmony_ci    int VoicemailDelete(OHOS::DataShare::DataSharePredicates predicates);
129115cd2caSopenharmony_ci    std::shared_ptr<OHOS::DataShare::DataShareResultSet> VoicemailQuery(
130115cd2caSopenharmony_ci        std::vector<std::string> columns, OHOS::DataShare::DataSharePredicates predicates);
131115cd2caSopenharmony_ci    OHOS::DataShare::DataShareValuesBucket GetVoiceMailValues(
132115cd2caSopenharmony_ci        int columnsStart, int columnsEnd, std::vector<std::string> &columns);
133115cd2caSopenharmony_ci    void GetVoiceMailValuesColumn(std::vector<std::string> &columns);
134115cd2caSopenharmony_ci    int VoicemailInsertValues(OHOS::DataShare::DataShareValuesBucket &values);
135115cd2caSopenharmony_ci    int64_t VoicemailInsertValue(std::string displayName, OHOS::DataShare::DataShareValuesBucket &values);
136115cd2caSopenharmony_ci    void CheckResultSetBatch(OHOS::DataShare::DataSharePredicates predicates, std::vector<std::string> &columns,
137115cd2caSopenharmony_ci        OHOS::DataShare::DataShareValuesBucket values, std::string testName);
138115cd2caSopenharmony_ci    void ClearVoicemail();
139115cd2caSopenharmony_ci};
140115cd2caSopenharmony_ci} // namespace Test
141115cd2caSopenharmony_ci} // namespace Contacts
142115cd2caSopenharmony_ci#endif // VOICEMAILABILITY_TEST_H
143