Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
2d80839
Apply MongoDB branding and modern UI improvements to mFlix application
cbullinger Jan 26, 2026
b2f86cb
fix: bump python-multipart>=0.0.22 for security fix
cbullinger Jan 27, 2026
09b2244
Merge pull request #77 from mongodb/dependabot-22-dev
cbullinger Jan 27, 2026
37954ba
fix: bump next to 16.1.5 for security fix
cbullinger Jan 28, 2026
1e9dc15
Acknowledge year limitation of sample dataset
cbullinger Jan 28, 2026
ce1e9b2
Merge pull request #79 from mongodb/dependabot-23-dev
cbullinger Jan 28, 2026
556d9e5
Refactor year validation to use dynamic detection from database
cbullinger Jan 30, 2026
9be645d
Fix Express CI tests: add directConnection=true to MongoDB URI
cbullinger Jan 30, 2026
56a2f3c
Fix generate-test-summary-jest.sh: quote GITHUB_STEP_SUMMARY variable
cbullinger Jan 30, 2026
819f84e
Add index creation step to CI for aggregation performance
cbullinger Jan 30, 2026
680adf0
Install mongosh in CI workflow for index creation
cbullinger Jan 30, 2026
62d9c02
Apply suggestions from code review
cbullinger Jan 30, 2026
dfdff26
Merge pull request #80 from mongodb/docsp-57250-movie-year
cbullinger Jan 30, 2026
2dd639a
Address PR feedback #1-#5: Improve UI consistency and visual hierarchy
cbullinger Jan 31, 2026
25a1f13
Remove checkboxes from movie cards, keep visual selection
cbullinger Jan 31, 2026
b1d6318
Make Show More button pill-shaped on aggregations page
cbullinger Feb 1, 2026
b82139c
Fix floating contextual bar width to prevent button stacking
cbullinger Feb 1, 2026
b3d00a5
Change PageSizeSelector dropdown to use neutral gray border instead o…
cbullinger Feb 1, 2026
fc04979
Change Back to Movies link to use MongoDB brand colors instead of blue
cbullinger Feb 1, 2026
9eeb404
Update Edit Selected button hover state to use dark button pattern
cbullinger Feb 1, 2026
7c38521
Establish button hierarchy: Make Add Movie primary, Search Movies sec…
cbullinger Feb 1, 2026
a5563d3
Update dependencies across all backends and frontend
cbullinger Feb 6, 2026
0ff723a
Update js-express workflow so it fails on failed unit tests
cbullinger Feb 7, 2026
abda9be
Update to Express 5 and fix breaking changes
cbullinger Feb 9, 2026
1cb591b
Merge pull request #83 from mongodb/bug/docsp-57631-js-express-workflow
cbullinger Feb 9, 2026
ca58a29
Merge pull request #75 from mongodb/docsp-55536-update-styling
cbullinger Feb 9, 2026
d380611
Merge pull request #81 from mongodb/cbullinger/dependency-updates-dev
cbullinger Feb 9, 2026
d442445
Merge branch 'main' into development
cbullinger Feb 9, 2026
45d5e58
Remove unneeded test log files
cbullinger Feb 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 32 additions & 26 deletions .github/scripts/generate-test-summary-jest.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,17 @@ set -e
# Shows breakdown by test type (unit vs integration)
# Usage: ./generate-test-summary-jest.sh <unit-json> <integration-json>

# Guard: skip if GITHUB_STEP_SUMMARY is not set
if [ -z "$GITHUB_STEP_SUMMARY" ]; then
echo "Warning: GITHUB_STEP_SUMMARY not set, skipping summary generation"
exit 0
fi

UNIT_JSON="${1:-}"
INTEGRATION_JSON="${2:-}"

echo "## Test Results" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "## Test Results" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"

# Function to parse Jest JSON file
parse_json() {
Expand Down Expand Up @@ -55,37 +61,37 @@ total_failed=$((unit_failed + int_failed))
total_skipped=$((unit_skipped + int_skipped))

# Display detailed breakdown
echo "### Summary by Test Type" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Test Type | Passed | Failed | Skipped | Total |" >> $GITHUB_STEP_SUMMARY
echo "|-----------|--------|--------|---------|-------|" >> $GITHUB_STEP_SUMMARY
echo "### Summary by Test Type" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"
echo "| Test Type | Passed | Failed | Skipped | Total |" >> "$GITHUB_STEP_SUMMARY"
echo "|-----------|--------|--------|---------|-------|" >> "$GITHUB_STEP_SUMMARY"

if [ -f "$UNIT_JSON" ]; then
echo "| 🔧 Unit Tests | $unit_passed | $unit_failed | $unit_skipped | $unit_tests |" >> $GITHUB_STEP_SUMMARY
echo "| 🔧 Unit Tests | $unit_passed | $unit_failed | $unit_skipped | $unit_tests |" >> "$GITHUB_STEP_SUMMARY"
fi

if [ -f "$INTEGRATION_JSON" ]; then
echo "| 🔗 Integration Tests | $int_passed | $int_failed | $int_skipped | $int_tests |" >> $GITHUB_STEP_SUMMARY
echo "| 🔗 Integration Tests | $int_passed | $int_failed | $int_skipped | $int_tests |" >> "$GITHUB_STEP_SUMMARY"
fi

echo "| **Total** | **$total_passed** | **$total_failed** | **$total_skipped** | **$total_tests** |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| **Total** | **$total_passed** | **$total_failed** | **$total_skipped** | **$total_tests** |" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"

# Overall status
echo "### Overall Status" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Status | Count |" >> $GITHUB_STEP_SUMMARY
echo "|--------|-------|" >> $GITHUB_STEP_SUMMARY
echo "| ✅ Passed | $total_passed |" >> $GITHUB_STEP_SUMMARY
echo "| ❌ Failed | $total_failed |" >> $GITHUB_STEP_SUMMARY
echo "| ⏭️ Skipped | $total_skipped |" >> $GITHUB_STEP_SUMMARY
echo "| **Total** | **$total_tests** |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Overall Status" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"
echo "| Status | Count |" >> "$GITHUB_STEP_SUMMARY"
echo "|--------|-------|" >> "$GITHUB_STEP_SUMMARY"
echo "| ✅ Passed | $total_passed |" >> "$GITHUB_STEP_SUMMARY"
echo "| ❌ Failed | $total_failed |" >> "$GITHUB_STEP_SUMMARY"
echo "| ⏭️ Skipped | $total_skipped |" >> "$GITHUB_STEP_SUMMARY"
echo "| **Total** | **$total_tests** |" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"

# List failed tests if any
if [ $total_failed -gt 0 ]; then
echo "### ❌ Failed Tests" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### ❌ Failed Tests" >> "$GITHUB_STEP_SUMMARY"
echo "" >> "$GITHUB_STEP_SUMMARY"

failed_tests_file=$(mktemp)

Expand All @@ -107,16 +113,16 @@ if [ $total_failed -gt 0 ]; then

if [ -s "$failed_tests_file" ]; then
while IFS= read -r test; do
echo "- \`$test\`" >> $GITHUB_STEP_SUMMARY
echo "- \`$test\`" >> "$GITHUB_STEP_SUMMARY"
done < "$failed_tests_file"
else
echo "_Unable to parse individual test names_" >> $GITHUB_STEP_SUMMARY
echo "_Unable to parse individual test names_" >> "$GITHUB_STEP_SUMMARY"
fi

echo "" >> $GITHUB_STEP_SUMMARY
echo "❌ **Tests failed!**" >> $GITHUB_STEP_SUMMARY
echo "" >> "$GITHUB_STEP_SUMMARY"
echo "❌ **Tests failed!**" >> "$GITHUB_STEP_SUMMARY"
rm -f "$failed_tests_file"
exit 1
else
echo "✅ **All tests passed!**" >> $GITHUB_STEP_SUMMARY
echo "✅ **All tests passed!**" >> "$GITHUB_STEP_SUMMARY"
fi
19 changes: 15 additions & 4 deletions .github/workflows/run-express-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,16 @@ jobs:
- name: Add sample data to database
run: mongorestore --archive=sampledata.archive --port=27017

- name: Install MongoDB Shell (mongosh)
run: |
curl https://downloads.mongodb.com/compass/mongosh-2.3.8-linux-x64.tgz -o mongosh.tgz
tar -xzf mongosh.tgz
sudo cp mongosh-2.3.8-linux-x64/bin/* /usr/local/bin/

- name: Create indexes for aggregation performance
run: |
mongosh "mongodb://localhost:27017/sample_mflix?directConnection=true" --eval "db.comments.createIndex({ movie_id: 1 })"

- name: Set up Node.js
uses: actions/setup-node@v4
with:
Expand All @@ -52,15 +62,16 @@ jobs:

- name: Run unit tests
working-directory: mflix/server/js-express
run: npm run test:unit -- --json --outputFile=test-results-unit.json || true
run: npm run test:unit -- --json --outputFile=test-results-unit.json
env:
MONGODB_URI: mongodb://localhost:27017/sample_mflix
MONGODB_URI: mongodb://localhost:27017/sample_mflix?directConnection=true

- name: Run integration tests
working-directory: mflix/server/js-express
run: npm run test:integration -- --json --outputFile=test-results-integration.json || true
continue-on-error: true
run: npm run test:integration -- --json --outputFile=test-results-integration.json
env:
MONGODB_URI: mongodb://localhost:27017/sample_mflix
MONGODB_URI: mongodb://localhost:27017/sample_mflix?directConnection=true
ENABLE_SEARCH_TESTS: true
# Note: Vector search tests will be skipped without VOYAGE_API_KEY
# Run these tests locally with a valid API key
Expand Down
6 changes: 5 additions & 1 deletion mflix/README-JAVA-SPRING.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,16 @@ This is a full-stack movie browsing application built with Java Spring Boot and
└── mvnw
```

## Data Limitations

The `sample_mflix` dataset contains movies released up to **2016**. Searching for movies from 2017 or later will return no results. This is a limitation of the sample dataset, not the application.

## Prerequisites

- **Java 21** or higher
- **Node.js 20** or higher
- **MongoDB Atlas cluster or local deployment** with the `sample_mflix` dataset loaded
- [Load sample data](https://www.mongodb.com/docs/atlas/sample-data/)
- [Load sample data](https://www.mongodb.com/docs/atlas/sample-data/)
- **Maven** (included via Maven Wrapper)
- **Voyage AI API key** (For MongoDB Vector Search)
- [Get a Voyage AI API key](https://www.voyageai.com/)
Expand Down
4 changes: 4 additions & 0 deletions mflix/README-JAVASCRIPT-EXPRESS.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ This is a full-stack movie browsing application built with Express.js and Next.j
└── tsconfig.json
```

## Data Limitations

The `sample_mflix` dataset contains movies released up to **2016**. Searching for movies from 2017 or later will return no results. This is a limitation of the sample dataset, not the application.

## Prerequisites

- **Node.js 22** or higher
Expand Down
4 changes: 4 additions & 0 deletions mflix/README-PYTHON-FASTAPI.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ This is a full-stack movie browsing application built with Python FastAPI and Ne
└── requirements.txt
```

## Data Limitations

The `sample_mflix` dataset contains movies released up to **2016**. Searching for movies from 2017 or later will return no results. This is a limitation of the sample dataset, not the application.

## Prerequisites

- **Python 3.10** to **Python 3.13**
Expand Down
68 changes: 41 additions & 27 deletions mflix/client/app/aggregations/aggregations.module.css
Original file line number Diff line number Diff line change
@@ -1,42 +1,53 @@
/* Aggregations styles */
/* Aggregations styles - MongoDB Branded */
.container {
max-width: 1200px;
margin: 0 auto;
padding: 2rem;
padding: 2.5rem;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
}

.title {
font-size: 2.5rem;
font-size: 2.75rem;
font-weight: 700;
color: #1a1a1a;
margin-bottom: 0.5rem;
color: var(--mongodb-slate);
margin-bottom: 0.75rem;
text-align: center;
}

.title::after {
content: '';
display: block;
width: 100px;
height: 4px;
background: var(--mongodb-spring);
margin: 1rem auto 0;
border-radius: 2px;
}

.subtitle {
font-size: 1.1rem;
color: #666;
font-size: 1.15rem;
color: var(--color-text-secondary);
text-align: center;
margin-bottom: 3rem;
font-weight: 500;
}

.section {
margin-bottom: 3rem;
background: #fff;
border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
background: var(--mongodb-white);
border-radius: var(--radius-xl);
box-shadow: var(--shadow-lg);
overflow: hidden;
border: 2px solid var(--mongodb-mint);
}

.sectionTitle {
font-size: 1.5rem;
font-weight: 600;
color: #2c3e50;
font-weight: 700;
color: var(--mongodb-white);
margin: 0;
padding: 1.5rem 2rem;
background: #f8f9fa;
border-bottom: 1px solid #e9ecef;
background: var(--mongodb-forest);
}

.tableContainer {
Expand All @@ -47,31 +58,34 @@
.table {
width: 100%;
border-collapse: collapse;
font-size: 0.9rem;
font-size: 0.95rem;
}

.table th {
background: #34495e;
color: white;
background: var(--mongodb-slate);
color: var(--mongodb-white);
font-weight: 600;
padding: 1rem;
padding: 1.125rem 1.25rem;
text-align: left;
white-space: nowrap;
font-size: 0.9rem;
text-transform: uppercase;
letter-spacing: 0.05em;
}

.table td {
padding: 1rem;
border-bottom: 1px solid #e9ecef;
padding: 1.125rem 1.25rem;
border-bottom: 1px solid var(--color-border);
vertical-align: top;
}

.table tr:hover {
background: #f8f9fa;
background: #F7FAFC;
}

.movieTitle {
font-weight: 600;
color: #2c3e50;
color: var(--mongodb-slate);
max-width: 200px;
word-wrap: break-word;
}
Expand All @@ -96,9 +110,9 @@
.comment {
margin-bottom: 0.75rem;
padding: 0.5rem;
background: #f8f9fa;
border-radius: 4px;
border-left: 3px solid #3498db;
background: #F7FAFC;
border-radius: var(--radius-md);
border-left: 2px solid var(--color-border);
}

.comment:last-child {
Expand All @@ -107,14 +121,14 @@

.commentText {
font-size: 0.85rem;
color: #2c3e50;
color: var(--mongodb-slate);
margin-bottom: 0.25rem;
line-height: 1.4;
}

.commentMeta {
font-size: 0.75rem;
color: #7f8c8d;
color: var(--color-text-muted);
font-style: italic;
}

Expand Down
Loading