Skip to content

Remove Bluebird promise usage for async/await `gl-group-policy-delegate.js` compatibility

Part of https://gitlab.com/gitlab-org/gitter/webapp/issues/2393

Remove Bluebird promise usage for async/await gl-group-policy-delegate.js compatibility

Remove Bluebird promise usage in _checkPolicyCacheResult so it's compatible with our native promises from async/await refactors. gl-group-policy-delegate is using async/await native promises https://gitlab.com/gitlab-org/gitter/webapp/merge_requests/1679

Without this fix, you will see this error in your console when you have a GL_GROUP room,

Unable to obtain admin permissions
{ exception:
   { message: 'policyDelegate.hasPolicy(...).tap is not a function',
     stack:
      'TypeError: policyDelegate.hasPolicy(...).tap is not a function
    at _checkPolicyCacheResult (modules\\permissions\\lib\\policies\\create-base-policy.js:36:49)
    at _checkAuthedAdminWithFullCheck (modules\\permissions\\lib\\policies\\create-base-policy.js:69:12)
    at modules\\permissions\\lib\\policies\\create-base-policy.js:85:16\nFrom previous event:
    at _checkAuthedAdminWithGoodFaith (modules\\permissions\\lib\\policies\\create-base-policy.js:80:71)
    at Object.canAdmin (modules\\permissions\\lib\\policies\\create-base-policy.js:139:12)
    at modules\\permissions\\lib\\policies\\group-policy-delegate.js:51:23
    at tryCatcher (node_modules\\bluebird\\js\\release\\util.js:16:23)
    at Promise._settlePromiseFromHandler (node_modules\\bluebird\\js\\release\\promise.js:512:31)\n
  at Promise._settlePromise (node_modules\\bluebird\\js\\release\\promise.js:569:18)
    at Promise._settlePromise0 (node_modules\\bluebird\\js\\release\\promise.js:614:10)
    at Promise._settlePromises (node_modules\\bluebird\\js\\release\\promise.js:693:18)
    at Async._drainQueue (node_modules\\bluebird\\js\\release\\async.js:133:16)
    at Async._drainQueues (node_modules\\bluebird\\js\\release\\async.js:143:10)
    at Immediate.Async.drainQueues (node_modules\\bluebird\\js\\release\\async.js:17:14)
    at runCallback (timers.js:705:18)
    at tryOnImmediate (timers.js:676:5)
    at processImmediate (timers.js:658:5)
    at process.topLevelDomainCallback (domain.js:120:23)',
     name: 'TypeError' } }

Dev notes

npm run mocha -- modules/permissions/test/policies/create-base-policy-test.js

Testing strategy

  1. Insert a new GitLab Gitter group into Mongo
    db.groups.insert({
            "name" : "_test-gitlab-group-test-community",
            "uri" : "_test-gitlab-group-test-community",
            "lcUri" : "_test-gitlab-group-test-community",
            "lcHomeUri" : "_test-gitlab-group-test-community/home",
            "homeUri" : "_test-gitlab-group-test-community/home",
            "sd" : {
                    "externalId" : "3281315",
                    "linkPath" : "gitter-integration-tests-group",
                    "public" : true,
                    "admins" : "GL_GROUP_MAINTAINER",
                    "members" : "PUBLIC",
                    "type" : "GL_GROUP"
            },
    });
  2. Insert a room in that new GitLab group
    db.troupes.insert({
            "groupId" : db.groups.findOne({ "lcUri" : "_test-gitlab-group-test-community", })._id,
            "lcUri" : "_test-gitlab-group-test-community/community",
            "uri" : "_test-gitlab-group-test-community/community",
            "sd" : {
                    "internalId" : db.groups.findOne({ "lcUri" : "_test-gitlab-group-test-community", })._id,
                    "extraAdmins" : [ ],
                    "extraMembers" : [ ],
                    "members" : "PUBLIC",
                    "public" : true,
                    "admins" : "GROUP_ADMIN",
                    "type" : "GROUP"
            }
    });
  3. Visit and join the room http://localhost:5000/_test-gitlab-group-test-community/community
  4. Notice no error in console
  5. You can checkout develop and refresh the page to see the error described above
Edited by Eric Eastwood

Merge request reports