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