public void Can_load_1_layers_of_settings()
        {
            _externalLinksStorage.Load(Arg.Any <RepoDistSettings>()).Returns(new List <ExternalLinkDefinition>
            {
                new ExternalLinkDefinition {
                    Name = "user definition 1"
                },
            });

            var effectiveSettings = _provider.Get(_userRoaming);

            effectiveSettings.Count.Should().Be(1);
        }
        public ExternalLinksManager(RepoDistSettings settings)
        {
            _cachedSettings = new RepoDistSettings(null, settings.SettingsCache);
            _definitions    = _externalLinksStorage.Load(_cachedSettings).ToList();

            if (settings.LowerPriority != null)
            {
                _lowerPriority = new ExternalLinksManager(settings.LowerPriority);
            }
        }
        /// <summary>
        /// Loads all persisted external link definitions across all setting layers.
        /// </summary>
        public IReadOnlyList <ExternalLinkDefinition> Get(RepoDistSettings settings)
        {
            if (settings is null)
            {
                throw new ArgumentNullException(nameof(settings));
            }

            var cachedSettings = new RepoDistSettings(null, settings.SettingsCache, SettingLevel.Unknown);
            IEnumerable <ExternalLinkDefinition> effective = _externalLinksStorage.Load(cachedSettings);

            if (settings.LowerPriority is not null)
            {
                var lowerPriorityLoader = new ConfiguredLinkDefinitionsProvider(_externalLinksStorage);
                effective = effective.Union(lowerPriorityLoader.Get(settings.LowerPriority));
            }

            return(effective.ToList());
        }