public void Get_NoInfrastructureArguments_Generated()
        {
            var provider = new CommandLineProvider();

            var commandLine = provider.Get(
                null,
                "AnotherSource",
                new Dictionary<string, string>
                {
                    { "SourceArg1", "value42" },
                    { "SourceArg2", "1" }
                },
                "SomeSink",
                new Dictionary<string, string>
                {
                    { "SinkArg1", "351" },
                    { "SinkArg2", "hello" }
                });

            Assert.AreEqual(100, commandLine.Length, TestResources.InvalidCommandLineLength);

            StringAssert.Contains(commandLine, "/s:AnotherSource", TestResources.CommandLineArgumentMissing);
            StringAssert.Contains(commandLine, "/s.SourceArg1:value42", TestResources.CommandLineArgumentMissing);
            StringAssert.Contains(commandLine, "/s.SourceArg2:1", TestResources.CommandLineArgumentMissing);

            StringAssert.Contains(commandLine, "/t:SomeSink", TestResources.CommandLineArgumentMissing);
            StringAssert.Contains(commandLine, "/t.SinkArg1:351", TestResources.CommandLineArgumentMissing);
            StringAssert.Contains(commandLine, "/t.SinkArg2:hello", TestResources.CommandLineArgumentMissing);
        }
        public void Get_AllConfigurationPopulated_Generated()
        {
            var provider = new CommandLineProvider();

            var commandLine = provider.Get(
                Mocks.Of<IInfrastructureConfiguration>(c =>
                    c.ErrorLog == "errors.csv" &&
                    c.OverwriteErrorLog == false).First(),
                "TestSource",
                new Dictionary<string, string>
                {
                    { "SourceArg1", "value" },
                    { "SourceArg2", "42" }
                },
                "TestSink",
                new Dictionary<string, string>
                {
                    { "SinkArg1", "100" },
                    { "SinkArg2", "value" }
                });

            Assert.AreEqual(117, commandLine.Length, TestResources.InvalidCommandLineLength);

            StringAssert.Contains(commandLine, "/ErrorLog:errors.csv", TestResources.CommandLineArgumentMissing);

            StringAssert.Contains(commandLine, "/s:TestSource", TestResources.CommandLineArgumentMissing);
            StringAssert.Contains(commandLine, "/s.SourceArg1:value", TestResources.CommandLineArgumentMissing);
            StringAssert.Contains(commandLine, "/s.SourceArg2:42", TestResources.CommandLineArgumentMissing);

            StringAssert.Contains(commandLine, "/t:TestSink", TestResources.CommandLineArgumentMissing);
            StringAssert.Contains(commandLine, "/t.SinkArg1:100", TestResources.CommandLineArgumentMissing);
            StringAssert.Contains(commandLine, "/t.SinkArg2:value", TestResources.CommandLineArgumentMissing);
        }
        public void Get_NoSourceArguments_Generated()
        {
            var provider = new CommandLineProvider();

            var commandLine = provider.Get(
                Mocks.Of<IInfrastructureConfiguration>(c =>
                    c.ErrorLog == "somefile.csv" &&
                    c.OverwriteErrorLog == false).First(),
                "AnotherSource", null,
                "SomeSink",
                new Dictionary<string, string>
                {
                    { "SinkArg1", "351" },
                    { "SinkArg2", "hello" }
                });

            Assert.AreEqual(85, commandLine.Length, TestResources.InvalidCommandLineLength);

            StringAssert.Contains(commandLine, "/ErrorLog:somefile.csv", TestResources.CommandLineArgumentMissing);

            StringAssert.Contains(commandLine, "/s:AnotherSource", TestResources.CommandLineArgumentMissing);

            StringAssert.Contains(commandLine, "/t:SomeSink", TestResources.CommandLineArgumentMissing);
            StringAssert.Contains(commandLine, "/t.SinkArg1:351", TestResources.CommandLineArgumentMissing);
            StringAssert.Contains(commandLine, "/t.SinkArg2:hello", TestResources.CommandLineArgumentMissing);
        }
        public void Get_ArgumentWithNewLines_NewLinesRemoved()
        {
            var provider = new CommandLineProvider();

            var commandLine = provider.Get(
                null,
                "TestSource",
                new Dictionary<string, string>
                {
                    { "TestArg", "Hello" + Environment.NewLine + "World!" },
                },
                "TestSink", null);

            Assert.AreEqual(52, commandLine.Length, TestResources.InvalidCommandLineLength);

            StringAssert.Contains(commandLine, "/s:TestSource", TestResources.CommandLineArgumentMissing);
            StringAssert.Contains(commandLine, "/s.TestArg:\"Hello World!\"", TestResources.CommandLineArgumentMissing);

            StringAssert.Contains(commandLine, "/t:TestSink", TestResources.CommandLineArgumentMissing);
        }
        public void Get_SwitchArgument_Generated()
        {
            var provider = new CommandLineProvider();

            var commandLine = provider.Get(
                Mocks.Of<IInfrastructureConfiguration>(c =>
                    c.ErrorLog == "file.csv" &&
                    c.OverwriteErrorLog == true).First(),
                "TestSource",
                new Dictionary<string, string>
                {
                    { "SwitchArg", null },
                },
                "TestSink",
                new Dictionary<string, string>
                {
                    { "SinkArg1", "whatever" },
                });

            Assert.AreEqual(97, commandLine.Length, TestResources.InvalidCommandLineLength);

            StringAssert.Contains(commandLine, "/ErrorLog:file.csv", TestResources.CommandLineArgumentMissing);
            StringAssert.Contains(commandLine, "/OverwriteErrorLog", TestResources.CommandLineArgumentMissing);

            StringAssert.Contains(commandLine, "/s:TestSource", TestResources.CommandLineArgumentMissing);
            StringAssert.Contains(commandLine, "/s.SwitchArg", TestResources.CommandLineArgumentMissing);

            StringAssert.Contains(commandLine, "/t:TestSink", TestResources.CommandLineArgumentMissing);
            StringAssert.Contains(commandLine, "/t.SinkArg1:whatever", TestResources.CommandLineArgumentMissing);
        }
        public void Get_QuotesAndSpacesInArgument_Generated()
        {
            var provider = new CommandLineProvider();

            var commandLine = provider.Get(
                Mocks.Of<IInfrastructureConfiguration>(c =>
                    c.ErrorLog == @"d:\path with spaces and ""quotes""\file.csv" &&
                    c.OverwriteErrorLog == false).First(),
                "TestSource",
                new Dictionary<string, string>
                {
                    { "SourceArg1", "42" },
                },
                "TestSink",
                new Dictionary<string, string>
                {
                    { "SinkArg1", "quotes\" and \"spaces" },
                });

            Assert.AreEqual(138, commandLine.Length, TestResources.InvalidCommandLineLength);

            StringAssert.Contains(commandLine, "/ErrorLog:\"d:\\path with spaces and \"\"\"quotes\"\"\"\\file.csv\"", TestResources.CommandLineArgumentMissing);

            StringAssert.Contains(commandLine, "/s:TestSource", TestResources.CommandLineArgumentMissing);
            StringAssert.Contains(commandLine, "/s.SourceArg1:42", TestResources.CommandLineArgumentMissing);

            StringAssert.Contains(commandLine, "/t:TestSink", TestResources.CommandLineArgumentMissing);
            StringAssert.Contains(commandLine, "/t.SinkArg1:\"quotes\"\"\" and \"\"\"spaces\"", TestResources.CommandLineArgumentMissing);
        }