public void Throws_if_no_provider_services_have_been_registered_using_implicit_service_provider()
        {
            var selector = new DatabaseProviderSelector(
                Mock.Of <IServiceProvider>(),
                Mock.Of <IDbContextOptions>(),
                null);

            Assert.Equal(CoreStrings.NoProviderConfigured,
                         Assert.Throws <InvalidOperationException>(
                             () => selector.SelectServices(ServiceProviderSource.Implicit)).Message);
        }
        public void Selects_single_configured_provider()
        {
            var provider        = CreateSource("Database1", configured: true, available: false);
            var serviceProvider = Mock.Of <IServiceProvider>();

            var selector = new DatabaseProviderSelector(
                serviceProvider,
                Mock.Of <IDbContextOptions>(),
                new[] { provider });

            Assert.Same(provider.GetProviderServices(serviceProvider), selector.SelectServices(ServiceProviderSource.Explicit));
        }
        public void Throws_if_one_provider_service_is_registered_but_not_configured_and_cannot_be_used_without_configuration()
        {
            var provider = CreateSource("Database1", configured: false, available: false);

            var selector = new DatabaseProviderSelector(
                Mock.Of <IServiceProvider>(),
                Mock.Of <IDbContextOptions>(),
                new[] { provider });

            Assert.Equal(CoreStrings.NoProviderConfigured,
                         Assert.Throws <InvalidOperationException>(
                             () => selector.SelectServices(ServiceProviderSource.Explicit)).Message);
        }
        public void Throws_if_multiple_provider_services_are_registered_but_none_are_configured()
        {
            var provider1 = CreateSource("Database1", configured: false, available: true);
            var provider2 = CreateSource("Database2", configured: false, available: false);
            var provider3 = CreateSource("Database3", configured: false, available: false);

            var selector = new DatabaseProviderSelector(
                Mock.Of <IServiceProvider>(),
                Mock.Of <IDbContextOptions>(),
                new[] { provider1, provider2, provider3 });

            Assert.Equal(CoreStrings.MultipleProvidersAvailable("'Database1' 'Database2' 'Database3' "),
                         Assert.Throws <InvalidOperationException>(
                             () => selector.SelectServices(ServiceProviderSource.Explicit)).Message);
        }