Skip to content

Commit ea3adf2

Browse files
baslu93Luca Bassani
authored andcommitted
feat: allow assigning developer role during user creation
1 parent 668a6e6 commit ea3adf2

6 files changed

Lines changed: 33 additions & 2 deletions

File tree

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,7 @@ node_modules
4747
# os specific files
4848
.DS_Store
4949
.idea
50+
51+
# exclude sfdx and sf config files
52+
.sf
53+
.sfdx

src/commands/org/create/user.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,9 @@ export class CreateUserCommand extends SfCommand<CreateUserOutput> {
197197
} else if (key.toLowerCase() === 'profilename') {
198198
// @ts-expect-error standardize profileName casing
199199
defaultFields['profileName'] = this.varargs[key];
200+
} else if (key.toLowerCase() === 'roledevelopername') {
201+
// @ts-expect-error standardize roleDeveloperName casing
202+
defaultFields['roleDeveloperName'] = this.varargs[key];
200203
} else {
201204
// @ts-expect-error all other varargs are left "as is"
202205
defaultFields[lowerFirstLetter(key)] = this.varargs[key];
@@ -220,6 +223,18 @@ export class CreateUserCommand extends SfCommand<CreateUserOutput> {
220223
defaultFields.profileId = profile.Id;
221224
}
222225

226+
// @ts-expect-error check if "roleDeveloperName" was passed, this needs to become a userRoleId before calling User.create
227+
if (defaultFields['roleDeveloperName']) {
228+
// @ts-expect-error roleDeveloperName is not a valid field on UserFields
229+
const devName = defaultFields['roleDeveloperName'] as string;
230+
logger.debug(`Querying org for user role name [${devName}]`);
231+
const userRole = await this.flags['target-org']
232+
.getConnection(this.flags['api-version'])
233+
.singleRecordQuery<{ Id: string }>(`SELECT id FROM userrole WHERE developername='${devName}'`);
234+
// @ts-expect-error userRoleId is an optional field therefore not defined on UserFields
235+
defaultFields['userRoleId'] = userRole.Id;
236+
}
237+
223238
return defaultFields;
224239
}
225240

@@ -280,7 +295,7 @@ const lowerFirstLetter = (word: string): string => word[0].toLowerCase() + word.
280295
* @private
281296
*/
282297
const stripInvalidAPIFields = (fields: UserFields & Dictionary<string>): UserFields =>
283-
omit(fields, ['permsets', 'generatepassword', 'generatePassword', 'profileName']);
298+
omit(fields, ['permsets', 'generatepassword', 'generatePassword', 'profileName', 'roleDeveloperName']);
284299

285300
const getNewUserAuthInfo = async (
286301
targetOrgUser: User,

test/commands/create.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,9 @@ describe('org:create:user', () => {
157157
}
158158

159159
if (readsFile) {
160-
$$.SANDBOXES.CONNECTION.stub(Connection.prototype, 'singleRecordQuery').resolves({ Id: '12345678' });
160+
$$.SANDBOXES.CONNECTION.stub(Connection.prototype, 'singleRecordQuery')
161+
.withArgs('SELECT id FROM profile WHERE name=\'profileFromArgs\'').resolves({ Id: '12345678' })
162+
.withArgs('SELECT id FROM userrole WHERE developername=\'roleFromArgs\'').resolves({ Id: '87654321' })
161163
$$.SANDBOX.stub(Logger.prototype, 'debug');
162164
if (typeof readsFile !== 'boolean') {
163165
const fsStub = $$.SANDBOX.stub(fs.promises, 'readFile');

test/df17AppBuilding/config/complexUser.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
"LanguageLocaleKey": "en_US",
99
"profileName": "Standard Platform User",
1010
"permsets": ["VolunteeringApp"],
11+
"roleDeveloperName": "Guide",
1112
"generatePassword": true
1213
}

test/df17AppBuilding/config/project-scratch-def.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"edition": "Developer",
55
"description": "nuts for plugin-user",
66
"features": ["EnableSetPasswordInApi", "AnalyticsAppEmbedded", "DataMaskUser"],
7+
"language": "en_US",
78
"settings": {
89
"lightningExperienceSettings": {
910
"enableS1DesktopEnabled": true
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Role xmlns="http://soap.sforce.com/2006/04/metadata">
3+
<caseAccessLevel>Edit</caseAccessLevel>
4+
<contactAccessLevel>Edit</contactAccessLevel>
5+
<mayForecastManagerShare>false</mayForecastManagerShare>
6+
<name>Guide</name>
7+
<opportunityAccessLevel>Edit</opportunityAccessLevel>
8+
</Role>

0 commit comments

Comments
 (0)