public void returns_expected_auto_commit_when_not_set()
        {
            var sut = new ConsumerConfigurationBuilder();

            sut.WithGroupId("foo");
            sut.WithBootstrapServers("bar");

            var configuration = sut.Build();

            Assert.True(configuration.EnableAutoCommit);
        }
        public void Can_build_minimal_configuration()
        {
            var sut = new ConsumerConfigurationBuilder();

            sut.WithGroupId("foo");
            sut.WithBootstrapServers("bar");

            var configuration = sut.Build();

            AssertKeyValue(configuration, ConfigurationKey.GroupId, "foo");
            AssertKeyValue(configuration, ConfigurationKey.BootstrapServers, "bar");
        }
        public void returns_expected_auto_commit_when_configured_with_valid_value(string configValue, bool expected)
        {
            var sut = new ConsumerConfigurationBuilder();

            sut.WithGroupId("foo");
            sut.WithBootstrapServers("bar");
            sut.WithConfiguration(ConfigurationKey.EnableAutoCommit, configValue);

            var configuration = sut.Build();

            Assert.Equal(expected, configuration.EnableAutoCommit);
        }
        public void Can_use_configuration_value_from_source()
        {
            var sut = new ConsumerConfigurationBuilder();

            sut.WithConfigurationSource(new ConfigurationSourceStub(
                                            (key: ConfigurationKey.GroupId, value: "foo"),
                                            (key: ConfigurationKey.BootstrapServers, value: "bar")
                                            ));

            var configuration = sut.Build();

            AssertKeyValue(configuration, ConfigurationKey.GroupId, "foo");
            AssertKeyValue(configuration, ConfigurationKey.BootstrapServers, "bar");
        }
        public void Can_ignore_out_of_scope_values_from_configuration_source()
        {
            var sut = new ConsumerConfigurationBuilder();

            sut.WithConfigurationSource(new ConfigurationSourceStub(
                                            (key: ConfigurationKey.GroupId, value: "foo"),
                                            (key: ConfigurationKey.BootstrapServers, value: "bar"),
                                            (key: "dummy", value: "baz")
                                            ));

            var configuration = sut.Build();

            AssertKeyValue(configuration, "dummy", null);
        }
        public void Can_register_message_handler()
        {
            var sut = new ConsumerConfigurationBuilder();

            sut.WithGroupId("foo");
            sut.WithBootstrapServers("bar");
            sut.RegisterMessageHandler <DummyMessage, DummyMessageHandler>("dummyTopic", nameof(DummyMessage));

            var configuration = sut.Build();

            var registration = configuration.MessageHandlerRegistry.GetRegistrationFor(nameof(DummyMessage));

            Assert.Equal(typeof(DummyMessageHandler), registration.HandlerInstanceType);
        }
        public void Can_use_configuration_value_from_source_with_environment_naming_convention_and_prefix()
        {
            var sut = new ConsumerConfigurationBuilder();

            sut.WithConfigurationSource(new ConfigurationSourceStub(
                                            (key: "DEFAULT_KAFKA_GROUP_ID", value: "foo"),
                                            (key: "DEFAULT_KAFKA_BOOTSTRAP_SERVERS", value: "bar")
                                            ));
            sut.WithEnvironmentStyle("DEFAULT_KAFKA");

            var configuration = sut.Build();

            AssertKeyValue(configuration, ConfigurationKey.GroupId, "foo");
            AssertKeyValue(configuration, ConfigurationKey.BootstrapServers, "bar");
        }
        public void Only_take_value_from_first_source_that_matches()
        {
            var sut = new ConsumerConfigurationBuilder();

            sut.WithConfigurationSource(new ConfigurationSourceStub(
                                            (key: ConfigurationKey.GroupId, value: "foo"),
                                            (key: ConfigurationKey.BootstrapServers, value: "bar"),
                                            (key: "GROUP_ID", value: "baz")
                                            ));
            sut.WithNamingConvention(NamingConvention.Default);
            sut.WithEnvironmentStyle();

            var configuration = sut.Build();

            AssertKeyValue(configuration, ConfigurationKey.GroupId, "foo");
        }
        public void Can_validate_configuration()
        {
            var sut = new ConsumerConfigurationBuilder();

            Assert.Throws <InvalidConfigurationException>(() => sut.Build());
        }