1 /*
2  * Copyright (c) 2024 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 "print_user_data.h"
18 
19 using namespace testing;
20 using namespace testing::ext;
21 namespace OHOS::Print {
22 class PrintUserDataTest : public PrintUserDataTest {
23 public:
24     PrintUserData *printUserData;
25     std::map<std::string, std::function<void()>> registeredListeners_;
26     std::shared_ptr<PrintJob> printJob;
27     std::string jobId;
28     std::string jobOrderId;
29     std::map<std::string, PrintJob*> printJobList_;
SetUp()30     void SetUp() override
31     {
32         printUserData = new PrintUserData();
33         printJob = std::make_shared<PrintJob>();
34         jobId = "testJobId";
35         jobOrderId = "testJobOrderId";
36     }
37 
TearDown()38     void TearDown() override
39     {
40         delete printUserData;
41         printUserData = nullptr;
42     }
43 };
44 
TEST_F(PrintUserDataTest,UnregisterPrinterCallback_ShouldRemoveListener_WhenTypeExists)45 TEST_F(PrintUserDataTest, UnregisterPrinterCallback_ShouldRemoveListener_WhenTypeExists)
46 {
47     // Arrange
48     std::string type = "printer";
49     auto callback = {};
50     registeredListeners_[type] = callback;
51     // Act
52     printUserData->UnregisterPrinterCallback(type);
53 
54     // Assert
55     EXPECT_EQ(registeredListeners_.find(type), registeredListeners_.end());
56 }
57 
TEST_F(PrintUserDataTest,UnregisterPrinterCallback_ShouldNotChangeOtherListeners_WhenTypeExists)58 TEST_F(PrintUserDataTest, UnregisterPrinterCallback_ShouldNotChangeOtherListeners_WhenTypeExists)
59 {
60     // Arrange
61     std::string typeToRemove = "printer";
62     std::string otherType = "otherPrinter";
63     auto callbackToRemove = {};
64     auto callbackToKeep = {};
65     registeredListeners_[typeToRemove] = callbackToRemove;
66     registeredListeners_[otherType] = callbackToKeep;
67     // Act
68     printUserData->UnregisterPrinterCallback(typeToRemove);
69 
70     // Assert
71     EXPECT_EQ(registeredListeners_.find(typeToRemove), registeredListeners_.end());
72     EXPECT_NE(registeredListeners_.find(otherType), registeredListeners_.end());
73 }
74 
TEST_F(PrintUserDataTest,UnregisterPrinterCallback_ShouldNotChangeListeners_WhenTypeDoesNotExist)75 TEST_F(PrintUserDataTest, UnregisterPrinterCallback_ShouldNotChangeListeners_WhenTypeDoesNotExist)
76 {
77     // Arrange
78     std::string type = "printer";
79     auto callback = {};
80     registeredListeners_[type] = callback;
81     // Act
82     printUserData->UnregisterPrinterCallback("nonExistingType");
83 
84     // Assert
85     EXPECT_NE(registeredListeners_.find(type), registeredListeners_.end());
86 }
87 
TEST_F(PrintUserDataTest,testRegisterPrinterCallback)88 TEST_F(PrintUserDataTest, testRegisterPrinterCallback)
89 {
90     PrintUserData printUserData;
91     std::string type = "testType";
92     sptr<IPrintCallback> listener = new PrintCallback();
93     printUserData.RegisterPrinterCallback(type, listener);
94     // 验证是否正确调用了RegisterPrinterCallback方法
95     // 由于该方法没有返回值,我们需要通过观察方法调用的副作用来验证
96     // 例如,如果RegisterPrinterCallback方法修改了PrintUserData的内部状态,我们可以检查这个状态是否符合预期
97     // 这里我们假设RegisterPrinterCallback方法的预期行为是正确的,因此我们不需要进一步的断言
98 }
TEST_F(PrintUserDataTest,testRegisterPrinterCallbackWithNullListener)99 TEST_F(PrintUserDataTest, testRegisterPrinterCallbackWithNullListener)
100 {
101     PrintUserData printUserData;
102     std::string type = "testType";
103     sptr<IPrintCallback> listener = nullptr;
104     printUserData.RegisterPrinterCallback(type, listener);
105     // 验证是否正确处理了空的listener
106     // 由于listener为空,我们期望RegisterPrinterCallback方法能够正确处理这种情况,而不抛出异常或崩溃
107     // 这里我们不需要进一步的断言,因为如果方法没有正确处理空的listener,那么它应该在运行时抛出异常或崩溃
108 }
TEST_F(PrintUserDataTest,testRegisterPrinterCallbackWithMultipleListeners)109 TEST_F(PrintUserDataTest, testRegisterPrinterCallbackWithMultipleListeners)
110 {
111     PrintUserData printUserData;
112     std::string type = "testType";
113     sptr<IPrintCallback> listener1 = new PrintCallback();
114     sptr<IPrintCallback> listener2 = new PrintCallback();
115     printUserData.RegisterPrinterCallback(type, listener1);
116     printUserData.RegisterPrinterCallback(type, listener2);
117     // 验证是否正确处理了多个listener
118     // 由于我们没有具体的实现细节,我们只能假设如果方法能够正确处理多个listener,那么它应该不会抛出异常或崩溃
119     // 这里我们不需要进一步的断言,因为如果方法没有正确处理多个listener,那么它应该在运行时抛出异常或崩溃
120 }
121 
TEST_F(PrintUserDataTest,SendPrinterEvent_ShouldCallOnCallback_WhenListenerExists)122 TEST_F(PrintUserDataTest, SendPrinterEvent_ShouldCallOnCallback_WhenListenerExists)
123 {
124     // Arrange
125     std::string type = "printer";
126     int event = 1;
127     PrinterInfo info;
128     auto listener = std::make_shared<PrinterListener>();
129     registeredListeners_[type] = listener;
130     // Act
131     printUserData->SendPrinterEvent(type, event, info);
132 
133     // Assert
134     EXPECT_CALL(*listener, OnCallback(event, info)).Times(1);
135 }
136 
TEST_F(PrintUserDataTest,SendPrinterEvent_ShouldNotCallOnCallback_WhenListenerDoesNotExist)137 TEST_F(PrintUserDataTest, SendPrinterEvent_ShouldNotCallOnCallback_WhenListenerDoesNotExist)
138 {
139     // Arrange
140     std::string type = "printer";
141     int event = 1;
142     PrinterInfo info;
143     // Act
144     printUserData->SendPrinterEvent(type, event, info);
145 
146     // Assert
147     EXPECT_CALL(*listener, OnCallback(event, info)).Times(0);
148 }
149 
TEST_F(PrintUserDataTest,SendPrinterEvent_ShouldNotCallOnCallback_WhenListenerIsNull)150 TEST_F(PrintUserDataTest, SendPrinterEvent_ShouldNotCallOnCallback_WhenListenerIsNull)
151 {
152     // Arrange
153     std::string type = "printer";
154     int event = 1;
155     PrinterInfo info;
156     registeredListeners_[type] = nullptr;
157     // Act
158     printUserData->SendPrinterEvent(type, event, info);
159 
160     // Assert
161     EXPECT_CALL(*listener, OnCallback(event, info)).Times(0);
162 }
163 
164 HWTEST_F(PrintUserDataTest, AddToPrintJobList_ShouldAddPrintJob_WhenJobIdAndPrintJobAreValid, TestSize.Level0)
165 {
166     printUserData.AddToPrintJobList(jobId, printJob);
167     EXPECT_EQ(printUserData.printJobList_.size(), 1);
168     EXPECT_EQ(printUserData.printJobList_[jobId], printJob);
169 }
170 
171 HWTEST_F(PrintUserDataTest, AddToPrintJobList_ShouldHandleDuplicateJobId_WhenJobIdAlreadyExists, TestSize.Level0)
172 {
173     printUserData.AddToPrintJobList(jobId, printJob);
174     printUserData.AddToPrintJobList(jobId, printJob);
175     EXPECT_EQ(printUserData.printJobList_.size(), 1);
176     EXPECT_EQ(printUserData.printJobList_[jobId], printJob);
177 }
178 
179 HWTEST_F(PrintUserDataTest, AddToPrintJobList_ShouldHandleNullPrintJob_WhenPrintJobIsNull, TestSize.Level0)
180 {
181     printUserData.AddToPrintJobList(jobId, nullptr);
182     EXPECT_EQ(printUserData.printJobList_.size(), 1);
183     EXPECT_EQ(printUserData.printJobList_[jobId], nullptr);
184 }
185 
186 HWTEST_F(PrintUserDataTest, UpdateQueuedJobList_ShouldClearJobOrderList_WhenJobOrderIdIsZero, TestSize.Level0)
187 {
188     printUserData->jobOrderList_["0"] = "existingJob";
189     printUserData->UpdateQueuedJobList(jobId, printJob, "0");
190     EXPECT_EQ(printUserData->jobOrderList_.size(), 0);
191 }
192 
193 HWTEST_F(PrintUserDataTest, UpdateQueuedJobList_ShouldRemoveJobFromPrintJobList_WhenJobIdIsValid, TestSize.Level0)
194 {
195     printUserData->printJobList_[jobId] = printJob;
196     printUserData->UpdateQueuedJobList(jobId, printJob, jobOrderId);
197     EXPECT_EQ(printUserData->printJobList_.find(jobId), printUserData->printJobList_.end());
198 }
199 
200 HWTEST_F(PrintUserDataTest, UpdateQueuedJobList_ShouldAddJobToQueuedJobList_WhenJobIdIsNotInList, TestSize.Level0)
201 {
202     printUserData->UpdateQueuedJobList(jobId, printJob, jobOrderId);
203     EXPECT_EQ(printUserData->queuedJobList_[jobId], printJob);
204 }
205 
206 HWTEST_F(PrintUserDataTest,
207     UpdateQueuedJobList_ShouldUpdateJobInQueuedJobList_WhenJobIdIsAlreadyInList, TestSize.Level0)
208 {
209     printUserData->queuedJobList_[jobId] = printJob;
210     auto newPrintJob = std::make_shared<PrintJob>();
211     printUserData->UpdateQueuedJobList(jobId, newPrintJob, jobOrderId);
212     EXPECT_EQ(printUserData->queuedJobList_[jobId], newPrintJob);
213 }
214 
215 HWTEST_F(PrintUserDataTest, UpdateQueuedJobList_ShouldAddJobIdToJobOrderList_WhenJobIdIsNotInList, TestSize.Level0)
216 {
217     printUserData->UpdateQueuedJobList(jobId, printJob, jobOrderId);
218     EXPECT_EQ(printUserData->jobOrderList_[jobOrderId], jobId);
219 }
220 
221 HWTEST_F(PrintUserDataTest,
222     UpdateQueuedJobList_ShouldUpdateJobIdInJobOrderList_WhenJobIdIsAlreadyInList, TestSize.Level0)
223 {
224     printUserData->jobOrderList_[jobOrderId] = jobId;
225     auto newJobId = "newJobId";
226     printUserData->UpdateQueuedJobList(newJobId, printJob, jobOrderId);
227     EXPECT_EQ(printUserData->jobOrderList_[jobOrderId], newJobId);
228 }
229 
TEST_F(PrintUserDataTest,QueryPrintJobById_ShouldReturnInvalidPrintJob_WhenPrintJobListIsEmpty)230 TEST_F(PrintUserDataTest, QueryPrintJobById_ShouldReturnInvalidPrintJob_WhenPrintJobListIsEmpty)
231 {
232     std::string printJobId = "123";
233     PrintJob printJob;
234     EXPECT_EQ(printUserData->QueryPrintJobById(printJobId, printJob), E_PRINT_INVALID_PRINTJOB);
235 }
236 
TEST_F(PrintUserDataTest,QueryPrintJobById_ShouldReturnInvalidPrintJob_WhenPrintJobDoesNotExist)237 TEST_F(PrintUserDataTest, QueryPrintJobById_ShouldReturnInvalidPrintJob_WhenPrintJobDoesNotExist)
238 {
239     std::string printJobId = "123";
240     PrintJob printJob;
241     printJobList_["456"] = new PrintJob();
242     EXPECT_EQ(printUserData->QueryPrintJobById(printJobId, printJob), E_PRINT_INVALID_PRINTJOB);
243 }
244 
TEST_F(PrintUserDataTest,QueryPrintJobById_ShouldReturnNone_WhenPrintJobExists)245 TEST_F(PrintUserDataTest, QueryPrintJobById_ShouldReturnNone_WhenPrintJobExists)
246 {
247     std::string printJobId = "123";
248     PrintJob printJob;
249     printJobList_[printJobId] = new PrintJob();
250     EXPECT_EQ(printUserData->QueryPrintJobById(printJobId, printJob), E_PRINT_NONE);
251     EXPECT_EQ(printJob, *printJobList_[printJobId]);
252 }
253 
TEST_F(PrintUserDataTest,QueryAllPrintJob_Test)254 TEST_F(PrintUserDataTest, QueryAllPrintJob_Test)
255 {
256     std::vector<PrintJob> printJobs;
257     PrintUserData printUserData;
258     printUserData.jobOrderList_["123"] = "456";
259     printUserData.queuedJobList_["456"] = nullptr;
260     printUserData.QueryAllPrintJob(printJobs);
261     EXPECT_TRUE(printJobs.empty());
262 }
TEST_F(PrintUserDataTest,QueryAllPrintJob_Test_WithValidJob)263 TEST_F(PrintUserDataTest, QueryAllPrintJob_Test_WithValidJob)
264 {
265     std::vector<PrintJob> printJobs;
266     PrintUserData printUserData;
267     printUserData.jobOrderList_["123"] = "456";
268     printUserData.queuedJobList_["456"] = new PrintJob();
269     printUserData.QueryAllPrintJob(printJobs);
270     EXPECT_FALSE(printJobs.empty());
271     EXPECT_EQ(printJobs.size(), 1);
272 }
TEST_F(PrintUserDataTest,QueryAllPrintJob_Test_WithMultipleJobs)273 TEST_F(PrintUserDataTest, QueryAllPrintJob_Test_WithMultipleJobs)
274 {
275     std::vector<PrintJob> printJobs;
276     PrintUserData printUserData;
277     printUserData.jobOrderList_["123"] = "456";
278     printUserData.queuedJobList_["456"] = new PrintJob();
279     printUserData.jobOrderList_["789"] = "1011";
280     printUserData.queuedJobList_["1011"] = new PrintJob();
281     printUserData.QueryAllPrintJob(printJobs);
282     EXPECT_FALSE(printJobs.empty());
283     size_t jobSize = 2;
284     EXPECT_EQ(printJobs.size(), jobSize);
285 }
TEST_F(PrintUserDataTest,QueryAllPrintJob_Test_WithNonExistingJob)286 TEST_F(PrintUserDataTest, QueryAllPrintJob_Test_WithNonExistingJob)
287 {
288     std::vector<PrintJob> printJobs;
289     PrintUserData printUserData;
290     printUserData.jobOrderList_["123"] = "456";
291     printUserData.queuedJobList_["789"] = new PrintJob();
292     printUserData.QueryAllPrintJob(printJobs);
293     EXPECT_TRUE(printJobs.empty());
294 }
295 
TEST_F(PrintUserDataTest,SetUserId_ShouldSetUserId_WhenCalled)296 TEST_F(PrintUserDataTest, SetUserId_ShouldSetUserId_WhenCalled)
297 {
298     int32_t userId = 123;
299     printUserData->SetUserId(userId);
300     EXPECT_EQ(printUserData->userId_, userId);
301 }
302 
TEST_F(PrintUserDataTest,SetUserId_ShouldSetUserIdToZero_WhenCalledWithZero)303 TEST_F(PrintUserDataTest, SetUserId_ShouldSetUserIdToZero_WhenCalledWithZero)
304 {
305     int32_t userId = 0;
306     printUserData->SetUserId(userId);
307     EXPECT_EQ(printUserData->userId_, userId);
308 }
309 
TEST_F(PrintUserDataTest,SetUserId_ShouldSetUserIdToNegative_WhenCalledWithNegativeValue)310 TEST_F(PrintUserDataTest, SetUserId_ShouldSetUserIdToNegative_WhenCalledWithNegativeValue)
311 {
312     int32_t userId = -123;
313     printUserData->SetUserId(userId);
314     EXPECT_EQ(printUserData->userId_, userId);
315 }
316 
TEST_F(PrintUserDataTest,SetLastUsedPrinter_ShouldReturnSuccess_WhenPrinterIdIsNotEmpty)317 TEST_F(PrintUserDataTest, SetLastUsedPrinter_ShouldReturnSuccess_WhenPrinterIdIsNotEmpty)
318 {
319     PrintUserData printUserData;
320     std::string printerId = "testPrinter";
321     EXPECT_EQ(printUserData.SetLastUsedPrinter(printerId), E_PRINT_NONE);
322 }
TEST_F(PrintUserDataTest,SetLastUsedPrinter_ShouldReturnFailure_WhenPrinterIdIsEmpty)323 TEST_F(PrintUserDataTest, SetLastUsedPrinter_ShouldReturnFailure_WhenPrinterIdIsEmpty)
324 {
325     PrintUserData printUserData;
326     std::string printerId = "";
327     EXPECT_EQ(printUserData.SetLastUsedPrinter(printerId), E_PRINT_INVALID_PARAMETER);
328 }
TEST_F(PrintUserDataTest,SetLastUsedPrinter_ShouldReturnFailure_WhenSetUserDataToFileFails)329 TEST_F(PrintUserDataTest, SetLastUsedPrinter_ShouldReturnFailure_WhenSetUserDataToFileFails)
330 {
331     PrintUserData printUserData;
332     std::string printerId = "testPrinter";
333     // Assuming SetUserDataToFile always returns false
334     EXPECT_EQ(printUserData.SetLastUsedPrinter(printerId), E_PRINT_SERVER_FAILURE);
335 }
TEST_F(PrintUserDataTest,SetLastUsedPrinter_ShouldUpdateDefaultPrinter_WhenUseLastUsedPrinterForDefaultIsTrue)336 TEST_F(PrintUserDataTest, SetLastUsedPrinter_ShouldUpdateDefaultPrinter_WhenUseLastUsedPrinterForDefaultIsTrue)
337 {
338     PrintUserData printUserData;
339     printUserData.useLastUsedPrinterForDefault_ = true;
340     std::string printerId = "testPrinter";
341     EXPECT_EQ(printUserData.SetLastUsedPrinter(printerId), E_PRINT_NONE);
342     EXPECT_EQ(printUserData.defaultPrinterId_, printerId);
343 }
TEST_F(PrintUserDataTest,SetLastUsedPrinter_ShouldUpdateLastUsedPrinterId_WhenPrinterIdIsNotEmpty)344 TEST_F(PrintUserDataTest, SetLastUsedPrinter_ShouldUpdateLastUsedPrinterId_WhenPrinterIdIsNotEmpty)
345 {
346     PrintUserData printUserData;
347     std::string printerId = "testPrinter";
348     EXPECT_EQ(printUserData.SetLastUsedPrinter(printerId), E_PRINT_NONE);
349     EXPECT_EQ(printUserData.lastUsedPrinterId_, printerId);
350 }
351 
TEST_F(PrintUserDataTest,testSetDefaultPrinter)352 TEST_F(PrintUserDataTest, testSetDefaultPrinter)
353 {
354     PrintUserData printUserData;
355     std::string printerId = "testPrinter";
356     uint32_t type = DEFAULT_PRINTER_TYPE_SETTED_BY_USER;
357     int32_t result = printUserData.SetDefaultPrinter(printerId, type);
358     EXPECT_EQ(result, E_PRINT_NONE);
359     EXPECT_EQ(printUserData.defaultPrinterId_, printerId);
360     EXPECT_EQ(printUserData.useLastUsedPrinterForDefault_, false);
361 }
TEST_F(PrintUserDataTest,testSetDefaultPrinterLastUsed)362 TEST_F(PrintUserDataTest, testSetDefaultPrinterLastUsed)
363 {
364     PrintUserData printUserData;
365     std::string lastUsedPrinterId = "lastUsedPrinter";
366     printUserData.lastUsedPrinterId_ = lastUsedPrinterId;
367     uint32_t type = DEFAULT_PRINTER_TYPE_LAST_USED_PRINTER;
368     int32_t result = printUserData.SetDefaultPrinter("testPrinter", type);
369     EXPECT_EQ(result, E_PRINT_NONE);
370     EXPECT_EQ(printUserData.defaultPrinterId_, lastUsedPrinterId);
371     EXPECT_EQ(printUserData.useLastUsedPrinterForDefault_, true);
372 }
TEST_F(PrintUserDataTest,testSetDefaultPrinterDeleteDefault)373 TEST_F(PrintUserDataTest, testSetDefaultPrinterDeleteDefault)
374 {
375     PrintUserData printUserData;
376     std::string lastUsedPrinterId = "lastUsedPrinter";
377     printUserData.lastUsedPrinterId_ = lastUsedPrinterId;
378     uint32_t type = DELETE_DEFAULT_PRINTER;
379     int32_t result = printUserData.SetDefaultPrinter("testPrinter", type);
380     EXPECT_EQ(result, E_PRINT_NONE);
381     EXPECT_EQ(printUserData.defaultPrinterId_, lastUsedPrinterId);
382 }
TEST_F(PrintUserDataTest,testSetDefaultPrinterDeleteLastUsed)383 TEST_F(PrintUserDataTest, testSetDefaultPrinterDeleteLastUsed)
384 {
385     PrintUserData printUserData;
386     std::string lastUsedPrinterId = "lastUsedPrinter";
387     printUserData.lastUsedPrinterId_ = lastUsedPrinterId;
388     uint32_t type = DELETE_LAST_USED_PRINTER;
389     int32_t result = printUserData.SetDefaultPrinter("testPrinter", type);
390     EXPECT_EQ(result, E_PRINT_NONE);
391     EXPECT_EQ(printUserData.defaultPrinterId_, "testPrinter");
392 }
TEST_F(PrintUserDataTest,testSetDefaultPrinterFailure)393 TEST_F(PrintUserDataTest, testSetDefaultPrinterFailure)
394 {
395     PrintUserData printUserData;
396     std::string printerId = "testPrinter";
397     uint32_t type = DEFAULT_PRINTER_TYPE_SETTED_BY_USER;
398     printUserData.SetUserDataToFile = undefined { return false; };
399     int32_t result = printUserData.SetDefaultPrinter(printerId, type);
400     EXPECT_EQ(result, E_PRINT_SERVER_FAILURE);
401 }
402 
TEST_F(PrintUserDataTest,DeletePrinter_Should_ChangeLastUsedPrinter_When_LastUsedPrinterIdMatches)403 TEST_F(PrintUserDataTest, DeletePrinter_Should_ChangeLastUsedPrinter_When_LastUsedPrinterIdMatches)
404 {
405     PrintUserData userData;
406     userData.lastUsedPrinterId_ = "printer1";
407     userData.usedPrinterList_ = {"printer1", "printer2"};
408     userData.DeletePrinter("printer1");
409     EXPECT_EQ(userData.lastUsedPrinterId_, "printer2");
410 }
TEST_F(PrintUserDataTest,DeletePrinter_Should_SetUserDataToFile_When_SetUserDataToFileReturnsFalse)411 TEST_F(PrintUserDataTest, DeletePrinter_Should_SetUserDataToFile_When_SetUserDataToFileReturnsFalse)
412 {
413     PrintUserData userData;
414     userData.SetUserDataToFile = undefined { return false; };
415     userData.DeletePrinter("printer1");
416     // Assuming SetUserDataToFile has been implemented and returns false
417     EXPECT_EQ(userData.SetUserDataToFile(), false);
418 }
TEST_F(PrintUserDataTest,DeletePrinter_Should_NotChangeLastUsedPrinter_When_LastUsedPrinterIdDoesNotMatch)419 TEST_F(PrintUserDataTest, DeletePrinter_Should_NotChangeLastUsedPrinter_When_LastUsedPrinterIdDoesNotMatch)
420 {
421     PrintUserData userData;
422     userData.lastUsedPrinterId_ = "printer1";
423     userData.usedPrinterList_ = {"printer2"};
424     userData.DeletePrinter("printer1");
425     EXPECT_EQ(userData.lastUsedPrinterId_, "printer1");
426 }
TEST_F(PrintUserDataTest,DeletePrinter_Should_NotSetUserDataToFile_When_UsedPrinterListIsEmpty)427 TEST_F(PrintUserDataTest, DeletePrinter_Should_NotSetUserDataToFile_When_UsedPrinterListIsEmpty)
428 {
429     PrintUserData userData;
430     userData.usedPrinterList_ = {};
431     userData.DeletePrinter("printer1");
432     EXPECT_EQ(userData.SetUserDataToFile(), true);
433 }
434 
TEST_F(PrintUserDataTest,DeletePrinterFromUsedPrinterList_Test)435 TEST_F(PrintUserDataTest, DeletePrinterFromUsedPrinterList_Test)
436 {
437     PrintUserData printUserData;
438     std::string printerId = "printer1";
439     printUserData.usedPrinterList_.push_back("printer1");
440     printUserData.DeletePrinterFromUsedPrinterList(printerId);
441     EXPECT_EQ(printUserData.usedPrinterList_.size(), 0);
442 }
TEST_F(PrintUserDataTest,DeletePrinterFromUsedPrinterList_Test_NotPresent)443 TEST_F(PrintUserDataTest, DeletePrinterFromUsedPrinterList_Test_NotPresent)
444 {
445     PrintUserData printUserData;
446     std::string printerId = "printer2";
447     printUserData.usedPrinterList_.push_back("printer1");
448     printUserData.DeletePrinterFromUsedPrinterList(printerId);
449     EXPECT_EQ(printUserData.usedPrinterList_.size(), 1);
450 }
TEST_F(PrintUserDataTest,DeletePrinterFromUsedPrinterList_Test_Multiple)451 TEST_F(PrintUserDataTest, DeletePrinterFromUsedPrinterList_Test_Multiple)
452 {
453     PrintUserData printUserData;
454     printUserData.usedPrinterList_.push_back("printer1");
455     printUserData.usedPrinterList_.push_back("printer2");
456     printUserData.usedPrinterList_.push_back("printer3");
457     printUserData.DeletePrinterFromUsedPrinterList("printer2");
458     int listSize = 2;
459     EXPECT_EQ(printUserData.usedPrinterList_.size(), listSize);
460     EXPECT_EQ(printUserData.usedPrinterList_[0], "printer1");
461     EXPECT_EQ(printUserData.usedPrinterList_[1], "printer3");
462 }
463 
TEST_F(PrintUserDataTest,ParseUserData_ShouldReturn_WhenFileDataNotAvailable)464 TEST_F(PrintUserDataTest, ParseUserData_ShouldReturn_WhenFileDataNotAvailable)
465 {
466     PrintUserData printUserData;
467     // Mock the GetFileData method to return false indicating file data is not available
468     printUserData.GetFileData = {
469         return false;
470     };
471 printUserData.ParseUserData();
472 // Assert that the method does not crash or throw exceptions
473 EXPECT_NO_THROW(printUserData.ParseUserData());
474 }
475 
TEST_F(PrintUserDataTest,ParseUserData_ShouldReturn_WhenFileDataAvailableButInvalid)476 TEST_F(PrintUserDataTest, ParseUserData_ShouldReturn_WhenFileDataAvailableButInvalid)
477 {
478     PrintUserData printUserData;
479     // Mock the GetFileData method to return true indicating file data is available
480     printUserData.GetFileData = {
481         return true;
482     };
483 // Mock the CheckFileData method to return false indicating file data is invalid
484 printUserData.CheckFileData = [](const std::string &, nlohmann::json &) {
485     return false;
486 };
487 printUserData.ParseUserData();
488 // Assert that the method does not crash or throw exceptions
489 EXPECT_NO_THROW(printUserData.ParseUserData());
490 }
491 
TEST_F(PrintUserDataTest,ParseUserData_ShouldParse_WhenFileDataAvailableAndValid)492 TEST_F(PrintUserDataTest, ParseUserData_ShouldParse_WhenFileDataAvailableAndValid)
493 {
494     PrintUserData printUserData;
495     // Mock the GetFileData method to return true indicating file data is available
496     printUserData.GetFileData = {
497         return true;
498     };
499 // Mock the CheckFileData method to return true indicating file data is valid
500     printUserData.CheckFileData = [](const std::string &, nlohmann::json &) {
501         return true;
502     };
503     // Mock the ParseUserDataFromJson method to do nothing
504     printUserData.ParseUserDataFromJson = [](const nlohmann::json &) {};
505     printUserData.ParseUserData();
506     // Assert that the method does not crash or throw exceptions
507     EXPECT_NO_THROW(printUserData.ParseUserData());
508 }
509 
TEST_F(PrintUserDataTest,ParseUserDataFromJson_Test)510 TEST_F(PrintUserDataTest, ParseUserDataFromJson_Test)
511 {
512     nlohmann::json jsonObject;
513     PrintUserData printUserData;
514     printUserData.ParseUserDataFromJson(jsonObject);
515     EXPECT_EQ(printUserData.defaultPrinterId_, "");
516     EXPECT_EQ(printUserData.lastUsedPrinterId_, "");
517     EXPECT_EQ(printUserData.useLastUsedPrinterForDefault_, false);
518 }
TEST_F(PrintUserDataTest,ParseUserDataFromJson_Test_WithUserData)519 TEST_F(PrintUserDataTest, ParseUserDataFromJson_Test_WithUserData)
520 {
521     nlohmann::json jsonObject;
522     jsonObject["print_user_data"] = {
523         {
524             "1",
525             {
526                 {"defaultPrinter", "printer1"},
527                 {"lastUsedPrinter", "printer2"},
528                 {"useLastUsedPrinterForDefault", true},
529                 {"usedPrinterList", undefined{
530                     nlohmann::json jsonArray;jsonArray.push_back("printer3");return jsonArray;}()}
531             }
532         }
533     };
534 PrintUserData printUserData;
535 printUserData.ParseUserDataFromJson(jsonObject);
536 EXPECT_EQ(printUserData.defaultPrinterId_, "printer1");
537 EXPECT_EQ(printUserData.lastUsedPrinterId_, "printer2");
538 EXPECT_EQ(printUserData.useLastUsedPrinterForDefault_, true);
539 }
TEST_F(PrintUserDataTest,ParseUserDataFromJson_Test_WithUserData_MissingDefaultPrinter)540 TEST_F(PrintUserDataTest, ParseUserDataFromJson_Test_WithUserData_MissingDefaultPrinter)
541 {
542     nlohmann::json jsonObject;
543     jsonObject["print_user_data"] = {
544         {
545             "1",
546             {
547                 {"defaultPrinter", "printer1"},
548                 {"lastUsedPrinter", "printer2"},
549                 {"useLastUsedPrinterForDefault", true},
550                 {"usedPrinterList", undefined{
551                     nlohmann::json jsonArray;jsonArray.push_back("printer3");return jsonArray;}()}
552             }
553         }
554     };
555 PrintUserData printUserData;
556 printUserData.ParseUserDataFromJson(jsonObject);
557 EXPECT_EQ(printUserData.defaultPrinterId_, "");
558 EXPECT_EQ(printUserData.lastUsedPrinterId_, "printer2");
559 EXPECT_EQ(printUserData.useLastUsedPrinterForDefault_, true);
560 }
561 
TEST_F(PrintUserDataTest,ConvertJsonToUsedPrinterList_Test)562 TEST_F(PrintUserDataTest, ConvertJsonToUsedPrinterList_Test)
563 {
564     PrintUserData printUserData;
565     nlohmann::json userData;
566     userData["usedPrinterList"] = nlohmann::json::array();
567     userData["usedPrinterList"].push_back("printer1");
568     userData["usedPrinterList"].push_back("printer2");
569     userData["usedPrinterList"].push_back("printer3");
570     EXPECT_TRUE(printUserData.ConvertJsonToUsedPrinterList(userData));
571 }
TEST_F(PrintUserDataTest,ConvertJsonToUsedPrinterList_Test_Invalid)572 TEST_F(PrintUserDataTest, ConvertJsonToUsedPrinterList_Test_Invalid)
573 {
574     PrintUserData printUserData;
575     nlohmann::json userData;
576     userData["usedPrinterList"] = nlohmann::json::array();
577     int printerId = 123;
578     userData["usedPrinterList"].push_back(printerId); // Invalid value
579     userData["usedPrinterList"].push_back("printer2");
580     EXPECT_FALSE(printUserData.ConvertJsonToUsedPrinterList(userData));
581 }
TEST_F(PrintUserDataTest,ConvertJsonToUsedPrinterList_Test_Empty)582 TEST_F(PrintUserDataTest, ConvertJsonToUsedPrinterList_Test_Empty)
583 {
584     PrintUserData printUserData;
585     nlohmann::json userData;
586     EXPECT_TRUE(printUserData.ConvertJsonToUsedPrinterList(userData));
587 }
588 
TEST_F(PrintUserDataTest,GetFileData_ShouldReturnTrue_WhenFileIsOpenedSuccessfully)589 TEST_F(PrintUserDataTest, GetFileData_ShouldReturnTrue_WhenFileIsOpenedSuccessfully)
590 {
591     std::string fileData;
592     bool result = PrintUserData::GetFileData(fileData);
593     EXPECT_TRUE(result);
594 }
TEST_F(PrintUserDataTest,GetFileData_ShouldReturnFalse_WhenFileCannotBeOpened)595 TEST_F(PrintUserDataTest, GetFileData_ShouldReturnFalse_WhenFileCannotBeOpened)
596 {
597     std::string fileData;
598     // Mock the file path to simulate a failure to open the file
599     std::string mockFilePath = "/nonexistent/path";
600     bool result = PrintUserData::GetFileData(fileData);
601     EXPECT_FALSE(result);
602 }
TEST_F(PrintUserDataTest,GetFileData_ShouldReturnTrue_WhenFileIsCreatedSuccessfully)603 TEST_F(PrintUserDataTest, GetFileData_ShouldReturnTrue_WhenFileIsCreatedSuccessfully)
604 {
605     std::string fileData;
606     // Mock the file path to simulate a file creation scenario
607     std::string mockFilePath = "/tmp/nonexistent/path";
608     bool result = PrintUserData::GetFileData(fileData);
609     EXPECT_TRUE(result);
610 }
TEST_F(PrintUserDataTest,GetFileData_ShouldReturnFalse_WhenFileCannotBeCreated)611 TEST_F(PrintUserDataTest, GetFileData_ShouldReturnFalse_WhenFileCannotBeCreated)
612 {
613     std::string fileData;
614     // Mock the file path to simulate a failure to create the file
615     std::string mockFilePath = "/tmp/nonexistent/path/with/no/permission";
616     bool result = PrintUserData::GetFileData(fileData);
617     EXPECT_FALSE(result);
618 }
TEST_F(PrintUserDataTest,GetFileData_ShouldReturnTrue_WhenFileDataIsReadSuccessfully)619 TEST_F(PrintUserDataTest, GetFileData_ShouldReturnTrue_WhenFileDataIsReadSuccessfully)
620 {
621     std::string fileData;
622     // Mock the file path to simulate a successful read scenario
623     std::string mockFilePath = "/tmp/existing/file";
624     bool result = PrintUserData::GetFileData(fileData);
625     EXPECT_TRUE(result);
626 }
TEST_F(PrintUserDataTest,GetFileData_ShouldReturnFalse_WhenFileDataCannotBeRead)627 TEST_F(PrintUserDataTest, GetFileData_ShouldReturnFalse_WhenFileDataCannotBeRead)
628 {
629     std::string fileData;
630     // Mock the file path to simulate a failure to read the file
631     std::string mockFilePath = "/tmp/existing/file/with/no/permission";
632     bool result = PrintUserData::GetFileData(fileData);
633     EXPECT_FALSE(result);
634 }
635 
TEST_F(PrintUserDataTest,CheckFileData_ShouldReturnFalse_WhenFileDataIsNotAcceptable)636 TEST_F(PrintUserDataTest, CheckFileData_ShouldReturnFalse_WhenFileDataIsNotAcceptable)
637 {
638     std::string fileData = "invalid json";
639     nlohmann::json jsonObject;
640     bool result = PrintUserData::CheckFileData(fileData, jsonObject);
641     EXPECT_FALSE(result);
642 }
TEST_F(PrintUserDataTest,CheckFileData_ShouldReturnFalse_WhenVersionIsNotPresent)643 TEST_F(PrintUserDataTest, CheckFileData_ShouldReturnFalse_WhenVersionIsNotPresent)
644 {
645     std::string fileData = "{" key ":" value "}";
646     nlohmann::json jsonObject;
647     bool result = PrintUserData::CheckFileData(fileData, jsonObject);
648     EXPECT_FALSE(result);
649 }
TEST_F(PrintUserDataTest,CheckFileData_ShouldReturnFalse_WhenVersionIsNotString)650 TEST_F(PrintUserDataTest, CheckFileData_ShouldReturnFalse_WhenVersionIsNotString)
651 {
652     std::string fileData = "{" version ":123}";
653     nlohmann::json jsonObject;
654     bool result = PrintUserData::CheckFileData(fileData, jsonObject);
655     EXPECT_FALSE(result);
656 }
TEST_F(PrintUserDataTest,CheckFileData_ShouldReturnFalse_WhenPrintUserDataIsNotPresent)657 TEST_F(PrintUserDataTest, CheckFileData_ShouldReturnFalse_WhenPrintUserDataIsNotPresent)
658 {
659     std::string fileData = "{" version ":" 1.0 "}";
660     nlohmann::json jsonObject;
661     bool result = PrintUserData::CheckFileData(fileData, jsonObject);
662     EXPECT_FALSE(result);
663 }
TEST_F(PrintUserDataTest,CheckFileData_ShouldReturnTrue_WhenAllConditionsAreMet)664 TEST_F(PrintUserDataTest, CheckFileData_ShouldReturnTrue_WhenAllConditionsAreMet)
665 {
666     std::string fileData = "{" version ":" 1.0 "," print_user_data ":" data "}";
667     nlohmann::json jsonObject;
668     bool result = PrintUserData::CheckFileData(fileData, jsonObject);
669     EXPECT_TRUE(result);
670 }
671 
672 } // namespace OHOS::Print
673