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); }
/// <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); }
/// <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; }