1 /*
2  * Copyright (c) 2021-2022 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 #ifndef VOICEMAILABILITY_TEST_H
17 #define VOICEMAILABILITY_TEST_H
18 
19 #include "base_test.h"
20 #include "test_common.h"
21 
22 namespace Contacts {
23 namespace Test {
24 namespace Lock {
25 std::mutex voicemailMtx_;
26 }
27 
28 class VoicemailAsync {
29 public:
30     OHOS::DataShare::DataShareValuesBucket values;
31     std::map<int, OHOS::DataShare::DataShareValuesBucket> result;
32     OHOS::DataShare::DataShareValuesBucket updateValues;
33     int predicatesId;
34     std::vector<std::shared_ptr<OHOS::DataShare::DataShareResultSet>> resultSet;
35     std::vector<int64_t> predicatesQueryId;
36     int predicatesDeleteId;
VoicemailAsync(OHOS::DataShare::DataShareValuesBucket &values, std::map<int, OHOS::DataShare::DataShareValuesBucket> &result)37     VoicemailAsync(OHOS::DataShare::DataShareValuesBucket &values, std::map<int,
38         OHOS::DataShare::DataShareValuesBucket> &result)
39     {
40         this->values = values;
41         this->result = result;
42         this->predicatesId = -1;
43         this->predicatesDeleteId = -1;
44     }
VoicemailAsync(OHOS::DataShare::DataShareValuesBucket &updateValues, int &predicatesId)45     VoicemailAsync(OHOS::DataShare::DataShareValuesBucket &updateValues, int &predicatesId)
46     {
47         this->updateValues = updateValues;
48         this->predicatesId = predicatesId;
49         this->predicatesDeleteId = -1;
50     }
51 
VoicemailAsync(std::vector<std::shared_ptr<OHOS::DataShare::DataShareResultSet>> resultSet, std::vector<int64_t> predicatesQueryId)52     VoicemailAsync(std::vector<std::shared_ptr<OHOS::DataShare::DataShareResultSet>> resultSet,
53         std::vector<int64_t> predicatesQueryId)
54     {
55         this->resultSet = resultSet;
56         this->predicatesQueryId = predicatesQueryId;
57         this->predicatesId = -1;
58         this->predicatesDeleteId = -1;
59     }
60 
VoicemailAsync(int &predicatesDeleteId)61     explicit VoicemailAsync(int &predicatesDeleteId)
62     {
63         this->predicatesId = -1;
64         this->predicatesDeleteId = predicatesDeleteId;
65     }
Insert()66     void Insert()
67     {
68         OHOS::AbilityRuntime::VoiceMailAbility voicemailAbility;
69         OHOS::Uri voicemailUri(VoicemailUri::VOICEMAIL);
70         int64_t code = voicemailAbility.Insert(voicemailUri, this->values);
71         int callLogId = code;
72         EXPECT_GT(callLogId, 0);
73         Lock::voicemailMtx_.lock();
74         this->result.insert(std::map<int, OHOS::DataShare::DataShareValuesBucket>::value_type(callLogId, this->values));
75         Lock::voicemailMtx_.unlock();
76         HILOG_INFO("--- VoicemailAsync insert---%{public}s", VoicemailUri::VOICEMAIL);
77     }
Update()78     void Update()
79     {
80         OHOS::Uri voicemailUri(VoicemailUri::VOICEMAIL);
81         OHOS::DataShare::DataSharePredicates predicates;
82         predicates.EqualTo("id", std::to_string(this->predicatesId));
83         OHOS::AbilityRuntime::VoiceMailAbility voicemailAbility;
84         int resultCode = voicemailAbility.Update(voicemailUri, predicates, this->updateValues);
85         EXPECT_EQ(0, resultCode);
86         HILOG_INFO("--- VoicemailAsync Update---%{public}s", VoicemailUri::VOICEMAIL);
87     }
Query()88     void Query()
89     {
90         OHOS::Uri voicemailUri(VoicemailUri::VOICEMAIL);
91         OHOS::DataShare::DataSharePredicates predicates;
92         int size = this->predicatesQueryId.size();
93         for (int i = 0; i < size; i++) {
94             predicates.EqualTo("id", std::to_string(this->predicatesQueryId[i]));
95             if (i < size - 1) {
96                 predicates.Or();
97             }
98         }
99         OHOS::AbilityRuntime::VoiceMailAbility voicemailAbility;
100         std::vector<std::string> columns;
101         std::shared_ptr<OHOS::DataShare::DataShareResultSet> resultSet =
102             voicemailAbility.Query(voicemailUri, predicates, columns);
103         Lock::voicemailMtx_.lock();
104         this->resultSet.push_back(resultSet);
105         Lock::voicemailMtx_.unlock();
106         HILOG_INFO("--- VoicemailAsync Query---%{public}s", VoicemailUri::VOICEMAIL);
107     }
108 
Delete()109     void Delete()
110     {
111         OHOS::Uri voicemailUri(VoicemailUri::VOICEMAIL);
112         OHOS::DataShare::DataSharePredicates predicates;
113         predicates.EqualTo("id", std::to_string(this->predicatesDeleteId));
114         OHOS::AbilityRuntime::VoiceMailAbility voicemailAbility;
115         int resultCode = voicemailAbility.Delete(voicemailUri, predicates);
116         HILOG_INFO("--- VoicemailAsync Delete---%{public}s", VoicemailUri::VOICEMAIL);
117         EXPECT_EQ(0, resultCode);
118     }
119 };
120 
121 class VoicemailAbilityTest : public BaseTest {
122 public:
123     VoicemailAbilityTest();
124     ~VoicemailAbilityTest();
125     int64_t VoicemailStatusInsert(std::string phoneNumber, int status);
126     int VoicemailUpdate(OHOS::DataShare::DataShareValuesBucket updateValues,
127         OHOS::DataShare::DataSharePredicates predicates);
128     int VoicemailDelete(OHOS::DataShare::DataSharePredicates predicates);
129     std::shared_ptr<OHOS::DataShare::DataShareResultSet> VoicemailQuery(
130         std::vector<std::string> columns, OHOS::DataShare::DataSharePredicates predicates);
131     OHOS::DataShare::DataShareValuesBucket GetVoiceMailValues(
132         int columnsStart, int columnsEnd, std::vector<std::string> &columns);
133     void GetVoiceMailValuesColumn(std::vector<std::string> &columns);
134     int VoicemailInsertValues(OHOS::DataShare::DataShareValuesBucket &values);
135     int64_t VoicemailInsertValue(std::string displayName, OHOS::DataShare::DataShareValuesBucket &values);
136     void CheckResultSetBatch(OHOS::DataShare::DataSharePredicates predicates, std::vector<std::string> &columns,
137         OHOS::DataShare::DataShareValuesBucket values, std::string testName);
138     void ClearVoicemail();
139 };
140 } // namespace Test
141 } // namespace Contacts
142 #endif // VOICEMAILABILITY_TEST_H
143