==== Unreleased
* NEW: Cookie使用時の関連発言表示に対応
* FIX: APIリクエストのタイムアウト時に接続が切断されない場合がある不具合を修正
+ * FIX: 存在しないユーザーのプロフィールを取得しようとした場合のエラーが適切に処理されない不具合を修正
==== Ver 3.10.1(2023/12/23)
* FIX: OAuth 1.0a によるAPIアクセスに失敗する不具合を修正
mock.VerifyAll();
}
+
+ [Fact]
+ public async Task Send_EmptyTest()
+ {
+ // ユーザーが存在しない場合にエラー情報を含まない空のオブジェクトが返されることがある
+ using var apiResponse = await TestUtils.CreateApiResponse("Resources/Responses/UserByScreenName_Empty.json");
+
+ var mock = new Mock<IApiConnection>();
+ mock.Setup(x =>
+ x.SendAsync(It.IsAny<IHttpRequest>())
+ )
+ .ReturnsAsync(apiResponse);
+
+ var request = new UserByScreenNameRequest
+ {
+ ScreenName = "==INVALID==",
+ };
+
+ var ex = await Assert.ThrowsAsync<WebApiException>(
+ () => request.Send(mock.Object)
+ );
+ Assert.Equal("User is not available.", ex.Message);
+
+ mock.VerifyAll();
+ }
}
}
ErrorResponse.ThrowIfError(rootElm);
- var userElm = rootElm.XPathSelectElement("/data/user/result");
- this.ThrowIfUserUnavailable(userElm);
+ try
+ {
+ var userElm = rootElm.XPathSelectElement("/data/user/result");
+ this.ThrowIfUserUnavailable(userElm);
- return new(userElm);
+ return new(userElm);
+ }
+ catch (WebApiException ex)
+ {
+ ex.ResponseText = JsonUtils.JsonXmlToString(rootElm);
+ throw;
+ }
}
- private void ThrowIfUserUnavailable(XElement userElm)
+ private void ThrowIfUserUnavailable(XElement? userElm)
{
+ if (userElm == null)
+ {
+ var errorText = "User is not available.";
+ throw new WebApiException(errorText);
+ }
+
var typeName = userElm.Element("__typename")?.Value;
if (typeName == "UserUnavailable")
{
var errorText = userElm.Element("message")?.Value ?? "User is not available.";
- var json = JsonUtils.JsonXmlToString(userElm);
- throw new WebApiException(errorText, json);
+ throw new WebApiException(errorText);
}
}
}