diff --git a/extension/background/canvas-crawler.cjs b/extension/background/canvas-crawler.cjs index 23529c1..2f39c99 100644 --- a/extension/background/canvas-crawler.cjs +++ b/extension/background/canvas-crawler.cjs @@ -13,14 +13,14 @@ function stripHtml(html) { .trim(); } -async function crawlCanvasCourse(origin, courseId, fetchImpl = fetch) { +async function crawlCanvasCourse(origin, courseId) { if (!origin || !courseId) { throw new Error('Canvas origin and courseId are required for course crawling.'); } // 1. Fetch Course details & syllabus const courseUrl = `${origin}/api/v1/courses/${courseId}?include[]=syllabus_body`; - const courseRes = await fetchImpl(courseUrl, { credentials: 'include' }); + const courseRes = await fetch(courseUrl, { credentials: 'include' }); if (!courseRes.ok) { throw new Error(`Failed to fetch Canvas course info (${courseRes.status})`); } @@ -30,7 +30,7 @@ async function crawlCanvasCourse(origin, courseId, fetchImpl = fetch) { const assignmentsUrl = `${origin}/api/v1/courses/${courseId}/assignments?per_page=50`; let assignments = []; try { - const assignRes = await fetchImpl(assignmentsUrl, { credentials: 'include' }); + const assignRes = await fetch(assignmentsUrl, { credentials: 'include' }); if (assignRes.ok) { const assignJson = await assignRes.json(); if (Array.isArray(assignJson)) { diff --git a/extension/background/canvas-crawler.js b/extension/background/canvas-crawler.js index 0c48f1a..8f0a21e 100644 --- a/extension/background/canvas-crawler.js +++ b/extension/background/canvas-crawler.js @@ -13,14 +13,14 @@ export function stripHtml(html) { .trim(); } -export async function crawlCanvasCourse(origin, courseId, fetchImpl = fetch) { +export async function crawlCanvasCourse(origin, courseId) { if (!origin || !courseId) { throw new Error('Canvas origin and courseId are required for course crawling.'); } // 1. Fetch Course details & syllabus const courseUrl = `${origin}/api/v1/courses/${courseId}?include[]=syllabus_body`; - const courseRes = await fetchImpl(courseUrl, { credentials: 'include' }); + const courseRes = await fetch(courseUrl, { credentials: 'include' }); if (!courseRes.ok) { throw new Error(`Failed to fetch Canvas course info (${courseRes.status})`); } @@ -30,7 +30,7 @@ export async function crawlCanvasCourse(origin, courseId, fetchImpl = fetch) { const assignmentsUrl = `${origin}/api/v1/courses/${courseId}/assignments?per_page=50`; let assignments = []; try { - const assignRes = await fetchImpl(assignmentsUrl, { credentials: 'include' }); + const assignRes = await fetch(assignmentsUrl, { credentials: 'include' }); if (assignRes.ok) { const assignJson = await assignRes.json(); if (Array.isArray(assignJson)) { diff --git a/test/test-crawler.js b/test/test-crawler.js index 5665e0d..c5445d6 100644 --- a/test/test-crawler.js +++ b/test/test-crawler.js @@ -32,7 +32,10 @@ const mockFetch = async (url, options) => { }; (async () => { - const courseData = await crawlCanvasCourse('https://canvas.instructure.com', '12345', mockFetch); + const originalFetch = global.fetch; + global.fetch = mockFetch; + + const courseData = await crawlCanvasCourse('https://canvas.instructure.com', '12345'); assert.strictEqual(courseData.title, 'Biology 101: Cell Systems'); assert.ok(fetchOptionsPassed.every(opt => opt && opt.credentials === 'include'), 'fetchImpl must include credentials'); assert.ok(courseData.syllabus.includes('Analyze cellular metabolism')); @@ -43,7 +46,7 @@ const mockFetch = async (url, options) => { // Test 2.5: Missing Error Path Test for crawlCanvasCourse let caughtError1 = false; try { - await crawlCanvasCourse(null, '12345', mockFetch); + await crawlCanvasCourse(null, '12345'); } catch (err) { caughtError1 = true; assert.strictEqual(err.message, 'Canvas origin and courseId are required for course crawling.'); @@ -52,7 +55,7 @@ const mockFetch = async (url, options) => { let caughtError2 = false; try { - await crawlCanvasCourse('https://canvas.instructure.com', null, mockFetch); + await crawlCanvasCourse('https://canvas.instructure.com', null); } catch (err) { caughtError2 = true; assert.strictEqual(err.message, 'Canvas origin and courseId are required for course crawling.'); @@ -75,12 +78,14 @@ const mockFetch = async (url, options) => { let errorThrown = false; try { - await crawlCanvasCourse('https://canvas.instructure.com', 'invalid-id', mockFailedFetch); + global.fetch = mockFailedFetch; + await crawlCanvasCourse('https://canvas.instructure.com', 'invalid-id'); } catch (err) { errorThrown = true; assert.strictEqual(err.message, 'Failed to fetch Canvas course info (404)'); } assert.ok(errorThrown, 'Expected an error to be thrown for failed fetch'); + global.fetch = originalFetch; console.log('✅ Task 2 Canvas crawler tests passed.'); })();