public SmartThingsAPIHelperTests(ITestOutputHelper output)
        {
            _mockLogger = new Mock <ILogger <ISmartThingsAPIHelper> >();
            _mockLogger.Setup(log => log.Log(It.IsAny <LogLevel>(),
                                             It.IsAny <EventId>(),
                                             It.IsAny <object>(),
                                             null,
                                             It.IsAny <Func <object, Exception, string> >()))
            .Callback <LogLevel,
                       EventId,
                       object,
                       Exception,
                       Func <object, Exception, string> >((logLevel, e, state, ex, f) =>
            {
                output.WriteLine($"{logLevel} logged: \"{state}\"");
            });

            var smartAppConfig = new SmartAppConfig()
            {
                SmartAppClientId     = "SACLIENTID",
                SmartAppClientSecret = "SACLIENTSECRET"
            };

            _mockOptions = new Mock <IOptions <SmartAppConfig> >();
            _mockOptions.Setup(opt => opt.Value)
            .Returns(smartAppConfig);

            _mockHttpMessageHandler = new Mock <HttpMessageHandler>();

            _mockHttpClient       = _mockHttpMessageHandler.CreateClient();
            _smartThingsAPIHelper = new SmartThingsAPIHelper(_mockLogger.Object,
                                                             _mockOptions.Object,
                                                             _mockHttpClient);
        }
 public SmartThingsAPIHelper(ILogger <ISmartThingsAPIHelper> logger,
                             IOptions <SmartAppConfig> options,
                             HttpClient httpClient)
 {
     _logger     = logger ?? throw new ArgumentNullException(nameof(logger));
     _appConfig  = options?.Value ?? throw new ArgumentNullException(nameof(options));
     _httpClient = httpClient ?? throw new ArgumentNullException(nameof(httpClient));
 }