public void GlobalSettinsConfigureCorrectly()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["management:endpoints:enabled"]   = "false",
                ["management:endpoints:sensitive"] = "true",
                ["management:endpoints:path"]      = "/management",
                ["management:endpoints:info:id"]   = "infomanagement"
            };
            ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddInMemoryCollection(appsettings);
            var config = configurationBuilder.Build();

            TestOptions2 opts = new TestOptions2("management:endpoints:info", config);

            Assert.NotNull(opts.Global);
            Assert.False(opts.Global.Enabled);
            Assert.True(opts.Global.Sensitive);
            Assert.Equal("/management", opts.Global.Path);

            Assert.False(opts.Enabled);
            Assert.True(opts.Sensitive);
            Assert.Equal("infomanagement", opts.Id);
            Assert.Equal("/management/infomanagement", opts.Path);
        }
        public void CanSetEnable()
        {
            TestOptions2 opt2 = new TestOptions2()
            {
                Enabled = false,
            };

            Assert.False(opt2.Enabled);
        }
        public void InitializedWithDefaults()
        {
            TestOptions2 opts = new TestOptions2();

            Assert.True(opts.Enabled);
            Assert.NotNull(opts.Global);
            Assert.False(opts.Global.Enabled.HasValue);
            Assert.Equal("/", opts.Global.Path);
            Assert.Equal(Permissions.UNDEFINED, opts.RequiredPermissions);
        }
        public void CanSetEnableSensitive()
        {
            TestOptions2 opt2 = new TestOptions2()
            {
                Enabled   = false,
                Sensitive = true
            };

            Assert.False(opt2.Enabled);
            Assert.True(opt2.Sensitive);
        }
        public void BindsConfigurationCorrectly()
        {
            var    appsettings = @"
{
    'management': {
        'endpoints': {
            'enabled': false,
            'sensitive': true,
            'path': '/management',
            'info' : {
                'enabled': true,
                'sensitive': false,
                'id': 'infomanagement',
                'requiredPermissions': 'NONE'
            }
        }
    }
}";
            var    path        = TestHelpers.CreateTempFile(appsettings);
            string directory   = Path.GetDirectoryName(path);
            string fileName    = Path.GetFileName(path);
            ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.SetBasePath(directory);

            configurationBuilder.AddJsonFile(fileName);
            var config = configurationBuilder.Build();


            TestOptions2 opts = new TestOptions2("management:endpoints:info", config);

            Assert.NotNull(opts.Global);
            Assert.False(opts.Global.Enabled);
            Assert.True(opts.Global.Sensitive);
            Assert.Equal("/management", opts.Global.Path);

            Assert.True(opts.Enabled);
            Assert.False(opts.Sensitive);
            Assert.Equal("infomanagement", opts.Id);
            Assert.Equal("/management/infomanagement", opts.Path);
            Assert.Equal(Permissions.NONE, opts.RequiredPermissions);
        }
        public void BindsConfigurationCorrectly()
        {
            var appsettings = new Dictionary <string, string>()
            {
                ["management:endpoints:enabled"]                  = "false",
                ["management:endpoints:path"]                     = "/management",
                ["management:endpoints:info:enabled"]             = "true",
                ["management:endpoints:info:id"]                  = "infomanagement",
                ["management:endpoints:info:requiredPermissions"] = "NONE"
            };
            ConfigurationBuilder configurationBuilder = new ConfigurationBuilder();

            configurationBuilder.AddInMemoryCollection(appsettings);
            var config = configurationBuilder.Build();

            TestOptions2 opts = new TestOptions2("management:endpoints:info", config);

            Assert.True(opts.Enabled);
            Assert.Equal("infomanagement", opts.Id);
            Assert.Equal("/management/infomanagement", opts.Path);
            Assert.Equal(Permissions.NONE, opts.RequiredPermissions);
        }
        public void IsAccessAllowed_ReturnsExpected()
        {
            TestOptions2 opt1 = new TestOptions2();

            Assert.True(opt1.IsAccessAllowed(Permissions.FULL));
            Assert.True(opt1.IsAccessAllowed(Permissions.RESTRICTED));
            Assert.True(opt1.IsAccessAllowed(Permissions.NONE));

            TestOptions2 opt2 = new TestOptions2()
            {
                RequiredPermissions = Permissions.NONE
            };

            Assert.True(opt2.IsAccessAllowed(Permissions.FULL));
            Assert.True(opt2.IsAccessAllowed(Permissions.RESTRICTED));
            Assert.True(opt2.IsAccessAllowed(Permissions.NONE));
            Assert.False(opt2.IsAccessAllowed(Permissions.UNDEFINED));

            TestOptions2 opt3 = new TestOptions2()
            {
                RequiredPermissions = Permissions.RESTRICTED
            };

            Assert.True(opt3.IsAccessAllowed(Permissions.FULL));
            Assert.True(opt3.IsAccessAllowed(Permissions.RESTRICTED));
            Assert.False(opt3.IsAccessAllowed(Permissions.NONE));
            Assert.False(opt3.IsAccessAllowed(Permissions.UNDEFINED));

            TestOptions2 opt4 = new TestOptions2()
            {
                RequiredPermissions = Permissions.FULL
            };

            Assert.True(opt4.IsAccessAllowed(Permissions.FULL));
            Assert.False(opt4.IsAccessAllowed(Permissions.RESTRICTED));
            Assert.False(opt4.IsAccessAllowed(Permissions.NONE));
            Assert.False(opt4.IsAccessAllowed(Permissions.UNDEFINED));
        }