public async Task WhenAddingANewProfile_AndAProfileNameIsProvided_TheProvidedNameIsUsed()
        {
            var profiles = new List <ILaunchProfile>();
            var launchSettingsProvider = ILaunchSettingsProviderFactory.Create(
                addOrUpdateProfileCallback: (profile, addToFront) => profiles.Add(profile),
                getProfilesCallback: (p) => ImmutableList.CreateRange(profiles));
            var service = new LaunchSettingsActionService(launchSettingsProvider);

            var newProfile = await service.AddLaunchProfileAsync(commandName : "Alpha", newProfileName : "Beta");

            Assert.NotNull(newProfile);
            Assert.Equal(expected: "Beta", actual: newProfile !.Name);
            Assert.Equal(expected: "Alpha", actual: newProfile !.CommandName);
            Assert.Single(profiles);
        }
        public async Task WhenRemovingAProfile_TheProfileIsRemoved()
        {
            var profiles = new List <ILaunchProfile>
            {
                new WritableLaunchProfile {
                    Name = "Alpha", CommandName = "Beta", ExecutablePath = @"C:\iguana\aardvark.exe"
                }.ToLaunchProfile()
            };
            var launchSettingsProvider = ILaunchSettingsProviderFactory.Create(
                launchProfiles: profiles,
                addOrUpdateProfileCallback: (profile, addToFront) => profiles.Add(profile),
                removeProfileCallback: (removedProfileName) => profiles.RemoveAll(p => p.Name == removedProfileName),
                getProfilesCallback: (p) => ImmutableList.CreateRange(profiles));
            var service = new LaunchSettingsActionService(launchSettingsProvider);

            await service.RemoveLaunchProfileAsync(profileName : "Alpha");

            Assert.Empty(profiles);
        }
        public async Task WhenDuplicatingAProfile_AndNameAndCommandAreProvided_TheNameAndCommandAreUsed()
        {
            var profiles = new List <ILaunchProfile>
            {
                new WritableLaunchProfile {
                    Name = "Alpha", CommandName = "Beta", ExecutablePath = @"C:\iguana\aardvark.exe"
                }.ToLaunchProfile()
            };
            var launchSettingsProvider = ILaunchSettingsProviderFactory.Create(
                launchProfiles: profiles,
                addOrUpdateProfileCallback: (profile, addToFront) => profiles.Add(profile),
                getProfilesCallback: (p) => ImmutableList.CreateRange(profiles));
            var service = new LaunchSettingsActionService(launchSettingsProvider);

            var duplicatedProfile = await service.DuplicateLaunchProfileAsync(currentProfileName : "Alpha", newProfileName : "Gamma", newProfileCommandName : "Delta");

            Assert.Equal(expected: "Gamma", actual: duplicatedProfile !.Name);
            Assert.Equal(expected: "Delta", actual: duplicatedProfile !.CommandName);
            Assert.Equal(expected: @"C:\iguana\aardvark.exe", actual: duplicatedProfile !.ExecutablePath);
            Assert.Equal(expected: 2, actual: profiles.Count);
        }
        public async Task WhenRenamingAProfile_TheOldProfileIsRemovedAndTheNewProfileIsAdded()
        {
            var profiles = new List <ILaunchProfile>
            {
                new WritableLaunchProfile {
                    Name = "Alpha", CommandName = "Beta", ExecutablePath = @"C:\iguana\aardvark.exe"
                }.ToLaunchProfile()
            };
            var launchSettingsProvider = ILaunchSettingsProviderFactory.Create(
                launchProfiles: profiles,
                addOrUpdateProfileCallback: (profile, addToFront) => profiles.Add(profile),
                removeProfileCallback: (removedProfileName) => profiles.RemoveAll(p => p.Name == removedProfileName),
                getProfilesCallback: (p) => ImmutableList.CreateRange(profiles));
            var service = new LaunchSettingsActionService(launchSettingsProvider);

            var renamedProfile = await service.RenameLaunchProfileAsync(currentProfileName : "Alpha", newProfileName : "Gamma");

            Assert.Equal(expected: "Gamma", actual: renamedProfile !.Name);
            Assert.Equal(expected: "Beta", actual: renamedProfile !.CommandName);
            Assert.Equal(expected: @"C:\iguana\aardvark.exe", actual: renamedProfile !.ExecutablePath);
            Assert.Single(profiles);
        }
        public async Task WhenAddingANewProfile_AndAProfileNameIsNotProvided_AUniqueNameIsGenerated()
        {
            var profiles = new List <ILaunchProfile>();
            var launchSettingsProvider = ILaunchSettingsProviderFactory.Create(
                addOrUpdateProfileCallback: (profile, addToFront) => profiles.Add(profile),
                getProfilesCallback: (p) => ImmutableList.CreateRange(profiles));
            var service = new LaunchSettingsActionService(launchSettingsProvider);

            var newProfile1 = await service.AddLaunchProfileAsync(commandName : "Alpha", newProfileName : null);

            Assert.NotNull(newProfile1);
            Assert.Equal(expected: "Alpha", actual: newProfile1 !.CommandName);
            Assert.NotNull(newProfile1.Name);

            var newProfile2 = await service.AddLaunchProfileAsync(commandName : "Beta", newProfileName : null);

            Assert.NotNull(newProfile2);
            Assert.Equal(expected: "Beta", actual: newProfile2 !.CommandName);
            Assert.NotNull(newProfile2.Name);

            Assert.NotEqual(expected: newProfile1.Name, actual: newProfile2.Name);

            Assert.Equal(expected: 2, actual: profiles.Count);
        }