Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
mtokar3v committed Mar 26, 2023
2 parents 29d798f + 7fbb0e5 commit 453d2a7
Show file tree
Hide file tree
Showing 27 changed files with 372 additions and 114 deletions.
5 changes: 3 additions & 2 deletions ReversoAPI.Web.Tests/Clients/SpellingClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
using ReversoAPI.Web.GrammarCheckFeature.Application.Services;
using ReversoAPI.Web.Shared.Infrastructure.Http;
using ReversoAPI.Web.Shared.Infrastructure.Http.Interfaces;
using System.Net;

namespace ReversoAPI.Web.Tests.Clients
{
Expand All @@ -22,15 +23,15 @@ public class SpellingClientTests
public SpellingClientTests()
{
_apiConnector = new Mock<IAPIConnector>();
_client = new SpellingService(_apiConnector.Object);
_client = new SpellingService(_apiConnector.Object, null);
}

[Theory]
[MemberData(nameof(SpellingDataForTest))]
public async Task GetAsync_Success(string text, Language language, Locale locale, Stream json, SpellingData expectedResult)
{
// Arrange
var response = new HttpResponse() { Content = json };
var response = new HttpResponse("text/html", json, HttpStatusCode.OK);
_apiConnector
.Setup(c => c.PostAsync(It.IsAny<Uri>(), It.IsAny<SpellingRequest>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(response);
Expand Down
5 changes: 3 additions & 2 deletions ReversoAPI.Web.Tests/Clients/TranslationClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using FluentAssertions;
using System;
using System.IO;
using System.Net;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
Expand All @@ -22,15 +23,15 @@ public class TranslationClientTests
public TranslationClientTests()
{
_apiConnector = new Mock<IAPIConnector>();
_client = new TranslationService(_apiConnector.Object);
_client = new TranslationService(_apiConnector.Object, null);
}

[Theory]
[MemberData(nameof(SpellingDataForTest))]
public async Task GetFromOneWordAsync_Success(string text, Language source, Language target, Stream json, TranslationData expectedResult)
{
// Arrange
var response = new HttpResponse() { Content = json };
var response = new HttpResponse("text/html", json, HttpStatusCode.OK);
_apiConnector
.Setup(c => c.PostAsync(It.IsAny<Uri>(), It.IsAny<TranslationRequest>(), It.IsAny<CancellationToken>()))
.ReturnsAsync(response);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class ConjugationResponseParserTest
public void Invoke_Test(ConjugationData expectedResult, Stream html)
{
// Arrange
var parser = new ConjugationParserService();
var parser = new ConjugationParseService(null);

// Act
var result = parser.Invoke(html);
Expand Down
2 changes: 1 addition & 1 deletion ReversoAPI.Web.Tests/Parsers/ContextResponseParserTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class ContextResponseParserTest
public void Invoke_Test(ContextData expectedResult, Stream html)
{
// Arrange
var parser = new ContextParserService();
var parser = new ContextParseService(null);

// Act
var result = parser.Invoke(html);
Expand Down
2 changes: 1 addition & 1 deletion ReversoAPI.Web.Tests/Parsers/SynonymsResponseParserTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public class SynonymsResponseParserTest
public void Invoke_Test(SynonymsData expectedResult, Stream html)
{
// Arrange
var parser = new SynonymsParserService();
var parser = new SynonymsParseService(null);

// Act
var result = parser.Invoke(html);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ public class ConjugationService : IConjugationService
private string ConjugationURL = "https://conjugator.reverso.net/conjugation-";

private readonly IAPIConnector _apiConnector;
private readonly IParser<ConjugationData> _parser;
private readonly IParseService<ConjugationData> _parser;

public ConjugationService(
IAPIConnector apiConnector,
IParser<ConjugationData> parser)
IParseService<ConjugationData> parser)
{
_apiConnector = apiConnector;
_parser = parser;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,19 @@
using System.IO;
using ReversoAPI.Web.ConjugationFeature.Domain.Supporting.Builders;
using ReversoAPI.Web.Shared.Domain.Services;
using ReversoAPI.Web.Shared.Infrastructure.Logger;

namespace ReversoAPI.Web.ConjugationFeature.Domain.Core.Services
{
public class ConjugationParserService : BaseParser<ConjugationData>
public class ConjugationParseService : BaseParser<ConjugationData>
{
private readonly ILogger _log;

public ConjugationParseService(ILogger log)
{
_log = log;
}

protected override ConjugationData Parse(Stream htmlStream)
{
try
Expand All @@ -16,8 +24,9 @@ protected override ConjugationData Parse(Stream htmlStream)
.WithConjugations()
.Build();
}
catch (ParsingException)
catch (ParsingException ex)
{
_log?.Error(ex.Message);
return null;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ public class ContextService : IContextService
private const string ContextURL = "https://context.reverso.net/translation/";

private readonly IAPIConnector _apiConnector;
private readonly IParser<ContextData> _parser;
private readonly IParseService<ContextData> _parser;

public ContextService(IAPIConnector apiConnector,
IParser<ContextData> parser)
IParseService<ContextData> parser)
{
_apiConnector = apiConnector;
_parser = parser;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,18 @@
using System.IO;
using ReversoAPI.Web.ContextFeature.Domain.Supporting.Builders;
using ReversoAPI.Web.Shared.Domain.Services;
using ReversoAPI.Web.Shared.Infrastructure.Logger;

namespace ReversoAPI.Web.ContextFeature.Domain.Core.Services
{
public class ContextParserService : BaseParser<ContextData>
public class ContextParseService : BaseParser<ContextData>
{
private readonly ILogger _log;
public ContextParseService(ILogger log)
{
_log = log;
}

protected override ContextData Parse(Stream htmlStream)
{
try
Expand All @@ -16,8 +23,9 @@ protected override ContextData Parse(Stream htmlStream)
.WithExamples()
.Build();
}
catch (ParsingException)
catch (ParsingException ex)
{
_log?.Error(ex.Message);
return null;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public SpellingRequest(string text, Language language, Locale locale)
AutoReplace = true;
EnglishDialect = "indifferent";
GetCorrectionDetails = true;
InterfaceLanguage = "eu";
InterfaceLanguage = "en";
IsHtml = false;
Locale = locale == ReversoAPI.Locale.None ? string.Empty : locale.ToString();
Origin = "interactive";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,22 @@
using ReversoAPI.Web.GrammarCheckFeature.Application.Validators;
using ReversoAPI.Web.Shared.Application.Extensions;
using ReversoAPI.Web.Shared.Infrastructure.Http.Interfaces;
using ReversoAPI.Web.Shared.Infrastructure.Logger;

namespace ReversoAPI.Web.GrammarCheckFeature.Application.Services
{
public class SpellingService : ISpellingService
{
private const string SpellingURL = "https://orthographe.reverso.net/api/v1/Spelling/";

private readonly ILogger _log;
private readonly IAPIConnector _apiConnector;
public SpellingService(IAPIConnector apiConnector) => _apiConnector = apiConnector;

public SpellingService(IAPIConnector apiConnector, ILogger log)
{
_log = log;
_apiConnector = apiConnector;
}

public async Task<SpellingData> GetAsync(string text, Language language, Locale locale = Locale.None, CancellationToken cancellationToken = default)
{
Expand All @@ -27,7 +34,11 @@ public async Task<SpellingData> GetAsync(string text, Language language, Locale
var spellingDto = response.Content.Deserialize<SpellingResponse>();

var validationResult = new SpellingResponseValidator(spellingDto).Validate();
if (!validationResult.IsValid) return null;
if (!validationResult.IsValid)
{
_log?.Error(validationResult.Message);
return null;
}

return spellingDto.ToModel();
}
Expand Down
22 changes: 11 additions & 11 deletions ReversoAPI.Web/ReversoClient.cs
Original file line number Diff line number Diff line change
@@ -1,31 +1,31 @@
using ReversoAPI.Web.ConjugationFeature.Application.Services;
using ReversoAPI.Web.ConjugationFeature.Domain.Core.Services;
using ReversoAPI.Web.ContextFeature.Application.Services;
using ReversoAPI.Web.ContextFeature.Domain.Core.Services;
using ReversoAPI.Web.GrammarCheckFeature.Application.Services;
using ReversoAPI.Web.PronunciationFeature.Application.Services;
using ReversoAPI.Web.SynonymsFeature.Application.Services;
using ReversoAPI.Web.SynonymsFeature.Domain.Core.Services;
using ReversoAPI.Web.TranslationFeature.Application.Services;
using ReversoAPI.Web.Shared.Infrastructure.Http;

namespace ReversoAPI
{
public class ReversoClient : IReversoClient
{
public ReversoClient()
public ReversoClient(ReversoClientConfig config)
{
var apiConnector = APIConnector.Create(HttpClientCacheWrapper.GetInstance());
var apiConnector = config.APIConnector;

Context = new ContextClient(new ContextService(apiConnector, new ContextParserService()));
Synonyms = new SynonymsClient(new SynonymsService(apiConnector, new SynonymsParserService()));
Conjugation = new ConjugationClient(new ConjugationService(apiConnector, new ConjugationParserService()));
Context = new ContextClient(new ContextService(apiConnector, config.ContextParser));
Synonyms = new SynonymsClient(new SynonymsService(apiConnector, config.SynonymsParser));
Conjugation = new ConjugationClient(new ConjugationService(apiConnector, config.ConjugationParser));

Spelling = new SpellingClient(new SpellingService(apiConnector));
Translation = new TranslationClient(new TranslationService(apiConnector));
Spelling = new SpellingClient(new SpellingService(apiConnector, config.Logger));
Translation = new TranslationClient(new TranslationService(apiConnector, config.Logger));
Pronunciation = new PronunciationClient(new PronunciationService(apiConnector));
}

public ReversoClient() : this(new ReversoClientConfig().CreateDefault())
{
}

public IContextClient Context { get; }
public ISynonymsClient Synonyms { get; }
public ISpellingClient Spelling { get; }
Expand Down
130 changes: 130 additions & 0 deletions ReversoAPI.Web/ReversoClientConfig.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
using System;
using ReversoAPI.Web.ConjugationFeature.Domain.Core.Services;
using ReversoAPI.Web.ContextFeature.Domain.Core.Services;
using ReversoAPI.Web.SynonymsFeature.Domain.Core.Services;
using ReversoAPI.Web.Shared.Domain.Interfaces.Services;
using ReversoAPI.Web.Shared.Infrastructure.Http;
using ReversoAPI.Web.Shared.Infrastructure.Http.Interfaces;
using ReversoAPI.Web.Shared.Infrastructure.Logger;

namespace ReversoAPI.Web
{
public class ReversoClientConfig
{
// General
private IHttpClient _httpClient;
public IHttpClient HttpClient
{
get => _httpClient ?? new CachedHttpClient();
private set => _httpClient = value;
}

private IAPIConnector _apiConnector;
public IAPIConnector APIConnector
{
get => _apiConnector ?? new APIConnector(new CachedHttpClient());
private set => _apiConnector = value;
}

private IParseService<ContextData> _contextParser;
public IParseService<ContextData> ContextParser
{
get => _contextParser ?? new ContextParseService(Logger);
private set => _contextParser = value;
}

private IParseService<SynonymsData> _synonymsParser;
public IParseService<SynonymsData> SynonymsParser
{
get => _synonymsParser ?? new SynonymsParseService(Logger);
private set => _synonymsParser = value;
}

private IParseService<ConjugationData> _conjugationParser;
public IParseService<ConjugationData> ConjugationParser
{
get => _conjugationParser ?? new ConjugationParseService(Logger);
private set => _conjugationParser = value;
}

// Extra
public ILogger Logger { get; private set; }

public ReversoClientConfig() { }

public ReversoClientConfig(
IHttpClient httpClient,
IAPIConnector apiConnector,
IParseService<ContextData> contextParser,
IParseService<SynonymsData> synonymsParser,
IParseService<ConjugationData> conjugationParser,
ILogger logger)
{
HttpClient = httpClient;
APIConnector = apiConnector;
ContextParser = contextParser;
SynonymsParser = synonymsParser;
ConjugationParser = conjugationParser;
Logger = logger;
}

public ReversoClientConfig CreateDefault()
{
var httpClient = new CachedHttpClient();

return new ReversoClientConfig(
httpClient,
new APIConnector(httpClient),
new ContextParseService(null),
new SynonymsParseService(null),
new ConjugationParseService(null),
null);
}

public ReversoClientConfig WithHttpClient(IHttpClient httpClient)
{
if(httpClient is null) throw new ArgumentNullException(nameof(httpClient));

HttpClient = httpClient;
return this;
}

public ReversoClientConfig WithApiConnector(IAPIConnector apiConnector)
{
if (apiConnector is null) throw new ArgumentNullException(nameof(apiConnector));

APIConnector = apiConnector;
return this;
}

public ReversoClientConfig WithContextParseService(IParseService<ContextData> contextParser)
{
if (contextParser is null) throw new ArgumentNullException(nameof(contextParser));

ContextParser = contextParser;
return this;
}

public ReversoClientConfig WithSynonymsParseService(IParseService<SynonymsData> synonymsParser)
{
if (synonymsParser is null) throw new ArgumentNullException(nameof(synonymsParser));

SynonymsParser = synonymsParser;
return this;
}

public ReversoClientConfig WithConjugationParseService(IParseService<ConjugationData> conjugationParser)
{
if (conjugationParser is null) throw new ArgumentNullException(nameof(conjugationParser));

ConjugationParser = conjugationParser;
return this;
}

public ReversoClientConfig WithLogger(ILogger logger)
{
Logger = logger;
return this;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace ReversoAPI.Web.Shared.Domain.Interfaces.Services
{
public interface IParser<TResult>
public interface IParseService<TResult>
{
TResult Invoke(Stream html);
}
Expand Down
Loading

0 comments on commit 453d2a7

Please sign in to comment.