Best JavaScript code snippet using playwright-internal
users.service.js
Source:users.service.js  
1/**2 * Created by a.elkayam on 03/11/13.3 */4/**5 * Created with JetBrains WebStorm.6 * User: a.elkayam7 * Date: 15/09/138 * Time: 17:399 * To change this template use File | Settings | File Templates.10 */11var userService = module.exports = new userService();12// This is here and not on the top because licenseService call userService13// which create circular dependency14var licenseService = require('../../common/services/license.service');15var groupService = require('../groups/groups.service');16var applicationError = require('../../common/errors/ApplicationErrors');17var userMongo = require('./users.dal');18var groupMongo = require('../groups/groups.dal');19var userFactory = require('./users.factory');20var objectID = require('mongodb').ObjectID;21var promiseHandler =  require('../../common/promise');22var serverEnvironment = require('../../common/serverEnvironment');23var mailTemplateSender =  require('../emails/mailTemplateSender');24const logger = require('../../common/logger').default('users-service');25var Q = require('q');26var server = require('../../common/server');27var util = require('util');28var validator = require('../../common/utils/validator.util');29var _ = require('underscore');30var roleReadService = require('../roles/roleRead.service');31var ldapService = require('../ldap/ldap.service');32var ldapDomainsService = require('../ldapDomains/v1/ldapDomains.service');33var ldapDomainsErrors = require('../ldapDomains/v1/ldapDomains.errors');34var principalRemoval = require('../../common/principalRemoval.event');35var adGroupDeleted          = require('../ldap/adGroupDeleted.event');36var stringUtils             = require('../../common/utils/string.util');37var hashService = require('../../common/security/hash');38var crypto = require('crypto');39var dbUtils = require('../../common/dal/dbUtils');40var DO_PROMISE = true;41var EXPIRATION_TIME = 604800;42// subscribe to the event of principal removal43adGroupDeleted.register(userService.deleteByGroupSid);44function userService() {45    var self = this;46    this.findByQuery = function (limit, skip, query, orderByField) {47        return userMongo.findAll(limit, skip, orderByField, query, null, true)48            .then(function (users) {49                var attachRoleNameQueue = [];50                _.each(users, function(user){51                    attachRoleNameQueue.push(attacheRoleNameAndBaseRoleName(user));52                });53                return Q.all(attachRoleNameQueue);54            })55            .catch(function (error) {56                server.err(error);57            })58    };59    this.findUserByEmailUserName = function(emailOrUserName, checkActive){60        var escapedEmailOrUserName = stringUtils.escapeRegExp(emailOrUserName);61        var query = {$or:[{'userName': { "$regex" : '^' +escapedEmailOrUserName + '$', "$options" : "-i" }},{'email': { "$regex" : '^' +escapedEmailOrUserName + '$', "$options" : "-i" }}]};62        if (checkActive){63            query.active = true;64        }65        return userMongo.getUserByQueryPromise(query)66        .then(function (user){67            return attacheRoleNameAndBaseRoleName(user);68        }).then(function (user){69            if (!user){70                return null;71            }72            if(user.activeDirectory){73                return self.getGroups(user, null, DO_PROMISE)74                .then(function(groups){75                    user.resolevdGroups = _.chain(groups).pluck('_id').map(function(x){ return x.toHexString(); }).value();76                    //send respone77                    return user;78                });79            } else {80                //send respone81                return user;82            }83        });84    }85    this.findUsers = function(limit,skip,search,groups,orderByField,isDesc, onlyAD, groupsNames, includeDomain, callback,isPromise)86    {87        var deferredObj = Q.defer();88        var searchSpaceSplit = [];89        if(search)  {90            searchSpaceSplit = search.split(" ");91            // This escaping is for situation when we pass email with +92            // sign. and we don't want it to bo part of the regex93            // special signs but part of the string to search94            search = stringUtils.escapeRegExp(search);95        }96        var query = { };97        if( search ){98            query = {99                $or:[100                    {userName: new RegExp(search,"i")},101                    {email:   new RegExp(search,"i")},102                    {lastName:  new RegExp(search,"i")},103                    {firstName:  new RegExp(search,"i")}104                ]105            };106        }107        if( searchSpaceSplit.length >1 ){108            if( _.isArray( query.$or ) ){109                query.$or.push( {110                    lastName: new RegExp( stringUtils.escapeRegExp( searchSpaceSplit[ 0 ] ), "i" ),111                    firstName: new RegExp( stringUtils.escapeRegExp( searchSpaceSplit[ 1 ] ), "i" )112                } );113                query.$or.push( {114                    lastName: new RegExp( stringUtils.escapeRegExp( searchSpaceSplit[ 1 ] ), "i" ),115                    firstName: new RegExp( stringUtils.escapeRegExp( searchSpaceSplit[ 0 ] ), "i" )116                } );117            }118        }119        if( onlyAD ){120            query.activeDirectory = true;121        }122        if( groups && ~groups.length ){123            query = {124                $and: [125                    query,126                    {127                        $or: [128                            { groups: { $elemMatch: { $in: groups } } },129                            { adgroups: { $elemMatch: { $in: groups } } }130                        ]131                    }132                ]133            }134        }135        var orderBy = {};136        var orderByFieldsArr = [];137        if(orderByField)138        {139            orderByFieldsArr = orderByField.split(',');140            orderByFieldsArr.forEach(function(field){141                orderBy[field] = isDesc? -1:1;142            });143        }144        userMongo.findAll(limit,skip,orderBy,query, function (err, items) {145            //check for database error146            if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);147            var attachRoleNameQueue = [];148            _.each(items, function(user){149                attachRoleNameQueue.push(attacheRoleNameAndBaseRoleName(user));150            });151            Q.all(attachRoleNameQueue)152            .then(function (users) {153                if (includeDomain) {154                    return ldapDomainsService.getDomainDetailsForEntity(users);155                } else {156                    return users;157                }158            })159            .then(function (items){160                if (!groupsNames){161                    //send response162                    return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,items);163                }164                // getting the groups names165                var getGroupsPromises = [];166                for (var i = 0; i < items.length; i++) {167                    var user = items[i];168                    getGroupsPromises.push(self.getGroups(user, null, DO_PROMISE));169                }170                Q.all(getGroupsPromises)171                    .then(function (results) {172                        for (var i = 0; i < results.length; i++) {173                            var groupResult = results[i];174                            var user = items[i];175                            user.groups = groupResult;176                        }177                        //send response178                        return promiseHandler.promiseCallback(callback, isPromise, deferredObj, null, items);179                    })180                    .catch(function (err) {181                        return promiseHandler.promiseCallback(callback, isPromise, deferredObj, new applicationError.Database(err), null);182                    });183            });184        });185        if(isPromise) return deferredObj.promise;186    };187    this.isUsersExist = function (users) {188        var deferred = Q.defer();189        var promisesQueue = [];190        for (var i = 0; i < users.length; i++) {191            var user = users[i];192            // var email = user.mail || user.email;193            // var escapedEmail = stringUtils.escapeRegExp(email);194            // var escapedUserName = stringUtils.escapeRegExp(stringUtils.emailPrefix(user.userPrincipalName));195            // var query = {$or:[196            //     {'userName': { "$regex" : '^' +escapedEmail + '$', "$options" : "-i" }},{'email': { "$regex" : '^' +escapedEmail + '$', "$options" : "-i" }},197            //     {'userName': { "$regex" : '^' +escapedUserName + '$', "$options" : "-i" }},{'email': { "$regex" : '^' +escapedUserName + '$', "$options" : "-i" }}198            // ]};199            var uname;200            var principalName = user.principalName || user.userPrincipalName;201            if (principalName && principalName.indexOf('@') !== -1){202                uname = principalName.substr(0, principalName.indexOf('@'));203            } else {204                uname = principalName;205            }206            var queryOrArray =  [{ userName: uname}, { principalName: user.userPrincipalName }];207            if (user.objectSid) queryOrArray.push({ objectSid: user.objectSid});208            var query = { $or: queryOrArray, ldapDomainId: user.domain._id };209            promisesQueue.push(userMongo.getUserByQueryPromise(query));210        }211        Q.all(promisesQueue)212            .then(function (results) {213                for (var i = 0; i < results.length; i++) {214                    var userResult = results[i];215                    var user = users[i];216                    user.isExist = userResult != undefined && userResult != null;217                }218                deferred.resolve(users);219            })220            .catch(function (err) {221                deferred.reject(err);222            });223        return deferred.promise;224    };225    this.findAdUsers = function(domainIdOrName, limit, search, checkExist, callback, isPromise) {226        var deferredObj = Q.defer();227        ldapService.findUsers(domainIdOrName, limit, search, function (err, adUsers) {228                //check for database error229                if (err) {230                    return promiseHandler.promiseCallback(callback, isPromise, deferredObj, err, null);231                }232            if (!checkExist){233                //send response234                return promiseHandler.promiseCallback(callback, isPromise, deferredObj, null, adUsers);235            }236            self.isUsersExist(adUsers)237                .then(function (users) {238                    //send response239                    return promiseHandler.promiseCallback(callback, isPromise, deferredObj, null, users);240                })241                .catch(function (err) {242                    return promiseHandler.promiseCallback(callback, isPromise, deferredObj, new applicationError.Database(err), null);243                });244        });245        if (isPromise){246            return deferredObj.promise;247        }248    };249    this.countUsers = function(search,callback,isPromise)250    {251        var deferredObj = Q.defer();252        var query = {};253        var searchSpaceSplit = [];254        if(search)  {255            searchSpaceSplit = search.split(" ");256            // This escaping is for situation when we pass email with +257            // sign. and we don't want it to bo part of the regex258            // special signs but part of the string to search259            search = stringUtils.escapeRegExp(search);260        }261        if(search)  query = {$or:[{userName: new RegExp(search,"i")},{email:   new RegExp(search,"i")},{lastName:  new RegExp(search,"i")},{firstName:  new RegExp(search,"i")}]};262        if(searchSpaceSplit.length >1)263        {264            if (_.isArray(query.$or)) {265                query.$or.push({lastName: new RegExp(stringUtils.escapeRegExp(searchSpaceSplit[0]), "i"), firstName: new RegExp(stringUtils.escapeRegExp(searchSpaceSplit[1]), "i")});266                query.$or.push({lastName: new RegExp(stringUtils.escapeRegExp(searchSpaceSplit[1]), "i"), firstName: new RegExp(stringUtils.escapeRegExp(searchSpaceSplit[0]), "i")});267            }268        }269        userMongo.count(query, function (err, result) {270            //check for database error271            if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);272            //send response273            return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,result);274        });275        if(isPromise) return deferredObj.promise;276    };277    /**278     * Function to count how many users there is from each base role (279     * include children of the base role)280     * @return {Object} object with the keys represents the base roles names281     * and the value are the count of users from each role282     */283    this.countUsersBaseRoles = function(){284        var baseRoleGroups = {285         super : 0,286         admin : 0,287         contributor : 0,288         consumer : 0289     };290        var usersCountByRoles;291        // Get count users by roles292        return userMongo.countUsersByRoles()293        .then(function (result){294            usersCountByRoles = result;295            return roleReadService.getAllRoles({includeBaseRolesName : true});296        }).then(function (allRoles){297            // Map the roles count to base roles count298            _.each(usersCountByRoles, function (roleCount){299                // Find the role itself300                var role = _.find(allRoles, function(role){301                    // Take care of users without roleId302                    // count them as consumers303                    if (!roleCount._id){304                        return role.name === "consumer";305                    }306                    return role._id.toString() === roleCount._id.toString();307                });308                var baseRoleName = role.baseRoleName;309                // Set the count310                baseRoleGroups[baseRoleName] += roleCount.count;311            });312            return baseRoleGroups;313        });314    }315    this.findById = function(userId,callback,isPromise)316    {317        var deferredObj = Q.defer();318        userMongo.findById(userId, function (err, item) {319            //check for database error320            if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);321            //check if userItem found322            if (!item)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.NotFound("user not found"),null);323            attacheRoleNameAndBaseRoleName(item)324            .then(function (item){325                if(item.activeDirectory){326                    self.getGroups(item, function(err, groups){327                        if (err) {return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);}328                        item.resolevdGroups = _.chain(groups).pluck('_id').map(function(x){ return x.toHexString(); }).value();329                        //send respone330                        return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,item);331                    });332                } else {333                    //send respone334                    return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,item);335                }336            });337        });338        if(isPromise) return deferredObj.promise;339    };340    this.findByIdUsername = function(value,callback,isPromise)341    {342        var deferredObj = Q.defer();343        userMongo.findByIdUsername(value, function (err, item) {344            //check for database error345            if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);346            //check if userItem found347            if (!item)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.NotFound("user not found"),null);348            attacheRoleNameAndBaseRoleName(item)349            .then(function (item){350                if(item.activeDirectory){351                    self.getGroups(item, function(err, groups){352                        if (err) {return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);}353                        item.resolevdGroups = _.chain(groups).pluck('_id').map(function(x){ return x.toHexString(); }).value();354                        //send respone355                        return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,item);356                    });357                } else {358                    //send respone359                    return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,item);360                }361            });362        });363        if(isPromise) return deferredObj.promise;364    };365    this.findByRoleId = function(roleId){366        return userMongo.findByRoleId(roleId);367    };368    this.findByRoleName = function (name) {369        return roleReadService.getRoleByIdOrName(name)370            .then(function (role) {371                if (!role) throw 'could not find role with name ' + name;372                return self.findByRoleId(role._id);373            });374    };375    this.findByEmail = function(email,callback,isPromise)376    {377        var deferredObj = Q.defer();378        userMongo.findByEmail(email, function (err, item) {379            //check for database error380            if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);381            //check if userItem found382            if (!item)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,null);383            attacheRoleNameAndBaseRoleName(item)384            .then(function (item){385                if(item.activeDirectory){386                    self.getGroups(item, function(err, groups){387                        if (err) {return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);}388                        item.resolevdGroups = _.chain(groups).pluck('_id').map(function(x){ return x.toHexString(); }).value();389                        //send respone390                        return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,item);391                    });392                } else {393                    //send respone394                    return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,item);395                }396            });397        });398        if(isPromise) return deferredObj.promise;399    };400    this.findByUserName = function(userName,callback,isPromise)401    {402        var deferredObj = Q.defer();403        userMongo.findByUserName(userName, function (err, item) {404            //check for database error405            if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);406            //check if userItem found407            if (!item)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.NotFound("user not found"),null);408            attacheRoleNameAndBaseRoleName(item)409            .then(function (item){410                if(item.activeDirectory){411                    self.getGroups(item, function(err, groups){412                        if (err) {return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);}413                        item.resolevdGroups = _.chain(groups).pluck('_id').map(function(x){ return x.toHexString(); }).value();414                        //send respone415                        return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,item);416                    });417                } else {418                    //send respone419                    return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,item);420                }421            });422        });423        if(isPromise) return deferredObj.promise;424    };425    this.findByIds = function(idsList, callback, isPromise, includeDomain)426    {427        var deferredObj = Q.defer();428        for (var i = 0, l = idsList.length; i < l; i++) {429            idsList[i] = new objectID(idsList[i]);430        }431        var query = {432            _id: { "$in": idsList }433        };434        userMongo.getUsersByQuery(query, function (err, users) {435            // check for database error436            if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);437            // check if no were userItem found438            if (!users)  return promiseHandler.promiseCallback(callback,isPromise,439                deferredObj, new applicationError.NotFound("there is no users for the given ids list"), null);440            var attachRoleNameQueue = [];441            _.each(users, function(user){442                attachRoleNameQueue.push(attacheRoleNameAndBaseRoleName(user));443            });444            Q.all(attachRoleNameQueue)445            .then(function (users) {446                if (includeDomain) {447                    return ldapDomainsService.getDomainDetailsForEntity(users);448                } else {449                    return users;450                }451            })452            .then(function (users){453                // send response454                return promiseHandler.promiseCallback(callback, isPromise, deferredObj, null, users);455            });456        });457        if(isPromise) return deferredObj.promise;458    };459    this.simulate = function(emailList, admode, ldapDomainId, callback,isPromise)460    {461        var deferredObj = Q.defer();462        var retObject = {users:[],license:{}};463        var emailsQuery = [];464        var toBeAdded = [];465        var newEmailLst = [];466        var notValidEmailLst = [];467        emailList.forEach(function(email){468            if(validator.validEmail(email) || admode){469                // This escaping is for situation when we pass email with +470                // sign. and we don't want it to bo part of the regex471                // special signs but part of the string to search472                escapedEmail = stringUtils.escapeRegExp(email);473                emailsQuery.push({'userName': { "$regex" : "^"+ escapedEmail +"$", "$options" : "-i" }});474                emailsQuery.push({'email': { "$regex" :"^"+ escapedEmail +"$", "$options" : "-i" }});475                newEmailLst.push(email);476            }477            else478            {479                notValidEmailLst.push(email);480            }481        });482        var query = {$or:emailsQuery};483        if (admode) query = {$and: [query, {ldapDomainId: dbUtils.createId(ldapDomainId)}]};484        if(!newEmailLst.length) query = {'none':'none'};485        userMongo.findAll(null,null,{},query,function(err,items){486            //check for database error487            if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);488            if (admode){489                retObject.users = _.map(items,function(item){return {exist:true,roleId:"consumer",userName:item.userName};});490                newEmailLst.forEach(function(userName){491                    var filterResult = _.filter(retObject.users,function(user){return userName.toLowerCase() === user.userName.toLowerCase();});492                    if(!filterResult.length) retObject.users.push({exist:false,roleId:"consumer",userName:userName});493                    toBeAdded.push({exist:false,roleId:"consumer",userName:userName});494                });495            } else {496                retObject.users = _.map(items,function(item){return {exist:true,roleId:"consumer",email:item.email};});497                newEmailLst.forEach(function(email){498                    var filterResult = _.filter(retObject.users,function(user){return email.toLowerCase() === user.email.toLowerCase();});499                    if(!filterResult.length) retObject.users.push({exist:false,roleId:"consumer",email:email});500                    toBeAdded.push({exist:false,roleId:"consumer",email:email});501                });502            }503            licenseService.getLeftLicenses()504            .then(function(leftLicenses){505               retObject.license = leftLicenses;506               //send response507               return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,retObject);508           });509        });510        if(isPromise) return deferredObj.promise;511    };512    this.addUser = function(user,addingUser,callback,isPromise)513    {514        var deferredObj = Q.defer();515        var promiseUpdatePassword = user.password ? hashService.create(user.password).then(function (newHash) {516            user.hash = newHash;517        }) : Q.when();518        promiseUpdatePassword.then(function () {519            userFactory.create(user)520                .then(function (newUser){521                    var queryOrArray = [];522                    if (newUser.email) queryOrArray.push({'email': { "$regex" : '^' + stringUtils.escapeRegExp(newUser.email) + '$', "$options" : "i" }});523                    if (newUser.userName) {524                        queryOrArray.push(  {'email': { "$regex" : '^' + stringUtils.escapeRegExp(newUser.userName) + '$', "$options" : "i" }});525                        queryOrArray.push(  {'userName': { "$regex" : '^' + stringUtils.escapeRegExp(newUser.userName) + '$', "$options" : "i" },526                            activeDirectory: {$ne: true}});527                    }528                    var query = {$or: queryOrArray};529                    //check if user already exist530                    userMongo.getUserByQuery(query,  function(err,userItem) {531                        //check for database error532                        if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);533                        if(userItem) return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.badRequest('User already exist'),null);534                        // add user535                        userMongo.add(newUser, function (err, items) {536                            //check for database error537                            if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);538                            if (newUser.email) {539                                mailTemplateSender.userCreated(addingUser,newUser,function(err,result){540                                    if(err) logger.error('userCreated mail fail to  sent ' +err);541                                    //send response542                                    return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,items);543                                });544                            } else {545                                //send response546                                return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,items);547                            }548                        });549                    });550                });551        });552        if(isPromise) return deferredObj.promise;553    };554    this.addAdUser = function(users,addingUser,sendCreatedMail,callback,isPromise)555    {556        var deferredObj = Q.defer();557        ldapDomainsService.attachValidLdapDomain(users)558            .then(function (users) {559                var addUserQueue = [];560                users.forEach(function(user){561                    addUserQueue.push(addADUser(user,null,true));562                });563                var addedUsers;564                var addResults = {};565                Q.all(addUserQueue)566                    .then(function(results) {567                        addResults.noActiveDirectoryUsers = _.filter(results,function(item){return !item.exists;});568                        addedUsers = _.filter(results,function(item){return item.exists;});569                        addedUsers = _.map(addedUsers,function(item){return item.user;});570                        addResults.addedUsers = [];571                        if(!addedUsers.length) {572                            return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,addResults);573                        }574                        return checkExistence(addedUsers);575                    }).then(function () {576                        userMongo.add(addedUsers, function (err, items) {577                            //check for database error578                            if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);579                            // Sending notification mail (non-blocking)580                            if (sendCreatedMail){581                                var url = serverEnvironment.getUserLoginUrl();582                                _.each(items.filter(user => user.email),function(user){583                                    mailTemplateSender.userCreatedFromAD(addingUser,user,url);584                                })585                            }586                            //send response587                            addResults.addedUsers = items;588                            return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,addResults);589                        });590                    })591                    .catch(function(err) {592                        return promiseHandler.promiseCallback(callback,isPromise,deferredObj,err,null);593                    });594            }).catch(function (err) {595                return promiseHandler.promiseCallback(callback, isPromise, deferredObj, new applicationError.badRequest(err), null);596            });597        if(isPromise) return deferredObj.promise;598    };599    function checkExistence(users) {600        var queryOrArray = [];601        users.forEach(user => {602            var userEmail = user.email || user.mail;603            if (userEmail) queryOrArray.push({'email': { "$regex" : '^' + stringUtils.escapeRegExp(userEmail) + '$', "$options" : "i" }});604            if (user.userName) queryOrArray.push({'email': { "$regex" : '^' + stringUtils.escapeRegExp(user.userName) + '$', "$options" : "i" }});605            var innerOrQuery = [];606            if (user.userName) innerOrQuery.push({'userName': { "$regex" : '^' + stringUtils.escapeRegExp(user.userName) + '$', "$options" : "i" }});607            if (user.principalName) innerOrQuery.push({'principalName': { "$regex" : '^' + stringUtils.escapeRegExp(user.principalName) + '$', "$options" : "i" }});608            if (user.objectSid) innerOrQuery.push({'objectSid': user.objectSid});609            if (innerOrQuery.length > 0) queryOrArray.push({activeDirectory: true, ldapDomainId: dbUtils.createId(user.ldapDomainId), $or: innerOrQuery});610        });611        return userMongo.getUsersByQueryPromise({ $or: queryOrArray })612            .then(function (alreadyExistUsers) {613                if (alreadyExistUsers.length > 0) {614                    throw (new applicationError.badRequest('User name or email already exists'));615                }616            });617    }618    function addADUser(user,callback,isPromise)619    {620        var deferredObj = Q.defer();621        ldapDomainsService.getLdapDomain(user.ldapDomainId, undefined, undefined, {includeDecryptedPassword: true}).then(function (ldapDomain) {622            if (!ldapDomain) {623                return promiseHandler.promiseCallback(callback, isPromise,deferredObj,624                    new applicationError.badRequest(new ldapDomainsErrors.LdapDomainNotFoundError(user.ldapDomainId)), null);625            }626            if (!ldapDomain.enabled) {627                return promiseHandler.promiseCallback(callback, isPromise, deferredObj,628                    new applicationError.badRequest(new ldapDomainsErrors.LdapDomainDisabled(user.ldapDomainId)), null);629            }630            var ldapDomainObject = ldapDomainsService.createLdapDomainObject(ldapDomain);631            ldapService.findUser(user.dn || user.userName, ldapDomainObject, function(err, ADuser) {632                if (err) return promiseHandler.promiseCallback(callback,isPromise,deferredObj, err, null);633                if (!ADuser) return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,{user:user,exists:false});634                ADuser.roleId = user.roleId;635                ADuser.ldapDomainId = user.ldapDomainId;636                userFactory.createAdUser(ADuser)637                .then(function (newUser){638                    return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,{user:newUser,exists:true});639                });640            });641        });642        if(isPromise) return deferredObj.promise;643    }644    this.inviteUser = function(inviteId,user,callback,isPromise)645    {646        var deferredObj = Q.defer();647        var email = user.email;648        var needActivation = true;649        var generatedToken;650        Q.when(crypto.randomBytes(20))651            .then(function (token) {652                if (!token) {653                    // what exception should be thrown here?654                    throw 'faild to generate token';655                }656                generatedToken = token.toString('hex');657                user.activationToken = generatedToken;658                user.activationExpires = Date.now() + (1000 * EXPIRATION_TIME);659                return userFactory.create(user, needActivation)660            })661            .then(function (invitedUser) {662                // get admin user663                self.findById(inviteId.id,function(err,adminUser){664                    // add user665                    userMongo.add(invitedUser, function (err, items) {666                        //check for database error667                        if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);668                        var url = util.format(serverEnvironment.getUserActivationUrl(), generatedToken);669                        mailTemplateSender.newUserInvitation(adminUser,invitedUser,url,function(err,result){670                            if(err) logger.error('newUserInvitation mail fail to  sent ' +err);671                            if(!err) logger.info('newUserInvitation mail  sent' +result);672                        });673                        //send response674                        return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,true);675                    });676                });677            });678        if(isPromise) return deferredObj.promise;679    };680    this.forgetPassword = function(email,callback,isPromise)681    {682        var deferredObj = Q.defer();683        var forgetPasswordUser = userFactory.forgetPassword();684        var query = {email:email};685        userMongo.getUserByQuery(query,function(err,userItem){686            if (err) {687                return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);688            }689            else if (!userItem){690                return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.NotFound("email not found"),null);691            }692            else693            {694                userMongo.update(userItem._id.toHexString(),forgetPasswordUser,function(err,result){695                        var url = util.format(serverEnvironment.getUserForgetPasswordUrl(), userItem._id.toHexString(),userItem.userName);696                        mailTemplateSender.passwordRecovery(userItem,url,function(err,result){697                            if(err) logger.error('passwordRecovery mail fail to  sent ' +err);698                            if(!err) logger.info('passwordRecovery mail  sent' +result);699                        });700                        return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,true);701                });702            }703        });704        if(isPromise) return deferredObj.promise;705    };706    this.inviteUsers = function(shareNewArr,callback,isPromise)707    {708        var deferredObj = Q.defer();709        var newUserLst = [];710        var newUserLstQueue = [];711        function createInvitedUser(email, roleId, dashboardRule){712            var DO_NEED_ACTIVATION = true;713            var invitedUser = {714                email : email,715                roleId: roleId,716                dashboardRule : dashboardRule717            };718            var token = crypto.randomBytes(20).toString('hex');719            if (!token) {720                // what exception should be thrown here?721                throw 'faild to generate token';722            }723            invitedUser.activationToken = token.toString('hex');724            invitedUser.activationExpires = Date.now() + (1000 * EXPIRATION_TIME);725            return userFactory.create(invitedUser, DO_NEED_ACTIVATION);726        }727        shareNewArr.forEach(function(shareNewArr){728            newUserLstQueue.push(createInvitedUser(shareNewArr.email, shareNewArr.roleId, shareNewArr.rule));729        });730        Q.all(newUserLstQueue)731        .then(function (newUserLst){732            if(newUserLst.length === 0)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,newUserLst);733            // add user734            userMongo.add(newUserLst, function (err, items) {735                //check for database error736                if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);737                //send response738                return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,items);739            });740        });741        if(isPromise) return deferredObj.promise;742    };743    this.activateUser = function(user,userObj,callback,isPromise)744    {745        var deferredObj = Q.defer();746        var activateUser = userFactory.activateUser(userObj);747        //check if user already exist748        userMongo.updateByIdUsername(user, activateUser, function(err,result) {749            //check for database error750            if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);751            //check if userItem found752            if (!result)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.NotFound("user can not activate"),null);753            //send response754            return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,result);755        });756        if(isPromise) return deferredObj.promise;757    };758    this.recoverPassword = function(userId,user,callback,isPromise)759    {760        var deferredObj = Q.defer();761        var recoverPasswordUser = userFactory.recoverPasswordUser(user);762        //check if user already exist763        userMongo.update(userId,recoverPasswordUser,  function(err,result) {764            //check for database error765            if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);766            //check if userItem found767            if (!result)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.NotFound("user can not activate"),null);768            //send response769            return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,result);770        });771        if(isPromise) return deferredObj.promise;772    };773    this.updateUser = function(userId,updateUser,callback,isPromise, shouldUpdateAsIs)774    {775        var deferredObj = Q.defer();776        userFactory.update(updateUser)777        .then(function (updateUser){778            var callbackFn = function (err, result) {779                //check for database error780                if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);781                //check if userItem found782                if (!result)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.NotFound("user not found"),null);783                //send response784                return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,result);785            };786            userMongo.update(userId, updateUser, callbackFn, shouldUpdateAsIs);787        });788        if(isPromise) return deferredObj.promise;789    };790    this.updateUserByIdUsername = function(user, updateUser, callback, isPromise) {791        var deferredObj = Q.defer();792        var promiseUpdatePassword = updateUser.password ? hashService.create(updateUser.password).then(function (newHash) {793            updateUser.hash = newHash;794        }) : Q.when();795        promiseUpdatePassword.then(function () {796            userFactory.update(updateUser)797                .then(function (updateUser){798                    userMongo.updateByIdUsername(user, updateUser, function (err, result) {799                        //check for database error800                        if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);801                        //check if userItem found802                        if (!result)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.NotFound("user not found"),null);803                        //send response804                        return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,result);805                    });806                });807        });808        if(isPromise) return deferredObj.promise;809    };810    this.deleteUser = function(userId,callback,isPromise)811    {812        var deferredObj = Q.defer();813        userMongo.delete(userId, function (err, result) {814            //check for database error815            if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);816            //check if userItem found817            if (!result)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.NotFound("user not found"),null);818            // delete the group from all the resources819            principalRemoval.notifyObservers([{ id: userId, type: 'user' }]);820            //send respone821            return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,result);822        });823        if(isPromise) return deferredObj.promise;824    };825    this.deleteUserByIdUsername = function(user,callback,isPromise)826    {827        var deferredObj = Q.defer();828        userMongo.findByIdUsername(user, function (err, selectedUser) {829            //check for database error830            if (err) return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);831            //check if userItem found832            if (!selectedUser) return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.NotFound("user not found"),null);833            userMongo.deleteByIdUsername(user, function (err, result) {834                //check for database error835                if (err) return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);836                //check if userItem found837                if (!result) return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.NotFound("user not found"),null);838                // delete the group from all the resources839                principalRemoval.notifyObservers([{ id: selectedUser._id && selectedUser._id.toHexString(), type: 'user' }]);840                //send response841                return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,result);842            });843        });844        if(isPromise) return deferredObj.promise;845    };846    this.getGroups = function(user, callback, isPromise){847        var deferredObj = Q.defer();848        var query = {};849        var isAD = user.activeDirectory || false;850        var userGroups = isAD ? user.adgroups : user.groups;851        var groupsResult;852        groupService.findGroupsByArray(userGroups, isAD, true, null, DO_PROMISE)853            .then(function (groups){854                groupsResult = groups;855                if (isAD && user.groups && !_.isEmpty(user.groups)){856                    // case ad user with mixed groups857                    groupService.findGroupsByArray(user.groups, false, true, null, DO_PROMISE)858                        .then(function (groups){859                            groupsResult = _.union(groupsResult, groups);860                            //send response861                            return promiseHandler.promiseCallback(callback, isPromise, deferredObj, null, groupsResult);862                        })863                        .fail(function (err) {864                            return promiseHandler.promiseCallback(callback, isPromise, deferredObj, new applicationError.Database(err), null);865                        });866                } else {867                    //case internal or ad not mixed groups user868                    return promiseHandler.promiseCallback(callback, isPromise, deferredObj, null, groupsResult);869                }870            }).fail(function (err){871                return promiseHandler.promiseCallback(callback, isPromise, deferredObj, new applicationError.Database(err), null);872            });873        if(isPromise) return deferredObj.promise;874    };875    this.getGroupsIncludingBuiltInGroups = function(user){876        var groups;877        return self.getGroups(user, null, DO_PROMISE)878        .then(function(g){879            groups = g || [];880            var query = {"$or" : [{everyone : true}]};881            if (user.baseRoleName === "super" || user.baseRoleName === "admin"){882                query.$or.push({admins : true});883            }884            return Q.ninvoke(groupMongo, "getGroupsByQuery", query);885        }).then(function(builtInGroups){886            var allGroups = groups.concat(builtInGroups);887            return allGroups;888        });889    }890    this.findByGroupId = function (groupId, callback, isPromise) {891        var deferredObj = Q.defer();892        userMongo.findByGroupId(groupId, function (err, users) {893            //check for database error894            if (err) {895                return promiseHandler.promiseCallback(callback, isPromise, deferredObj, new applicationError.Database(err), null);896            }897            var attachRoleNameQueue = [];898            _.each(users, function(user){899                attachRoleNameQueue.push(attacheRoleNameAndBaseRoleName(user));900            });901            Q.all(attachRoleNameQueue)902            .then(function (users){903                //send response904                return promiseHandler.promiseCallback(callback, isPromise, deferredObj, null, users);905            });906        });907        if(isPromise) {908            return deferredObj.promise;909        }910    };911    this.findByGroupSid = function (groupSid, callback, isPromise) {912        var deferredObj = Q.defer();913        userMongo.findByGroupSid(groupSid, function (err, users) {914            //check for database error915            if (err) {916                return promiseHandler.promiseCallback(callback, isPromise, deferredObj, new applicationError.Database(err), null);917            }918            var attachRoleNameQueue = [];919            _.each(users, function(user){920                attachRoleNameQueue.push(attacheRoleNameAndBaseRoleName(user));921            });922            Q.all(attachRoleNameQueue)923            .then(function (users){924                //send response925                return promiseHandler.promiseCallback(callback, isPromise, deferredObj, null, users);926            });927        });928        if(isPromise) {929            return deferredObj.promise;930        }931    };932    this.addGroup = function (user, groupId, callback, isPromise) {933        var deferredObj = Q.defer();934        userMongo.findByIdUsername(user, function(err, userItem) {935            //check for database error936            if (err) {937                return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);938            }939            //check if userItem found940            if (!userItem) {941                return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.NotFound("user not found"),null);942            }943            if (userItem.groups && userItem.groups.length > 0 && _.contains(userItem.groups, groupId)){944                // user already has the groupId945                return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null, userItem._id.toHexString());946            }947            // add the groupId to the user948            userMongo.addGroup(userItem._id.toHexString(), groupId, function (err, item) {949                //check for database error950                if (err) {951                    return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);952                }953                // send response954                return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null, userItem._id.toHexString());955            });956        });957        if(isPromise) {958            return deferredObj.promise;959        }960    };961    this.removeGroup = function (user, groupId, callback, isPromise) {962        var deferredObj = Q.defer();963        userMongo.findByIdUsername(user, function(err, userItem) {964            //check for database error965            if (err) {966                return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);967            }968            //check if userItem found969            if (!userItem) {970                return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.NotFound("user not found"),null);971            }972            if (userItem.groups && userItem.groups.length > 0 && !_.contains(userItem.groups, groupId)){973                // user does not has the groupId974                return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.NotFound("user does not has this group"),null);975            }976            // remove the groupId from the user977            userMongo.removeGroup(userItem._id.toHexString(), groupId, function (err, item) {978                //check for database error979                if (err) {980                    return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);981                }982                // send response983                return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null, userItem._id.toHexString());984            });985        });986        if(isPromise) {987            return deferredObj.promise;988        }989    };990    this.validateEmails = function(emails, callback, isPromise) {991        var deferredObj = Q.defer();992        var reqEmails = _.map(emails, function (x) { return new RegExp("^" + stringUtils.escapeRegExp(x) + "$", "i"); });993        var query = { email: {$in: reqEmails} };994        userMongo.findAll(null,null,{},query, function (err, items) {995            //check for database error996            if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);997            var result = {998                isValid: false,999                existingUsers: items1000            };1001            result.isValid = items && (items.length === emails.length);1002            //send response1003            return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,result);1004        });1005        if(isPromise) return deferredObj.promise;1006    };1007    this.deleteByGroupSid = function(groupId,groupSid,deleteUsers)1008    {1009        var deferredObj = Q.defer();1010        if (deleteUsers){1011            var usersToDelete = [];1012            var principals = [];1013            var usersToCheckQueue = [];1014            var currUser;1015            var checkUser = function(user){1016                return groupService.findGroupsByArray(user.adgroups, true, true, null, DO_PROMISE)1017                    .then(function (groups){1018                        if (groups.length === 0){1019                            return user._id;1020                        } else {1021                            return;1022                        }1023                    });1024            };1025            userMongo.findByGroupSid(groupSid, function (err, users) {1026                //check for database error1027                if (err)  {return false;}1028                _.each(users, function(user){1029                    currUser = user;1030                    usersToCheckQueue.push(checkUser(user));1031                });1032                Q.all(usersToCheckQueue)1033                .then(function (results){1034                    /*usersToDelete = _.reject(results, function(user){1035                        return !user;1036                    });1037                    var principals = _.map(usersToDelete, function(userId){1038                        return {1039                            id : userId.toString(),1040                            type : 'user'1041                        };1042                    });*/1043                    _.each(results, function(userId){1044                        if (userId){1045                            usersToDelete.push(userId);1046                            principals.push({ id : userId.toHexString(), type : 'user'});1047                        }1048                    });1049                    var query = {'_id' : {$in: usersToDelete}};1050                    userMongo.deleteByQuery(query, function (err, result) {1051                        if (err)  {return false;}1052                        principalRemoval.notifyObservers(principals);1053                        return true;1054                    });1055                }).fail(function(err) {1056                    return false;1057                });1058            });1059            return deferredObj.promise;1060        } else {1061            return Q.fcall(function () {1062                return true;1063            });1064        }1065    };1066    function attacheRoleNameAndBaseRoleName(user){1067        if (!user){1068            return Q.when(null);1069        }1070        return Q.all([roleReadService.getRoleByIdOrName(user.roleId),1071        roleReadService.getBaseRoleByRoleIdOrName(user.roleId)])1072        .spread(function(role, baseRole){1073            user.roleName = role.name;1074            user.baseRoleName = baseRole.name;1075            return user;1076        }).catch(function(err){1077            logger.error('Error attaching role and base role name for user : ', user, 'Error : ', err);1078            return user;1079        });1080    }...is-promise.test.js
Source:is-promise.test.js  
...3import babel from './helpers/babel';4import espree from './helpers/espree';5[espree, babel].forEach(({name, utils}) => {6	test(`(${name}) should return false if node is falsy or not a node`, t => {7		t.false(lib.isPromise(null));8		t.false(lib.isPromise(undefined));9		t.false(lib.isPromise({}));10		t.false(lib.isPromise('foo'));11	});12	test(`(${name}) should return true if node is call expression which calls '.then()'`, t => {13		t.true(lib.isPromise(utils.expression(`foo.then(fn)`)));14		t.true(lib.isPromise(utils.expression(`foo().then(fn)`)));15		t.true(lib.isPromise(utils.expression(`foo['then'](fn)`)));16		t.true(lib.isPromise(utils.expression(`foo['th' + 'en'](fn)`)));17		t.false(lib.isPromise(utils.expression(`foo().bar(fn)`)));18		t.false(lib.isPromise(utils.expression(`then(fn)`)));19		t.false(lib.isPromise(utils.expression(`foo['bar'](fn)`)));20		t.false(lib.isPromise(utils.expression(`foo[0](fn)`)));21	});22	test(`(${name}) should return true if node is call expression which calls '.catch()'`, t => {23		t.true(lib.isPromise(utils.expression(`foo.catch(fn)`)));24		t.true(lib.isPromise(utils.expression(`foo().catch(fn)`)));25		t.true(lib.isPromise(utils.expression(`foo['catch'](fn)`)));26	});27	test(`(${name}) should return false when accessing a property of a Promise`, t => {28		t.false(lib.isPromise(utils.expression(`foo.then(fn).foo`)));29		t.false(lib.isPromise(utils.expression(`foo.catch(fn).foo`)));30	});31	test(`(${name}) should return false when calling a property of a Promise`, t => {32		t.false(lib.isPromise(utils.expression(`foo.then(fn).map(fn)`)));33		t.false(lib.isPromise(utils.expression(`foo.catch(fn).map(fn)`)));34	});35	test(`(${name}) should return true when expression is a call to 'Promise.{resolve|reject|race|all}()`, t => {36		t.true(lib.isPromise(utils.expression(`Promise.resolve(fn)`)));37		t.true(lib.isPromise(utils.expression(`Promise.resolve(fn).then(fn)`)));38		t.true(lib.isPromise(utils.expression(`Promise.resolve(fn).catch(fn)`)));39		t.true(lib.isPromise(utils.expression(`Promise.reject(fn)`)));40		t.true(lib.isPromise(utils.expression(`Promise.race(fn)`)));41		t.true(lib.isPromise(utils.expression(`Promise.all(fn)`)));42		t.true(lib.isPromise(utils.expression(`Promise['resolve'](fn)`)));43		t.true(lib.isPromise(utils.expression(`Promise['reject'](fn)`)));44		t.true(lib.isPromise(utils.expression(`Promise['race'](fn)`)));45		t.true(lib.isPromise(utils.expression(`Promise['all'](fn)`)));46		t.false(lib.isPromise(utils.expression(`bar.resolve(fn)`)));47		t.false(lib.isPromise(utils.expression(`bar.reject(fn)`)));48		t.false(lib.isPromise(utils.expression(`bar.race(fn)`)));49		t.false(lib.isPromise(utils.expression(`bar.all(fn)`)));50		t.false(lib.isPromise(utils.expression(`foo.Promise.resolve(fn)`)));51		t.false(lib.isPromise(utils.expression(`Promise.resolve(fn).map(fn)`)));52	});53	test(`(${name}) should return false when expression is a call to a known non-Promise returning method of 'Promise`, t => {54		t.false(lib.isPromise(utils.expression(`Promise.is(fn)`)));55		t.false(lib.isPromise(utils.expression(`Promise.cancel(fn)`)));56		t.false(lib.isPromise(utils.expression(`Promise.promisify(fn)`)));57		t.false(lib.isPromise(utils.expression(`Promise.promisifyAll(obj)`)));58	});59	// Mostly Bluebird methods60	test(`(${name}) should return true when expression is a call to 'Promise.{anything}() except exceptions`, t => {61		t.true(lib.isPromise(utils.expression(`Promise.map(input, fn)`)));62		t.true(lib.isPromise(utils.expression(`Promise.filter(input, fn)`)));63		t.true(lib.isPromise(utils.expression(`Promise.reduce(input, fn)`)));64		t.true(lib.isPromise(utils.expression(`Promise.each(input, fn)`)));65		t.true(lib.isPromise(utils.expression(`Promise.mapSeries(input, fn)`)));66		t.true(lib.isPromise(utils.expression(`Promise.filter(input, fn)`)));67		t.true(lib.isPromise(utils.expression(`Promise.fromCallback(fn)`)));68		t.true(lib.isPromise(utils.expression(`Promise.fromNode(fn)`)));69		t.true(lib.isPromise(utils.expression(`Promise.using(fn)`)));70		t.true(lib.isPromise(utils.expression(`Promise['map'](fn)`)));71	});72	test(`(${name}) should return true when calling 'new Promise(fn)'`, t => {73		t.true(lib.isPromise(utils.expression(`new Promise(fn);`)));74		t.true(lib.isPromise(utils.expression(`new Promise(fn).then();`)));75		t.false(lib.isPromise(utils.expression(`Promise(fn)`)));76		t.false(lib.isPromise(utils.expression(`new Promise(fn).map(fn)`)));77		t.false(lib.isPromise(utils.expression(`new Foo(fn)`)));78		t.false(lib.isPromise(utils.expression(`new Foo.bar(fn)`)));79		t.false(lib.isPromise(utils.expression(`new Promise.bar(fn)`)));80		t.false(lib.isPromise(utils.expression(`new Promise.resolve(fn)`)));81		t.false(lib.isPromise(utils.expression(`new Foo.resolve(fn)`)));82	});...authConfig.service.js
Source:authConfig.service.js  
1/**2 * Created by a.elkayam on 03/11/13.3 */4/**5 * Created with JetBrains WebStorm.6 * User: a.elkayam7 * Date: 15/09/138 * Time: 17:399 * To change this template use File | Settings | File Templates.10 */11var applicationError = require('../../common/errors/ApplicationErrors');12// var navverFactory = require('./navver.factory');13var authConfigMongo = require('./authConfig.dal');14var promiseHandler =  require('../../common/promise');15var Q = require('q');16var _ = require('underscore');17var objectID = require('mongodb').ObjectID;18function authConfigService() {19    var self = this;20    this.addauthConfig = function(newauthConfig,callback,isPromise)21    {22        var deferredObj = Q.defer();23        authConfigMongo.add(newauthConfig, function (err, result) {24            //check for database error25            if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);26            //send response27            return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,result);28        });29        if(isPromise) return deferredObj.promise;30    }31    32    this.getAuthConfig = function(callback,isPromise)33    {34        var deferredObj = Q.defer();35        authConfigMongo.findAll( function (err, item) {36            if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);37            if (!item)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.NotFound("nav not found"),null);38            return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,item);39        });40        if(isPromise) return deferredObj.promise;41    };42    // this.getNavversByID=function(userID,callback,isPromise){43    //     var deferredObj = Q.defer();44    //     conmentMongo.findByUserID(userID, function (err, item) {45    //         if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);46    //         if (!item)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.NotFound("nav not found"),null);47    //         return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,item);48    //     });49    //     if(isPromise) return deferredObj.promise;50    // }51    // this.updataNavvers=function(navID,updateObject,callback,isPromise){52    //             var deferredObj = Q.defer();53    //     updateObjects ={$addToSet:{"childList":updateObject}};54    //     conmentMongo.update(navID,updateObjects, function (err, result) {55    //         //check for database error56    //         if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);57    //         if(!result) return  promiseHandler.promiseCallback(callback,isPromise, new applicationError.NotFound('nav not found'),null);58    //         return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,result);59    //     });60    // }61    // this.getNavvers=function(callback,isPromise)62    // {63    //     var deferredObj = Q.defer();64    //     navverMongo.findAll(function (err, result) {65    //         //check for database error66    //         if (err)  return promiseHandler.promiseCallback(callback,isPromise,deferredObj,new applicationError.Database(err),null);67    //         //send response68    //         return promiseHandler.promiseCallback(callback,isPromise,deferredObj,null,result);69    //     });70    //     if(isPromise) return deferredObj.promise;71    // }72}73authConfigService.instance = null;74authConfigService.getInstance = function(){75    if(this.instance === null){76        this.instance = new authConfigService();77    }78    return this.instance;79}...test.js
Source:test.js  
...6var promise = {then: function () {}};7describe('calling isPromise', function () {8  describe('with a promise', function () {9    it('returns true', function () {10      assert(isPromise(promise));11    });12  });13  describe('with null', function () {14    it('returns false', function () {15      assert(isPromise(null) === false);16    });17  });18  describe('with undefined', function () {19    it('returns false', function () {20      assert(isPromise(undefined) === false);21    });22  });23  describe('with a number', function () {24    it('returns false', function () {25      assert(!isPromise(0));26      assert(!isPromise(-42));27      assert(!isPromise(42));28    });29  });30  describe('with a string', function () {31    it('returns false', function () {32      assert(!isPromise(''));33      assert(!isPromise('then'));34    });35  });36  describe('with a bool', function () {37    it('returns false', function () {38      assert(!isPromise(false));39      assert(!isPromise(true));40    });41  });42  describe('with an object', function () {43    it('returns false', function () {44      assert(!isPromise({}));45      assert(!isPromise({then: true}));46    });47  });48  describe('with an array', function () {49    it('returns false', function () {50      assert(!isPromise([]));51      assert(!isPromise([true]));52    });53  });54  describe('with a func', function () {55    it('returns false', function () {56      assert(!isPromise(() => {}));57    });58  });59  describe('with a func with .then method', function () {60    it('returns true', function () {61      const fn = () => {};62      fn.then = () => {};63      assert(isPromise(fn));64    });65  });...is.js
Source:is.js  
...3  , isPromise = require("../../promise/is");4describe("promise/is", function () {5	if (typeof Promise === "function") {6		it("Should return true on promise", function () {7			assert.equal(isPromise(Promise.resolve()), true);8		});9	}10	it("Should return false on non-promise thenable", function () {11		assert.equal(isPromise({ then: function () { return true; } }), false);12	});13	it("Should return false on plain object", function () { assert.equal(isPromise({}), false); });14	it("Should return false on function", function () {15		assert.equal(isPromise(function () { return true; }), false);16	});17	it("Should return false on array", function () { assert.equal(isPromise([]), false); });18	if (typeof Object.create === "function") {19		it("Should return false on object with no prototype", function () {20			assert.equal(isPromise(Object.create(null)), false);21		});22	}23	it("Should return false on string", function () { assert.equal(isPromise("foo"), false); });24	it("Should return false on empty string", function () { assert.equal(isPromise(""), false); });25	it("Should return false on number", function () { assert.equal(isPromise(123), false); });26	it("Should return false on NaN", function () { assert.equal(isPromise(NaN), false); });27	it("Should return false on boolean", function () { assert.equal(isPromise(true), false); });28	if (typeof Symbol === "function") {29		it("Should return false on symbol", function () {30			assert.equal(isPromise(Symbol("foo")), false);31		});32	}33	it("Should return false on null", function () { assert.equal(isPromise(null), false); });34	it("Should return false on undefined", function () { assert.equal(isPromise(void 0), false); });...isPromise.test.js
Source:isPromise.test.js  
1import isPromise from "./isPromise";2var promise = { then: () => {} };3describe("calling isPromise", () => {4  it("should return true with a promise", () => {5    expect(isPromise(promise)).toBe(true);6  });7  it("returns false with null", () => {8    expect(isPromise(null)).toBe(false);9  });10  it("returns false with undefined", () => {11    expect(isPromise(undefined)).toBe(false);12  });13  it("returns false with a number", () => {14    expect(isPromise(0)).toBe(false);15    expect(isPromise(-42)).toBe(false);16    expect(isPromise(42)).toBe(false);17  });18  it("returns false with a string", () => {19    expect(isPromise("")).toBe(false);20    expect(isPromise("then")).toBe(false);21  });22  it("returns false with a boolean", () => {23    expect(isPromise(false)).toBe(false);24    expect(isPromise(true)).toBe(false);25  });26  it("returns false with an object", () => {27    expect(isPromise({})).toBe(false);28    expect(isPromise({ then: true })).toBe(false);29  });30  it("returns false with an array", () => {31    expect(isPromise([])).toBe(false);32    expect(isPromise([true])).toBe(false);33  });...util.test.js
Source:util.test.js  
...11  t.true(util.isObject({}))12  t.false(util.isObject(null))13})14test('is promise', t => {15  t.false(util.isPromise(null))16  t.false(util.isPromise(true))17  t.false(util.isPromise(false))18  t.false(util.isPromise(0))19  t.false(util.isPromise([]))20  // object21  t.false(util.isPromise({}))22  t.false(util.isPromise({23    then: {}24  }))25  t.true(util.isPromise({26    then () {}27  }))28  // function29  t.false(util.isPromise(function () {}))30  const myPromise = function () {}31  myPromise.then = function () {}32  t.true(util.isPromise(myPromise))33  myPromise.then = []34  t.false(util.isPromise(myPromise))35  // promise36  t.true(util.isPromise(new Promise(function () {})))37  t.true(util.isPromise(Promise.resolve({})))...isPromise.js
Source:isPromise.js  
1const isPromise = require('../src/isPromise')2describe('isPromise', () => {3  it('should return true for a Promise.resolve() value', () => {4    expect(isPromise(Promise.resolve(42))).toBe(true)5  })6  it('should return true for a Promise.reject() value', () => {7    expect(isPromise(Promise.reject(41))).toBe(true)8  })9  it('should return true for the result of new Promise()', () => {10    expect(isPromise(new Promise(() => {}))).toBe(true)11  })12  it('should return true for the result of an async function', () => {13    const asyncFn = async () => 4214    expect(isPromise(asyncFn())).toBe(true)15  })16  it('should return false for other values', () => {17    expect(isPromise(42)).toBe(false)18    expect(isPromise('42')).toBe(false)19    expect(isPromise(new Date())).toBe(false)20    expect(isPromise(() => {})).toBe(false)21    expect(isPromise([])).toBe(false)22    expect(isPromise({})).toBe(false)23  })...Using AI Code Generation
1const { isPromise } = require('playwright/lib/utils/utils');2const { chromium } = require('playwright');3(async () => {4  const browser = await chromium.launch();5  const context = await browser.newContext();6  const page = await context.newPage();7  const userAgent = await page.evaluate(() => navigator.userAgent);8  console.log(userAgent);9  await browser.close();10})();11import { isPromise } from 'playwright-utils';12const { isPromise } = require('playwright-utils');13const { isPromise } = require('playwright-utils');14isPromise(new Promise(() => {}));15isPromise({});16const { isObject } = require('playwright-utils');17isObject({});18isObject([]);19const { isString } = require('playwright-utils');20isString('string');21isString(1);22const { isNumber } = require('playwright-utils');23isNumber(1);24isNumber('string');25const { isBoolean } = require('playwright-utils');26isBoolean(true);27isBoolean(1);28const { isFunction } = require('playwright-utils');29isFunction(() => {});30isFunction(1);31const { isUndefined } = require('playwright-utils');32isUndefined(undefined);33isUndefined(1);34const { isNull } = require('playwrightUsing AI Code Generation
1const { isPromise } = require('playwright/lib/utils/utils');2const { chromium } = require('playwright');3(async () => {4  const browser = await chromium.launch();5  const page = await browser.newPage();6  const result = await page.screenshot();7  console.log(isPromise(result));8  await browser.close();9})();10const { isPromise } = require('playwright/lib/utils/utils');Using AI Code Generation
1const { isPromise } = require('playwright/lib/utils/utils');2const { chromium } = require('playwright');3(async () => {4    const browser = await chromium.launch();5    const context = await browser.newContext();6    const page = await context.newPage();7    const value = await page.evaluate(async () => {8        return Promise.resolve(10);9    });10    console.log(isPromise(value));11    const value2 = await page.evaluate(() => {12        return 10;13    });14    console.log(isPromise(value2));15    await browser.close();16})();17* [Playwright recipes](Using AI Code Generation
1const { isPromise } = require('playwright/lib/utils/utils');2const { chromium } = require('playwright');3const browser = await chromium.launch();4const page = await browser.newPage();5const result = await page.evaluate(() => {6    return Promise.resolve('Hello World');7});8console.log(isPromise(result));9await browser.close();10const { isString } = require('playwright/lib/utils/utils');11console.log(isString('Hello World'));12const { isRegExp } = require('playwright/lib/utils/utils');13console.log(isRegExp(/Hello World/));14const { isNumber } = require('playwright/lib/utils/utils');15console.log(isNumber(100));16const { isBoolean } = require('playwright/lib/utils/utils');17console.log(isBoolean(true));18const { isObject } = require('playwright/lib/utils/utils');19console.log(isObject({}));20const { isUndefined } = require('playwright/lib/utils/utils');21console.log(isUndefined(undefined));Using AI Code Generation
1const { isPromise } = require('playwright/lib/utils/utils');2function test() {3    return new Promise((resolve) => {4        resolve('test');5    });6}7const result = test();8console.log(isPromise(result));9[Apache 2.0](LICENSE)Using AI Code Generation
1const { isPromise } = require('playwright/lib/helper');2async function test() {3    const result = await isPromise(Promise.resolve('pass'));4    console.log(result);5}6test();7Playwright: How to use Page.waitForSelector()8Playwright: How to use Page.waitForFunction()9Playwright: How to use Page.waitForNavigation()10Playwright: How to use Page.waitForResponse()11Playwright: How to use Page.waitForRequest()12Playwright: How to use Page.waitForLoadState()13Playwright: How to use Page.waitForFileChooser()14Playwright: How to use Page.waitForEvent()15Playwright: How to use Page.waitForConsoleMessage()16Playwright: How to use Page.waitForBinding()17Playwright: How to use Page.waitFor()LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!
