Skip to content

Commit 165233b

Browse files
test: update related tests
1 parent 97c5cbb commit 165233b

5 files changed

Lines changed: 73 additions & 6 deletions

File tree

src/components/SpecifyLearnerField.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ describe('SpecifyLearnerField', () => {
214214
(useCourseInfo as jest.Mock).mockReturnValue({ data: { permissions: { admin: true, dataResearcher: false } } });
215215
(useLearner as jest.Mock).mockReturnValue({
216216
data: {},
217-
refetch: jest.fn().mockResolvedValue({ data: {} }),
217+
refetch: jest.fn().mockResolvedValue({ data: {}, error: { isAxiosError: true, response: { status: 404 } } }),
218218
error: { isAxiosError: true, response: { status: 404 } },
219219
});
220220
});

src/enrollments/components/UpdateBetaTesterModal.test.tsx

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,8 @@ describe('UpdateBetaTesterModal', () => {
181181
it('shows alert with failed usernames when some users fail (remove action)', async () => {
182182
const mockSuccessData = {
183183
results: [
184-
{ identifier: 'failed-user', userDoesNotExist: true },
185-
{ identifier: 'jane.doe', userDoesNotExist: false },
184+
{ identifier: 'failed-user', userDoesNotExist: true, isActive: true },
185+
{ identifier: 'jane.doe', userDoesNotExist: false, isActive: true },
186186
]
187187
};
188188

@@ -206,7 +206,7 @@ describe('UpdateBetaTesterModal', () => {
206206
it('shows alert with failed usernames when some users fail (add action)', async () => {
207207
const mockSuccessData = {
208208
results: [
209-
{ identifier: 'failed-user', userDoesNotExist: true },
209+
{ identifier: 'failed-user', userDoesNotExist: true, isActive: null },
210210
]
211211
};
212212

@@ -231,10 +231,39 @@ describe('UpdateBetaTesterModal', () => {
231231
});
232232
});
233233

234+
it('shows alert with inactive usernames when some users are inactive', async () => {
235+
const mockSuccessData = {
236+
results: [
237+
{ identifier: 'inactive-user', userDoesNotExist: false, isActive: false },
238+
{ identifier: 'jane.doe', userDoesNotExist: false, isActive: true },
239+
]
240+
};
241+
242+
const mutateWithSuccess = (_params: UpdateBetaTestersParams, callbacks: any) => {
243+
callbacks.onSuccess(mockSuccessData);
244+
};
245+
mutateMock.mockImplementation(mutateWithSuccess);
246+
247+
const nonBetaTesterProps = {
248+
...defaultProps,
249+
learner: learnerNonBetaTester,
250+
};
251+
252+
renderWithAlertAndIntl(
253+
<UpdateBetaTesterModal {...nonBetaTesterProps} />
254+
);
255+
256+
expect(mockAddAlert).toHaveBeenCalledWith({
257+
type: 'warning',
258+
message: messages.inactiveUsers.defaultMessage,
259+
extraContent: expect.any(Array),
260+
});
261+
});
262+
234263
it('does not show alert when all users succeed', async () => {
235264
const mockSuccessData = {
236265
results: [
237-
{ identifier: 'jane.doe', userDoesNotExist: false },
266+
{ identifier: 'jane.doe', userDoesNotExist: false, isActive: true },
238267
]
239268
};
240269

src/grading/components/GradingLearnerContent.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,9 @@ const GradingLearnerContent = ({ toolType, onShowTasks }: GradingLearnerContentP
165165

166166
const handleLearnerChange = (usernameOrEmail: string): void => {
167167
setUsernameOrEmail(usernameOrEmail);
168+
// Reset problem field when learner changes due to progress and attempts change for every learner
169+
setBlockId('');
170+
problemFieldRef.current?.reset();
168171
};
169172

170173
return (

src/specialExams/data/api.test.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,38 @@ describe('specialExams api', () => {
176176
'https://test-lms.com/api/instructor/v2/courses/course-v1:edX+Special%20Course+2023/special_exams/attempts?page=1&page_size=20&search=user%40example.com'
177177
);
178178
});
179+
180+
it('handles ordering parameter correctly', async () => {
181+
const courseId = 'course-v1:edX+Test+2023';
182+
const paramsWithOrdering: AttemptsParams = {
183+
page: 0,
184+
pageSize: 20,
185+
emailOrUsername: '',
186+
ordering: '-examType'
187+
};
188+
189+
await getAttempts(courseId, paramsWithOrdering);
190+
191+
expect(mockHttpClient.get).toHaveBeenCalledWith(
192+
'https://test-lms.com/api/instructor/v2/courses/course-v1:edX+Test+2023/special_exams/attempts?page=1&page_size=20&ordering=-exam_type'
193+
);
194+
});
195+
196+
it('handles complex ordering parameter with multiple parts', async () => {
197+
const courseId = 'course-v1:edX+Test+2023';
198+
const paramsWithComplexOrdering: AttemptsParams = {
199+
page: 1,
200+
pageSize: 10,
201+
emailOrUsername: 'test@example.com',
202+
ordering: 'proctoringExam.examName'
203+
};
204+
205+
await getAttempts(courseId, paramsWithComplexOrdering);
206+
207+
expect(mockHttpClient.get).toHaveBeenCalledWith(
208+
'https://test-lms.com/api/instructor/v2/courses/course-v1:edX+Test+2023/special_exams/attempts?page=2&page_size=10&search=test%40example.com&ordering=proctoring_exam.exam_name'
209+
);
210+
});
179211
});
180212

181213
describe('getAllowances', () => {

src/specialExams/data/api.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@ const getQueryParams = (params: AttemptsParams) => {
1515
}
1616

1717
if (params.ordering) {
18+
const hasNegativePrefix = params.ordering.startsWith('-');
19+
1820
const orderingParam = params.ordering.split('.').map((part) => snakeCase(part)).join('.');
19-
queryParams.append('ordering', orderingParam);
21+
22+
queryParams.append('ordering', `${hasNegativePrefix ? '-' : ''}${orderingParam}`);
2023
}
2124

2225
return queryParams;

0 commit comments

Comments
 (0)