public void TestCSPHeaderRemoveDirective()
        {
            var cspHeaderGenerator = new CSPHeaderGenerator();

            Assert.ThrowsException <ArgumentNullException>(() => { cspHeaderGenerator.RemoveDirectiveValues(CSPHeaderGenerator.DirectiveType.Script); });
            Assert.ThrowsException <ArgumentNullException>(() => { cspHeaderGenerator.RemoveDirectiveValues("script"); });

            cspHeaderGenerator.AddDirective(CSPHeaderGenerator.DirectiveType.Script, CSPHeaderGenerator.StaticValues.Self, "http://google.com", CSPHeaderGenerator.StaticValues.SchemaHttps);

            var originalValue = cspHeaderGenerator.ToString();

            cspHeaderGenerator.RemoveDirectiveValues("script", "http://google.com");

            var valueFirstChange = cspHeaderGenerator.ToString();

            Assert.IsFalse(String.IsNullOrWhiteSpace(valueFirstChange), $"{nameof(valueFirstChange)} is null");
            Assert.IsFalse(String.Equals(originalValue, valueFirstChange), $"{nameof(originalValue)} and {nameof(valueFirstChange)} are identical when they shouldn't be");
            Assert.IsTrue(String.Equals(valueFirstChange, $"script-src {CSPHeaderGenerator.StaticValues.Self} {CSPHeaderGenerator.StaticValues.SchemaHttps};"), $"{nameof(valueFirstChange)} is \"{valueFirstChange}\"");

            cspHeaderGenerator.RemoveDirectiveValues(CSPHeaderGenerator.DirectiveType.Script, CSPHeaderGenerator.StaticValues.SchemaHttps);

            var valueSecondChange = cspHeaderGenerator.ToString();

            Assert.IsFalse(String.IsNullOrWhiteSpace(valueSecondChange), $"{nameof(valueSecondChange)} is null");
            Assert.IsFalse(String.Equals(originalValue, valueSecondChange), $"{nameof(originalValue)} and {nameof(valueSecondChange)} are identical when they shouldn't be");
            Assert.IsFalse(String.Equals(valueFirstChange, valueSecondChange), $"{nameof(valueFirstChange)} and {nameof(valueSecondChange)} are identical when they shouldn't be");
            Assert.IsTrue(String.Equals(valueSecondChange, $"script-src {CSPHeaderGenerator.StaticValues.Self};"), $"{nameof(valueSecondChange)} is \"{valueSecondChange}\"");
        }
        public void TestCSPHeaderClearDirective()
        {
            var cspHeaderGenerator = new CSPHeaderGenerator(CSPHeaderGenerator.StaticValues.None);

            cspHeaderGenerator.AddDirective(CSPHeaderGenerator.DirectiveType.Script, CSPHeaderGenerator.StaticValues.Self, "http://google.com");
            cspHeaderGenerator.AddDirective("font", CSPHeaderGenerator.StaticValues.Self, "http://google.com");

            var originalValue = cspHeaderGenerator.ToString();

            cspHeaderGenerator.ClearDirective(CSPHeaderGenerator.DirectiveType.Script);
            cspHeaderGenerator.ClearDirective("font");

            var valueChange = cspHeaderGenerator.ToString();

            Assert.IsFalse(String.IsNullOrWhiteSpace(valueChange), $"{nameof(valueChange)} is null");
            Assert.IsFalse(String.Equals(originalValue, valueChange), $"{nameof(originalValue)} and {nameof(valueChange)} are identical when they shouldn't be");
            Assert.IsTrue(String.Equals(valueChange, $"default-src {CSPHeaderGenerator.StaticValues.None};"), $"{nameof(valueChange)} is \"{valueChange}\"");
        }
        public void TestCSPHeaderGeneratorAddDirective()
        {
            var cspHeaderGenerator = new CSPHeaderGenerator(CSPHeaderGenerator.StaticValues.None);

            Assert.ThrowsException <ArgumentNullException>(() => { cspHeaderGenerator.AddDirective(CSPHeaderGenerator.DirectiveType.Script); });
            Assert.ThrowsException <ArgumentNullException>(() => { cspHeaderGenerator.AddDirective("script"); });

            cspHeaderGenerator.AddDirective(CSPHeaderGenerator.DirectiveType.Script, CSPHeaderGenerator.StaticValues.Self, "https://google.com");
            cspHeaderGenerator.AddDirective("font", CSPHeaderGenerator.StaticValues.Self);

            cspHeaderGenerator.AddDirective("test", CSPHeaderGenerator.StaticValues.Self);
            cspHeaderGenerator.AddDirective("test-test", CSPHeaderGenerator.StaticValues.Self);

            var headerValue = cspHeaderGenerator.ToString();

            Assert.IsFalse(String.IsNullOrWhiteSpace(headerValue), $"{nameof(headerValue)} is null");
            Assert.IsTrue(String.Equals(headerValue, $"default-src {CSPHeaderGenerator.StaticValues.None}; font-src {CSPHeaderGenerator.StaticValues.Self}; script-src {CSPHeaderGenerator.StaticValues.Self} https://google.com; test-src {CSPHeaderGenerator.StaticValues.Self}; test-test {CSPHeaderGenerator.StaticValues.Self};"), $"{nameof(headerValue)} is \"{headerValue}\"");
        }