# Path: prestans/http.py
# class STATUS:
#     """
#     The following is a selection of HTTP status codes that are recommended for use 
#     by REST services. You are welcome to use other available status codes.
#     
#     http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
#     """
# 
#     # Informational
#     CONTINUE = 100
#     SWITCHING_PROTOCOLS = 101
#     PROCESSING = 102
#     EARLY_HINTS = 103
# 
#     # Success
#     OK = 200
#     CREATED = 201
#     ACCEPTED = 202
#     NON_AUTHORITATIVE_INFORMATION = 203
#     NO_CONTENT = 204
#     RESET_CONTENT = 205
#     PARTIAL_CONTENT = 206
#     MULTI_STATUS = 207
#     ALREADY_REPORTED = 208
#     IM_USED = 226
# 
#     # Redirection
#     MULTIPLE_CHOICES = 300
#     MOVED_PERMANENTLY = 301
#     FOUND = 302
#     SEE_OTHER = 303
#     NOT_MODIFIED = 304
#     USE_PROXY = 305
#     SWITCH_PROXY = 306
#     TEMPORARY_REDIRECT = 307
#     PERMANENT_REDIRECT = 308
# 
#     # Client Error
#     BAD_REQUEST = 400
#     UNAUTHORIZED = 401
#     PAYMENT_REQUIRED = 402
#     FORBIDDEN = 403
#     NOT_FOUND = 404
#     METHOD_NOT_ALLOWED = 405
#     NOT_ACCEPTABLE = 406
#     PROXY_AUTH_REQUIRED = 407
#     REQUEST_TIMEOUT = 408
#     CONFLICT = 409
#     GONE = 410
#     LENGTH_REQUIRED = 411
#     PRECONDITION_FAILED = 412
#     PAYLOAD_TOO_LARGE = 413
#     URI_TOO_LONG = 414
#     UNSUPPORTED_MEDIA_TYPE = 415
#     RANGE_NOT_SATISFIABLE = 416
#     EXCEPTION_FAILED = 417
#     TEAPOT = 418
#     AUTHENTICATION_TIMEOUT = 419
#     MISDIRECTED_REQUEST = 421
#     UNPROCESSABLE_ENTITY = 422
#     LOCKED = 423
# 
#     # Server Error
#     INTERNAL_SERVER_ERROR = 500
#     NOT_IMPLEMENTED = 501
#     BAD_GATEWAY = 502
#     SERVICE_UNAVAILABLE = 503
#     GATEWAY_TIMEOUT = 504
#     HTTP_VERSION_NOT_SUPPORTED = 505
#     VARIANT_ALSO_NEGOTIATES = 506
#     INSUFFICIENT_STORAGE = 507
#     LOOP_DETECTED = 508
#     NOT_EXTENDED = 510
#     NETWORK_AUTHENTICATION_REQUIRED = 511
# 
# Path: prestans/http.py
# class VERB:
#     """ 
#     Encapsulates HTTP Verbs supported by the prestans framework in accordance
#     with the REST definition. Each prestans REST handler must supporto at least
#     one HTTP verb.
# 
#     HEAD is similar to a GET but it does not return a response.
#     """
# 
#     GET = "GET"
#     HEAD = "HEAD"
#     POST = "POST"
#     PUT = "PUT"
#     PATCH = "PATCH"
#     DELETE = "DELETE"
#     OPTIONS = "OPTIONS"
# 
#     @classmethod
#     def is_supported_verb(cls, method):
#         return method in [VERB.GET, VERB.HEAD, VERB.POST, VERB.PUT, VERB.PATCH, VERB.DELETE, VERB.OPTIONS]


import unittest
from prestans.http import STATUS
from prestans.http import VERB


class StatusTest(unittest.TestCase):
    def test_codes(self):
        self.assertEqual(STATUS.CONTINUE, 100)
        self.assertEqual(STATUS.SWITCHING_PROTOCOLS, 101)
        self.assertEqual(STATUS.PROCESSING, 102)
        self.assertEqual(STATUS.EARLY_HINTS, 103)

        self.assertEqual(STATUS.OK, 200)
        self.assertEqual(STATUS.CREATED, 201)
        self.assertEqual(STATUS.ACCEPTED, 202)
        self.assertEqual(STATUS.NON_AUTHORITATIVE_INFORMATION, 203)
        self.assertEqual(STATUS.NO_CONTENT, 204)
        self.assertEqual(STATUS.RESET_CONTENT, 205)
        self.assertEqual(STATUS.PARTIAL_CONTENT, 206)
        self.assertEqual(STATUS.MULTI_STATUS, 207)
        self.assertEqual(STATUS.ALREADY_REPORTED, 208)
        self.assertEqual(STATUS.IM_USED, 226)

        self.assertEqual(STATUS.MULTIPLE_CHOICES, 300)
        self.assertEqual(STATUS.MOVED_PERMANENTLY, 301)
        self.assertEqual(STATUS.FOUND, 302)
        self.assertEqual(STATUS.SEE_OTHER, 303)
        self.assertEqual(STATUS.NOT_MODIFIED, 304)
        self.assertEqual(STATUS.USE_PROXY, 305)
        self.assertEqual(STATUS.SWITCH_PROXY, 306)
        self.assertEqual(STATUS.TEMPORARY_REDIRECT, 307)
        self.assertEqual(STATUS.PERMANENT_REDIRECT, 308)


# Path: prestans/http.py
# class STATUS:
#     """
#     The following is a selection of HTTP status codes that are recommended for use 
#     by REST services. You are welcome to use other available status codes.
#     
#     http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
#     """
# 
#     # Informational
#     CONTINUE = 100
#     SWITCHING_PROTOCOLS = 101
#     PROCESSING = 102
#     EARLY_HINTS = 103
# 
#     # Success
#     OK = 200
#     CREATED = 201
#     ACCEPTED = 202
#     NON_AUTHORITATIVE_INFORMATION = 203
#     NO_CONTENT = 204
#     RESET_CONTENT = 205
#     PARTIAL_CONTENT = 206
#     MULTI_STATUS = 207
#     ALREADY_REPORTED = 208
#     IM_USED = 226
# 
#     # Redirection
#     MULTIPLE_CHOICES = 300
#     MOVED_PERMANENTLY = 301
#     FOUND = 302
#     SEE_OTHER = 303
#     NOT_MODIFIED = 304
#     USE_PROXY = 305
#     SWITCH_PROXY = 306
#     TEMPORARY_REDIRECT = 307
#     PERMANENT_REDIRECT = 308
# 
#     # Client Error
#     BAD_REQUEST = 400
#     UNAUTHORIZED = 401
#     PAYMENT_REQUIRED = 402
#     FORBIDDEN = 403
#     NOT_FOUND = 404
#     METHOD_NOT_ALLOWED = 405
#     NOT_ACCEPTABLE = 406
#     PROXY_AUTH_REQUIRED = 407
#     REQUEST_TIMEOUT = 408
#     CONFLICT = 409
#     GONE = 410
#     LENGTH_REQUIRED = 411
#     PRECONDITION_FAILED = 412
#     PAYLOAD_TOO_LARGE = 413
#     URI_TOO_LONG = 414
#     UNSUPPORTED_MEDIA_TYPE = 415
#     RANGE_NOT_SATISFIABLE = 416
#     EXCEPTION_FAILED = 417
#     TEAPOT = 418
#     AUTHENTICATION_TIMEOUT = 419
#     MISDIRECTED_REQUEST = 421
#     UNPROCESSABLE_ENTITY = 422
#     LOCKED = 423
# 
#     # Server Error
#     INTERNAL_SERVER_ERROR = 500
#     NOT_IMPLEMENTED = 501
#     BAD_GATEWAY = 502
#     SERVICE_UNAVAILABLE = 503
#     GATEWAY_TIMEOUT = 504
#     HTTP_VERSION_NOT_SUPPORTED = 505
#     VARIANT_ALSO_NEGOTIATES = 506
#     INSUFFICIENT_STORAGE = 507
#     LOOP_DETECTED = 508
#     NOT_EXTENDED = 510
#     NETWORK_AUTHENTICATION_REQUIRED = 511
# 
# Path: prestans/http.py
# class VERB:
#     """ 
#     Encapsulates HTTP Verbs supported by the prestans framework in accordance
#     with the REST definition. Each prestans REST handler must supporto at least
#     one HTTP verb.
# 
#     HEAD is similar to a GET but it does not return a response.
#     """
# 
#     GET = "GET"
#     HEAD = "HEAD"
#     POST = "POST"
#     PUT = "PUT"
#     PATCH = "PATCH"
#     DELETE = "DELETE"
#     OPTIONS = "OPTIONS"
# 
#     @classmethod
#     def is_supported_verb(cls, method):
#         return method in [VERB.GET, VERB.HEAD, VERB.POST, VERB.PUT, VERB.PATCH, VERB.DELETE, VERB.OPTIONS]


# Path: tests/test_http.py
import unittest
from prestans.http import STATUS
from prestans.http import VERB



class StatusTest(unittest.TestCase):
    def test_codes(self):
        self.assertEqual(STATUS.CONTINUE, 100)
        self.assertEqual(STATUS.SWITCHING_PROTOCOLS, 101)
        self.assertEqual(STATUS.PROCESSING, 102)
        self.assertEqual(STATUS.EARLY_HINTS, 103)

        self.assertEqual(STATUS.OK, 200)
        self.assertEqual(STATUS.CREATED, 201)
        self.assertEqual(STATUS.ACCEPTED, 202)
        self.assertEqual(STATUS.NON_AUTHORITATIVE_INFORMATION, 203)
        self.assertEqual(STATUS.NO_CONTENT, 204)
        self.assertEqual(STATUS.RESET_CONTENT, 205)
        self.assertEqual(STATUS.PARTIAL_CONTENT, 206)
        self.assertEqual(STATUS.MULTI_STATUS, 207)
        self.assertEqual(STATUS.ALREADY_REPORTED, 208)
        self.assertEqual(STATUS.IM_USED, 226)

        self.assertEqual(STATUS.MULTIPLE_CHOICES, 300)
        self.assertEqual(STATUS.MOVED_PERMANENTLY, 301)
        self.assertEqual(STATUS.FOUND, 302)
        self.assertEqual(STATUS.SEE_OTHER, 303)
        self.assertEqual(STATUS.NOT_MODIFIED, 304)
        self.assertEqual(STATUS.USE_PROXY, 305)
        self.assertEqual(STATUS.SWITCH_PROXY, 306)
        self.assertEqual(STATUS.TEMPORARY_REDIRECT, 307)
        self.assertEqual(STATUS.PERMANENT_REDIRECT, 308)


        self.assertEqual(STATUS.BAD_REQUEST, 400)