public void GetConfig_RulesInUserSettings_MergedConfigReturned() { // Arrange var testLogger = new TestLogger(); var testSubject = new EffectiveRulesConfigCalculator(testLogger); var defaultRulesConfig = CreateMockConfig("key"); var sourcesSettings = new UserSettings { Rules = new System.Collections.Generic.Dictionary <string, RuleConfig> { { "rule1", new RuleConfig() } } }; // 1. First call -> new config returned var result1 = testSubject.GetEffectiveRulesConfig("language1", defaultRulesConfig, sourcesSettings); result1.Should().NotBeSameAs(defaultRulesConfig); testLogger.AssertOutputStringExists(CoreStrings.EffectiveRules_CacheMiss); // 2. Second call with same settings -> cache hit testLogger.Reset(); var result2 = testSubject.GetEffectiveRulesConfig("language1", defaultRulesConfig, sourcesSettings); result2.Should().BeSameAs(result1); testLogger.AssertOutputStringExists(CoreStrings.EffectiveRules_CacheHit); // 3. Call with different key -> cache miss testLogger.Reset(); var result3 = testSubject.GetEffectiveRulesConfig("another language", defaultRulesConfig, sourcesSettings); result3.Should().NotBeSameAs(result2); testLogger.AssertOutputStringExists(CoreStrings.EffectiveRules_CacheMiss); }
public void GetConfig_NullUserSettings_DefaultConfigReturned(bool sourceUserSettingsAreNull) { // Arrange var testLogger = new TestLogger(); var testSubject = new EffectiveRulesConfigCalculator(testLogger); var defaultRulesConfig = CreateMockConfig("language1"); var sourcesSettings = sourceUserSettingsAreNull ? null : new UserSettings(); // Act var result = testSubject.GetEffectiveRulesConfig("language1", defaultRulesConfig, sourcesSettings); // Assert - optimisation - expecting the same object instance result.Should().BeSameAs(defaultRulesConfig); testLogger.AssertOutputStringExists(CoreStrings.EffectiveRules_NoUserSettings); }
public void GetConfig_NullArguments_Throws() { var defaultRulesConfig = CreateWellKnownRulesConfig("language1"); var customSettings = new RulesSettings(); // 1. Language Action act = () => testSubject.GetEffectiveRulesConfig(null, defaultRulesConfig, customSettings); act.Should().ThrowExactly <ArgumentNullException>().And.ParamName.Should().Be("languageKey"); // 2. Default rules config act = () => testSubject.GetEffectiveRulesConfig("x", null, customSettings); act.Should().ThrowExactly <ArgumentNullException>().And.ParamName.Should().Be("defaultRulesConfig"); // 3. Custom settings act = () => testSubject.GetEffectiveRulesConfig("x", defaultRulesConfig, null); act.Should().ThrowExactly <ArgumentNullException>().And.ParamName.Should().Be("customSettings"); }
protected virtual /* for testing */ ICFamilyRulesConfig CreateConfiguration(string languageKey, ICFamilyRulesConfig sonarWayConfig, RulesSettings settings) => effectiveConfigCalculator.GetEffectiveRulesConfig(languageKey, sonarWayConfig, settings);