public void ShortenUrl_SignatureFromOptionsIsAdded() { var httpClient = SetupMockedHttpClient(HttpStatusCode.OK, SampleAnswer); fixture.Inject(httpClient); string code = "123456789"; options.Signature = code; sut = fixture.Create <YourlsApi>(); var param = "test"; sut.ShortenUrl(param); string expectedQueryFragment = $"signature={code}"; httpMessageHandlerMock.Protected().Verify( "SendAsync", Times.Exactly(1), // we expected a single external request ItExpr.Is <HttpRequestMessage>(req => req.Method == HttpMethod.Get && // we expected a GET request req.RequestUri.ToString().Contains(expectedQueryFragment) // to this uri ), ItExpr.IsAny <CancellationToken>() ); }
public void ShortenUrl_RequestUrlIsCorect() { var asnswer = @"{'url':{'keyword':'3','url':'https:\/\/thebests.kotaku.com\/aa','title':'Aa - Gaming Reviews, News, Tips and More. | Kotaku','date':'2021-02-16 21:08:10','ip':'89.151.39.72'},'status':'success','message':'https:\/\/thebests.kotaku.com\/aa added to database','title':'Aa - Gaming Reviews, News, Tips and More. | Kotaku','shorturl':'https:\/\/wyrodek.pl\/x\/3','statusCode':200}"; var httpClient = SetupMockedHttpClient(HttpStatusCode.OK, asnswer); fixture.Inject(httpClient); sut = fixture.Create <YourlsApi>(); var param = "http://test.pl/test/org?params¶m"; var result = sut.ShortenUrl(param); Assert.That(result, Is.EqualTo("https://wyrodek.pl/x/3")); }
public void ShortenUrl_WrongSignature_ErrorIsThrown() { var httpClient = SetupMockedHttpClient(HttpStatusCode.Forbidden, "{'message':'Please log in','errorCode':403,'callback':''}"); fixture.Inject(httpClient); string code = "123456789"; options.Signature = code; sut = fixture.Create <YourlsApi>(); var param = "test"; Assert.Throws <UnauthorizedAccessException>( () => sut.ShortenUrl(param)); }
public void ShortenUrl_UnexpectedStatus_ErrorIsThrown() { var httpClient = SetupMockedHttpClient(HttpStatusCode.NotFound, "{'message':'Please log in','errorCode':403,'callback':''}"); fixture.Inject(httpClient); const string code = "123456789"; options.Signature = code; sut = fixture.Create <YourlsApi>(); var param = "test"; Assert.Throws <ExternalException>( () => sut.ShortenUrl(param)); }
public void ShortenUrl_ReturnFormatIsSetToJson() { var httpClient = SetupMockedHttpClient(HttpStatusCode.OK, SampleAnswer); fixture.Inject(httpClient); sut = fixture.Create <YourlsApi>(); var param = "http://test.pl/test/org?params¶m"; sut.ShortenUrl(param); var expectedQueryFragment = "format=json"; httpMessageHandlerMock.Protected().Verify( "SendAsync", Times.Exactly(1), // we expected a single external request ItExpr.Is <HttpRequestMessage>(req => req.Method == HttpMethod.Get && // we expected a GET request req.RequestUri.ToString().Contains(expectedQueryFragment) // to this uri ), ItExpr.IsAny <CancellationToken>() ); }
public void ShortenUrl_UsesAdressFromOptions() { var httpClient = SetupMockedHttpClient(HttpStatusCode.OK, SampleAnswer); fixture.Inject(httpClient); sut = fixture.Create <YourlsApi>(); var param = "test"; sut.ShortenUrl(param); httpMessageHandlerMock.Protected().Verify( "SendAsync", Times.Exactly(1), // we expected a single external request ItExpr.Is <HttpRequestMessage>(req => req.Method == HttpMethod.Get && // we expected a GET request req.RequestUri.ToString().StartsWith("https://test.com.pl/x/yourls-api.php") // to this uri ), ItExpr.IsAny <CancellationToken>() ); }
public void ShortenUrl_ActionIsSetToShortUrl() { var httpClient = SetupMockedHttpClient(HttpStatusCode.OK, "{'id':1,'value':'1'}"); fixture.Inject(httpClient); sut = fixture.Create <YourlsApi>(); const string param = "test"; sut.ShortenUrl(param); var expectedQueryFragment = $"action=shorturl"; httpMessageHandlerMock.Protected().Verify( "SendAsync", Times.Exactly(1), // we expected a single external request ItExpr.Is <HttpRequestMessage>(req => req.Method == HttpMethod.Get && // we expected a GET request req.RequestUri.ToString().Contains(expectedQueryFragment) // to this uri ), ItExpr.IsAny <CancellationToken>() ); }
public YourlsLinkShortener(ILogger <YourlsLinkShortener> logger, IYourlsApi api) { this.logger = logger; this.api = api; }