# IBL Project Test Documentation

Hello, this article is a breakdown of the project test that I am doing. It entails all the resources you might need to help you to understand how the project works from the beginning of it' s development to the last part.

### PROJECT BREAKDOWN

Task: The task is to set up a special learning platform called Open edX and develop a feature that saves and interacts with user greetings securely.

1. Setting up Open edX:
    
    * Open edX is like a special classroom on the computer where students can learn online.
        
    * We need to set up Open edX using a special method called Docker or using a pre-configured platform called "ibl-edx-ce."
        
    * This will create a place where students can access their courses and learn online.
        
2. Developing a Greeting Feature:
    
    * We want to create a feature that allows students to say a greeting and do some special things with it.
        
    * We will create a special part of the system called an API endpoint that students can use to send their greetings.
        
    * This API endpoint will be secured using OAuth2, which means only the right students can use it.
        
    * Saving and Logging Greetings:
        
        * When students send their greetings, we want to save them and keep a record.
            
        * The greetings will be saved in a special place called the database, so we can see them later.
            
        * We will also log the greetings in a special logbook, like a record of all the greetings students have sent.
            
    * Special Rule for the Greeting "Hello":
        
        * If a student sends the greeting "hello," we want to do something special.
            
        * We will call the greeting endpoint again, but this time with the word "goodbye" as a special message.
            

* This is like playing a game and saying "hello" to get a response of "goodbye."
    
* But we need to be careful not to repeat saying "hello" because it will cause a problem and the program will crash.
    

### Tools, Frameworks languages and Resources required for this project to be successful

1. Tools:
    
    * Docker: A tool that allows you to create and manage containers for running applications.
        
    * Open edX: An online learning platform that provides tools for creating and delivering online courses.
        
    * Tutor: A platform that simplifies the deployment and management of Open edX using Docker.
        
2. Languages:
    
    * Python: A programming language used for developing the backend of the Open edX platform and the REST API endpoint.
        
    * Django: A Python web framework used for building web applications, including the Open edX platform.
        
    * OAuth2: A security framework used for securing the API endpoint and controlling access to it.
        
3. Resources:
    
    * Documentation: Detailed instructions and guides for setting up Open edX, Docker, and Tutor.
        
    * Libraries and Frameworks: Python libraries such as Django and OAuth2 libraries to help with development.
        
    * Learning Management System (LMS) Logs: A feature within Open edX that keeps track of system activities, including logged greetings.
        
    * Django Admin: A built-in administrative interface in Django for managing database records, including saved greetings.
        

### Project Building Roadmap

1. Familiarize Yourself with Open edX and Docker:
    
    * Explore Open edX documentation and resources to understand its features and functionalities.
        
    * Learn about Docker and how it can be used to set up and manage Open edX instances.
        
2. Set Up Open edX:
    
    * Choose either the Dockerized Tutor release or the pre-configured "ibl-edx-ce" platform.
        
    * Follow the installation instructions provided in the respective documentation.
        
    * Verify that your Open edX instance is up and running correctly.
        
3. Understand the Greeting Feature Requirements:
    
    * Review the requirements for the extension that exposes the REST API endpoint.
        
    * Make sure you understand the expected behavior, such as logging, saving greetings, and special handling for the "hello" greeting.
        
4. Develop the REST API Endpoint:
    
    * Use Python and Django to create the API endpoint that accepts and processes greetings.
        
    * Implement the necessary logic to log the greetings and save them in the database.
        
    * Secure the endpoint using OAuth2, following OAuth2 documentation and libraries for Django.
        
5. Test and Debug the API Endpoint:
    
    * Use tools like Postman or cURL to test the API endpoint and ensure it functions as expected.
        
    * Debug any issues or errors that arise during testing.
        
    * Make sure the greetings are properly logged and saved in the Django Admin interface.
        
6. Handle the Special "hello" Greeting:
    
    * Implement the logic to handle the special case when the greeting is "hello."
        
    * Make an OAuth2-secured API call to the greeting endpoint with "goodbye" as a parameter.
        
    * Ensure that the code avoids recursive calls with "hello" to prevent crashing.
        
7. Conduct Comprehensive Testing:
    
    * Test the entire system, including the Open edX instance, API endpoint, and special greeting functionality.
        
    * Verify that greetings are logged, saved, and handled correctly.
        
    * Perform both positive and negative test scenarios to ensure robustness.
        
8. Refine and Optimize:
    
    * Review your code and project structure for any potential improvements or optimizations.
        
    * Refactor, if necessary, to enhance readability, maintainability, and performance.
        
    * Seek feedback from colleagues or mentors and make any recommended refinements.
        
9. Documentation and Deployment:
    
    * Document the setup and usage instructions for your project.
        
    * Create documentation for the API endpoint, including its inputs, outputs, and authentication requirements.
        
    * Prepare for deployment by ensuring you have the necessary infrastructure and resources in place.
