Skip to content

Commit 0588d09

Browse files
authored
Merge pull request #74 from mongodb/development
Merge development into main
2 parents 2884532 + edd67db commit 0588d09

35 files changed

Lines changed: 1704 additions & 91 deletions

File tree

.github/workflows/run-express-tests.yml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ on:
55
branches:
66
- development
77
paths:
8-
- 'server/js-express/**'
8+
- 'mflix/server/js-express/**'
99
push:
1010
branches:
1111
- development
1212
paths:
13-
- 'server/js-express/**'
13+
- 'mflix/server/js-express/**'
1414

1515
jobs:
1616
test:
@@ -47,17 +47,17 @@ jobs:
4747
node-version: '20'
4848

4949
- name: Install dependencies
50-
working-directory: server/js-express
50+
working-directory: mflix/server/js-express
5151
run: npm install
5252

5353
- name: Run unit tests
54-
working-directory: server/js-express
54+
working-directory: mflix/server/js-express
5555
run: npm run test:unit -- --json --outputFile=test-results-unit.json || true
5656
env:
5757
MONGODB_URI: mongodb://localhost:27017/sample_mflix
5858

5959
- name: Run integration tests
60-
working-directory: server/js-express
60+
working-directory: mflix/server/js-express
6161
run: npm run test:integration -- --json --outputFile=test-results-integration.json || true
6262
env:
6363
MONGODB_URI: mongodb://localhost:27017/sample_mflix
@@ -71,15 +71,15 @@ jobs:
7171
with:
7272
name: test-results
7373
path: |
74-
server/js-express/coverage/
75-
server/js-express/test-results-unit.json
76-
server/js-express/test-results-integration.json
74+
mflix/server/js-express/coverage/
75+
mflix/server/js-express/test-results-unit.json
76+
mflix/server/js-express/test-results-integration.json
7777
retention-days: 30
7878

7979
- name: Generate Test Summary
8080
if: always()
8181
run: |
8282
chmod +x .github/scripts/generate-test-summary-jest.sh
8383
.github/scripts/generate-test-summary-jest.sh \
84-
server/js-express/test-results-unit.json \
85-
server/js-express/test-results-integration.json
84+
mflix/server/js-express/test-results-unit.json \
85+
mflix/server/js-express/test-results-integration.json
Lines changed: 212 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,212 @@
1+
/**
2+
* FilterBar Component Styles
3+
*
4+
* CSS Module for the movie filter bar component.
5+
* Provides a horizontal filter bar for filtering movies by genre, year, rating, etc.
6+
*/
7+
8+
.filterBar {
9+
background: white;
10+
border-radius: 12px;
11+
padding: 1.25rem 1.5rem;
12+
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
13+
margin-bottom: 1.5rem;
14+
}
15+
16+
.filterHeader {
17+
display: flex;
18+
align-items: center;
19+
justify-content: space-between;
20+
margin-bottom: 1rem;
21+
}
22+
23+
.filterTitle {
24+
font-size: 0.875rem;
25+
font-weight: 600;
26+
color: #64748b;
27+
text-transform: uppercase;
28+
letter-spacing: 0.05em;
29+
margin: 0;
30+
display: flex;
31+
align-items: center;
32+
gap: 0.5rem;
33+
}
34+
35+
.clearFiltersButton {
36+
background: transparent;
37+
border: 1px solid #e2e8f0;
38+
color: #64748b;
39+
padding: 0.375rem 0.75rem;
40+
border-radius: 6px;
41+
font-size: 0.8rem;
42+
cursor: pointer;
43+
transition: all 0.2s ease;
44+
}
45+
46+
.clearFiltersButton:hover {
47+
background: #f8fafc;
48+
border-color: #cbd5e1;
49+
color: #475569;
50+
}
51+
52+
.filterControls {
53+
display: flex;
54+
flex-wrap: wrap;
55+
gap: 1rem;
56+
align-items: flex-end;
57+
}
58+
59+
.filterGroup {
60+
display: flex;
61+
flex-direction: column;
62+
gap: 0.25rem;
63+
min-width: 140px;
64+
}
65+
66+
.filterLabel {
67+
font-size: 0.75rem;
68+
font-weight: 500;
69+
color: #64748b;
70+
}
71+
72+
.filterSelect,
73+
.filterInput {
74+
padding: 0.5rem 0.75rem;
75+
border: 2px solid #e2e8f0;
76+
border-radius: 8px;
77+
font-size: 0.875rem;
78+
background: white;
79+
color: #374151;
80+
transition: border-color 0.2s ease, box-shadow 0.2s ease;
81+
min-width: 120px;
82+
}
83+
84+
.filterSelect:hover,
85+
.filterInput:hover {
86+
border-color: #cbd5e1;
87+
}
88+
89+
.filterSelect:focus,
90+
.filterInput:focus {
91+
outline: none;
92+
border-color: #3b82f6;
93+
box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.15);
94+
}
95+
96+
.ratingGroup {
97+
display: flex;
98+
align-items: center;
99+
gap: 0.5rem;
100+
}
101+
102+
.ratingInput {
103+
width: 70px;
104+
}
105+
106+
.ratingDivider {
107+
color: #94a3b8;
108+
font-size: 0.875rem;
109+
}
110+
111+
.applyButton {
112+
background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%);
113+
color: white;
114+
border: none;
115+
padding: 0.5rem 1rem;
116+
border-radius: 8px;
117+
font-size: 0.875rem;
118+
font-weight: 600;
119+
cursor: pointer;
120+
transition: all 0.2s ease;
121+
white-space: nowrap;
122+
}
123+
124+
.applyButton:hover {
125+
background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%);
126+
transform: translateY(-1px);
127+
box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3);
128+
}
129+
130+
.applyButton:disabled {
131+
opacity: 0.5;
132+
cursor: not-allowed;
133+
transform: none;
134+
}
135+
136+
.activeFilters {
137+
display: flex;
138+
flex-wrap: wrap;
139+
gap: 0.5rem;
140+
margin-top: 1rem;
141+
padding-top: 1rem;
142+
border-top: 1px solid #e2e8f0;
143+
}
144+
145+
.filterChip {
146+
display: inline-flex;
147+
align-items: center;
148+
gap: 0.375rem;
149+
background: #eff6ff;
150+
color: #2563eb;
151+
padding: 0.25rem 0.625rem;
152+
border-radius: 9999px;
153+
font-size: 0.75rem;
154+
font-weight: 500;
155+
}
156+
157+
.chipRemove {
158+
background: none;
159+
border: none;
160+
color: #2563eb;
161+
cursor: pointer;
162+
padding: 0;
163+
font-size: 1rem;
164+
line-height: 1;
165+
opacity: 0.7;
166+
}
167+
168+
.chipRemove:hover {
169+
opacity: 1;
170+
}
171+
172+
/* Responsive Design */
173+
@media (max-width: 768px) {
174+
.filterBar {
175+
padding: 1rem;
176+
}
177+
178+
.filterControls {
179+
flex-direction: column;
180+
align-items: stretch;
181+
}
182+
183+
.filterGroup {
184+
min-width: 100%;
185+
}
186+
187+
.ratingGroup {
188+
flex-wrap: wrap;
189+
}
190+
191+
.ratingInput {
192+
flex: 1;
193+
min-width: 80px;
194+
}
195+
196+
.applyButton {
197+
width: 100%;
198+
padding: 0.75rem 1rem;
199+
}
200+
}
201+
202+
@media (max-width: 480px) {
203+
.filterHeader {
204+
flex-direction: column;
205+
align-items: flex-start;
206+
gap: 0.75rem;
207+
}
208+
209+
.clearFiltersButton {
210+
width: 100%;
211+
}
212+
}

0 commit comments

Comments
 (0)