public async Task Process_NoParameters_Accepted()
        {
            TestMocks mocks = new TestMocks();

            ParameterProcessorMap map = new ParameterProcessorMap();
            await map.Process(mocks.Connection.Object, new string[] { }, true).ConfigureAwait(false);
        }
        public void Process_NoParameters_Accepted()
        {
            Mocks mocks = new Mocks();

            ParameterProcessorMap map = new ParameterProcessorMap();

            map.Process(mocks.Connection.Object, new string[] { }, true);
        }
        public void Process_UnknownParameter_Throws()
        {
            Mocks mocks = new Mocks();

            ParameterProcessorMap map = new ParameterProcessorMap();

            map.Process(mocks.Connection.Object, new string[] { "KEYA=VALUEA" }, true);
        }
        public async Task Process_UnknownParameter_Throws()
        {
            SmtpServerException e = await Assert.ThrowsAsync <SmtpServerException>(async() =>
            {
                TestMocks mocks = new TestMocks();

                ParameterProcessorMap map = new ParameterProcessorMap();
                await map.Process(mocks.Connection.Object, new string[] { "KEYA=VALUEA" }, true).ConfigureAwait(false);
            }).ConfigureAwait(false);

            Assert.Equal("Parameter KEYA is not recognised", e.Message);
        }
        public void Process_KnownParameters_Processed()
        {
            Mocks mocks = new Mocks();
            Mock <IParameterProcessor> keyAProcessor = new Mock <IParameterProcessor>();
            Mock <IParameterProcessor> keyBProcessor = new Mock <IParameterProcessor>();

            ParameterProcessorMap map = new ParameterProcessorMap();

            map.SetProcessor("keya", keyAProcessor.Object);
            map.SetProcessor("keyb", keyBProcessor.Object);

            map.Process(mocks.Connection.Object, new string[] { "KEYA=VALUEA", "KEYB=VALUEB" }, true);

            keyAProcessor.Verify(p => p.SetParameter(mocks.Connection.Object, "KEYA", "VALUEA"));
            keyBProcessor.Verify(p => p.SetParameter(mocks.Connection.Object, "KEYB", "VALUEB"));
        }
        public async Task Process_KnownParameters_Processed()
        {
            TestMocks mocks = new TestMocks();
            Mock <IParameterProcessor> keyAProcessor = new Mock <IParameterProcessor>();
            Mock <IParameterProcessor> keyBProcessor = new Mock <IParameterProcessor>();

            ParameterProcessorMap map = new ParameterProcessorMap();

            map.SetProcessor("keya", keyAProcessor.Object);
            map.SetProcessor("keyb", keyBProcessor.Object);

            await map.Process(mocks.Connection.Object, new string[] { "KEYA=VALUEA", "KEYB=VALUEB" }, true).ConfigureAwait(false);

            keyAProcessor.Verify(p => p.SetParameter(mocks.Connection.Object, "KEYA", "VALUEA"));
            keyBProcessor.Verify(p => p.SetParameter(mocks.Connection.Object, "KEYB", "VALUEB"));
        }