Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions command/login.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ const (
NetworksEnabled
EnableApexApprovalLockUnlock
PermsetsInFieldCreation
EnableLightningPreviewPref
)

var ScratchSettingIds = map[ScratchSetting][]string{
Expand All @@ -107,6 +108,7 @@ var ScratchSettingIds = map[ScratchSetting][]string{
NetworksEnabled: {"networksEnabled"},
EnableApexApprovalLockUnlock: {"enableApexApprovalLockUnlock"},
PermsetsInFieldCreation: {"permsetsInFieldCreation"},
EnableLightningPreviewPref: {"enableLightningPreviewPref"},
}

type ScratchRelease enumflag.Flag
Expand Down Expand Up @@ -225,6 +227,7 @@ Available Settings (deployed after org creation):
networksEnabled - Enable Experience Cloud (Communities)
enableApexApprovalLockUnlock - Allow Apex to lock/unlock approval processes
permsetsInFieldCreation - Allow assigning permission sets during field creation
enableLightningPreviewPref - Enable Lightning Experience preview pref

Available Releases:
preview - Create scratch org on the next (preview) release
Expand Down
11 changes: 11 additions & 0 deletions command/login_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -338,13 +338,24 @@ func TestConvertSettingsToStrings_PermsetsInFieldCreation(t *testing.T) {
}
}

func TestConvertSettingsToStrings_EnableLightningPreviewPref(t *testing.T) {
result := convertSettingsToStrings([]ScratchSetting{EnableLightningPreviewPref})
if len(result) != 1 {
t.Errorf("Expected 1 setting, got %d", len(result))
}
if result[0] != "enableLightningPreviewPref" {
t.Errorf("Expected enableLightningPreviewPref, got %s", result[0])
}
}

func TestScratchSettingIds_AllSettingsDefined(t *testing.T) {
expectedSettings := map[string]bool{
"enableEnhancedNotes": true,
"enableQuote": true,
"networksEnabled": true,
"enableApexApprovalLockUnlock": true,
"permsetsInFieldCreation": true,
"enableLightningPreviewPref": true,
}

if len(ScratchSettingIds) != len(expectedSettings) {
Expand Down
1 change: 1 addition & 0 deletions docs/force_login_scratch.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ Available Settings (deployed after org creation):
networksEnabled - Enable Experience Cloud (Communities)
enableApexApprovalLockUnlock - Allow Apex to lock/unlock approval processes
permsetsInFieldCreation - Allow assigning permission sets during field creation
enableLightningPreviewPref - Enable Lightning Experience preview pref

Available Releases:
preview - Create scratch org on the next (preview) release
Expand Down
12 changes: 12 additions & 0 deletions lib/scratch.go
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ func buildSettingsMetadata(settings []string) ForceMetadataFiles {
// Create settings file for each requested setting
apexSettings := false
userManagementSettings := false
lightningExperienceSettings := false

for _, setting := range settings {
switch setting {
Expand All @@ -231,6 +232,8 @@ func buildSettingsMetadata(settings []string) ForceMetadataFiles {
apexSettings = true
case "permsetsInFieldCreation":
userManagementSettings = true
case "enableLightningPreviewPref":
lightningExperienceSettings = true
}
}

Expand All @@ -252,6 +255,15 @@ func buildSettingsMetadata(settings []string) ForceMetadataFiles {
files["unpackaged/settings/UserManagement.settings"] = userMgmtBuffer.Bytes()
}

if lightningExperienceSettings {
var lexBuffer bytes.Buffer
lexBuffer.WriteString(`<?xml version="1.0" encoding="UTF-8"?>
<LightningExperienceSettings xmlns="http://soap.sforce.com/2006/04/metadata">
<enableLightningPreviewPref>true</enableLightningPreviewPref>
</LightningExperienceSettings>`)
files["unpackaged/settings/LightningExperience.settings"] = lexBuffer.Bytes()
}

return files
}

Expand Down
20 changes: 20 additions & 0 deletions lib/scratch_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,26 @@ func TestBuildSettingsMetadata_ExcludesUserManagementSettingsWhenUnused(t *testi
}
}

func TestBuildSettingsMetadata_AddsLightningExperienceSettings(t *testing.T) {
files := buildSettingsMetadata([]string{"enableLightningPreviewPref"})

content, ok := files["unpackaged/settings/LightningExperience.settings"]
if !ok {
t.Fatalf("LightningExperience.settings not generated")
}
if !strings.Contains(string(content), "<enableLightningPreviewPref>true</enableLightningPreviewPref>") {
t.Errorf("LightningExperience.settings missing enableLightningPreviewPref preference:\n%s", content)
}
}

func TestBuildSettingsMetadata_ExcludesLightningExperienceSettingsWhenUnused(t *testing.T) {
files := buildSettingsMetadata([]string{"enableEnhancedNotes"})

if _, ok := files["unpackaged/settings/LightningExperience.settings"]; ok {
t.Fatalf("LightningExperience.settings should not be generated when not requested")
}
}

func TestGetScratchOrg_returns_error_when_SignupUsername_is_nil(t *testing.T) {
f := &Force{}
f.Credentials = &ForceSession{}
Expand Down