public async Task get_iotHub_update_device_twin()
    {
        DeviceTwinRepository repo = new DeviceTwinRepository(iotHubConnectionString);
        var tags = new DeviceTwinTagsModel()
        {
            ProductFamily    = "ProductFamilyTest",
            ProductName      = "ProductNameTest",
            RetailerName     = "RetailerTest",
            ManufacturedDate = DateTime.Now,
            ShippedDate      = DateTime.Now,
            RetailerRegion   = "Chicago"
        };
        var device = await repo.CreateAndInitializeDeviceTwin("unittestdevice", tags);

        Assert.Equal("unittestdevice", device.Id);

        // get device twin
        var deviceTwin = await repo.GetDeviceTwinAsync(device.Id);

        Assert.NotNull(deviceTwin);

        var deviceTwinModel = new DeviceTwinModel()
        {
            DeviceId = "unittestdevice",

            /*Location = new DeviceLocation()
             * {
             *  AddressLine1 = "1100, S King Drive",
             *  City = "Chicago",
             *  State = "IL",
             *  ZipCode = "50630",
             *  Country = "US",
             *  AdditionalNotes="Test Notes"
             * },
             * Features = new List<DeviceFeature>()
             * {
             *  new DeviceFeature(){ Name = "Just Test Feature",
             *  Value = true }
             *
             * },
             * ActivationDate = DateTime.Now,
             * ShipDate = DateTime.Now.AddDays(2)*/
        };

        //await repo.UpdateDeviceTwinTagsAsync(deviceTwinModel);
        await repo.InitializeDeviceTwinDesiredFeaturesAsync(new DeviceTwinDesiredFeaturesModel()
        {
            DeviceId = device.Id                                                                                            /*, ActivatedFeatures = deviceTwinModel.Features*/
        });

        // get device twin
        deviceTwin = await repo.GetDeviceTwinAsync(device.Id);

        //Assert.Equal(1,deviceTwin.Tags.Count);
        //Assert.True(deviceTwin.Tags.Contains("location"));

        //Assert.Equal(1, deviceTwin.Properties.Desired.Count);
        //Assert.True(deviceTwin.Properties.Desired.Contains("features"));
    }
    public void update_iotHub_devices_twin_status()
    {
        DeviceTwinRepository repo = new DeviceTwinRepository(iotHubConnectionString);
        //await repo.UpdateDevicesStatus();
        // Assert.Equal("coffeemaker1", device.Id);

        // get device twin
        //var aggResult = await repo.GetDevicesSummaryAggregationsAsync();
        // Assert.NotNull(deviceTwin);
    }
    public async Task create_iotHub_device()
    {
        DeviceTwinRepository repo = new DeviceTwinRepository(iotHubConnectionString);
        var tags = new DeviceTwinTagsModel()
        {
            ProductFamily    = "ProductFamilyTest",
            ProductName      = "ProductNameTest",
            RetailerName     = "RetailerTest",
            ManufacturedDate = DateTime.Now,
            ShippedDate      = DateTime.Now,
            RetailerRegion   = "Chicago"
        };
        var device = await repo.CreateAndInitializeDeviceTwin("unittestdevice", tags);

        Assert.Equal("unittestdevice", device.Id);
    }
    public async Task get_iotHub_device_twin_list_groupby()
    {
        DeviceTwinRepository repo = new DeviceTwinRepository(iotHubConnectionString);
        var tags = new DeviceTwinTagsModel()
        {
            ProductFamily    = "ProductFamilyTest",
            ProductName      = "ProductNameTest",
            RetailerName     = "RetailerTest",
            ManufacturedDate = DateTime.Now,
            ShippedDate      = DateTime.Now,
            RetailerRegion   = "Chicago"
        };
        var device = await repo.CreateAndInitializeDeviceTwin("unittestdevice", tags);

        Assert.Equal("unittestdevice", device.Id);

        // get device twin
        // var devicesTwin = await repo.GetDevicesTwinGroupByAsync("retailerName");
        // Assert.NotNull(deviceTwin);
    }
    public async Task delete_multiple_iotHub_devices()
    {
        DeviceTwinRepository repo = new DeviceTwinRepository(iotHubConnectionString);
        var device1 = await repo.CreateDevice("coffeemaker1");

        var device2 = await repo.CreateDevice("coffeemaker2");

        var device3 = await repo.CreateDevice("coffeemaker3");

        List <string> devices = new List <string> {
            device1.Id, device2.Id, device3.Id
        };
        await repo.DeleteMultipleDevicesAsync(devices);

        var getDevice1 = await repo.GetDevice(device1.Id);

        Assert.Null(getDevice1);
        var getDevice2 = await repo.GetDevice(device2.Id);

        Assert.Null(getDevice2);
        var getDevice3 = await repo.GetDevice(device3.Id);

        Assert.Null(getDevice3);
    }