cyntaria/UniPal-Backend

[POST] A New Timeslot

arafaysaleem opened this issue · 0 comments

Summary

As an admin, I should be able to create timeslots, so that I can select one while creating classes.

Acceptance Criteria

GIVEN an admin is creating a timeslot entry in the app
WHEN the app hits the /timeslots endpoint with a valid POST request, containing:

  • start_time
  • end_time
  • slot_number

THEN the app should receive a status 201
AND in the response, the following information should be returned:

  • headers
  • timeslot_id

Sample Request/Sample Response

headers: {
    error: 0,
    message: "..."
}
body: {
    "timeslot_id": 1,
    "affected_rows": 1
}

Resources

  • Development URL: {Here goes a URL to the feature on development API}
  • Production URL: {Here goes a URL to the feature on production API}

Dev Notes

{Some complementary notes if necessary}

Testing Notes

Scenario 1: POST request is successful

  1. Create a new timeslot entry with a POST request to /timeslots endpoint and ensure a 201 status code is returned.
  2. Use the id returned by the response in a subsequent GET request to /timeslots/:id endpoint and ensure a 200 status code is returned.
  3. Ensure the response contains an timeslot with the correct information i.e. matching the initially sent body.
  4. Clean up the database by sending a DELETE request to /timeslots/:id endpoint and ensure a 200 status code is returned.

Scenario 2: POST request is unsuccessful due to time conflicts

  1. Send a POST request to /timeslots endpoint with either a conflicting start_time or end_time.
  2. Ensure a 500 status code is returned.
  3. And the response headers' code parameter should contain "CreateFailedException".
  4. And the response headers' message parameter should contain "Timeslot conflicts found".

Scenario 3: POST request is incorrect

  1. Send a POST request to /timeslots endpoint with an incorrect key name in the body
  2. Ensure a 422 status code is returned
  3. And the response headers' code parameter should contain "InvalidPropertiesException".
  4. And the response headers' data parameter should contain the name of the invalid parameter.

Scenario 4: POST request is forbidden

  1. Send a POST request to /timeslots endpoint with a student account token.
  2. Ensure a 403 forbidden status code is returned.
  3. And the response headers' code parameter should contain "ForbiddenException"

Scenario 5: POST request is unauthorized

  1. Send a POST request to /timeslots endpoint without an authorization token
  2. Ensure a 401 unauthorized status code is returned.
  3. And the response headers' code parameter should contain "TokenMissingException"