Conversation
|
Important Review skippedBot user detected. To trigger a single review, invoke the You can disable this status message by setting the 📝 WalkthroughWalkthroughThis pull request introduces Spanish (es) localization support by adding three new resource bundle classes for dosage terminology and updating 17+ test classes with Spanish locale test cases to validate translations. Changes
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Possibly related PRs
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
Comment |
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
There was a problem hiding this comment.
Actionable comments posted: 12
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (6)
common/src/test/java/io/github/jy95/fds/translators/AbstractTimeOfDayTest.java (1)
50-60: Missing Spanish locale branch ingetExpectedSingleTimeText.Spanish was added to
getExpectedMultipleTimesTextbut not to this method. When tests run with the Spanish locale, this will fall through to the Dutch default ("om 15:00"), causing incorrect test assertions.Add the Spanish branch for consistency:
Proposed fix
private static String getExpectedSingleTimeText(Locale locale) { if (locale.equals(Locale.ENGLISH)) { return "at 15:00"; + } else if (locale.equals(Locale.forLanguageTag("es"))) { + return "a las 15:00"; // Verify correct Spanish translation } else if (locale.equals(Locale.FRENCH)) { return "à 15:00"; } else if (locale.equals(Locale.GERMAN)) { return "um 15:00"; } else { return "om 15:00"; } }common/src/test/java/io/github/jy95/fds/translators/AbstractOffsetWhenTest.java (2)
37-47: Missing Spanish locale branch ingetExpectedText1.Spanish was added to
getExpectedText3but not to this method. WhentestWithWhenOnlyruns with Spanish locale, it will fall through to the Dutch default, causing incorrect test assertions.Proposed fix
private String getExpectedText1(Locale locale) { if (locale.equals(Locale.ENGLISH)) { return "during the morning and during the night"; + } else if (locale.equals(Locale.forLanguageTag("es"))) { + return "durante la mañana y durante la noche"; // Verify translation } else if (locale.equals(Locale.FRENCH)) { return "durant le matin et durant la nuit"; } else if (locale.equals(Locale.GERMAN)) { return "während des Vormittags und über Nacht"; } else { return "tijdens de ochtend en tijdens de nacht"; } }
61-71: Missing Spanish locale branch ingetExpectedText2.Same issue: Spanish locale will fall through to Dutch default for
testWithWhenAndCount.Proposed fix
private String getExpectedText2(Locale locale) { if (locale.equals(Locale.ENGLISH)) { return "1 hour and 30 minutes during the morning and during the night"; + } else if (locale.equals(Locale.forLanguageTag("es"))) { + return "1 hora y 30 minutos durante la mañana y durante la noche"; // Verify translation } else if (locale.equals(Locale.FRENCH)) { return "1 heure et 30 minutes durant le matin et durant la nuit"; } else if (locale.equals(Locale.GERMAN)) { return "1 Stunde und 30 Minuten während des Vormittags und über Nacht"; } else { return "1 uur en 30 minuten tijdens de ochtend en tijdens de nacht"; } }common/src/test/java/io/github/jy95/fds/translators/AbstractBoundsRangeTest.java (1)
99-161: Missing Spanish locale branches ingetExpectedText1throughgetExpectedText5.Spanish was only added to
getExpectedText6, but five other locale-dependent methods lack Spanish branches. TeststestBothLowAndHighWithoutUnit,testBothLowAndHighWithUnit,testOnlyHighWithoutUnit,testOnlyHighWithUnit, andtestOnlyLowWithoutUnitwill produce incorrect assertions for Spanish locale.Proposed fix - add Spanish branches to all methods
private static String getExpectedText1(Locale locale) { if (locale.equals(Locale.ENGLISH)) { return "for 1 to 3"; + } else if (locale.equals(Locale.forLanguageTag("es"))) { + return "por 1 a 3"; // Verify translation } else if (locale.equals(Locale.FRENCH)) { return "pour 1 à 3";private String getExpectedText2(Locale locale) { if (locale.equals(Locale.ENGLISH)) { return "for 1 to 3 days"; + } else if (locale.equals(Locale.forLanguageTag("es"))) { + return "por 1 a 3 días"; // Verify translation } else if (locale.equals(Locale.FRENCH)) { return "pour 1 à 3 jours";private String getExpectedText3(Locale locale) { if (locale.equals(Locale.ENGLISH)) { return "for up to 3"; + } else if (locale.equals(Locale.forLanguageTag("es"))) { + return "por hasta 3"; // Verify translation } else if (locale.equals(Locale.FRENCH)) { return "pour 3 maximum";private String getExpectedText4(Locale locale) { if (locale.equals(Locale.ENGLISH)) { return "for up to 3 days"; + } else if (locale.equals(Locale.forLanguageTag("es"))) { + return "por hasta 3 días"; // Verify translation } else if (locale.equals(Locale.FRENCH)) { return "pour 3 jours maximum";private String getExpectedText5(Locale locale) { if (locale.equals(Locale.ENGLISH)) { return "for at least 3"; + } else if (locale.equals(Locale.forLanguageTag("es"))) { + return "por lo menos 3"; // Verify translation } else if (locale.equals(Locale.FRENCH)) { return "pour au moins 3";common/src/test/java/io/github/jy95/fds/translators/AbstractFrequencyFrequencyMaxPeriodPeriodMaxTest.java (1)
73-95: Missing Spanish locale branches ingetExpectedText1andgetExpectedText2.Spanish was added to
getExpectedText3but not to the other two methods.testWithFrequencyOnlyandtestWithPeriodOnlywill produce incorrect assertions for Spanish locale.Proposed fix
private String getExpectedText1(Locale locale) { if (locale.equals(Locale.ENGLISH)) { return "3 times"; + } else if (locale.equals(Locale.forLanguageTag("es"))) { + return "3 veces"; // Verify translation } else if (locale.equals(Locale.FRENCH)) { return "3 fois"; } else if (locale.equals(Locale.GERMAN)) { return "3 Mal"; } else { return "3 keer"; } } private String getExpectedText2(Locale locale) { if (locale.equals(Locale.ENGLISH)) { return "every 2 days"; + } else if (locale.equals(Locale.forLanguageTag("es"))) { + return "cada 2 días"; // Verify translation } else if (locale.equals(Locale.FRENCH)) { return "chaque 2 jours"; } else if (locale.equals(Locale.GERMAN)) { return "alle 2 Tage"; } else { return "per 2 dagen"; } }common/src/test/java/io/github/jy95/fds/translators/AbstractDayOfWeekTest.java (1)
50-60: Missing Spanish locale branch ingetExpectedSingleDayText.Spanish was added to
getExpectedMultipleDaysTextbut not to this method. WhentestSingleDayOfWeekruns with Spanish locale, it will fall through to the Dutch default ("op vrijdag"), causing incorrect test assertions.Proposed fix
private static String getExpectedSingleDayText(Locale locale) { if (locale.equals(Locale.ENGLISH)) { return "on Friday"; + } else if (locale.equals(Locale.forLanguageTag("es"))) { + return "el viernes"; // Verify translation } else if (locale.equals(Locale.FRENCH)) { return "le vendredi"; } else if (locale.equals(Locale.GERMAN)) { return "am Freitag"; } else { return "op vrijdag"; } }
🧹 Nitpick comments (1)
common/src/test/java/io/github/jy95/fds/translators/AbstractDoseRangeTest.java (1)
40-42: LGTM! Spanish locale support added correctly.The implementation properly adds Spanish locale support with the expected range format "1 a 3". The conditional structure, locale comparison using
Locale.forLanguageTag("es"), and placement are all appropriate.Since the PR description mentions translations were auto-generated using Argos Translate, you may optionally want to verify the translation "1 a 3" with a native Spanish speaker to ensure it's the most natural phrasing in medical/pharmaceutical contexts, though "a" (to) is grammatically correct for ranges.
📜 Review details
Configuration used: defaults
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (23)
common/src/main/java/io/github/jy95/fds/common/l10n/DosageFields_es.javacommon/src/main/java/io/github/jy95/fds/common/l10n/EventTiming_es.javacommon/src/main/java/io/github/jy95/fds/common/l10n/QuantityComparator_es.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractAdditionalInstructionTest.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractAsNeededTest.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractBoundsDurationTest.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractBoundsPeriodTest.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractBoundsRangeTest.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractCountCountMaxTest.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractDayOfWeekTest.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractDoseRangeTest.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractDurationDurationMaxTest.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractFrequencyFrequencyMaxPeriodPeriodMaxTest.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractFrequencyFrequencyMaxTest.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractMaxDosePerAdministrationTest.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractMaxDosePerLifetimeTest.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractMaxDosePerPeriodTest.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractOffsetWhenTest.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractPeriodPeriodMaxTest.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractRateQuantityTest.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractRateRangeTest.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractRateRatioTest.javacommon/src/test/java/io/github/jy95/fds/translators/AbstractTimeOfDayTest.java
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Codacy Static Code Analysis
🔇 Additional comments (17)
common/src/test/java/io/github/jy95/fds/translators/AbstractAdditionalInstructionTest.java (1)
53-55: LGTM!The Spanish translation correctly uses "e" instead of "y" for the conjunction, which is grammatically correct in Spanish when the following word starts with "i" or "hi" (in this case, "instrucción"). The code structure follows the existing pattern consistently.
common/src/test/java/io/github/jy95/fds/translators/AbstractBoundsPeriodTest.java (1)
101-103: LGTM! Spanish date formatting correctly added.The Spanish locale branch correctly handles the start-date-only scenario with appropriate date formatting ("del 23 de mayo de 2011").
common/src/test/java/io/github/jy95/fds/translators/AbstractDurationDurationMaxTest.java (1)
88-90: LGTM! Spanish duration range correctly implemented.The Spanish translation properly handles both duration and duration max values with appropriate formatting.
common/src/test/java/io/github/jy95/fds/translators/AbstractBoundsDurationTest.java (1)
41-43: LGTM! Spanish bounds duration correctly added.The Spanish locale handling is correctly implemented with appropriate translation.
common/src/test/java/io/github/jy95/fds/translators/AbstractRateQuantityTest.java (1)
40-42: LGTM! Spanish rate quantity correctly implemented.The Spanish locale branch follows the established pattern and provides appropriate translation for rate quantity text.
common/src/test/java/io/github/jy95/fds/translators/AbstractTimeOfDayTest.java (1)
66-68: Verify Spanish time format consistency.The Spanish expectation uses
"15.00 horas"(period separator with "horas" suffix) while other locales use"15:00"(colon separator, no suffix). Ensure this matches the actual output from the Spanish resource bundle and is intentional.common/src/test/java/io/github/jy95/fds/translators/AbstractMaxDosePerPeriodTest.java (1)
40-42: LGTM!Spanish locale branch correctly added with appropriate translation for max dose per period.
common/src/test/java/io/github/jy95/fds/translators/AbstractOffsetWhenTest.java (1)
88-90: Spanish branch added correctly here.common/src/test/java/io/github/jy95/fds/translators/AbstractBoundsRangeTest.java (1)
167-169: Spanish branch correctly added togetExpectedText6.common/src/test/java/io/github/jy95/fds/translators/AbstractFrequencyFrequencyMaxPeriodPeriodMaxTest.java (1)
100-102: Spanish branch correctly added togetExpectedText3.common/src/test/java/io/github/jy95/fds/translators/AbstractMaxDosePerLifetimeTest.java (1)
40-42: LGTM!Spanish locale branch correctly added with appropriate translation for max dose per lifetime.
common/src/test/java/io/github/jy95/fds/translators/AbstractDayOfWeekTest.java (1)
66-68: Spanish branch correctly added togetExpectedMultipleDaysText.common/src/test/java/io/github/jy95/fds/translators/AbstractAsNeededTest.java (1)
66-68: LGTM! Spanish locale branch added correctly.The Spanish locale handling follows the existing pattern and is positioned appropriately in the conditional chain. Note that
getExpectedText1(lines 50-60) does not include a Spanish branch, which means Spanish locale tests for the boolean form will fall back to the default (Dutch). This partial coverage appears intentional.Since the PR notes indicate translations were generated using Argos Translate, please verify the translation quality with a native Spanish speaker to ensure "como se requiere para el dolor de cabeza" accurately conveys "as required for head pain" in a medical/pharmaceutical context.
common/src/test/java/io/github/jy95/fds/translators/AbstractRateRatioTest.java (1)
147-149: LGTM! Spanish support added for the common rate ratio case.The implementation correctly adds Spanish locale handling for the common case scenario. Note that methods
getExpectedText1throughgetExpectedText4(lines 48-130) do not include Spanish branches, so those rate ratio test scenarios will fall back to the default locale.Please verify that "a una tasa de 10 mg cada 2 ml" accurately translates the medical/pharmaceutical meaning of "at a rate of 10 mg every 2 ml" with a native Spanish speaker, as the PR indicates these translations were machine-generated.
common/src/test/java/io/github/jy95/fds/translators/AbstractCountCountMaxTest.java (1)
64-66: LGTM! Spanish locale added for count range scenario.The Spanish branch is correctly implemented for the count range case. The single count scenario in
getExpectedText1(lines 49-59) does not have Spanish support and will fall back to the default locale.Verify with a native Spanish speaker that "tomar 2 a 3 veces" appropriately conveys the pharmaceutical instruction "take 2 to 3 times" in Spanish-speaking regions, as translations were generated automatically.
common/src/test/java/io/github/jy95/fds/translators/AbstractPeriodPeriodMaxTest.java (1)
64-66: LGTM! Spanish locale support added for period range.The Spanish locale handling is correctly implemented for the period range scenario. Note that
getExpectedText1(lines 37-47) does not include Spanish support, so the single period test will fall back to the default locale.Please verify that "cada 2 a 3 días" accurately represents the medical instruction "every 2 to 3 days" in Spanish with a native speaker, as the PR indicates machine-generated translations.
common/src/test/java/io/github/jy95/fds/translators/AbstractRateRangeTest.java (1)
40-42: LGTM! Spanish locale support added correctly.The Spanish locale branch is properly implemented and follows the established pattern. This file has complete Spanish coverage as it only has one expected text method.
Verify with a native Spanish speaker that "a una tasa de 1 a 3" accurately conveys the pharmaceutical meaning of "at a rate of 1 to 3" in Spanish, as translations were automatically generated per the PR description.
common/src/main/java/io/github/jy95/fds/common/l10n/DosageFields_es.java
Show resolved
Hide resolved
common/src/main/java/io/github/jy95/fds/common/l10n/DosageFields_es.java
Outdated
Show resolved
Hide resolved
common/src/main/java/io/github/jy95/fds/common/l10n/DosageFields_es.java
Outdated
Show resolved
Hide resolved
| { "fields.count", "{0, plural, one{Toma. {0} tiempo} other{Toma. {0} veces}}" }, | ||
| { "fields.countMax", | ||
| "{maxCount, plural, one{Toma. {minCount} a {maxCount} tiempo} other{Toma. {minCount} a {maxCount} veces}}" }, |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
find . -type f -name "*DosageFields*" | head -20Repository: jy95/fds
Length of output: 423
🏁 Script executed:
cat -n common/src/main/java/io/github/jy95/fds/common/l10n/DosageFields_es.java | head -70Repository: jy95/fds
Length of output: 3708
🏁 Script executed:
# Check if there's an English version for comparison
find . -type f -name "*DosageFields*" -exec basename {} \;Repository: jy95/fds
Length of output: 153
🏁 Script executed:
cat -n common/src/main/java/io/github/jy95/fds/common/l10n/DosageFields.java | grep -A 5 "fields.count"Repository: jy95/fds
Length of output: 477
🏁 Script executed:
# Check French version
cat -n common/src/main/java/io/github/jy95/fds/common/l10n/DosageFields_fr.java | grep -A 5 "fields.count"Repository: jy95/fds
Length of output: 486
🏁 Script executed:
# Check German version
cat -n common/src/main/java/io/github/jy95/fds/common/l10n/DosageFields_de.java | grep -A 5 "fields.count"Repository: jy95/fds
Length of output: 489
🏁 Script executed:
# Check Dutch version
cat -n common/src/main/java/io/github/jy95/fds/common/l10n/DosageFields_nl.java | grep -A 5 "fields.count"Repository: jy95/fds
Length of output: 481
🏁 Script executed:
# Check frequency fields in all languages
echo "=== ENGLISH frequency ===" && grep -A 1 "fields.frequency\"" common/src/main/java/io/github/jy95/fds/common/l10n/DosageFields.java
echo "=== FRENCH frequency ===" && grep -A 1 "fields.frequency\"" common/src/main/java/io/github/jy95/fds/common/l10n/DosageFields_fr.java
echo "=== GERMAN frequency ===" && grep -A 1 "fields.frequency\"" common/src/main/java/io/github/jy95/fds/common/l10n/DosageFields_de.java
echo "=== SPANISH frequency ===" && grep -A 1 "fields.frequency\"" common/src/main/java/io/github/jy95/fds/common/l10n/DosageFields_es.javaRepository: jy95/fds
Length of output: 679
🏁 Script executed:
# Let me check if there are any comments or documentation about these translations
grep -r "Toma\|tiempo\|veces" common/src/main/java/io/github/jy95/fds/common/l10n/DosageFields_es.java | head -20Repository: jy95/fds
Length of output: 587
Fix Spanish translation terminology in count fields.
The translations have two issues:
-
Remove the period after "Toma"—it's inconsistent with other language versions and with the pattern used in the parallel
fields.frequencyfield. -
The singular form uses "tiempo" (time period) but plural uses "veces" (occurrences). In medical dosage context, use "vez" (instance) paired with "veces" for consistency:
one{Toma {0} vez} other{Toma {0} veces}. This aligns with how other languages use single consistent terms ("fois" in French, "Mal" in German).
Note: The frequency fields (fields.frequency, fields.frequencyMax, fields.frequencyAndFrequencyMax) have the same "tiempo"/"veces" inconsistency and should be corrected as well.
🤖 Prompt for AI Agents
In common/src/main/java/io/github/jy95/fds/common/l10n/DosageFields_es.java
around lines 56-58, the Spanish translations use an extra period after "Toma"
and inconsistent singular/plural terms ("tiempo" vs "veces"); remove the period
after "Toma" and change the singular term from "tiempo" to "vez" so the plural
stays "veces" (e.g., one{Toma {0} vez} other{Toma {0} veces}), and apply the
same fixes to the parallel frequency fields (fields.frequency,
fields.frequencyMax, fields.frequencyAndFrequencyMax) to ensure consistent
terminology and punctuation across these entries.
common/src/main/java/io/github/jy95/fds/common/l10n/DosageFields_es.java
Outdated
Show resolved
Hide resolved
common/src/main/java/io/github/jy95/fds/common/l10n/EventTiming_es.java
Outdated
Show resolved
Hide resolved
common/src/main/java/io/github/jy95/fds/common/l10n/QuantityComparator_es.java
Show resolved
Hide resolved
common/src/main/java/io/github/jy95/fds/common/l10n/QuantityComparator_es.java
Outdated
Show resolved
Hide resolved
| } | ||
| else if (locale.equals(Locale.forLanguageTag("es"))) { | ||
| return "3-5 veces"; |
There was a problem hiding this comment.
Inconsistent Spanish locale coverage across test helper methods.
The Spanish locale branch is added only to getExpectedText3, but the other two helper methods (getExpectedText1 at lines 38-48 and getExpectedText2 at lines 62-72) lack Spanish branches. This means testWithFrequencyOnly and testWithFrequencyMaxOnly will fall through to the default Dutch case when tested with Spanish locale, resulting in incomplete test coverage.
🔎 Proposed fix to add Spanish branches to all helper methods
For getExpectedText1:
private String getExpectedText1(Locale locale) {
if (locale.equals(Locale.ENGLISH)) {
return "3 times";
+ } else if (locale.equals(Locale.forLanguageTag("es"))) {
+ return "3 veces";
} else if (locale.equals(Locale.FRENCH)) {
return "3 fois";
} else if (locale.equals(Locale.GERMAN)) {
return "3 Mal";
} else {
return "3 keer";
}
}For getExpectedText2:
private String getExpectedText2(Locale locale) {
if (locale.equals(Locale.ENGLISH)) {
return "up to 3 times";
+ } else if (locale.equals(Locale.forLanguageTag("es"))) {
+ return "hasta 3 veces";
} else if (locale.equals(Locale.FRENCH)) {
return "jusqu'à 3 fois";
} else if (locale.equals(Locale.GERMAN)) {
return "bis zu 3 Mal";
} else {
return "tot 3 keer";
}
}Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In
common/src/test/java/io/github/jy95/fds/translators/AbstractFrequencyFrequencyMaxTest.java
around lines 38-48, 62-72 and 89-91, the Spanish locale branch exists only in
getExpectedText3 (lines ~89-91) but is missing from getExpectedText1 and
getExpectedText2; add else-if branches checking
locale.equals(Locale.forLanguageTag("es")) to both getExpectedText1 and
getExpectedText2 and return the correct Spanish strings (matching the pattern
used in getExpectedText3) so Spanish tests no longer fall through to the
default/dutch case.
common/src/test/java/io/github/jy95/fds/translators/AbstractMaxDosePerAdministrationTest.java
Show resolved
Hide resolved
…ds_es.java Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
…ds_es.java Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Coverage summary from CodacySee diff coverage on Codacy
Coverage variation details
Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch: Diff coverage details
Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified: See your quality gate settings Change summary preferences |
…g_es.java Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
…g_es.java Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
…ds_es.java Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
🌍 New Language Support:
esThis automated PR adds FHIR translation support for the
eslocale.Generated using Argos Translate with recursive ICU parsing to ensure structural integrity.
🛠️ Step 1: Registry & Integration
To activate this new locale, you need to manually register it in the following files:
esto theavailableLanguageslist.Localeto the supported list.🔍 Step 2: Quality Review (Compare with Reference)
Verify translations in
common/src/main/java/io/github/jy95/fds/common/l10n/:DosageFields_es.javaEventTiming_es.javaQuantityComparator_es.java🧪 Step 3: Technical Validation
./mvnw clean install -DskipTeststo check for compilation issues../mvnw testto ensureListResourceBundleloadsescorrectly.one,other) and select blocks are correctly translated for this language.Note: This PR is in draft mode. Please review the translation quality before merging.
Summary by CodeRabbit
New Features
Tests
✏️ Tip: You can customize this high-level summary in your review settings.