public void ConfigValidatorPassesWhenValid()
        {
            OktaConfigValidator <IOktaConfig> validator = new OktaConfigValidator <IOktaConfig>();

            validator.Validate(
                new OktaConfig("testoktaid", "https://dev-00000.oktapreview.com", "com.test:/redirect", "com.test:/logout"));

            validator.Validate(
                new OktaConfig("testoktaid", "https://okta.okta.com", "appid:/redirect", "appid:/logout")
            {
                ClockSkew = TimeSpan.FromSeconds(100), Scope = "test1 test2"
            });

            // The validator throws an exception when the config is invalid, so if we got here without an exception then the configs are valid.
        }
        public void ConfigValidatorCatchesInvalidDomain()
        {
            OktaConfigValidator <OktaConfig> validator = new OktaConfigValidator <OktaConfig>();


            Assert.Throws <ArgumentException>(() =>
                                              validator.Validate(new OktaConfig("testoktaid", "http://dev-00000.oktapreview.com", "com.test:/redirect", "com.test:/logout")));

            Assert.Throws <ArgumentException>(() =>
                                              validator.Validate(new OktaConfig("testoktaid", "https://dev-00000-admin.oktapreview.com", "com.test:/redirect", "com.test:/logout")));

            Assert.Throws <ArgumentException>(() =>
                                              validator.Validate(new OktaConfig("testoktaid", "https://{yourOktaDomain}", "com.test:/redirect", "com.test:/logout")));

            Assert.Throws <ArgumentException>(() =>
                                              validator.Validate(new OktaConfig("testoktaid", "dev-00000.oktapreview.com", "com.test:/redirect", "com.test:/logout")));
        }
        public void ConfigValidatorCatchesMissingProperties()
        {
            OktaConfigValidator <OktaConfig> validator = new OktaConfigValidator <OktaConfig>();

            Assert.Throws <ArgumentNullException>("config", () =>
                                                  validator.Validate(null));

            Assert.Throws <ArgumentNullException>(() =>
                                                  validator.Validate(new OktaConfig()));

            Assert.Throws <ArgumentNullException>("ClientId", () =>
                                                  validator.Validate(new OktaConfig(null, "https://dev-00000.oktapreview.com", "com.test:/redirect", "com.test:/logout")));

            Assert.Throws <ArgumentNullException>("OktaDomain", () =>
                                                  validator.Validate(new OktaConfig("testoktaid", null, "com.test:/redirect", "com.test:/logout")));

            Assert.Throws <ArgumentNullException>("RedirectUri", () =>
                                                  validator.Validate(new OktaConfig("testoktaid", "https://dev-00000.oktapreview.com", null, "com.test:/logout")));

            Assert.Throws <ArgumentNullException>("PostLogoutRedirectUri", () =>
                                                  validator.Validate(new OktaConfig("testoktaid", "https://dev-00000.oktapreview.com", "com.test:/redirect", null)));
        }