Skip to content

Latest commit

 

History

History
528 lines (419 loc) · 9.28 KB

File metadata and controls

528 lines (419 loc) · 9.28 KB

🧪 API Testing Quick Reference

This document provides sample API requests for testing all new features.


🔐 Authentication

All protected routes require JWT token in header:

Authorization: Bearer <your_jwt_token>

1️⃣ Stripe Payment APIs

Create Checkout Session

POST http://localhost:4000/api/v1/stripe/create-checkout-session
Authorization: Bearer <token>
Content-Type: application/json

{
  "coursesId": ["course_id_1", "course_id_2"],
  "couponCode": "SAVE20"  // optional
}

Verify Payment

POST http://localhost:4000/api/v1/stripe/verify
Authorization: Bearer <token>
Content-Type: application/json

{
  "sessionId": "cs_test_xxx"
}

Get Payment History

GET http://localhost:4000/api/v1/stripe/history
Authorization: Bearer <token>

2️⃣ Cart APIs

Get Cart

GET http://localhost:4000/api/v1/cart
Authorization: Bearer <token>

Add to Cart

POST http://localhost:4000/api/v1/cart/add
Authorization: Bearer <token>
Content-Type: application/json

{
  "courseId": "course_id_here"
}

Remove from Cart

DELETE http://localhost:4000/api/v1/cart/remove
Authorization: Bearer <token>
Content-Type: application/json

{
  "courseId": "course_id_here"
}

Clear Cart

DELETE http://localhost:4000/api/v1/cart/clear
Authorization: Bearer <token>

3️⃣ Wishlist APIs

Get Wishlist

GET http://localhost:4000/api/v1/wishlist
Authorization: Bearer <token>

Toggle Wishlist (Add/Remove)

POST http://localhost:4000/api/v1/wishlist/toggle
Authorization: Bearer <token>
Content-Type: application/json

{
  "courseId": "course_id_here"
}

4️⃣ Quiz APIs

Create Quiz (Instructor)

POST http://localhost:4000/api/v1/quiz/create
Authorization: Bearer <token>
Content-Type: application/json

{
  "courseId": "course_id",
  "subSectionId": "lecture_id",
  "title": "React Basics Quiz",
  "description": "Test your React knowledge",
  "questions": [
    {
      "questionText": "What is JSX?",
      "options": ["JavaScript XML", "Just X", "Java Syntax", "None"],
      "correctAnswer": 0,
      "points": 10
    },
    {
      "questionText": "What is useState?",
      "options": ["A hook", "A function", "A class", "A component"],
      "correctAnswer": 0,
      "points": 10
    }
  ],
  "passingScore": 60,
  "duration": 30,
  "attemptLimit": 3
}

Get Quiz

GET http://localhost:4000/api/v1/quiz/<quiz_id>
Authorization: Bearer <token>

Submit Quiz (Student)

POST http://localhost:4000/api/v1/quiz/submit
Authorization: Bearer <token>
Content-Type: application/json

{
  "quizId": "quiz_id",
  "answers": [
    {
      "questionIndex": 0,
      "selectedAnswer": 0
    },
    {
      "questionIndex": 1,
      "selectedAnswer": 0
    }
  ],
  "timeTaken": 300
}

Get Quiz Results

GET http://localhost:4000/api/v1/quiz/results/<quiz_id>
Authorization: Bearer <token>

5️⃣ Discussion APIs

Create Discussion

POST http://localhost:4000/api/v1/discussion/create
Authorization: Bearer <token>
Content-Type: application/json

{
  "courseId": "course_id",
  "subSectionId": "lecture_id",
  "content": "How do I implement state management?",
  "parentId": null  // null for new thread, or discussion_id for reply
}

Get Discussions for Lecture

GET http://localhost:4000/api/v1/discussion?subSectionId=<lecture_id>
Authorization: Bearer <token>

Get Replies

GET http://localhost:4000/api/v1/discussion/<discussion_id>/replies
Authorization: Bearer <token>

Like Discussion

POST http://localhost:4000/api/v1/discussion/<discussion_id>/like
Authorization: Bearer <token>

Pin Discussion (Instructor)

POST http://localhost:4000/api/v1/discussion/<discussion_id>/pin
Authorization: Bearer <token>

6️⃣ Certificate APIs

Generate Certificate (Student)

POST http://localhost:4000/api/v1/certificate/generate
Authorization: Bearer <token>
Content-Type: application/json

{
  "courseId": "course_id"
}

Get My Certificates

GET http://localhost:4000/api/v1/certificate/my-certificates
Authorization: Bearer <token>

Verify Certificate (Public)

GET http://localhost:4000/api/v1/certificate/verify/<certificate_id>

Download Certificate

GET http://localhost:4000/api/v1/certificate/download/<certificate_id>
Authorization: Bearer <token>

7️⃣ Analytics APIs

Get Instructor Analytics

GET http://localhost:4000/api/v1/analytics/instructor
Authorization: Bearer <token>

Get Course Statistics

GET http://localhost:4000/api/v1/analytics/course/<course_id>
Authorization: Bearer <token>

8️⃣ Admin APIs

Get Platform Analytics

GET http://localhost:4000/api/v1/admin/analytics
Authorization: Bearer <token>

Get Pending Courses

GET http://localhost:4000/api/v1/admin/courses/pending
Authorization: Bearer <token>

Approve Course

PUT http://localhost:4000/api/v1/admin/courses/approve/<course_id>
Authorization: Bearer <token>

Reject Course

PUT http://localhost:4000/api/v1/admin/courses/reject/<course_id>
Authorization: Bearer <token>
Content-Type: application/json

{
  "reason": "Course content needs improvement in module 3."
}

Disable Course

PUT http://localhost:4000/api/v1/admin/courses/disable/<course_id>
Authorization: Bearer <token>

Remove Review

DELETE http://localhost:4000/api/v1/admin/reviews/<review_id>
Authorization: Bearer <token>

Get All Users

GET http://localhost:4000/api/v1/admin/users?role=student&page=1&limit=20
Authorization: Bearer <token>

Toggle User Status

PUT http://localhost:4000/api/v1/admin/users/<user_id>/toggle-status
Authorization: Bearer <token>

9️⃣ Enhanced Rating & Review APIs

Create Rating

POST http://localhost:4000/api/v1/course/createRating
Authorization: Bearer <token>
Content-Type: application/json

{
  "courseId": "course_id",
  "rating": 5,
  "review": "Excellent course! Learned a lot."
}

Get Course Reviews

GET http://localhost:4000/api/v1/course/getReviews/<course_id>

Update Review

PUT http://localhost:4000/api/v1/course/updateReview/<review_id>
Authorization: Bearer <token>
Content-Type: application/json

{
  "rating": 4,
  "review": "Updated: Very good course."
}

Delete Review

DELETE http://localhost:4000/api/v1/course/deleteReview/<review_id>
Authorization: Bearer <token>

🔟 Enhanced Coupon APIs

Create Coupon (Admin)

POST http://localhost:4000/api/v1/coupon/new
Authorization: Bearer <token>
Content-Type: application/json

{
  "code": "SAVE20",
  "discountPercent": 20,
  "discountType": "percent",
  "expiryDate": "2026-12-31",
  "maxUsage": 100,
  "minPurchaseAmount": 50,
  "isActive": true
}

Apply Coupon

GET http://localhost:4000/api/v1/coupon/applyDiscount?coupon=SAVE20&amount=100&courseId=xxx

🧪 Testing with Postman/Thunder Client

1. Create Environment

{
  "baseUrl": "http://localhost:4000/api/v1",
  "token": "your_jwt_token_here"
}

2. Set Headers

Authorization: Bearer {{token}}
Content-Type: application/json

3. Import Collection

Save requests as a Postman collection for easy testing.


🔑 Test Data Examples

Test User Roles

// Student
{
  "email": "student@test.com",
  "password": "password123",
  "accountType": "student"
}

// Instructor
{
  "email": "instructor@test.com",
  "password": "password123",
  "accountType": "instructor"
}

// Admin
{
  "email": "admin@test.com",
  "password": "password123",
  "accountType": "admin"
}

Test Stripe Card

Card Number: 4242 4242 4242 4242
Expiry: Any future date (e.g., 12/28)
CVC: Any 3 digits (e.g., 123)

📝 Response Examples

Successful Response

{
  "success": true,
  "message": "Operation successful",
  "data": { /* response data */ }
}

Error Response

{
  "success": false,
  "message": "Error message here"
}

🚀 Quick Test Workflow

  1. Setup:

    • Start backend server
    • Get JWT token (login)
    • Set token in headers
  2. Test Cart Flow:

    GET /cart → Add course → GET /cart → Remove → Clear
    
  3. Test Wishlist Flow:

    GET /wishlist → Toggle course → GET /wishlist
    
  4. Test Payment Flow:

    Add to cart → Create checkout → Pay → Verify → Check enrollment
    
  5. Test Quiz Flow:

    Create quiz → Get quiz → Submit → Get results
    
  6. Test Discussion Flow:

    Create thread → Reply → Like → Pin
    

🔍 Debugging Tips

Check Server Logs

Monitor terminal for errors and request logs.

Verify Database

Use MongoDB Compass to check data creation.

Test Webhooks

Use Stripe CLI to test webhook locally:

stripe listen --forward-to localhost:4000/api/v1/stripe/webhook

Check Environment

Verify all .env variables are set correctly.


📚 Additional Resources


Happy Testing! 🧪