Best AspectMock code snippet using UserModel
AccessController.php
Source: AccessController.php
1<?php2namespace app\modules\api\controllers;3use yii;4use yii\rest\ActiveController;5use yii\filters\auth\HttpBearerAuth;6use app\models;7use app\models\User;8use app\models\LoginForm;9use app\models\Locations;10use app\models\UserHotels;11class AccessController extends ActiveController12{13 public $modelClass = 'app\models\User';14 public function behaviors()15 {16 $behaviors = parent::behaviors();17 $behaviors['authenticate'] = [18 'class' => HttpBearerAuth::className(),19 ];20 return $behaviors;21 }22 public function actionChangePassword()23 {24 $output = [];25 $user_id = Yii::$app->request->post('user_id');26 $oldpassword = Yii::$app->request->post('oldpassword');27 $newpassword = Yii::$app->request->post('newpassword');28 if (!empty($oldpassword) && !empty($newpassword) && !empty($user_id)) {29 $usermodel = User::findOne($user_id);30 if ($usermodel->validatePassword($oldpassword)) {31 $usermodel->password_hash = Yii::$app->getSecurity()->generatePasswordHash($newpassword);32 if ($usermodel->save()) {33 $output = [34 '200' => 'success',35 'response' => 'success',36 'message' => 'Password Successfully changed'37 ];38 Yii::$app->response->statusCode = 200;39 } else {40 $output = [41 '404' => 'fail',42 'response' => 'fail',43 'message' => 'Failed to update password'44 ];45 Yii::$app->response->statusCode = 404;46 }47 } else {48 $output = [49 '400' => 'fail',50 'response' => 'fail',51 'message' => "Current password is incorrect"52 ];53 Yii::$app->response->statusCode = 400;54 }55 } else {56 $output = [57 '404' => 'fail',58 'response' => 'fail',59 'message' => 'No data found'60 ];61 Yii::$app->response->statusCode = 404;62 }63 return $output;64 }65 public function actionLogout()66 {67 $output = [];68 $user_id = Yii::$app->request->post('user_id');69 if (!empty($user_id)) {70 $usermodel = User::findOne($user_id);71 $usermodel->auth_token = "";72 if ($usermodel->save()) {73 $output = [74 '200' => 'LogOut',75 'response' => 'success',76 'message' => 'User Logged out'77 ];78 } else {79 $output = [80 '404' => 'LogOut error',81 'response' => 'fail',82 'message' => 'Error in setting data in db'83 ];84 Yii::$app->response->statusCode = 404;85 }86 } else {87 $output = [88 '404' => 'LogOut error',89 'response' => 'fail',90 'message' => 'No data found'91 ];92 Yii::$app->response->statusCode = 404;93 }94 return $output;95 }96 public function actionProfile()97 {98 $output = [];99 $user_id = Yii::$app->request->post('user_id');100 $usermodel = User::findOne($user_id);101 if ($usermodel) {102 $locations = [];103 foreach ($usermodel->userLocations as $location) {104 $locations[] = $location->location->locationCity->name;105 }106 $locationsList = implode(',', $locations);107 $hotelsList = [];108 foreach ($usermodel->userHotels as $hotels) {109 $hotelsList[] = $hotels->hotel->hotel_name;110 }111 $hotelsList = implode(', ', $hotelsList);112 $departments = [];113 foreach ($usermodel->userDepartments as $userDepartments) {114 if ($userDepartments->department) {115 $departments[] = $userDepartments->department->department->department_name;116 }117 }118 $departmentsList = implode(', ', $departments);119 if ($usermodel->image) {120 $image = "/imageuploads/" . $usermodel->image;121 } else {122 $image = null;123 }124 $output = [125 'response' => 'success',126 'message' => 'Successfull',127 'image_path' => $image,128 'user_id' => $usermodel->user_id,129 'username' => $usermodel->first_name . ' ' . $usermodel->last_name,130 'email' => $usermodel->email,131 'mobile_number' => $usermodel->phone,132 'user_type' => $usermodel->uiUserType->ut_name,133 'user_role' => $usermodel->uiRole->role_name,134 'location' => $locationsList,135 'hotel' => $hotelsList,136 'department' => $departmentsList,137 ];138 Yii::$app->response->statusCode = 200;139 } else {140 $output = [141 '404' => 'Profile error',142 'response' => 'fail',143 'message' => 'No data found'144 ];145 Yii::$app->response->statusCode = 404;146 }147 return $output;148 }149 public function decodeBase64Image($base64_string, $path, $user_id)150 {151 $output = [];152 $usermodel = User::findOne($user_id);153 if (!empty($usermodel->image)) {154 $newFile = $usermodel->image;155 } else {156 $newFile = $usermodel->email . '-' . $usermodel->user_id . '.png';157 }158 $usermodel->image = $base64_string ? $newFile : '';159 if ($usermodel->save()) {160 if ($base64_string) {161 $output_file = $path . $newFile;162 $ifp = fopen($output_file, 'w');163 chmod($output_file, 0777);164 $data = explode(',', $base64_string);165 if (fwrite($ifp, base64_decode($data[1]))) {166 return true;167 } else {168 return false;169 }170 fclose($ifp);171 }172 return true;173 } else {174 return false;175 }176 }177 public function actionUploadImage()178 {179 $output = [];180 $image = Yii::$app->request->post('image');181 $user_id = Yii::$app->request->post('user_id');182 $path = Yii::getAlias('@webroot/') . "imageuploads/";183 if (!file_exists($path)) {184 $folder = mkdir("imageuploads", 0777);185 }186 $result = $this->decodeBase64Image($image, $path, $user_id);187 $message = $image ? 'Image uploaded Successfully' : 'Image removed Successfully';188 if ($result) {189 $output = [190 '200' => $message,191 'response' => 'success',192 'message' => $message193 ];194 } else {195 $output = [196 '400' => 'Failed to Upload Image',197 'response' => 'fail',198 'message' => 'Error in Image Upload'199 ];200 }201 return $output;202 }203}...
UserController.php
Source: UserController.php
1<?php2namespace app\modules\api\controllers;3use yii;4use yii\web\Controller;5use yii\rest\ActiveController;6use app\models;7use app\components\EmailsComponent;8use app\models\User;9use app\models\LoginForm;10use app\models\UserInfo;11use app\models\UserTypes;12/**13 * Default controller for the `api` module14 */15class UserController extends ActiveController16{17 public $modelClass = 'app\models\User';18 /**19 * Renders the index view for the module20 *21 * @return string22 */23 public function actionLogin()24 {25 $output = [];26 $model = new LoginForm();27 $email = $model->username = Yii::$app->request->post('email');28 $password_hash = $model->password = Yii::$app->request->post('password');29 if (!empty($email) && !empty($password_hash)) {30 if ($model->login()) {31 $id = \Yii::$app->user->identity->id;32 $usermodel = User::findOne($id);33 $authKey = $usermodel->generateKey();34 $usermodel->auth_token = $authKey;35 if (!empty(Yii::$app->request->post('device_token'))) {36 $usermodel->device_token = Yii::$app->request->post('device_token');37 }38 if ($usermodel->save()) {39 40 if ($usermodel->image) {41 $image = "/imageuploads/" . $usermodel->image;42 } else {43 $image = null;44 }45 $output = [46 'response' => 'success',47 'message' => 'Successfully loggedin',48 'user_id' => $usermodel->user_id,49 'username' => $usermodel->first_name . ' ' . $usermodel->last_name,50 'email' => $usermodel->email,51 'auth_token' => $usermodel->auth_token,52 'user_type' => $usermodel->uiUserType->ut_name,53 'user_role' => $usermodel->uiRole->role_name,54 'image_path' => $image55 ];56 Yii::$app->response->statusCode = 200;57 } else {58 $output = [59 'response' => 'fail1',60 'message' => 'Failed to update record'61 ];62 Yii::$app->response->statusCode = 400;63 }64 } else {65 $usermodel = $model->getActiveUser();66 if ($usermodel && !$usermodel->is_active) {67 $output = [68 'response' => 'fail',69 'message' => 'User is inactive, please contact admin.'70 ];71 } else {72 $output = [73 'response' => 'fail1',74 'message' => 'Invalid email or password'75 ];76 }77 Yii::$app->response->statusCode = 400;78 }79 } else {80 return $output = [81 'response' => 'fail',82 'message' => 'Email or Password empty'83 ];84 Yii::$app->response->statusCode = 204;85 }86 return $output;87 }88 public function actionForgotPassword()89 {90 $output = [];91 $email = Yii::$app->request->post('email');92 if (!empty($email)) {93 $usermodel = User::findOne([94 'email' => $email95 ]);96 if ($usermodel && $usermodel->findByUsername($email)) {97 $recipientMail = $usermodel->email;98 $usermodel->confirmation_token = $usermodel->generateKey();99 if ($usermodel) {100 if ($usermodel->save()) {101 $getUserId = Yii::$app->utils->encryptData($usermodel->user_id);102 $link = '<a href="' . \Yii::$app->urlManager->createAbsoluteUrl('/site/set-password') . '?user_id=' . $getUserId . '&token=' . $usermodel->confirmation_token . '">Click Here</a>';103 $result = EmailsComponent::sendUserVerificationLinkEmail($usermodel->first_name, $recipientMail, $link, $action = "forgot");104 if ($result) {105 $output = [106 '200' => 'Email sent',107 'response' => 'success',108 'message' => 'Please check email to reset password'109 ];110 } else {111 $output = [112 '200' => 'Email sent',113 'response' => 'success',114 'message' => 'Please check email to reset password'115 ];116 }117 } else {118 $output = [119 '200' => 'Email sent',120 'response' => 'success',121 'message' => 'Please check email to reset password'122 ];123 }124 } else {125 $output = [126 '200' => 'Email sent',127 'response' => 'success',128 'message' => 'Please check email to reset password'129 ];130 }131 $output = [132 '200' => 'Email sent',133 'response' => 'success',134 'message' => 'Please check email to reset password'135 ];136 Yii::$app->response->statusCode = 200;137 } else {138 $output = [139 '400' => 'Email not exists',140 'response' => 'fail',141 'message' => 'Please check email to reset password'142 ];143 Yii::$app->response->statusCode = 400;144 }145 } else {146 $output = [147 '404' => 'Email not found',148 'response' => 'fail',149 'message' => 'Please check email to reset password'150 ];151 Yii::$app->response->statusCode = 404;152 }153 return $output;154 }155}...
DemoORM.php
Source: DemoORM.php
1<?php2namespace app\controller;3use app\base\BaseController;4use app\model\demo\UserModel;5use think\facade\Db;6/**7 * ORMæä½ç¸å
³ç¤ºä¾8 */9class DemoORM extends BaseController10{11 // å建æä½12 public function create()13 {14 $data = [15 ];16 // è·åæå
¥åç主é®ID17 $result = UserModel::insertGetId($data);18 // æ·»å ä¸æ¡19 $user = new UserModel();20 $user->save([21 "username" => "helloworld",22 ]);23 // æ·»å å¤æ¡24 $list = [25 ['name' => 'xiaoming', 'email' => 'xiaoming@qq.com'],26 ['name' => 'xiaohong', 'email' => 'xiaohong@qq.com']27 ];28 $user->saveAll($list);29 // 使ç¨createæ·»å ä¸æ¡30 $user = UserModel::create([31 'name' => 'xiaoming',32 'email' => 'xiaoming@qq.com'33 ]);34 // åªå
许åå
¥nameåemailå段çæ°æ®35 $user = UserModel::create([36 'name' => 'xiaoming',37 'email' => 'xiaoming@qq.com'38 ], ['name', 'email']);39 // replaceæ¿æ¢æä½40 $user = UserModel::create([41 'name' => 'xiaoming',42 'email' => 'xiaoming@qq.com'43 ], ['name', 'email'], true);44 }45 // æ´æ°æä½46 public function update()47 {48 $data = [49 "username" => "helloworld"50 ];51 $condition = [52 "id" => 1,53 ];54 $result = UserModel::update($data, $condition);55 // åªå
许æ´æ°usernameå段56 $result = UserModel::update($data, $condition, ["username"]);57 // æ¥æ¾åæ´æ°58 $user = UserModel::find(1);59 $user->name = 'xiaoming';60 $user->email = 'xiaoming@qq.com';61 // çæåçsqlè¯æ³62 $user->score = Db::raw('score+1');63 // ä¸ä¼æ´æ°æªååçæ°æ®64 $user->save();65 // 强å¶æ´æ°66 $user->force()->save();67 return success($result);68 }69 // å é¤æä½70 public function delete()71 {72 // æ ¹æ®ä¸»é®å é¤ï¼å¦æå¼å¯è½¯å é¤å°±æ¯è½¯å é¤ï¼73 UserModel::destroy(1);74 // æ¹éå é¤ï¼å¦æå¼å¯è½¯å é¤å°±æ¯è½¯å é¤ï¼75 UserModel::destroy([1, 2, 3]);76 // çå®å é¤77 UserModel::destroy(1,true);78 // ææ¡ä»¶å é¤79 UserModel::destroy(function ($query) {80 $query->where('id', '>', 10);81 });82 // ææ¡ä»¶å é¤ï¼å¦æå¼å¯è½¯å é¤å°±æ¯è½¯å é¤ï¼83 UserModel::where('id', '>', 10)->delete();84 // çå®å é¤85 UserModel::where('id', '>', 10)->force()->delete();86 // æ¥è¯¢å
å«è½¯å é¤çæ°æ®87 UserModel::withTrashed()->find();88 UserModel::withTrashed()->select();89 // ä»
æ¥è¯¢å
å«è½¯å é¤çæ°æ®90 UserModel::onlyTrashed()->find();91 UserModel::onlyTrashed()->select();92 // æ¢å¤è¢«è½¯å é¤çæ°æ®93 $user = UserModel::onlyTrashed()->find(1);94 $user->restore();95 return success();96 }97 // æ¥è¯¢æä½98 public function query()99 {100 $condition = ['status' => 0];101 // å1æ¡102 UserModel::where($condition)->find();103 // æ¾ä¸å°å°±è¿åä¸ä¸ªç©ºæ¨¡å104 $user = UserModel::findOrEmpty(1);105 // å¤ææ¯å¦æ¯ç©ºæ¨¡åï¼æ¾æ²¡æ¾å°ï¼106 if ($user->isEmpty()) {107 echo "empty";108 }109 // æ ¹æ®ä¸»é®è·åå¤ä¸ªæ°æ®110 $list = UserModel::select([1, 2, 3]);111 // 对æ°æ®éè¿è¡éåæä½112 foreach ($list as $key => $user) {113 echo $user->name;114 }115 // where116 $result = UserModel::where($condition)->select();117 $result = UserModel::where("name", "å°æ")->select();118 // where in119 $result = UserModel::whereIn("id", [])->select();120 // or where121 $result = UserModel::query()122 ->where(function ($query) use ($condition) {123 $query->where($condition)->whereOr(['user_id' => 0]);124 })125 ->select();126 // è·åæå127 // å
¶ä»æä½ æåº å页ç128 $result = UserModel::where($condition)->order("id desc")->limit(10)->select();129 // sql130 $sql = "SELECT * FROM user WHERE id = ?";131 $res = Db::execute($sql, [1]);132 return success($result);133 }134 /**135 * ä¸å¯¹ä¸136 */137 public function hasOne()138 {139 }140 /**141 * ä¸å¯¹å¤142 */143 public function hasMany()144 {145 (new UserModel)146 ->with(["links" => function ($query) {147 $query->where('status', 0)->order(['no' => 'asc', 'id' => 'desc']);148 }])149 ->select()150 ->visible(['links' => ['link', 'name', 'blank'], 'id', 'name', 'category_id', 'star', 'color']);151 }152 /**153 * å¤å¯¹å¤154 */155 public function belongToMany()156 {157 }158}...
UserModel
Using AI Code Generation
1$user = AspectMock::double('UserModel', ['get' => 'John']);2$user = AspectMock::double('UserModel', ['get' => 'Doe']);3$user = AspectMock::double('UserModel', ['get' => 'Jane']);4$user = AspectMock::double('UserModel', ['get' => 'Doe']);5$user = AspectMock::double('UserModel', ['get' => 'John']);6$user = AspectMock::double('UserModel', ['get' => 'Doe']);7$user = AspectMock::double('UserModel', ['get' => 'Jane']);8$user = AspectMock::double('UserModel', ['get' => 'Doe']);9$user = AspectMock::double('UserModel', ['get' => 'John']);10$user = AspectMock::double('UserModel', ['get' => 'Doe']);11$user = AspectMock::double('UserModel', ['get' => 'Jane']);12$user = AspectMock::double('UserModel', ['get' => 'Doe']);13$user = AspectMock::double('UserModel', ['get' => 'John']);14$user = AspectMock::double('UserModel', ['get' => 'Doe']);15$user = AspectMock::double('UserModel', ['get' => '
UserModel
Using AI Code Generation
1$mock = AspectMock::double('UserModel', ['get' => 'mocked']);2$mock = AspectMock::double('UserModel', ['get' => ['mocked']]);3$mock = AspectMock::double('UserModel', ['get' => function() { return 'mocked'; }]);4$mock = AspectMock::double('UserModel', ['get' => function() { return ['mocked']; }]);5$mock = AspectMock::double('UserModel', ['get' => 'mocked']);6$mock = AspectMock::double('UserModel', ['get' => ['mocked']]);7$mock = AspectMock::double('UserModel', ['get' => function() { return 'mocked'; }]);8$mock = AspectMock::double('UserModel', ['get' => function() { return ['mocked']; }]);9$mock = AspectMock::double('UserModel', ['get' => 'mocked']);10$mock = AspectMock::double('UserModel', ['get' => ['mocked']]);11$mock = AspectMock::double('UserModel', ['get' => function() { return 'mocked'; }]);12$mock = AspectMock::double('UserModel', ['get' => function() { return ['mocked']; }]);13$mock = AspectMock::double('UserModel', ['get' => 'mocked']);14$mock = AspectMock::double('UserModel', ['get' => ['mocked']]);15$mock = AspectMock::double('UserModel', ['get' => function() { return 'mocked'; }]);16$mock = AspectMock::double('UserModel', ['get' => function() { return ['mocked']; }]);17$mock = AspectMock::double('UserModel', ['get' => 'mocked']);18$mock = AspectMock::double('UserModel', ['get' => ['mocked']]);19$mock = AspectMock::double('User
UserModel
Using AI Code Generation
1use AspectMock\Test as test;2use App\UserModel;3{4 public function index()5 {6 $userModel = new UserModel;7 $userModel->getAllUsers();8 }9}10use AspectMock\Test as test;11use App\UserController;12{13 public function testIndex()14 {15 $userController = new UserController;16 $userController->index();17 }18}
UserModel
Using AI Code Generation
1$user = AspectMock::double('UserModel', ['getAge' => 30]);2$user->verifyInvoked('getAge');3$user = AspectMock::double('UserModel', ['getAge' => 30]);4$user->verifyInvoked('getAge');5$user = AspectMock::double('UserModel', ['getAge' => 30]);6$user->verifyInvoked('getAge');7$user = AspectMock::double('UserModel', ['getAge' => 30]);8$user->verifyInvoked('getAge');9$user = AspectMock::double('UserModel', ['getAge' => 30]);10$user->verifyInvoked('getAge');11$user = AspectMock::double('UserModel', ['getAge' => 30]);12$user->verifyInvoked('getAge');13$user = AspectMock::double('UserModel', ['getAge' => 30]);14$user->verifyInvoked('getAge');15$user = AspectMock::double('UserModel', ['getAge' => 30]);16$user->verifyInvoked('getAge');17$user = AspectMock::double('UserModel', ['getAge' => 30]);18$user->verifyInvoked('getAge');19$user = AspectMock::double('UserModel', ['get
UserModel
Using AI Code Generation
1$mock = AspectMock::double('UserModel', ['getUserName' => 'John Doe']);2$mock->verifyInvoked('getUserName');3$mock->verifyNeverInvoked('someMethod');4$mock = AspectMock::double('UserModel', ['getUserName' => 'John Doe']);5$mock->verifyInvoked('getUserName');6$mock->verifyNeverInvoked('someMethod');7$mock = AspectMock::double('UserModel', ['getUserName' => 'John Doe']);8$mock->verifyInvoked('getUserName');9$mock->verifyNeverInvoked('someMethod');10$mock = AspectMock::double('UserModel', ['getUserName' => 'John Doe']);11$mock->verifyInvoked('getUserName');12$mock->verifyNeverInvoked('someMethod');13$mock = AspectMock::double('UserModel', ['getUserName' => 'John Doe']);14$mock->verifyInvoked('getUserName');15$mock->verifyNeverInvoked('someMethod');16$mock = AspectMock::double('UserModel', ['getUserName' => 'John Doe']);17$mock->verifyInvoked('getUserName');18$mock->verifyNeverInvoked('someMethod');19$mock = AspectMock::double('UserModel', ['getUserName' => 'John Doe']);20$mock->verifyInvoked('getUserName');21$mock->verifyNeverInvoked('someMethod');
UserModel
Using AI Code Generation
1$user = AspectMock::double('UserModel', ['getUserName' => 'davert']);2$user->getUserName();3$user->verifyInvoked('getUserName');4$user = AspectMock::double('UserModel', ['getUserName' => 'davert']);5$user->getUserName();6$user->verifyInvoked('getUserName');7$user = AspectMock::double('UserModel', ['getUserName' => 'davert']);8$user->getUserName();9$user->verifyInvoked('getUserName');10$user = AspectMock::double('UserModel', ['getUserName' => 'davert']);11$user->getUserName();12$user->verifyInvoked('getUserName');13$user = AspectMock::double('UserModel', ['getUserName' => 'davert']);14$user->getUserName();15$user->verifyInvoked('getUserName');16$user = AspectMock::double('UserModel', ['getUserName' => 'davert']);17$user->getUserName();18$user->verifyInvoked('getUserName');19$user = AspectMock::double('UserModel', ['getUserName' => 'davert']);20$user->getUserName();21$user->verifyInvoked('
UserModel
Using AI Code Generation
1use AspectMock\Test as test;2$user = test::double('UserModel', ['getFirstName' => 'John']);3$user->getFirstName();4test::verifyInvoked('getFirstName');5test::verifyInvokedOnce('getFirstName');6test::verifyInvokedTimes('getFirstName', 2);7test::verifyInvoked('getFirstName', ['John']);8test::verifyInvokedOnce('getFirstName', ['John']);9test::verifyInvokedTimes('getFirstName', 2, ['John']);10test::verifyNeverInvoked('getFirstName');11test::verifyInvokedTimes('getFirstName', 2, ['John', 'Mike']);12test::verifyInvokedOnce('getFirstName', ['John', 'Mike']);13test::verifyInvokedTimes('getFirstName', 2, ['John', 'Mike']);14test::verifyNeverInvoked('getFirstName', ['John']);15test::verifyInvokedTimes('getFirstName', 2, ['John', 'Mike']);16test::verifyNeverInvoked('getFirstName', ['John']);17test::verifyNeverInvoked('getFirstName', ['John', 'Mike']);18test::verifyInvoked('getFirstName', test::ANY);19test::verifyInvokedOnce('getFirstName',
Check out the latest blogs from LambdaTest on this topic:
Before we discuss Scala testing, let us understand the fundamentals of Scala and how this programming language is a preferred choice for your development requirements.The popularity and usage of Scala are rapidly rising, evident by the ever-increasing open positions for Scala developers.
Building a website is all about keeping the user experience in mind. Ultimately, it’s about providing visitors with a mind-blowing experience so they’ll keep coming back. One way to ensure visitors have a great time on your site is to add some eye-catching text or image animations.
Software Risk Management (SRM) combines a set of tools, processes, and methods for managing risks in the software development lifecycle. In SRM, we want to make informed decisions about what can go wrong at various levels within a company (e.g., business, project, and software related).
I routinely come across test strategy documents when working with customers. They are lengthy—100 pages or more—and packed with monotonous text that is routinely reused from one project to another. Yawn once more— the test halt and resume circumstances, the defect management procedure, entrance and exit criteria, unnecessary generic risks, and in fact, one often-used model replicates the requirements of textbook testing, from stress to systems integration.
The best agile teams are built from people who work together as one unit, where each team member has both the technical and the personal skills to allow the team to become self-organized, cross-functional, and self-motivated. These are all big words that I hear in almost every agile project. Still, the criteria to make a fantastic agile team are practically impossible to achieve without one major factor: motivation towards a common goal.
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Trigger Selenium automation tests on a cloud-based Grid of 3000+ real browsers and operating systems.
Test now for FreeGet 100 minutes of automation test minutes FREE!!