Skip to content
This repository was archived by the owner on Oct 14, 2025. It is now read-only.

Commit 5f1fded

Browse files
committed
refactor(Validation) validation is replaced from client to validation class
Specify description (optional) Added: - Particular validators for response and requests Covered with tests: - Conjugation Portuguese Renamed: - Resource files
1 parent 437df78 commit 5f1fded

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+4773
-335
lines changed

ReversoAPI.Web.Examples/Program.cs

Lines changed: 83 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,47 +13,104 @@ static async Task Main(string[] args)
1313
var source = Language.English;
1414
var target = Language.Russian;
1515

16-
var path = $"C:\\Users\\Максим\\Desktop\\{source}.mp3";
16+
await PrintTranslationsAsync(text, source, target);
1717

18-
await DownloadSpeakingAsync(text, source, path);
19-
await PrintConjugationAsync(text, source);
20-
await PrintTranslationAsync(text, source, target);
21-
await PrintContextAsync(text, source, target);
18+
await PrintContextsAsync(text, source, target);
19+
20+
await PrintSynonimsAsync(text, source);
21+
22+
await PrintConjugationsAsync(text, source);
23+
24+
await PrintSpellingsAsync(text, source);
25+
26+
await DownloadPronunciationAsync(text, source, Directory.GetCurrentDirectory());
27+
}
28+
29+
private static async Task PrintSpellingsAsync(string text, Language language)
30+
{
31+
var spellingsData = await _reversoClient.Spelling.GetAsync(text, language);
32+
33+
if (spellingsData is null)
34+
{
35+
Console.WriteLine("Failed to get spellings");
36+
return;
37+
}
38+
39+
Console.WriteLine($"Input: {spellingsData.Text} | Language: {spellingsData.Language}");
40+
Console.WriteLine();
41+
42+
foreach (var selection in spellingsData.Correction.Select((s, i) => new { Index = i, Spelling = s }))
43+
{
44+
Console.WriteLine($"Number {selection.Index}");
45+
46+
Console.WriteLine("Before:");
47+
Console.WriteLine(selection.Spelling.MistakeText);
48+
Console.WriteLine();
49+
Console.WriteLine("After:");
50+
Console.WriteLine(selection.Spelling.CorrectedText);
51+
Console.WriteLine();
52+
Console.WriteLine("Short description: " + selection.Spelling.ShortDescription);
53+
Console.WriteLine("Long description: " + selection.Spelling.LongDescription);
54+
Console.WriteLine("Other:");
55+
Console.WriteLine($"Start index: {selection.Spelling.StartIndex} End index: {selection.Spelling.EndIndex}");
56+
Console.WriteLine($"Suggestions: {string.Join("; ", selection.Spelling.Suggestions)}");
57+
}
58+
}
59+
60+
private static async Task PrintSynonimsAsync(string text, Language language)
61+
{
62+
var synonimsData = await _reversoClient.Synonyms.GetAsync(text, language);
63+
64+
if (synonimsData is null)
65+
{
66+
Console.WriteLine("Failed to get synonims");
67+
return;
68+
}
69+
70+
Console.WriteLine($"Input: {synonimsData.Text} | Language: {synonimsData.Language}");
71+
Console.WriteLine();
72+
73+
foreach (var selection in synonimsData.Synonyms.Select((s, i) => new { Index = i, Synonim = s }))
74+
{
75+
Console.WriteLine($"{selection.Index}. {selection.Synonim.Value} ({selection.Synonim.PartOfSpeech})");
76+
}
77+
78+
Console.WriteLine();
2279
}
2380

24-
private static async Task DownloadSpeakingAsync(string text, Language language, string path)
81+
private static async Task DownloadPronunciationAsync(string text, Language language, string path)
2582
{
26-
var pronunciation = await _reversoClient.Pronunciation.GetAsync(text, language);
83+
var pronunciationStream = await _reversoClient.Pronunciation.GetAsync(text, language);
2784

28-
if (pronunciation is null)
85+
if (pronunciationStream is null)
2986
{
3087
Console.WriteLine("Failed to get pronunciation");
3188
return;
3289
}
3390

3491
using (var fileStream = File.Create(path))
3592
{
36-
pronunciation!.CopyTo(fileStream);
93+
pronunciationStream!.CopyTo(fileStream);
3794
}
3895
}
3996

40-
private static async Task PrintConjugationAsync(string text, Language language)
97+
private static async Task PrintConjugationsAsync(string text, Language language)
4198
{
42-
var conjugation = await _reversoClient.Conjugation.GetAsync(text, language);
99+
var conjugationsData = await _reversoClient.Conjugation.GetAsync(text, language);
43100

44-
if (conjugation is null)
101+
if (conjugationsData is null)
45102
{
46-
Console.WriteLine("Failed to get conjugation");
103+
Console.WriteLine("Failed to get conjugations");
47104
return;
48105
}
49106

50-
Console.WriteLine($"Input: {conjugation.Text} | Language: {conjugation.Language}");
107+
Console.WriteLine($"Input: {conjugationsData.Text} | Language: {conjugationsData.Language}");
51108
Console.WriteLine();
52109

53-
foreach(var group in conjugation.Conjugations.Keys)
110+
foreach(var group in conjugationsData.Conjugations.Keys)
54111
{
55112
Console.WriteLine($"Group: {group}");
56-
if (!conjugation.Conjugations.TryGetValue(group, out var conjugations))
113+
if (!conjugationsData.Conjugations.TryGetValue(group, out var conjugations))
57114
continue;
58115

59116
foreach (var selection in conjugations.Select((c, i) => new { Index = i, Conjugation = c }))
@@ -65,20 +122,20 @@ private static async Task PrintConjugationAsync(string text, Language language)
65122
}
66123
}
67124

68-
private static async Task PrintTranslationAsync(string text, Language source, Language target)
125+
private static async Task PrintTranslationsAsync(string text, Language source, Language target)
69126
{
70-
var translation = await _reversoClient.Translation.GetAsync(text, source, target);
127+
var translationsData = await _reversoClient.Translation.GetAsync(text, source, target);
71128

72-
if (translation is null)
129+
if (translationsData is null)
73130
{
74131
Console.WriteLine("Failed to get translation");
75132
return;
76133
}
77134

78-
Console.WriteLine($"Input: {translation.Text} | Source language: {translation.Source} | Target language: {translation.Target}");
135+
Console.WriteLine($"Input: {translationsData.Text} | Source language: {translationsData.Source} | Target language: {translationsData.Target}");
79136
Console.WriteLine();
80137

81-
foreach (var selection in translation.Translations.Select((t, i) => new { Index = i, Translation = t }))
138+
foreach (var selection in translationsData.Translations.Select((t, i) => new { Index = i, Translation = t }))
82139
{
83140
Console.WriteLine($"Number {selection.Index}");
84141

@@ -101,20 +158,20 @@ private static async Task PrintTranslationAsync(string text, Language source, La
101158
}
102159
}
103160

104-
private static async Task PrintContextAsync(string text, Language source, Language target)
161+
private static async Task PrintContextsAsync(string text, Language source, Language target)
105162
{
106-
var context = await _reversoClient.Context.GetAsync(text, source, target);
163+
var contextsData = await _reversoClient.Context.GetAsync(text, source, target);
107164

108-
if(context is null)
165+
if(contextsData is null)
109166
{
110167
Console.WriteLine("Failed to get context");
111168
return;
112169
}
113170

114-
Console.WriteLine($"Input: {context.Text} | Source language: {context.Source} | Target language: {context.Target}");
171+
Console.WriteLine($"Input: {contextsData.Text} | Source language: {contextsData.Source} | Target language: {contextsData.Target}");
115172
Console.WriteLine();
116173

117-
foreach(var selection in context.Examples.Select((e, i) => new { Index = i, Example = e }))
174+
foreach(var selection in contextsData.Examples.Select((e, i) => new { Index = i, Example = e }))
118175
{
119176
Console.WriteLine($"Number {selection.Index}");
120177

ReversoAPI.Web.Tests/Clients/SpellingClientTests.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,16 @@ public async Task GetAsync_Success(string text, Language language, Locale locale
4848
expectedResult.Correction.Should().BeEquivalentTo(result.Correction);
4949
}
5050

51+
#region TestData
52+
5153
public static IEnumerable<object[]> SpellingDataForTest()
5254
{
5355
yield return new object[]
5456
{
5557
"maney",
5658
Language.English,
57-
Locale.None,
58-
new MemoryStream(Resource.spellingTestMoneyEng),
59+
Locale.None,
60+
new MemoryStream(Resource.Spelling_API_Test_English),
5961
new SpellingData
6062
{
6163
Text = "Maney",
@@ -74,5 +76,7 @@ public static IEnumerable<object[]> SpellingDataForTest()
7476
}
7577
};
7678
}
79+
80+
#endregion
7781
}
7882
}

ReversoAPI.Web.Tests/Clients/TranslationClientTests.cs

Lines changed: 83 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,30 @@ public async Task GetFromOneWordAsync_Success(string text, Language source, Lang
4343
expectedResult.Should().BeEquivalentTo(result);
4444
}
4545

46+
[Fact]
47+
public async Task GetFromOneWordAsync_Length_Exceeded()
48+
{
49+
// Arrange
50+
var text = new string('x', 2001);
51+
52+
// Act
53+
var act = async () => await _client.GetAsync(text, It.IsAny<Language>(), It.IsAny<Language>());
54+
55+
// Assert
56+
var exception = await Assert.ThrowsAsync<ArgumentException>(act);
57+
Assert.Equal("The text provided exceeds the limit of 2000 symbols. (Parameter 'text')", exception.Message);
58+
}
59+
60+
#region TestData
61+
4662
public static IEnumerable<object[]> SpellingDataForTest()
4763
{
4864
yield return new object[]
4965
{
5066
"Consience",
5167
Language.English,
5268
Language.Russian,
53-
new MemoryStream(Resource.translationTestConsienceEndRus),
69+
new MemoryStream(Resource.Translation_API_Test_English_Russian),
5470
new TranslationData
5571
{
5672
Text = "Consience",
@@ -65,7 +81,7 @@ public static IEnumerable<object[]> SpellingDataForTest()
6581
"peace",
6682
Language.English,
6783
Language.Russian,
68-
new MemoryStream(Resource.translationTestPeaceEngRus),
84+
new MemoryStream(Resource.Translation_API_Test_English_Russian_2_),
6985
new TranslationData
7086
{
7187
Text = "peace",
@@ -86,6 +102,71 @@ public static IEnumerable<object[]> SpellingDataForTest()
86102
}
87103
}
88104
};
105+
106+
yield return new object[]
107+
{
108+
"hello",
109+
Language.English,
110+
Language.Hebrew,
111+
new MemoryStream(Resource.Translation_API_Test_English_Hebrew),
112+
new TranslationData
113+
{
114+
Text = "hello",
115+
Source = Language.English,
116+
Target = Language.Hebrew,
117+
Translations = new[]
118+
{
119+
new Translation("hello", "שלום", Language.English, Language.Hebrew, "shalom", PartOfSpeech.Adverb, 17186, false, false),
120+
new Translation("hello", "הלו", Language.English, Language.Hebrew, "halo", PartOfSpeech.Unknown, 3968, false, false),
121+
new Translation("hello", "היי", Language.English, Language.Hebrew, null, PartOfSpeech.Unknown, 754, false, false),
122+
new Translation("hello", \"ש", Language.English, Language.Hebrew, "da\"sh", PartOfSpeech.Unknown, 207, false, false),
123+
new Translation("hello", "בוקר טוב", Language.English, Language.Hebrew, "buqar tov", PartOfSpeech.Noun, 124, false, false),
124+
new Translation("hello", "הי", Language.English, Language.Hebrew, "hei", PartOfSpeech.Unknown, 89, false, false),
125+
new Translation("hello", "לשלום", Language.English, Language.Hebrew, null, PartOfSpeech.Adverb, 67, false, false),
126+
new Translation("hello", "ערב טוב", Language.English, Language.Hebrew, "'erev tov", PartOfSpeech.Noun, 36, false, false),
127+
new Translation("hello", "אהלן", Language.English, Language.Hebrew, "ahelann", PartOfSpeech.Unknown, 35, false, false),
128+
new Translation("hello", "מה שלומך", Language.English, Language.Hebrew, "mah shelomekha", PartOfSpeech.Unknown, 19, false, false),
129+
}
130+
}
131+
};
132+
133+
yield return new object[]
134+
{
135+
"hello world!",
136+
Language.English,
137+
Language.Korean,
138+
new MemoryStream(Resource.Translation_API_Test_English_Korean),
139+
new TranslationData
140+
{
141+
Text = "hello world!",
142+
Source = Language.English,
143+
Target = Language.Korean,
144+
Translations = new[]
145+
{
146+
new Translation("hello world!", "헬로우 월드!", Language.English, Language.Korean),
147+
}
148+
}
149+
};
150+
151+
yield return new object[]
152+
{
153+
"مرحبا العالم",
154+
Language.Arabic,
155+
Language.Hindi,
156+
new MemoryStream(Resource.Translation_API_Test_Arabic_Hindi),
157+
new TranslationData
158+
{
159+
Text = "مرحبا العالم",
160+
Source = Language.Arabic,
161+
Target = Language.Hindi,
162+
Translations = new[]
163+
{
164+
new Translation("مرحبا العالم", "नमस्ते दुनिया", Language.Arabic, Language.Hindi),
165+
}
166+
}
167+
};
89168
}
169+
170+
#endregion
90171
}
91172
}

0 commit comments

Comments
 (0)