예제 #1
0
        public async Task SetMode_WithValidParametersParameters_SetsMode(CosyMode mode)
        {
            // arrange
            var mockFactory            = new Mock <IHttpClientFactory>();
            var mockHttpMessageHandler = new Mock <HttpMessageHandler>();
            var mockContentResponse    = GetFakeCosyDeviceReponse();

            mockHttpMessageHandler.Protected()
            .Setup <Task <HttpResponseMessage> >(
                "SendAsync",
                ItExpr.IsAny <HttpRequestMessage>(),
                ItExpr.IsAny <CancellationToken>()).ReturnsAsync(
                new HttpResponseMessage
            {
                StatusCode = HttpStatusCode.OK,
                Content    = new StringContent(
                    JsonConvert.SerializeObject(mockContentResponse),
                    Encoding.UTF8,
                    "application/json"),
            });


            var client = new HttpClient(mockHttpMessageHandler.Object);

            mockFactory.Setup(_ => _.CreateClient(It.IsAny <string>())).Returns(client);
            var geoCosyClient = new GeoCosyClient(mockFactory.Object);

            // act
            var response = await geoCosyClient.SetMode("token", "device-id", mode, 60);

            // assert
            response.Data.ShouldBe(true);
        }
예제 #2
0
        /// <summary>
        /// The set mode.
        /// </summary>
        /// <param name="token">
        /// The token.
        /// </param>
        /// <param name="deviceId">
        /// The device id.
        /// </param>
        /// <param name="mode">
        /// The mode.
        /// </param>
        /// <param name="duration">
        /// The duration.
        /// </param>
        /// <returns>
        /// The <see cref="Task"/>.
        /// </returns>
        public async Task <ClientResponse <bool> > SetMode(string token, string deviceId, CosyMode mode, int duration = 60)
        {
            var response = new ClientResponse <bool>();

            try
            {
                if (mode == CosyMode.Hibernate)
                {
                    return(await this.Hibernate(token));
                }

                var        setModeModel = new CosySetModeModel(mode, duration);
                HttpClient client       = this.httpClientFactory.CreateClient();
                var        message      = new HttpRequestMessage()
                {
                    Headers =
                    {
                        { HttpRequestHeader.Authorization.ToString(), $"Bearer {token}"  },
                        { HttpRequestHeader.Accept.ToString(),        "application/json" },
                    },
                    Method  = HttpMethod.Post,
                    Content = new StringContent(
                        JsonConvert.SerializeObject(setModeModel),
                        Encoding.UTF8,
                        "application/json"),
                    RequestUri = new Uri(
                        $"{BaseUrl}system/cosy-adhocmode/{deviceId}")
                };

                var apiResponse = await client.SendAsync(message);

                response.Data = apiResponse.IsSuccessStatusCode;
            }
            catch (HttpRequestException ex)
            {
                if (ex.StatusCode == HttpStatusCode.Forbidden)
                {
                    response.LogError(new CosyClientError(ErrorCode.NotAllowed, "Not allowed. The authenticated user is not allowed to get systems.", ex));
                }
                else
                {
                    throw;
                }
            }

            return(response);
        }
예제 #3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="CosySetModeModel"/> class.
 /// </summary>
 /// <param name="mode">
 /// The mode.
 /// </param>
 public CosySetModeModel(CosyMode mode, int duration = 60)
 {
     this.Mode     = (int)mode;
     this.Duration = duration;
 }