/// <summary>
        /// instantiates an instance of <see cref="ExpressionActionProvider"/>
        /// </summary>
        /// <param name="postcode">the postcode client</param>
        public ExpressionActionProvider(
            ICreatePostcodeClients factory,
            IStoreLocalAuthorities authorityProvider)
        {
            It.IsNull(factory)
            .AsGuard <ArgumentNullException>(nameof(factory));
            It.IsNull(authorityProvider)
            .AsGuard <ArgumentNullException>(nameof(authorityProvider));

            Postcode  = factory.CreateClient();
            Authority = authorityProvider;
            ActionMap = new Dictionary <TypeOfExpression, Func <string, IScopeLoggingContext, Task <string> > >()
            {
                [TypeOfExpression.Town]     = GetTouchpointIDFromTown,
                [TypeOfExpression.Outward]  = GetTouchpointIDFromOutwardCode,
                [TypeOfExpression.Postcode] = GetTouchpointIDFromPostcode
            };
        }
 /// <summary>
 /// make (a) 'system under test'
 /// </summary>
 /// <param name="factory">the postcodes client factory</param>
 /// <param name="authorities">the authorities store</param>
 /// <returns>the system under test</returns>
 internal ExpressionActionProvider MakeSUT(
     ICreatePostcodeClients factory,
     IStoreLocalAuthorities authorities) =>
 new ExpressionActionProvider(factory, authorities);