-
-
Notifications
You must be signed in to change notification settings - Fork 69
feat: include research experiment data in csv exports #2270
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #2270 +/- ##
============================================
+ Coverage 16.23% 16.72% +0.49%
- Complexity 434 444 +10
============================================
Files 252 252
Lines 7276 7324 +48
Branches 813 815 +2
============================================
+ Hits 1181 1225 +44
- Misses 6031 6044 +13
+ Partials 64 55 -9 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
## Walkthrough
The changes update several CSV export controllers to add "research_experiment" and "experiment_group" columns to CSV outputs for various student analytics events. Column order and headers are adjusted accordingly. Minor code formatting improvements and import cleanups are also made. No changes to public method signatures or control flow are introduced. Additionally, import cleanup and enhanced error handling with Discord notifications were added to analytics import schedulers.
## Changes
| File(s) | Change Summary |
|---------|---------------|
| pom-dependency-tree.txt | Updated project artifact version from `2.6.65-SNAPSHOT` to `2.6.66-SNAPSHOT`. |
| src/main/java/ai/elimu/web/analytics/students/LetterSoundAssessmentEventsCsvExportController.java<br>src/main/java/ai/elimu/web/analytics/students/WordAssessmentEventsCsvExportController.java | Added "research_experiment" and "experiment_group" columns to CSV export; updated record output to include enum ordinals. |
| src/main/java/ai/elimu/web/analytics/students/LetterSoundLearningEventsCsvExportController.java | Added "additional_data", "research_experiment", and "experiment_group" columns to CSV export; adjusted header and record order; removed duplicate "additional_data". |
| src/main/java/ai/elimu/web/analytics/students/NumberLearningEventsCsvExportController.java | Reordered CSV columns; added "research_experiment" and "experiment_group"; removed duplicate "learning_event_type". |
| src/main/java/ai/elimu/web/analytics/students/StoryBookLearningEventsCsvExportController.java<br>src/main/java/ai/elimu/web/analytics/students/VideoLearningEventsCsvExportController.java<br>src/main/java/ai/elimu/web/analytics/students/WordLearningEventsCsvExportController.java | Reordered and expanded CSV columns to include "research_experiment" and "experiment_group"; updated record output accordingly; moved CSV flush outside loop in VideoLearningEventsCsvExportController. |
| src/main/java/ai/elimu/web/analytics/students/StudentListController.java | Removed unused imports; no logic changes. |
| src/main/java/ai/elimu/web/analytics/students/StudentsCsvExportController.java | Code formatting: removed blank lines, compacted builder call; no logic changes. |
| src/main/java/ai/elimu/web/context/EnvironmentContextLoaderListener.java | Removed environment check for setting "discord.webhook.url"; added unconditional setting of "discord.analytics.webhook.url". |
| src/main/java/ai/elimu/rest/v2/applications/ApplicationVersionsRestController.java | Added Discord notifications on success or failure of publishing new application versions. |
| src/main/java/ai/elimu/tasks/analytics/*ImportScheduler.java (all) | Wrapped CSV import processing in try-catch blocks to log errors and send Discord error notifications on exceptions. |
| src/main/java/ai/elimu/util/csv/CsvAnalyticsExtractionHelper.java | Added formatting changes and TODO comment for number assessment events; no functional changes. |
| src/test/java/ai/elimu/util/csv/CsvAnalyticsExtractionHelperTest.java | Reordered test method for video learning events; added TODO comments for planned tests; no logic changes. |
## Sequence Diagram(s)
```mermaid
sequenceDiagram
participant User
participant Controller
participant Event
participant Response
User->>Controller: Request CSV export
Controller->>Event: Fetch event data
Event-->>Controller: Return event list
Controller->>Controller: Build CSV with new columns ("research_experiment", "experiment_group")
Controller->>Response: Write CSV output Assessment against linked issues
Assessment against linked issues: Out-of-scope changes
Possibly related PRs
Suggested reviewers
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (10)
pom-dependency-tree.txt
(1 hunks)src/main/java/ai/elimu/web/analytics/students/LetterSoundAssessmentEventsCsvExportController.java
(1 hunks)src/main/java/ai/elimu/web/analytics/students/LetterSoundLearningEventsCsvExportController.java
(1 hunks)src/main/java/ai/elimu/web/analytics/students/NumberLearningEventsCsvExportController.java
(1 hunks)src/main/java/ai/elimu/web/analytics/students/StoryBookLearningEventsCsvExportController.java
(1 hunks)src/main/java/ai/elimu/web/analytics/students/StudentListController.java
(0 hunks)src/main/java/ai/elimu/web/analytics/students/StudentsCsvExportController.java
(1 hunks)src/main/java/ai/elimu/web/analytics/students/VideoLearningEventsCsvExportController.java
(1 hunks)src/main/java/ai/elimu/web/analytics/students/WordAssessmentEventsCsvExportController.java
(1 hunks)src/main/java/ai/elimu/web/analytics/students/WordLearningEventsCsvExportController.java
(1 hunks)
💤 Files with no reviewable changes (1)
- src/main/java/ai/elimu/web/analytics/students/StudentListController.java
⏰ Context from checks skipped due to timeout of 90000ms (12)
- GitHub Check: test_rest
- GitHub Check: build (macos-latest, 21)
- GitHub Check: build (macos-latest, 17)
- GitHub Check: build (ubuntu-latest, 21)
- GitHub Check: build (windows-latest, 17)
- GitHub Check: build (ubuntu-latest, 17)
- GitHub Check: build (windows-latest, 21)
- GitHub Check: test_rest
- GitHub Check: test_rest
- GitHub Check: test_rest
- GitHub Check: test_rest
- GitHub Check: test_rest
🔇 Additional comments (17)
src/main/java/ai/elimu/web/analytics/students/NumberLearningEventsCsvExportController.java (3)
46-57
: LGTM! Header structure is correctly updated.The CSV header modifications are well-structured:
- Duplicate "learning_event_type" column removed
- New research experiment columns added in logical positions
- Column ordering is consistent and clear
62-73
: Data printing order correctly matches header structure.The
printRecord
call maintains perfect alignment with the CSV header, ensuring data integrity in the exported file.
68-69
: Verify null safety for enum ordinal calls.The data printing order correctly matches the header structure. However, ensure that
getResearchExperiment()
andgetExperimentGroup()
cannot return null values, as calling.ordinal()
on null will throw aNullPointerException
.#!/bin/bash # Description: Check if ResearchExperiment and ExperimentGroup fields can be null # Expected: Find field declarations and annotations to verify nullability # Search for field declarations in NumberLearningEvent entity ast-grep --pattern 'class NumberLearningEvent { $$$ private $_ researchExperiment; $$$ }' # Search for getter method annotations rg -A 3 -B 1 "getResearchExperiment|getExperimentGroup" --type java # Look for nullable annotations or validation constraints rg "@(Nullable|NotNull|Column)" --type java -A 2 -B 2 | rg -A 5 -B 5 "(researchExperiment|experimentGroup)"src/main/java/ai/elimu/web/analytics/students/WordAssessmentEventsCsvExportController.java (2)
53-54
: LGTM! Header columns added correctly.The new experimental metadata columns are appropriately positioned and follow consistent naming conventions.
57-57
: Good formatting improvement.Moving
.build()
to a new line improves readability of the CSVFormat configuration.src/main/java/ai/elimu/web/analytics/students/WordLearningEventsCsvExportController.java (2)
51-56
: LGTM! Header order updated correctly.The CSV headers have been properly updated to include the new research experiment fields in the correct order.
65-70
: Verify data order alignment with headers.Please ensure that all similar CSV export controllers across the codebase maintain consistent column ordering for the new research experiment fields.
#!/bin/bash # Description: Verify consistent header ordering across all CSV export controllers # Expected: All controllers should have the same column order for research experiment fields # Search for CSV headers containing research_experiment rg -A 10 -B 5 'research_experiment' --type javasrc/main/java/ai/elimu/web/analytics/students/StoryBookLearningEventsCsvExportController.java (1)
55-60
: CSV header update looks good.The new research experiment fields are properly positioned and maintain consistency with the data output order.
src/main/java/ai/elimu/web/analytics/students/VideoLearningEventsCsvExportController.java (3)
56-61
: LGTM: Header structure looks correct.The CSV header has been properly updated to include the new research experiment columns. The column order and alignment with the data records appears consistent.
78-78
: Excellent performance optimization!Moving
csvPrinter.flush()
outside the loop improves performance by reducing I/O operations. This avoids flushing after each record and instead flushes once after all records are written.
71-76
: ```shell
#!/bin/bashLocate the LearningEvent Java source file
rg -l "class LearningEvent" -t java
Show class declaration with context
rg -n -C5 "class LearningEvent" -t java
Inspect declarations of researchExperiment and experimentGroup
rg -n -C5 "researchExperiment" -t java
rg -n -C5 "experimentGroup" -t java</details> <details> <summary>pom-dependency-tree.txt (1)</summary> `1-1`: **Version update looks good.** The project version increment from `2.6.65-SNAPSHOT` to `2.6.66-SNAPSHOT` appropriately reflects the feature enhancement to include research experiment data in CSV exports. </details> <details> <summary>src/main/java/ai/elimu/web/analytics/students/StudentsCsvExportController.java (1)</summary> `44-44`: **Good formatting cleanup.** Removing the extra blank line improves code consistency and readability. </details> <details> <summary>src/main/java/ai/elimu/web/analytics/students/LetterSoundAssessmentEventsCsvExportController.java (2)</summary> `53-54`: **Research experiment columns added successfully.** The new CSV headers "research_experiment" and "experiment_group" align with the PR objective to include research experiment data in CSV exports. --- `70-71`: **Verify null safety for enum ordinal calls.** The `.ordinal()` calls on `researchExperiment` and `experimentGroup` enums will throw `NullPointerException` if these fields are null. Consider adding null checks or ensure these fields are always populated. Additionally, using `.ordinal()` exports numeric values instead of readable enum names, which may reduce CSV readability. ```shell #!/bin/bash # Verify if ResearchExperiment and ExperimentGroup enums can be null in LetterSoundAssessmentEvent ast-grep --pattern 'class LetterSoundAssessmentEvent { $$$ ResearchExperiment researchExperiment; $$$ }' ast-grep --pattern 'class LetterSoundAssessmentEvent { $$$ ExperimentGroup experimentGroup; $$$ }' # Also check for any @Nullable annotations or validation rg -A 3 -B 3 "ResearchExperiment.*researchExperiment" rg -A 3 -B 3 "ExperimentGroup.*experimentGroup"
src/main/java/ai/elimu/web/analytics/students/LetterSoundLearningEventsCsvExportController.java (2)
50-52
: Research experiment columns added with additional data field.The CSV headers now include "additional_data", "research_experiment", and "experiment_group" which enhances the exported analytics data as required.
65-67
: Address null safety and consider column consistency.Same concern as in the assessment events controller - the
.ordinal()
calls on enum fields may throwNullPointerException
if the fields are null.Also note that the column ordering differs from
LetterSoundAssessmentEventsCsvExportController
where "additional_data" appears before the research experiment columns, while here all three are grouped together.Consider standardizing the column order across all CSV export controllers for consistency:
#!/bin/bash # Check column ordering consistency across all CSV export controllers rg -A 10 "setHeader" src/main/java/ai/elimu/web/analytics/students/*CsvExportController.java # Verify enum null safety for LetterSoundLearningEvent ast-grep --pattern 'class LetterSoundLearningEvent { $$$ ResearchExperiment researchExperiment; $$$ }'
src/main/java/ai/elimu/web/analytics/students/WordAssessmentEventsCsvExportController.java
Show resolved
Hide resolved
src/main/java/ai/elimu/web/analytics/students/WordLearningEventsCsvExportController.java
Show resolved
Hide resolved
src/main/java/ai/elimu/web/analytics/students/StoryBookLearningEventsCsvExportController.java
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (5)
src/main/config/centos-stream-9/opt/jetty-base/webapps/webapp-HIN.xml
is excluded by!**/*.xml
src/main/config/centos-stream-9/opt/jetty-base/webapps/webapp-TGL.xml
is excluded by!**/*.xml
src/main/config/centos-stream-9/opt/jetty-base/webapps/webapp-THA.xml
is excluded by!**/*.xml
src/main/config/centos-stream-9/opt/jetty-base/webapps/webapp-VIE.xml
is excluded by!**/*.xml
src/main/config/centos-stream-9/opt/jetty-base/webapps/webapp.xml
is excluded by!**/*.xml
📒 Files selected for processing (1)
src/main/java/ai/elimu/web/context/EnvironmentContextLoaderListener.java
(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (11)
- GitHub Check: build (windows-latest, 21)
- GitHub Check: build (ubuntu-latest, 17)
- GitHub Check: build (windows-latest, 17)
- GitHub Check: build (macos-latest, 21)
- GitHub Check: test_rest
- GitHub Check: build (ubuntu-latest, 21)
- GitHub Check: test_rest
- GitHub Check: test_rest
- GitHub Check: test_rest
- GitHub Check: test_rest
- GitHub Check: test_rest
🔇 Additional comments (1)
src/main/java/ai/elimu/web/context/EnvironmentContextLoaderListener.java (1)
125-126
: LGTM - New analytics webhook property aligns with CSV export enhancements.The addition of the analytics webhook URL property supports the research experiment data tracking mentioned in the PR objectives. This property will likely be used by the updated CSV export controllers to send notifications about analytics data exports.
src/main/java/ai/elimu/web/context/EnvironmentContextLoaderListener.java
Show resolved
Hide resolved
src/main/java/ai/elimu/web/context/EnvironmentContextLoaderListener.java
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (3)
src/main/java/ai/elimu/tasks/analytics/WordLearningEventImportScheduler.java (1)
57-117
: Consistent error handling pattern with same null safety concerns.This follows the same excellent error handling pattern as other schedulers in this PR. The same null safety improvements mentioned for
StoryBookLearningEventImportScheduler
apply here as well.The
listFiles()
calls should be null-checked to prevent potentialNullPointerException
s when directories don't exist or aren't accessible.src/main/java/ai/elimu/tasks/analytics/LetterSoundAssessmentEventImportScheduler.java (1)
57-117
: Consistent error handling implementation.This scheduler follows the same error handling pattern as the other schedulers in this PR, which ensures consistent behavior across all analytics import tasks.
The same null safety considerations for
listFiles()
calls apply here as mentioned in the other scheduler reviews.src/main/java/ai/elimu/tasks/analytics/NumberLearningEventImportScheduler.java (1)
54-114
: Systematic error handling improvement completed.This completes the consistent error handling enhancement across all analytics import schedulers. The implementation maintains the same reliable pattern for exception handling and Discord notifications.
The same null safety recommendations for
listFiles()
operations apply here to prevent potential runtime exceptions when directories are inaccessible.
🧹 Nitpick comments (1)
src/main/java/ai/elimu/tasks/analytics/StoryBookLearningEventImportScheduler.java (1)
57-117
: Good error handling addition, but consider null safety improvements.The try-catch wrapper effectively prevents scheduler crashes and provides Discord notifications for failures. However, consider these improvements:
- Null safety for directory operations:
listFiles()
can returnnull
if the path doesn't exist or isn't a directory.- Exception specificity: Consider catching more specific exceptions rather than generic
Exception
to avoid masking programming errors.Apply this diff to improve null safety:
- for (File analyticsDirFile : analyticsDir.listFiles()) { + File[] analyticsFiles = analyticsDir.listFiles(); + if (analyticsFiles != null) { + for (File analyticsDirFile : analyticsFiles) { if (analyticsDirFile.getName().startsWith("android-id-")) { File androidIdDir = new File(analyticsDir, analyticsDirFile.getName()); - for (File androidIdDirFile : androidIdDir.listFiles()) { + File[] androidIdFiles = androidIdDir.listFiles(); + if (androidIdFiles != null) { + for (File androidIdDirFile : androidIdFiles) { Long studentId = null; Integer eventImportCount = 0; if (androidIdDirFile.getName().equals("storybook-learning-events")) { File storyBookLearningEventsDir = new File(androidIdDir, androidIdDirFile.getName()); - for (File csvFile : storyBookLearningEventsDir.listFiles()) { + File[] csvFiles = storyBookLearningEventsDir.listFiles(); + if (csvFiles != null) { + for (File csvFile : csvFiles) {
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (10)
src/main/java/ai/elimu/rest/v2/applications/ApplicationVersionsRestController.java
(2 hunks)src/main/java/ai/elimu/tasks/analytics/LetterSoundAssessmentEventImportScheduler.java
(1 hunks)src/main/java/ai/elimu/tasks/analytics/LetterSoundLearningEventImportScheduler.java
(1 hunks)src/main/java/ai/elimu/tasks/analytics/NumberLearningEventImportScheduler.java
(1 hunks)src/main/java/ai/elimu/tasks/analytics/StoryBookLearningEventImportScheduler.java
(1 hunks)src/main/java/ai/elimu/tasks/analytics/VideoLearningEventImportScheduler.java
(1 hunks)src/main/java/ai/elimu/tasks/analytics/WordAssessmentEventImportScheduler.java
(1 hunks)src/main/java/ai/elimu/tasks/analytics/WordLearningEventImportScheduler.java
(1 hunks)src/main/java/ai/elimu/util/csv/CsvAnalyticsExtractionHelper.java
(4 hunks)src/test/java/ai/elimu/util/csv/CsvAnalyticsExtractionHelperTest.java
(4 hunks)
✅ Files skipped from review due to trivial changes (1)
- src/main/java/ai/elimu/util/csv/CsvAnalyticsExtractionHelper.java
⏰ Context from checks skipped due to timeout of 90000ms (11)
- GitHub Check: test_rest
- GitHub Check: build (ubuntu-latest, 17)
- GitHub Check: test_rest
- GitHub Check: build (windows-latest, 21)
- GitHub Check: build (ubuntu-latest, 21)
- GitHub Check: build (windows-latest, 17)
- GitHub Check: build (macos-latest, 17)
- GitHub Check: test_rest
- GitHub Check: test_rest
- GitHub Check: test_rest
- GitHub Check: test_rest
🔇 Additional comments (11)
src/test/java/ai/elimu/util/csv/CsvAnalyticsExtractionHelperTest.java (2)
23-23
: TODO comments align with expanded CSV functionality.The TODO comments indicate planned test coverage for letter-sound assessment events, number assessment events, and number learning events, which aligns with the PR's objective to enhance CSV export functionality with research experiment data.
Also applies to: 46-46, 48-48
162-184
: Test method relocation is appropriate.Moving the
testExtractVideoLearningEvents_v3001018()
method to the end of the class improves organization without affecting functionality. The test logic remains unchanged and valid.src/main/java/ai/elimu/rest/v2/applications/ApplicationVersionsRestController.java (3)
11-13
: Proper imports for Discord functionality.The imports for
DiscordHelper
,DomainHelper
, andChannel
are correctly added to support the new notification features.
171-171
: Effective success notification implementation.The Discord notification for successful application version publishing provides valuable monitoring information with a direct link to the application edit page.
179-179
: Appropriate error notification with exception details.The Discord notification for exceptions includes the exception class and message, which aids in debugging and monitoring application version distribution failures.
src/main/java/ai/elimu/tasks/analytics/VideoLearningEventImportScheduler.java (2)
57-117
: Excellent error handling implementation.The comprehensive try-catch block around the entire CSV processing logic provides robust error handling. This prevents the scheduler from failing silently and ensures monitoring through Discord notifications.
114-117
: Appropriate error reporting and logging.The exception handling includes proper logging and Discord notification with exception details, which aids in monitoring and debugging import failures.
src/main/java/ai/elimu/tasks/analytics/LetterSoundLearningEventImportScheduler.java (2)
57-117
: Consistent error handling across schedulers.The comprehensive try-catch block implementation follows the same pattern as other analytics import schedulers, providing consistent error handling and monitoring across the codebase.
114-117
: Proper error reporting mechanism.The exception handling includes both logging and Discord notification, ensuring that import failures are properly monitored and can be debugged effectively.
src/main/java/ai/elimu/tasks/analytics/WordAssessmentEventImportScheduler.java (2)
57-117
: Consistent and comprehensive error handling.The try-catch block implementation maintains consistency with other analytics import schedulers while providing comprehensive error handling for the entire CSV processing workflow.
114-117
: Effective error monitoring and logging.The exception handling properly logs errors and sends Discord notifications, ensuring that word assessment event import failures are monitored and can be addressed promptly.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
src/test/java/ai/elimu/util/csv/CsvAnalyticsExtractionHelperTest.java (1)
26-27
: TODO comments indicate incomplete test coverage.The TODO comments suggest that tests for letter-sound assessment events, number assessment events, and number learning events are still missing.
Would you like me to help generate the missing test methods for these event types to ensure comprehensive test coverage?
Also applies to: 71-73
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (5)
src/test/resources/ai/elimu/util/csv/5b7c682a12ecbe2e_3005009_letter-sound-learning-events_2025-06-18.csv
is excluded by!**/*.csv
,!**/*.csv
src/test/resources/ai/elimu/util/csv/5b7c682a12ecbe2e_3005009_storybook-learning-events_2025-06-20.csv
is excluded by!**/*.csv
,!**/*.csv
src/test/resources/ai/elimu/util/csv/5b7c682a12ecbe2e_3005009_video-learning-events_2025-06-18.csv
is excluded by!**/*.csv
,!**/*.csv
src/test/resources/ai/elimu/util/csv/5b7c682a12ecbe2e_3005009_word-assessment-events_2025-06-19.csv
is excluded by!**/*.csv
,!**/*.csv
src/test/resources/ai/elimu/util/csv/5b7c682a12ecbe2e_3005009_word-learning-events_2025-06-18.csv
is excluded by!**/*.csv
,!**/*.csv
📒 Files selected for processing (2)
src/main/java/ai/elimu/util/csv/CsvAnalyticsExtractionHelper.java
(11 hunks)src/test/java/ai/elimu/util/csv/CsvAnalyticsExtractionHelperTest.java
(6 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- src/main/java/ai/elimu/util/csv/CsvAnalyticsExtractionHelper.java
⏰ Context from checks skipped due to timeout of 90000ms (10)
- GitHub Check: build (windows-latest, 21)
- GitHub Check: build (windows-latest, 17)
- GitHub Check: build (ubuntu-latest, 21)
- GitHub Check: build (ubuntu-latest, 17)
- GitHub Check: test_rest
- GitHub Check: test_rest
- GitHub Check: test_rest
- GitHub Check: test_rest
- GitHub Check: test_rest
- GitHub Check: test_rest
🔇 Additional comments (8)
src/test/java/ai/elimu/util/csv/CsvAnalyticsExtractionHelperTest.java (8)
4-4
: Import addition looks good.The
assertNull
import is appropriately added to support the new null checks in the test methods.
21-22
: Research experiment enum imports are correctly added.These imports are necessary for the new test assertions that validate research experiment and experiment group fields.
48-68
: Letter-sound learning events test for v3005009 is well-structured.The test correctly validates the new research experiment fields and follows the established pattern. The timestamp calculation using multiplication by
1_000L
is consistent with other v3005009 tests.
99-122
: Word assessment events test updated correctly.The test properly validates the new research experiment fields (
ResearchExperiment.WORD_EMOJIS
andExperimentGroup.TREATMENT
) and maintains consistency with the existing assertion pattern.
146-168
: Word learning events test includes proper null validation.The test correctly uses
assertNull
for theadditionalData
field and validates the research experiment fields appropriately.
237-260
: Storybook learning events test is comprehensive.The test validates all the new fields including null checks for
additionalData
and proper assertion of research experiment and experiment group values.
263-308
: Video learning events tests are properly organized.Both the v3001018 and v3005009 tests are correctly structured. The v3005009 test includes the new research experiment field validations while maintaining the existing test patterns.
48-308
: Let’s search the entire repo for those CSVs to locate the test‐resources directory (or confirm absence):#!/bin/bash # Search for each referenced CSV file anywhere in the repo csv_files=( "5b7c682a12ecbe2e_3005009_letter-sound-learning-events_2025-06-18.csv" "5b7c682a12ecbe2e_3005009_word-assessment-events_2025-06-19.csv" "5b7c682a12ecbe2e_3005009_word-learning-events_2025-06-18.csv" "5b7c682a12ecbe2e_3005009_storybook-learning-events_2025-06-20.csv" "5b7c682a12ecbe2e_3005009_video-learning-events_2025-06-18.csv" ) echo "Looking for CSV test files in the repo..." for file in "${csv_files[@]}"; do echo "--- $file ---" find . -type f -name "$file" -print || echo "Not found" done
Issue Number
Purpose
Technical Details
Testing Instructions
Screenshots
Format Checks
Note
Files in PRs are automatically checked for format violations with
mvn spotless:check
.If this PR contains files with format violations, run
mvn spotless:apply
to fix them.