From 7805df24da5ae32ae98f8a796f2c91d8dcbf8611 Mon Sep 17 00:00:00 2001 From: EjPlatzer Date: Fri, 20 May 2022 13:17:42 -0400 Subject: [PATCH] Remove defunct Pytests --- .gitignore | 15 - Gordon360.sln | 8 +- Gordon360/.config/dotnet-tools.json | 12 + Gordon360/Gordon360.csproj | 23 +- MakePublishProfiles.md | 27 - Tests/ApiEndpoints/colors.py | 11 - Tests/ApiEndpoints/gordon_360_tests.py | 8 - Tests/ApiEndpoints/gordon_360_tests_leader.py | 1693 ------------- Tests/ApiEndpoints/gordon_360_tests_member.py | 2238 ----------------- Tests/ApiEndpoints/profile.jpg | Bin 27022 -> 0 bytes Tests/ApiEndpoints/pytest_components.py | 45 - Tests/ApiEndpoints/test_admin_pytest.py | 131 - Tests/ApiEndpoints/test_allaccount_pytest.py | 109 - .../ApiEndpoints/test_allactivities_pytest.py | 315 --- .../test_allauthentication_pytest.py | 60 - Tests/ApiEndpoints/test_alldining_pytest.py | 70 - Tests/ApiEndpoints/test_allemail_pytest.py | 168 -- Tests/ApiEndpoints/test_allevents_pytest.py | 196 -- .../ApiEndpoints/test_allhousingapp_pytest.py | 280 --- .../ApiEndpoints/test_allmembership_pytest.py | 639 ----- .../test_allmembershiprequest_pytest.py | 577 ----- .../ApiEndpoints/test_allmyschedule_pytest.py | 162 -- Tests/ApiEndpoints/test_allnews_pytest.py | 175 -- Tests/ApiEndpoints/test_allprofile_pytest.py | 383 --- Tests/ApiEndpoints/test_allschedule_pytest.py | 58 - .../test_allschedulecontrol_pytest.py | 107 - Tests/ApiEndpoints/test_allsession_pytest.py | 118 - .../test_allstudentemployment_pytest.py | 36 - .../test_allvictorypromise_pytest.py | 80 - .../test_allwellnesscheck_pytest.py | 321 --- Tests/ApiEndpoints/test_gordon360_pytest.py | 129 - get-route-list.py | 70 - get-route-list.sh | 11 - 33 files changed, 21 insertions(+), 8254 deletions(-) create mode 100644 Gordon360/.config/dotnet-tools.json delete mode 100644 MakePublishProfiles.md delete mode 100644 Tests/ApiEndpoints/colors.py delete mode 100644 Tests/ApiEndpoints/gordon_360_tests.py delete mode 100644 Tests/ApiEndpoints/gordon_360_tests_leader.py delete mode 100644 Tests/ApiEndpoints/gordon_360_tests_member.py delete mode 100644 Tests/ApiEndpoints/profile.jpg delete mode 100644 Tests/ApiEndpoints/pytest_components.py delete mode 100644 Tests/ApiEndpoints/test_admin_pytest.py delete mode 100644 Tests/ApiEndpoints/test_allaccount_pytest.py delete mode 100644 Tests/ApiEndpoints/test_allactivities_pytest.py delete mode 100644 Tests/ApiEndpoints/test_allauthentication_pytest.py delete mode 100644 Tests/ApiEndpoints/test_alldining_pytest.py delete mode 100644 Tests/ApiEndpoints/test_allemail_pytest.py delete mode 100644 Tests/ApiEndpoints/test_allevents_pytest.py delete mode 100644 Tests/ApiEndpoints/test_allhousingapp_pytest.py delete mode 100644 Tests/ApiEndpoints/test_allmembership_pytest.py delete mode 100644 Tests/ApiEndpoints/test_allmembershiprequest_pytest.py delete mode 100644 Tests/ApiEndpoints/test_allmyschedule_pytest.py delete mode 100644 Tests/ApiEndpoints/test_allnews_pytest.py delete mode 100644 Tests/ApiEndpoints/test_allprofile_pytest.py delete mode 100644 Tests/ApiEndpoints/test_allschedule_pytest.py delete mode 100644 Tests/ApiEndpoints/test_allschedulecontrol_pytest.py delete mode 100644 Tests/ApiEndpoints/test_allsession_pytest.py delete mode 100644 Tests/ApiEndpoints/test_allstudentemployment_pytest.py delete mode 100644 Tests/ApiEndpoints/test_allvictorypromise_pytest.py delete mode 100644 Tests/ApiEndpoints/test_allwellnesscheck_pytest.py delete mode 100644 Tests/ApiEndpoints/test_gordon360_pytest.py delete mode 100644 get-route-list.py delete mode 100755 get-route-list.sh diff --git a/.gitignore b/.gitignore index 292ac9349..8c3b39d19 100644 --- a/.gitignore +++ b/.gitignore @@ -268,20 +268,5 @@ paket-files/ .idea/ *.sln.iml -## Secret Files -secrets.config -test_credentials.py -credentials.py - # Environment Specific app settings appsettings.*.json - -## Python -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -## Virtual Env -venv/ -ENV/ diff --git a/Gordon360.sln b/Gordon360.sln index e7ba3d781..07b07ebf7 100644 --- a/Gordon360.sln +++ b/Gordon360.sln @@ -13,14 +13,14 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU - Gordon360|Any CPU = Gordon360|Any CPU + Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {47DF568B-4E41-4398-BD88-B6BAB507334A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {47DF568B-4E41-4398-BD88-B6BAB507334A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {47DF568B-4E41-4398-BD88-B6BAB507334A}.Gordon360|Any CPU.ActiveCfg = Release|Any CPU - {47DF568B-4E41-4398-BD88-B6BAB507334A}.Gordon360|Any CPU.Build.0 = Release|Any CPU - {47DF568B-4E41-4398-BD88-B6BAB507334A}.Gordon360|Any CPU.Deploy.0 = Release|Any CPU + {47DF568B-4E41-4398-BD88-B6BAB507334A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {47DF568B-4E41-4398-BD88-B6BAB507334A}.Release|Any CPU.Build.0 = Release|Any CPU + {47DF568B-4E41-4398-BD88-B6BAB507334A}.Release|Any CPU.Deploy.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Gordon360/.config/dotnet-tools.json b/Gordon360/.config/dotnet-tools.json new file mode 100644 index 000000000..e80b80ff0 --- /dev/null +++ b/Gordon360/.config/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "dotnet-ef": { + "version": "6.0.5", + "commands": [ + "dotnet-ef" + ] + } + } +} \ No newline at end of file diff --git a/Gordon360/Gordon360.csproj b/Gordon360/Gordon360.csproj index af29a2e8d..077aba1a3 100644 --- a/Gordon360/Gordon360.csproj +++ b/Gordon360/Gordon360.csproj @@ -1,6 +1,7 @@  Exe + Debug;Release bin\ @@ -11,22 +12,13 @@ bin\ - - Designer - + <_WebToolingArtifacts Remove="Properties\PublishProfiles\Production.pubxml" /> + <_WebToolingArtifacts Remove="Properties\PublishProfiles\Train.pubxml" /> + + Always - - Designer - - - Web.config - - - Web.config - Designer - @@ -40,11 +32,6 @@ - - - - - diff --git a/MakePublishProfiles.md b/MakePublishProfiles.md deleted file mode 100644 index 5102cdbcc..000000000 --- a/MakePublishProfiles.md +++ /dev/null @@ -1,27 +0,0 @@ -# How to create the Publish Profiles to publish the API to the Sites - -## Table of Contents - -- [Why we need Publish Profiles](#why-we-need-publish-profiles) -- [Why don't we have the publish profiles](#why-dont-we-have-the-publish-profiles) -- [How to create the Publish Profiles](#how-to-create-the-publish-profiles) - -## Why we need Publish Profiles - -The publish profiles are a tool used by Visual Studio to publish the latest build of a project (in this case, the API). While it is possible to publish manually, it takes more time, is harder to teach, and easier to mess up. - -## Why Don't we have the Publish Profiles - -There are a few possibilities: -1. You cloned the API into a new location. Since the publish profiles are tracked by Visual Studio and not Git, a new clone of the API won't include the profiles. -2. They somehow got deleted. - -## How to Create the Publish Profiles - -1. Follow the instructions for deploying to the API site [Deploying to the API site](README.md#deploying-to-the-api-site) until you have to choose a publish profile. If you see the publish page with a DEV or Prod profile, your profiles already exist. You're all set. Otherwise, you will either see the pop up window to pick a publish target, or else you can click start or new profile from the publish menu. -2. Within the "Pick a Publish Target" window, select Folder, and then browse the files. You want to select `Data (F:)` -> `Sites` -> `360Api` or `360ApiTrain` (the former for Prod, the latter for DEV). -3. Your Folder should now be set to `F:\Sites\360Api(Train)`. Select `Advanced` beneath the filepath. If you are making the DEV profile, set the configuration to Debug. Otherwise, leave it as Release for Prod. -4. Click `Create Profile`. -5. Finally, click the `Actions` drop down and rename profile to either DEV or Prod. - -Now, you have your publish profiles. Simply select the one you want to use and click `Publish`. diff --git a/Tests/ApiEndpoints/colors.py b/Tests/ApiEndpoints/colors.py deleted file mode 100644 index 508b8d297..000000000 --- a/Tests/ApiEndpoints/colors.py +++ /dev/null @@ -1,11 +0,0 @@ -# Printing in color. - -HEADER = '' -OKBLUE = '' -OKGREEN = '' -WARNING = '' -FAIL = '' -ENDC = '' -BOLD = '' -UNDERLINE = '' - diff --git a/Tests/ApiEndpoints/gordon_360_tests.py b/Tests/ApiEndpoints/gordon_360_tests.py deleted file mode 100644 index 4449220c3..000000000 --- a/Tests/ApiEndpoints/gordon_360_tests.py +++ /dev/null @@ -1,8 +0,0 @@ -import gordon_360_tests_member -import gordon_360_tests_leader - - -if __name__ == '__main__': - gordon_360_tests_member.main() - gordon_360_tests_leader.main() - diff --git a/Tests/ApiEndpoints/gordon_360_tests_leader.py b/Tests/ApiEndpoints/gordon_360_tests_leader.py deleted file mode 100644 index c3b29b6b2..000000000 --- a/Tests/ApiEndpoints/gordon_360_tests_leader.py +++ /dev/null @@ -1,1693 +0,0 @@ -# Activity Leader Test Suite for Project Raymond -# Some of the tests are replicates from the Regular member suite. -# This repetitions is intended. We want to make sure some permission don't accross roles. - - -from test_components import requests -from test_components import TestCase - -# Public configuration options -import test_config -# Private configuration options -import test_credentials -import test_components as api - -# Constants -LEADERSHIP_POSITIONS = test_config.leadership_positions -REQUEST_STATUS_APPROVED = 'Approved' -REQUEST_STATUS_DENIED = 'Denied' -REQUEST_STATUS_PENDING = 'Pending' - - -# Configuration Details -username = test_credentials.username_activity_leader -password = test_credentials.password_activity_leader -my_id_number = test_credentials.id_number_activity_leader -grant_payload = { 'username':username, 'password':password, 'grant_type':'password' } - -random_id_number = test_config.random_id_number # When we need to impersonate someone -activity_code = test_config.activity_code # The activity we are a leader of -hostURL = test_config.hostURL - - -# Runner -def main(): - """ Test Runner - - Runs all subclasses of the TestCase class. - """ - # Create an authorized session to test authorized calls. - r = requests.post(hostURL+'token',grant_payload) - access_token = r.json()["access_token"] - authorization_header = "Bearer " + access_token - authorized_session = requests.Session() - authorized_session.verify = True - authorized_session.headers.update({ "Authorization":authorization_header }) - - print ('****************************************') - print ('TESTING GORDON 360 AS ACTIVITY LEADER...') - print ('****************************************') - testCount = 0 - # Loop through all Test Cases and run tests. - for cls in TestCase.__subclasses__(): - if '___activity_leader' in cls.__name__: - if cls.__name__ == 'authenticate_with_valid_credentials': - testclass = cls() - testclass.runTest() - testCount += 1 - else: - testclass = cls(session=authorized_session) - testclass.runTest() - testCount += 1 - print ('Ran {0} tests.'.format(testCount)) - - -# # # # # # # # # # # # -# AUTHENTICATION TESTS # -# # # # # # # # # # # # - -class authenticate_with_valid_credentials___activity_leader(TestCase): - """ Given valid credentials, verify that authentication is successful. - - Expectations: - Endpoint -- token/ - Expected Status code -- 200 Ok - Expected Content -- Json Object with access_token attribute. - """ - - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'token' - self.token_payload = { 'username':username, 'password':password, 'grant_type':'password' } - - def test(self): - response = api.post(self.session, self.url, self.token_payload) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json, got {0}.'.format(response.text)) - else: - if not 'access_token' in response.json(): - self.log_error('Expected access token in response, got {0}.'.format(response.json())) - - -# # # # # # # # # # # -# MEMBERSHIP TESTS # -# # # # # # # # # # # -class get_all_memberships___activity_leader(TestCase): - """ Test retrieving all membership resources. - - Pre-conditions: - Valid Authentication Header. - Expectations: - Endpoint -- memberships/ - Expected Status code -- 200 Ok - Expected Content -- List - """ - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/memberships/' - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response, got {0}.'.format(response.text)) - else: - if not (type(response.json()) is list): - self.log_error('Response was not a list') - - -class get_one_membership___activity_leader(TestCase): - """ Retrieve a specific membership resource. - - Pre-conditions: - Valid Authentication header - Expectations: - Endpoint -- api/memberships/:id - Expected Status Code -- 200 OK - Expected Content -- A Json Object with a MembershipID attribute. - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/memberships/' - self.membershipID = -1 - - - def setup(self): - # Find a valid membership id - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Error in setup for {0}. Expected 200 OK, got {1}.'.format(self.test_name, response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Error in setup for {0}. Expected json response body, got {1}.'.format(self.test_name, response.text)) - else: - try: - self.membershipID = response.json()[0]['MembershipID'] - self.url = self.url + str(self.membershipID) - except KeyError: - self.log_error('Error in setup for {0}. Expected MembershipID in response body, got {1}.'.format(self.test_name, self.response.json())) - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - if not ('MembershipID' in response.json()): - self.log_error('Expected MembershipID in jsob object, got {0}.'.format(response.json())) - -class get_all_my_memberships___activity_leader(TestCase): - """ Verify that a regular member can fetch memberships associated with them. - - Pre-Conditions: - Valid Authentication Header. - Expectations: - Endpoints -- api/memberships/student/:id - Expected Status Code -- 200 OK - Expected Reponse Content -- A list of json objects - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/memberships/student/' + str(my_id_number) - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - if not (type(response.json()) is list): - self.log_error('Response was not a list.') - - - -class get_all_memberships_for_someone_else___activity_leader(TestCase): - """ Verify that regular member can fetch someone else's memberships. - - Pre-Conditions: - Valid Authentication Header. - Authenticated as regular member. - Expectations - Endpoint -- api/memberships/student/:id - Expected Status Code -- 200 OK. - Expected Response Content -- A list of json objects. - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/memberships/student/' + str(random_id_number) - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - if not (type(response.json()) is list): - self.log_error('Response was not a list') - - - - -class get_memberships_for_an_activity___activity_leader(TestCase): - """ Verify that a regular member can fetch memberships for an activity. - - Pre-Conditions: - Valid Authentication Header. - Expectations: - Endpoint -- api/memberships/activity/:id - Expected Status Code -- 200 OK - Expected Response Content -- A list of json Objects. - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/memberships/activity/' + activity_code - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - if not (type(response.json()) is list): - self.log_error('Response was not a list.') - - - -class get_leader_memberships_for_an_activity___activity_leader(TestCase): - """ Verify that a regular member can fetch all leaders for a specific activity. - - Pre-Conditions: - Valid Authentication Header. - Authenticated as regular member. - Expectations: - Endpoint -- api/memberships/activity/:id/leaders - Expected Status Code -- 200 OK - Expected Response Content -- A list of json objects. - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/memberships/activity/' + activity_code + '/leaders' - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - if not (type(response.json()) is list): - self.log_error('Response was not a list.') - - -class post_new_guest_membership_for_someone_else__activity_leader(TestCase): - """ Verify that an activity leader can create a Guest membership for someone. - - Pre-conditions: - Valid Authentication Header. - Expectations: - Endpoints -- api/memberships/ - Expected Statis Cpde -- 201 Created. - Expected Content -- A Json object with a MEMBERSHIP_ID attribute. - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/memberships/' - self.data = { - 'ACT_CDE': activity_code, - 'SESS_CDE' : '201501', - 'ID_NUM': random_id_number, - 'PART_CDE':'GUEST', - 'BEGIN_DTE':'06/10/2016', - 'END_DTE':'07/16/2016', - 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' - } - # We will get the actual id when we post. - # Setting it -1 to check later that we got an id from the post. - self.createdMembershipID = -1 - - def test(self): - response = api.postAsJson(self.session, self.url, self.data) - if not response.status_code == 201: - self.log_error('Expected 201 Created, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - if not ('MEMBERSHIP_ID' in response.json()): - self.log_error('Expected MEMBERSHIP_ID in json response, got {0}.'.format(response.json())) - else: - self.createdMembershipID = response.json()['MEMBERSHIP_ID'] - - def cleanup(self): - # We try to delete the membership we created - if self.createdMembershipID < 0: # The creation wasn't successfull - self.log_error('Expected valid membership ID, got {0}.'.format(self.createdMembershipID)) - else: - d = api.delete(self.session, self.url + str(self.createdMembershipID)) - if not d.status_code == 200: - self.log_error('Error in cleanup for {0}'.format(self.test_name)) - - return - -class post_new_membership_for_someone___activity_leader(TestCase): - """ Verify that an activity leader can create a membership for someone. - - Pre-Conditions: - Valid Authentication Header - Authenticated as Activity Leader - Expectations: - Endpoint -- api/memberships/ - Expected Status Code -- 200 OK - Expected Content -- A json response with the created membership - """ - - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/memberships/' - self.data = {} - self.createdMembershipID = -1 - - def setup(self): - # Add a new participant - self.data = { - 'ACT_CDE': activity_code, - 'SESS_CDE' : '201501', - 'ID_NUM': random_id_number, - 'PART_CDE':'PART', - 'BEGIN_DTE':'06/10/2016', - 'END_DTE':'07/16/2016', - 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' - - } - - def test(self): - response = api.postAsJson(self.session, self.url, self.data) - if not response.status_code == 201: - self.log_error('Expected 201 Created, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - try: - self.createdMembershipID = response.json()['MEMBERSHIP_ID'] - except KeyError: - self.log_error('Expected MEMBERSHIP ID in response, got {0}.'.format(response.json())) - - def cleanup(self): - # We try to delete the membership we created - if self.createdMembershipID < 0: # The creation was not successfull - self.log_error('Expected valid memberhsip ID, got {0}.'.format(self.createdMembershipID)) - else: - d = api.delete(self.session, self.url + str(self.createdMembershipID)) - if not d.status_code == 200: - self.log_error('Error in cleanup for {0}. Expected , got {1}.'.format(self.test_name, d.status_code)) - - -class post_new_leader_membership_for_someone___activity_leader(TestCase): - """ Verify that an activity leader can assign a new leader - - Pre-Conditions: - Valid Authentication Header - Authenticated as Activity Leader - Expectations: - Endpoint -- api/memberships/ - Expected Status Code -- 200 OK - Expected Content -- A json response with the created membership - """ - - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/memberships/' - self.data = {} - self.createdMembershipID = -1 - - def setup(self): - # Add a new leader - self.data = { - 'ACT_CDE': activity_code, - 'SESS_CDE' : '201501', - 'ID_NUM': random_id_number, - 'PART_CDE':'DIREC', - 'BEGIN_DTE':'06/10/2016', - 'END_DTE':'07/16/2016', - 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' - } - - def test(self): - response = api.postAsJson(self.session, self.url, self.data) - if not response.status_code == 201: - self.log_error('Expected 201 Created, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - try: - self.createdMembershipID = response.json()['MEMBERSHIP_ID'] - except KeyError: - self.log_error('Expected MEMBERSHIP_ID in response, got {0}.'.format(response.json())) - - def cleanup(self): - # We try to delete the membership we created - if self.createdMembershipID < 0: # The creation was not successful - self.log_error('Expected valid memberhsip ID, got {0}.'.format(self.createdMembershipID)) - else: - d = api.delete(self.session, self.url + str(self.createdMembershipID)) - if not d.status_code == 200: - self.log_error('Error in cleanup for {0}. Expected , got {1}.'.format(self.test_name, d.status_code)) - - -class put_edited_membership_member_to_leader___activity_leader(TestCase): - """ Verify that an activity leader can upgrade a normal membership to leader status. - - Pre-Conditions: - Valid Authentication Header - Authenticated as Activity Leader - Expectations: - Endpoint -- api/memberships/:id - Expected Status Code -- 200 OK - Expected Content -- A json object with a MEMBERSHIP_ID attribute. - """ - - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/memberships/' - self.data = {} - self.createdMembershipID = -1 - - def setup(self): - # The membership to modify - self.predata = { - 'ACT_CDE': activity_code, - 'SESS_CDE' : '201501', - 'ID_NUM': random_id_number, - 'PART_CDE':'PART', # Is a participant at first. - 'BEGIN_DTE':'06/10/2016', # Old start date - 'END_DTE':'07/16/2016', - 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' - } - r = api.postAsJson(self.session, self.url, self.predata) - try: - self.createdMembershipID = r.json()["MEMBERSHIP_ID"] - # Updated Data - self.data = { - 'MEMBERSHIP_ID' : self.createdMembershipID, - 'ACT_CDE': activity_code, - 'SESS_CDE' : '201501', - 'ID_NUM': random_id_number, - 'PART_CDE':'DIREC', # Upgrade him to director. - 'BEGIN_DTE':'02/10/2016', # New start date - 'END_DTE':'07/16/2016', - 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' - } - except (KeyError, ValueError): - self.log_error('Error in setup for {0}.'.format(self.test_name)) - - def test(self): - response = api.putAsJson(self.session, self.url + str(self.createdMembershipID), self.data) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - try: - response.json()['MEMBERSHIP_ID'] - except KeyError: - self.log_error('Expected MEMBERSHIP_ID in json response, got {0}.'.format(response.json())) - - - def cleanup(self): - # We try to delete the membership we created - if self.createdMembershipID < 0: # The Creation wasn't successfull. ID is still -1. - self.log_error('Expected valid membership ID, got {0}.'.format(self.createdMembershipID)) - else: - d = api.delete(self.session, self.url + str(self.createdMembershipID)) - if not d.status_code == 200: - self.log_error('Error in cleanup for {0}'.format(self.test_name)) - -class put_edited_membership_leader_to_member___activity_leader(TestCase): - """ Verify that an activity leader can demote a leader membership. - - Pre-Conditions: - Valid Authentication Header - Authenticated as Activity Leader - Expectations: - Endpoint -- api/memberships/:id - Expected Status Code -- 200 OK - Expected Content -- A json object with a MEMBERSHIP_ID attribute. - """ - - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/memberships/' - self.data = {} - self.createdMembershipID = -1 - - def setup(self): - # The membership to modify - self.predata = { - 'ACT_CDE': activity_code, - 'SESS_CDE' : '201501', - 'ID_NUM': random_id_number, - 'PART_CDE':'DIREC', # Is a leader at first - 'BEGIN_DTE':'06/10/2016', # Old start date - 'END_DTE':'07/16/2016', - 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' - } - r = api.postAsJson(self.session, self.url, self.predata) - try: - self.createdMembershipID = r.json()["MEMBERSHIP_ID"] - # Updated Data - self.data = { - 'MEMBERSHIP_ID' : self.createdMembershipID, - 'ACT_CDE': activity_code, - 'SESS_CDE' : '201501', - 'ID_NUM': random_id_number, - 'PART_CDE':'PART', # Demote him to participant - 'BEGIN_DTE':'02/10/2016', # New start date - 'END_DTE':'07/16/2016', - 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' - } - except (KeyError, ValueError): - self.log_error('Error in setup for {0}.'.format(self.test_name)) - - def test(self): - response = api.putAsJson(self.session, self.url + str(self.createdMembershipID), self.data) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - try: - response.json()['MEMBERSHIP_ID'] - except KeyError: - self.log_error('Expected MEMBERSHIP_ID in json response, got {0}.'.format(response.json())) - - - def cleanup(self): - # We try to delete the membership we created - if self.createdMembershipID < 0: # The Creation wasn't successfull. ID is still -1. - self.log_error('Expected valid membership ID, got {0}.'.format(self.createdMembershipID)) - else: - d = api.delete(self.session, self.url + str(self.createdMembershipID)) - if not d.status_code == 200: - self.log_error('Error in cleanup for {0}'.format(self.test_name)) - - - -class delete_valid_membership___activity_leader(TestCase): - """ Verify that a an activity leader can delete someone else's membership. - - Pre-Conditions: - Valid Authentication header. - Authenticated as regular member for the activity. - Expectations: - Endpoint -- api/memberships/ - Expected Status Code -- 200 OK - Expected Response Content -- The membership resource that wad delteed. - """ - - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/memberships/' - self.createdMembershipID = -1 - - def setup(self): - # Create a Memerships that we'll eventually delete - self.predata = { - 'ACT_CDE': activity_code, - 'SESS_CDE' : '201501', - 'ID_NUM': random_id_number, - 'PART_CDE':'PART', - 'BEGIN_DTE':'06/10/2016', - 'END_DTE':'07/16/2016', - 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' - } - r = api.postAsJson(self.session, self.url, self.predata) - try: - self.createdMembershipID = r.json()['MEMBERSHIP_ID'] - except (ValueError, KeyError): - self.log_error('Error doing setup for {0}'.format(self.test_name)) - - def test(self): - response = api.delete(self.session, self.url + str(self.createdMembershipID)) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - if not ('MEMBERSHIP_ID' in response.json()): - self.log_error(self.log_error('Expected MEMBERSHIP_ID in response, got {0}.'.format(response.json()))) - - - -# # # # # # # # # # # # # # -# MEMBERSHIP REQUEST TESTS # -# # # # # # # # # # # # # # - -class get_all_membership_requests___activity_leader(TestCase): - """ Verify that an activity leader cannot access all membership requests. - - Pre-Conditions: - Valid Authentication Header. - Authenticated as activity leader. - Expectations: - Endpoint -- api/requests/ - Expected Status Code -- 401 Unauthorized - Expected Response Content -- Empty response content. - """ - - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/requests/' - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 401: - self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) - if response.text: - self.log_error('Expected empty response body, got {0}.'.format(response.text)) - -class get_membership_requests_for_activity___activity_leader(TestCase): - """ Verify that the activity leader can get requests to join the activity he/she is leading - - Pre-Conditions: - Valid Authentication Header. - Authenticated as activity leader. - Expectations: - Endpoint -- api/requests/activity/:id - Expected Status Code -- 200 OK - Expected Response Body -- List of json objects representing the membership requests. - """ - - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/requests/activity/' + activity_code - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - if not (type(response.json()) is list): - self.log_error('Expected list in response body, got {0}.'.format(response.json())) - - -class get_membership_requests_for_someone_else___activity_leader(TestCase): - """ Verify that an activity leader cannot get the membership requests of someone else. - - Pre-Conditions: - Valid Authentication Header - Authenticated as activity leader - Expectations: - Endpoint -- api/requests/student/:id - Expected Status Code -- 401 Unauthorized - Expected Response Body -- Empty - """ - - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/requests/student/' + str(random_id_number) - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 401: - self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) - if response.text: - self.log_error('Expected empty response bodty, got {0}.'.format(response.text)) - -class get_all_my_membership_requests___activity_leader(TestCase): - """ Verify that an activity leader can retrieve all requests belonging to them. - - Pre-Conditions: - Valid Authentication Header. - Authenticated as regular member. - Expectations: - Endpoint -- api/requests/student/:id - Expected Status Code -- 200 OK - Expected Response Body -- A list of membership requests - """ - - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/requests/student/' + str(my_id_number) - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - if not (type(response.json()) is list): - self.log_error('Expected list, got {0}.'.format(response.json())) - - -class post_valid_membership_request___activity_leader(TestCase): - """ Verify that we can create a membership request. - - Pre-conditions: - Valid Authentication Header. - Expectations: - Endpoints -- api/requests/ - Expected Status Cpde -- 201 Created. - Expected Content -- A Json object with a REQUEST_ID attribute. - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/requests/' - self.data = { - 'ACT_CDE': activity_code, - 'SESS_CDE' : '201501', - 'ID_NUM': my_id_number, - 'PART_CDE':'MEMBR', - 'DATE_SENT' : '07/06/2016', - 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' - } - # We will get the actual id when we post. - # Setting it -1 to check later that we got an id from the post. - self.requestID = -1 - - def test(self): - response = api.postAsJson(self.session, self.url, self.data) - if not response.status_code == 201: - self.log_error('Expected 201 Created, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected json response, got {0}.'.format(response.text)) - else: - try: - self.requestID = response.json()['REQUEST_ID'] - if not response.json()['STATUS'] == REQUEST_STATUS_PENDING: - self.log_error('Expected Pending status , got {0}.'.format(response.json())) - except KeyError: - self.log_error('Expected REQUEST_ID in response body, got {0}.'.format(response.json())) - - def cleanup(self): - # We try to delete the request we created - if self.requestID < 0: # The creation wasn't successfull - self.log_error('Could not delete request with id of {0}'.format(self.requestID)) - else: - d = api.delete(self.session, self.url + str(self.requestID)) - if not d.status_code == 200: - self.log_error('There was a problem performing cleanup for {0}'.format(self.test_name)) - -class post_membership_request_for_someone_else___activity_leader(TestCase): - """ Verify that we can't create a membership request for someone else. - - Pre-conditions: - Valid Authentication Header. - Authenticated as Activity Leader member. - Expectations: - Endpoints -- api/requests/ - Expected Status Code -- 401 Unauthorized. - Expected Response Content -- Empty Response. - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/requests/' - self.data = { - 'ACT_CDE': activity_code, - 'SESS_CDE' : '201501', - 'ID_NUM': random_id_number, - 'PART_CDE':'MEMBR', - 'DATE_SENT' : '07/06/2016', - 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' - } - # We will get the actual id when we post. - self.requestID = -1 - - def test(self): - response = api.post(self.session, self.url, self.data) - if not response.status_code == 401: - self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) - if response.text: - self.log_error('Expected empty response, got {0}.'.format(response.text)) - if response.status_code == 201: - self.log_error('Will try to delete resource...') - try: - self.requestID = response.json()['REQUEST_ID'] - except (ValueError, KeyError): - self.log_error('Error in test for {0}.'.format(self.test_name)) - - def cleanup(self): - # If the creation went through, let's delete the resource - if self.requestID >= 0: - self.log_error('Request {0} was created even though it was supposed to be unauthorized'.format(self.requestID)) - d = api.delete(self.session, self.url + str(self.requestID)) - if d.status_code == 200: - self.log_error('Unauthorized resource deleted.') - else: - self.log_error('Error deleting unauthorized resource.') - - -class put_membership_request___activity_leader(TestCase): - """ Verify that an activity leader can't edit a membership request through a put request. - - Pre-Conditions: - Valid Authorization Header. - Authenticated as activity leader. - Expectations: - Endpoint -- api/requests/:id - Expected Status Code -- 401 Unauthorized - Expected Response Body -- Empty - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + '/api/requests/' - self.predata = {} - self.data = {} - self.requestID = -1 - - def setup(self): - self.predata = { - 'ACT_CDE': activity_code, - 'SESS_CDE' : '201501', - 'ID_NUM': my_id_number, - 'PART_CDE':'MEMBR', - 'DATE_SENT' : '07/06/2016', - 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' - } - response = api.postAsJson(self.session, self.url, self.predata) - try: - self.requestID = response.json()['REQUEST_ID'] - self.data = { - 'REQUEST_ID': self.requestID, - 'ACT_CDE': activity_code, - 'SESS_CDE' : '201501', - 'ID_NUM': random_id_number, #Changing values to emulate attacker muhahah - 'PART_CDE':'PART', - 'DATE_SENT' : '07/06/2016', - 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' - } - except ValueError: - self.log_error('Error performing setup for {0}.'.format(self.test_name)) - - - def test(self): - response = api.putAsJson(self.session, self.url + str(self.requestID), self.data) - if not response.status_code == 401: - self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) - if response.text: - self.log_error('Expected empty response body, got {0}.'.format(response.text)) - - def cleanup(self): - d = api.delete(self.session, self.url + str(self.requestID)) - if not d.status_code == 200: - self.log_error('There was error performing cleanup for {0}.'.format(self.test_name)) - - -class delete_memberhsip_request___activity_leader(TestCase): - """ Verify that an activity leader can delete a membership request for his activity - - Pre-Conditions: - - Expectations: - Endpoints -- api/requests/:id - Expected Status Code -- 200 OK - Expected Response Body -- The request that was deleted - """ - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/requests/' - self.predata = {} - self.requestID = -1 - - def setup(self): - self.predata = { - 'ACT_CDE': activity_code, - 'SESS_CDE': '201501', - 'PART_CDE': 'PART', - 'ID_NUM': my_id_number, - 'DATE_SENT': '07/19/2016', - 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' - } - response = api.postAsJson(self.session, self.url, self.predata) - if not response.status_code == 201: - self.log_error('Error in setup for {0}. Expected 201 Created, got {1}.'.format(self.test_name, response.status_code)) - else: - self.requestID = response.json()['REQUEST_ID'] - - def test(self): - response = api.delete(self.session, self.url + '/' + str(self.requestID)) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - try: - response.json()['REQUEST_ID'] - except KeyError: - self.log_error('Expected REQUEST_ID in response body, got {0}.'.format(response.json())) - - - - - -class allow_someone_to_join_my_activity___activity_leader(TestCase): - """ Verify that the activity leader can accept a request directed at their activity. - - Pre-Conditions: - Valid Authentication Header - Authenticated as Activity Leader - Expectations: - Endpoints -- api/requests/:id/approve - Expected Status Code -- 200 OK - Expected Response Body -- Json response with the request that was accepted. - """ - - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/requests/' - self.data = {} - self.requestID = -1 - self.membershipID = -1 - - def setup(self): - #Create a memberships request for the trash club. - self.data = { - 'ACT_CDE': activity_code, - 'SESS_CDE' : '201501', - 'ID_NUM': my_id_number, - 'PART_CDE':'MEMBR', - 'DATE_SENT' : '07/06/2016', - 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' - } - response = api.postAsJson(self.session, self.url, self.data) - if not response.status_code == 201: - self.log_error('Error in setup for {0}. Expected 201 Created, got {1}.'.format(self.test_name, response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Error in setup for {0}. Expected json response, got {1}.'.format(self.test_name, response.text)) - else: - try: - self.requestID = response.json()['REQUEST_ID'] - except KeyError: - self.log_error('Error in setup for {0}. Expected REQUEST_ID in response, got {1}.'.format(self.test_name, response.json())) - - def test(self): - response = api.postAsJson(self.session, self.url + str(self.requestID) + '/approve', None) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - try: - self.membershipID = response.json()['MEMBERSHIP_ID'] - except KeyError: - self.log_error('Expected MEMBERSHIP_ID in response bady, got {0}.'.format(response.json())) - - - def cleanup(self): - # We try to delete the request we made - if self.requestID < 0: # The request was not successful - self.log_error('Error in cleanup for {0}. Expected valid request ID, got {1}.'.format(self.test_name, self.requestID)) - else: - d = api.delete(self.session, self.url + str(self.requestID)) - if not d.status_code == 200: - self.log_error('Error in cleanup for {0}. Expected 200 OK when deleting request, got {1}.'.format(self.test_name, d.status_code)) - # We try to delete the membership we created - if self.membershipID < 0: # membership creatino was not successful - self.log_error('Error in cleanup for {0}. Expected valid membership ID, got {1}.'.format(self.test_name, self.membershipID)) - else: - d = api.delete(self.session, hostURL + 'api/memberships/' + str(self.membershipID)) - if not d.status_code == 200: - self.log_error('Error in cleanup for {0}. Expected 200 OK when deleting membership, got {1}.'.format(self.test_name, d.status_code)) - - - -class deny_someone_joining_my_activity___activity_leader(TestCase): - """ Verify that the activity leader can deny a request directed at their activity. - - Pre-Conditions: - Valid Authentication Header - Authenticated as Activity Leader - Expectations: - Endpoints -- api/requests/:id/deny - Expected Status Code -- 200 OK - Expected Response Body -- Json response with the request that was denied - """ - - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/requests/' - self.data = {} - self.requestID = -1 - - def setup(self): - #Create a memberships request for the trash club. - self.data = { - 'ACT_CDE': activity_code, - 'SESS_CDE' : '201501', - 'ID_NUM': my_id_number, - 'PART_CDE':'MEMBR', - 'DATE_SENT' : '07/06/2016', - 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' - } - response = api.postAsJson(self.session, self.url, self.data) - if not response.status_code == 201: - self.log_error('Error in setup for {0}. Expected 201 Created, got {1}.'.format(self.test_name, response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Error in setup for {0}. Expected json response, got {1}.'.format(self.test_name, response.text)) - else: - try: - self.requestID = response.json()['REQUEST_ID'] - except KeyError: - self.log_error('Error in setup for {0}. Expected REQUEST_ID in response, got {1}.'.format(self.test_name, response.json())) - - def test(self): - response = api.postAsJson(self.session, self.url + str(self.requestID) + '/deny', None) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - try: - if not response.json()['STATUS'] == REQUEST_STATUS_DENIED: - self.log_error('Expected approved request, got {0}.'.format(response.json())) - except KeyError: - self.log_error('Expected STATUS in response bady, got {0}.'.format(response.json())) - - def cleanup(self): - # We try to delete the request we made - if self.requestID < 0: # The request was not successful - self.log_error('Error in cleanup for {0}. Expected valid request ID, got {1}.'.format(self.test_name, self.requestID)) - else: - d = api.delete(self.session, self.url + str(self.requestID)) - if not d.status_code == 200: - self.log_error('Error in cleanup for {0}. Expected 200 OK, got {1}.'.format(self.test_name, d.status_code)) - - -# # # # # # # # # # # -# SUPERVISOR TESTS # -# # # # # # # # # # - -class get_all_supervisors___activity_leader(TestCase): - """ Verify that an activity leader cannot view all supervisors. - - Pre-Conditions: - Valid Authentication Header. - Authenticated as Activity leader - Expectations: - Endpoint -- api/supervisors/ - Expected Status Code -- 401 Unauthorized - Expected Response Body -- Empty - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/supervisors/' - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 401: - self.log_error('Expected Status Code 401 Unauthorized, got {0}.'.format(response.status_code)) - if response.text: - self.log_error('Got non-empty response body.') - - -class get_supervisors_for_activity___activity_leader(TestCase): - """ Verify that an activity leader can get supervisors for activity - - Pre-Conditions: - Valid Authentication Header. - Authenticated as activity leader. - Expectations: - Endpoint -- api/supervisors/activity/:id - Expected Status Code -- 200 OK - Expected Response Body -- list of json objects - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/supervisors/activity/' + activity_code - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected json response body, got {0}.'.format(response.text)) - else: - if not (type(response.json()) is list): - self.log_error('Expected list, got {0}.'.format(response.json())) - -class post_supervisor___activity_leader(TestCase): - """ verify that an activity leader can't add a supervisor - - Pre-Conditions: - Valid Authentication Header. - Authenticated as activity leader. - Expectations: - Endpoint -- api/supervisors/ - Expected Status Code -- 401 Unauthorized - Expected Response Body -- Empty - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/supervisors/' - self.data = {} - self.supervisorID = -1 - - def setup(self): - self.data = { - 'ID_NUM' : my_id_number, - 'ACT_CDE' : activity_code, - 'SESS_CDE' : '201501' - } - - def test(self): - response = api.postAsJson(self.session, self.url, self.data) - if not response.status_code == 401: - self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) - if response.text: - self.log_error('Expected empty response body, got {0}.'.format(response.text)) - if response.status_code == 201: - self.log_error('Delete the unauthorized resource...') - try: - self.supervisorID = response.json()['SUP_ID'] - except ValueError: - self.log_error('Problem accessing compromised resource.') - - - def cleanup(self): - if self.supervisorID > 0: # Unauthorized creation took place - d = api.delete(self.session, self.url + str(self.supervisorID)) - if response.status_code == 200: # Deletion was not successful - self.log_error('Unauthorized resource deleted.') - else: - self.log_error('Error deleting Unauthorized resource.') - -class put_supervisor___activity_leader(TestCase): - """ Verify that an activity leader can't edit an existing supervisor - - Pre-Conditions: - Valid Authentication Header. - Authenticated as regular member. - Expectations: - Endpoint -- api/supervisors/:id - Expected Status Code -- 401 Unauthorized - Expected Response Body -- Empty - """ - def __init__(self , session=None): - super().__init__(session) - # Trying to update a random supervisor - self.url = hostURL + 'api/supervisors/' - tempID = 0 - # Iterate until we find a valud supervisor - response = api.get(self.session,self.url + str(tempID)) - while response.status_code == 404: - tempID = tempID + 1 - response = api.get(self.session, self.url + str(tempID)) - - self.data = { - 'SUP_ID' : tempID, - 'ACT_CDE' : activity_code, - 'SESS_CDE' : '201501', - 'ID_NUM' : my_id_number - } - self.supervisorID = -1 - - def test(self): - response = api.putAsJson(self.session, self.url + str(self.data['SUP_ID']), self.data) - if not response.status_code == 401: - self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) - if response.text: - self.log_error('Expected empty respone body, got {0}.'.format(response.text)) - if response.status_code == 200: # If supervisor was updated - self.log_error('Unauthorized update. Attempting to delete...') - try: - self.supervisorID = response.json()['SUP_ID'] - except (ValueError, KeyError): - self.log_error('Error accessing compromised supervisor.') - - def cleanup(self): - if self.supervisorID > 0: # The supervisor was updated. - d = api.delete(self.session, self.url) - if d.status_code == 200: - self.log_error('Compromised resource deleted.') - else: - self.log_error('Unable to delete compromised resource.') - -# This test might need to be removed if the authorization process for supervisors is altered. -class delete_supervisor___activity_leader(TestCase): - """ Verify that an activity leader can't delete a supervisor - - Pre-Conditions: - Valid Authentication Header - Authenticated as activity leader - Expectations: - Endpoint -- api/supervisors/:id - Expected Status Code -- 401 Unauthorized - Expected Response Body -- Empty - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/supervisors/2' - - def test(self): - response = api.delete(self.session, self.url) - if not response.status_code == 401: - self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) - if response.text: - self.log_error('Expected empty body, got {0}.'.format(response.text)) - -# # # # # # # # # -# ACTIVITY TESTS # -# # # # # # # # # - -class get_all_activities___activity_leader(TestCase): - """ Verify that an activity leader can get all activities. - - Pre-Conditions: - Valid Authentication Header. - Expectations: - Endpoint -- api/activities/ - Expected Status Code -- 200 OK - Expected Response Body -- List of activities - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/activities/' - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK , got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(respons.text)) - else: - if not (type(response.json()) is list): - self.log_error('Expected list, got {0}.'.format(response.json())) - -class get_one_activity___activity_leader(TestCase): - """ Verify that an activity leader can a single activity. - - Pre-Conditions: - Valid Authentication Header - Expectations: - Endpoint -- api/activities - Expected Status Code -- 200 OK - Expected Response Body -- Json object with activity resource - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/activities/' + activity_code - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - try: - response.json()['ActivityCode'] - except KeyError: - self.log_error('Expected ACT_CDE in response, got {0}.'.format(response.json())) - -class get_activities_for_session___activity_leader(TestCase): - """ Verify that an activity leader can get all activities for specific session. - - Pre-Conditions: - Valid Authentication Header - Expectations: - Endpoint -- api/activities/session/:id - Expected Status Code -- 200 OK - Expected Response Body -- list of activities - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/activities/session/' - self.sessionID = -1 - - def setup(self): - response = api.get(self.session, hostURL + 'api/sessions/current') - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Error in setup for {0}. Expected json in response body, got {1}.'.format(self.test_name, response.text)) - else: - try: - self.sessionID = response.json()['SessionCode'] - except KeyError: - self.log_error('Error in setup for {0}. Expected SessionCode in response body, got {1}.'.format(self.test_name, response.json())) - - def test(self): - response = api.get(self.session, self.url + str(self.sessionID)) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.json())) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.json())) - else: - if not (type(response.json()) is list): - self.log_error('Expected list, got {0}.'.format(response.json())) - -class update_activity___activity_leader(TestCase): - """ Verify that an activity leader can update activity information. - - Pre-Conditions: - Valid Authentication Header - Authenticated as activity leader - Expectations: - Endpoints -- api/activities/:id - Expected Status Code -- 200 Ok - Expected Response Body -- Updated activity information - """ - - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/activities/' + activity_code - self.data = {} - - def setup(self): - self.data = { - "ACT_CDE" : activity_code, - "ACT_BLURB" : 'BLURB GENERATED BY THE TEST SUITE.IGNORE', - "ACT_URL" : 'http://www.lolcats.com/' - } - - def test(self): - response = api.putAsJson(self.session, self.url , self.data) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected json in response body, got {0}.'.format(response.text)) - else: - try: - response.json()['ACT_CDE'] - except ValueError: - self.log_error('Expected ACT_CDE in response body, got {0}.'.format(response.json())) - -class update_activity_image___activity_leader(TestCase): - """ Verify that an activity leader can update the activity image. - - Pre-Conditions: - Valid Authentication Header - Authenticated as an activity leader - Expectations: - Endpoint -- api/activities/:id/image - Expected Status Code -- 200 OK - Expected Json response -- Empty respons body. - """ - def __init___(self, session=None): - pass - def setup(self): - pass - def test(self): - pass - -# # # # # # # # # # # # -# PARTICIPATIONS TEST # -# # # # # # # # # # # # - - -class get_all_participations___activity_leader(TestCase): - """ Verify that an activity leader can get all participations - - Pre-Conditions: - Valid Authentication Header - Expectations: - Endpoint -- api/participations - Expected Status Code -- 200 OK - Expected Response Body -- List of all participations - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/participations' - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - if not (type(response.json()) is list): - self.log_error('Expected list, got {0}.'.format(response.json())) - -class get_one_participation___activity_leader(TestCase): - """ Verify that an activity leader can get a specific participation object - - Pre-Conditions: - Valud Authentication Header - Expectations: - Endpoint -- api/participations - Expected Status Code -- 200 OK - Expected Response Body -- A participation object - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/participations/MEMBR' - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueErrror: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - try: - response.json()['ParticipationCode'] - except KeyError: - self.log_error('Expected ParticipationCode in response, got {0}.'.format(response.json())) - - -# # # # # # # # # -# SESSIONS TEST # -# # # # # # # # # - - -class get_all_sessions___activity_leader(TestCase): - """ Verify that an activity leader can get all session objects - - Pre-Conditions: - Valid Authentication Header - Expectations: - Endpoint -- api/sessions/ - Expected Status Code -- 200 OK - Expected Response Body -- List of session resources - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/sessions/' - - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.json())) - else: - if not (type(response.json()) is list): - self.log_error('Expected list, got {0}.'.format(response.json())) - - -class get_one_session___activity_leader(TestCase): - """ Verify that an activity leader can get a session object - - Pre-Conditions: - Valid Authentication Header - Expectations: - Endpoint -- api/sessions/:id - Expected Status Code -- 200 OK - Expected Response Body -- A session resource. - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/sessions/201501' - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - try: - response.json()['SessionCode'] - except KeyError: - self.log_error('Expected SessionCode in response, got {0}.'.format(response.json())) - - -# # # # # # # # # -# STUDENTS TEST # -# # # # # # # # # - - -class get_all_students___activity_leader(TestCase): - """ Verify that an activity leader cannot list all students - - Pre-Conditions: - Valid Authentications Header - Expectations: - Endpoint -- api/students - Expected Status Code -- 401 Unauthorized - Expected Response Body -- Empty - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/students/' - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 401: - self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) - if response.text: - self.log_error('Expected empty response body, got {0}.'.format(response.text)) - - -class get_student_by_id___activity_leader(TestCase): - """ Verify that an activity leader can get a student resource - - Pre-Conditions: - Valid Authentication Header - Expectations: - Endpoint -- api/students/:id - Expected Status Code -- 200 Ok - Expected Response Body -- A json response with the student resource - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/students/' + str(random_id_number) - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got{0}.'.format(response.text)) - else: - try: - response.json()['StudentID'] - except KeyError: - self.log_error('Expected StudentID in response, got{0}.'.format(response.json())) - - -class get_student_by_email___activity_leader(TestCase): - """ Verify that an activity leader get a student resource by email. - - Pre-Conditions: - Valid Authentication Header - Expectations: - Endpoint -- api/students/email/:email - Expected Status Code -- 200 OK - Expected Response Body -- A json response with the student resource - """ - - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/students/email/ezeanyinabia.anyanwu@gordon.edu/' - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got{0}.'.format(response.text)) - else: - try: - response.json()['StudentID'] - except KeyError: - self.log_error('Expected StudentID in response, got{0}.'.format(response.json())) - - - - -# # # # # # # # -# EMAIL TEST # -# # # # # # # # - - -class get_emails_for_activity___activity_leader(TestCase): - """ Verify that an activity leader can get the emails for the members of an activity - - Pre-conditions: - Valid Authentication Header - Authenticated as Activity leader - Expectations: - Endpoint -- api/emails/activity/:id - Expected Status Code -- 200 OK - Expected Response Body -- A list of json objects - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/emails/activity/' + activity_code - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json in response body, got {0}.'.format(response.text)) - else: - if not (type(response.json()) is list): - self.log_error('Expected list, got {0}.'.format(response.json)) - - -class get_emails_for_leaders___activity_leader(TestCase): - """ Verify that a supervisor can get the emails for any activity leader - - Pre-Conditions: - Valid Authentication header - Expectaions: - Endpoint -- api/emails/activity/:id/leaders - Expected Status Code -- 200 OK - Expected Respones Body -- Json response with a list of emails - """ - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/emails/activity/' + activity_code + '/leaders' - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - try: - response.json()[0]['Email'] - except KeyError: - self.log_error('Expected Email in response, got{0}.'.format(response.json())) - - - - - - -if __name__ == '__main__': - main() diff --git a/Tests/ApiEndpoints/gordon_360_tests_member.py b/Tests/ApiEndpoints/gordon_360_tests_member.py deleted file mode 100644 index 9cf00a39f..000000000 --- a/Tests/ApiEndpoints/gordon_360_tests_member.py +++ /dev/null @@ -1,2238 +0,0 @@ -# Regular Member Test Suite for Project Raymond -from test_components import requests -from test_components import TestCase - -# Public configuration options -import test_config -# Private configuration options -import test_credentials -import test_components as api - -# Constants -LEADERSHIP_POSITIONS = test_config.leadership_positions - - -# Configuration Details -username = test_credentials.username -password = test_credentials.password -my_id_number = test_credentials.id_number -grant_payload = { 'username':username, 'password':password, 'grant_type':'password' } - -random_id_number = test_config.random_id_number -activity_code = test_config.activity_code -hostURL = test_config.hostURL - - - -# Runner -def main(): - """ Test Runner - - Runs all subclasses of the TestCase class. - """ - - # Create an authorized session to test authorized calls. - r = requests.post(hostURL+'token',grant_payload) - print(hostURL+'token') - print(grant_payload) - print(r) - access_token = r.json()["access_token"] - authorization_header = "Bearer " + access_token - authorized_session = requests.Session() - authorized_session.verify = True - authorized_session.headers.update({ "Authorization":authorization_header }) - - # Loop through all Test Cases and run tests. - print ('***************************************') - print ('TESTING GORDON 360 AS REGULAR MEMBER...') - print ('***************************************') - testCounter = 0 - for cls in TestCase.__subclasses__(): - if '___regular_member' in cls.__name__: - if cls.__name__ == 'authenticate_with_valid_credentials': - testclass = cls() - testclass.runTest() - testCounter += 1 - else: - testclass = cls(session=authorized_session) - testclass.runTest() - testCounter += 1 - print ('Ran {0} tests.'.format(testCounter)) - -# Test Cases -# # # # # # # # # # # # -# AUTHENTICATION TESTS # -# # # # # # # # # # # # - -class authenticate_with_valid_credentials___regular_member(TestCase): - """ Given valid credentials, verify that authentication is successful. - - Expectations: - Endpoint -- token/ - Expected Status code -- 200 Ok - Expected Content -- Json Object with access_token attribute. - """ - - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'token' - self.token_payload = { 'username':username, 'password':password, 'grant_type':'password' } - - def test(self): - response = api.post(self.session, self.url, self.token_payload) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json, got {0}.'.format(response.text)) - else: - if not 'access_token' in response.json(): - self.log_error('Expected access token in response, got {0}.'.format(response.json())) - - -# # # # # # # # # # # # -# EVENTS & CLAW TESTS # -# # # # # # # # # # # # - -class get_all_events___regular_member(TestCase): - """ Verify that a regular member can get all events by type_ID - - Pre-Conditions: - Valid Authentication header - Expectaions: - Endpoint -- api/events/25Live/type/:Event_OR_Type_ID - Expected Status Code -- 200 OK - Expected Respones Body -- list of all events resources - """ - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/events/25Live/type/10' - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - if not (type(response.json()) is list): - self.log_error('Expected list, got {0}.'.format(response.json())) - - -class get_all_events_multiple___regular_member(TestCase): - """ Verify that a regular member can get all events by multiple type_ID - - Pre-Conditions: - Valid Authentication header - Expectaions: - Endpoint -- api/events/25Live/type/:Event_OR_Type_ID - Expected Status Code -- 200 OK - Expected Respones Body -- list of all events resources - """ - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/events/25Live/type/10$11$12$14' - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - if not (type(response.json()) is list): - self.log_error('Expected list, got {0}.'.format(response.json())) - - -class get_all_claw___regular_member(TestCase): - """ Verify that a regular member can get all upcoming chapel events (category_ID = 85) - - Pre-Conditions: - Valid Authentication header - Expectaions: - Endpoint -- api/events/25Live/CLAW - Expected Status Code -- 200 OK - Expected Respones Body -- list of all events resources - """ - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/events/25Live/CLAW' - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - if not (type(response.json()) is list): - self.log_error('Expected list, got {0}.'.format(response.json())) - - -class get_all_25Live___regular_member(TestCase): - """ Verify that a regular member can get all events in 25Live under predefined categories - - Pre-Conditions: - Valid Authentication header - Expectaions: - Endpoint -- api/events/25Live/All - Expected Status Code -- 200 OK - Expected Respones Body -- list of all events resources - """ - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/events/25Live/All' - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - if not (type(response.json()) is list): - self.log_error('Expected list, got {0}.'.format(response.json())) - - -class get_all_25Live_by_event_id___regular_member(TestCase): - """ Verify that a regular member can get information on specific event on 25Live - - Pre-Conditions: - Valid Authentication header - Expectaions: - Endpoint -- api/events/25Live/All - Expected Status Code -- 200 OK - Expected Respones Body -- list of all events resources - """ - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/events/25Live/2911' - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - if not (type(response.json()) is list): - self.log_error('Expected list, got {0}.'.format(response.json())) - - -class get_all_25Live_by_multiple_event_id___regular_member(TestCase): - """ Verify that a regular member can get information on specific event on 25Live - - Pre-Conditions: - Valid Authentication header - Expectaions: - Endpoint -- api/events/25Live/All - Expected Status Code -- 200 OK - Expected Respones Body -- list of all events resources - """ - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/events/25Live/2911$2964$3030' - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - if not (type(response.json()) is list): - self.log_error('Expected list, got {0}.'.format(response.json())) - - -class get_all_chapel___regular_member(TestCase): - """ Verify that a regular member can get information on chapel events attended - - Pre-Conditions: - Valid Authentication header - Expectaions: - Endpoint -- api/events/chapel/:user_name - Expected Status Code -- 200 OK - Expected Respones Body -- list of all events resources - """ - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/events/chapel/sam.nguyen/' - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - if not (type(response.json()) is list): - self.log_error('Expected list, got {0}.'.format(response.json())) - - -class get_all_chapel_by_term___regular_member(TestCase): - """ Verify that a regular member can get information on chapel events attended by specific school term - - Pre-Conditions: - Valid Authentication header - Expectaions: - Endpoint -- api/events/chapel/:user_name - Expected Status Code -- 200 OK - Expected Respones Body -- list of all events resources - """ - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/events/chapel/matthew.felgate/FA16' - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - if not (type(response.json()) is list): - self.log_error('Expected list, got {0}.'.format(response.json())) - - -# # # # # # # # # # # -# MEMBERSHIP TESTS # -# # # # # # # # # # # -# class get_all_memberships___regular_member(TestCase): -# """ Verify that a regular member can retrieve all memberships - -# Pre-conditions: -# Valid Authentication Header. -# Expectations: -# Endpoint -- memberships/ -# Expected Status code -- 200 Ok -# Expected Content -- List -# """ -# def __init__(self, session=None): -# super().__init__(session) -# self.url = hostURL + 'api/memberships/' - -# def test(self): -# response = api.get(self.session, self.url) -# print (response) -# print (api.get(self.session, self.url)) -# if not response.status_code == 401: -# self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - -# try: -# response.json() -# except ValueError: -# self.log_error('Expected Json response, got >{0}<.'.format(response.text)) -# else: -# if not (type(response.json()) is list): -# self.log_error('Response was not a list') - - -# class get_one_membership___regular_member(TestCase): -# """ Retrieve a specific membership resource. - -# Pre-conditions: -# Valid Authentication header -# Expectations: -# Endpoint -- api/memberships/:id -# Expected Status Code -- 200 OK -# Expected Content -- A Json Object with a MembershipID attribute. -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/memberships/' -# self.membershipID = -1 - - -# def setup(self): -# # Find a valid membership id -# response = api.get(self.session, self.url) -# if not response.status_code == 200: -# self.log_error('Error in setup for {0}. Expected 200 OK, got {1}.'.format(self.test_name, response.status_code)) - -# try: -# response.json() -# except ValueError: -# self.log_error('Error in setup for {0}. Expected json response body, got {1}.'.format(self.test_name, response.text)) -# else: -# try: -# self.membershipID = response.json()[0]['MembershipID'] -# self.url = self.url + str(self.membershipID) -# except KeyError: -# self.log_error('Error in setup for {0}. Expected MembershipID in response body, got {1}.'.format(self.test_name, self.response.json())) -# #exit(1) -# def test(self): -# response = api.get(self.session, self.url) -# if not response.status_code == 200: -# self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) -# try: -# response.json() -# except ValueError: -# self.log_error('Expected Json response body, got {0}.'.format(response.text)) -# else: -# if not ('MembershipID' in response.json()): -# self.log_error('Expected MembershipID in jsob object, got {0}.'.format(response.json())) - -# class get_all_my_memberships___regular_member(TestCase): -# """ Verify that a regular member cannot fetch memberships associated with them. -# This is because they can only see the members if they are part of the group. - -# Pre-Conditions: -# Valid Authentication Header. -# Expectations: -# Endpoints -- api/memberships/student/:id -# Expected Status Code -- 401 Server Error -# Expected Reponse Content -- A list of json objects -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/memberships/student/' + str(my_id_number) - -# def test(self): -# response = api.get(self.session, self.url) -# if not response.status_code == 401: -# self.log_error('Expected 401, got {0}.'.format(response.status_code)) -# try: -# response.json() -# except ValueError: -# self.log_error('Expected Json response body, got {0}.'.format(response.text)) -# else: -# if not (type(response.json()) is list): -# self.log_error('Response was not a list.') - - - -# class get_all_memberships_for_someone_else___regular_member(TestCase): -# """ Verify that regular member can fetch someone else's memberships. - -# Pre-Conditions: -# Valid Authentication Header. -# Authenticated as regular member. -# Expectations -# Endpoint -- api/memberships/student/:id -# Expected Status Code -- 200 OK. -# Expected Response Content -- A list of json objects. -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/memberships/student/' + str(random_id_number) - -# def test(self): -# response = api.get(self.session, self.url) -# if not response.status_code == 200: -# self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) -# try: -# response.json() -# except ValueError: -# self.log_error('Expected Json response body, got {0}.'.format(response.text)) -# else: -# if not (type(response.json()) is list): -# self.log_error('Response was not a list') - - - - -# class get_memberships_for_an_activity___regular_member(TestCase): -# """ Verify that a regular member can fetch memberships for an activity. - -# Pre-Conditions: -# Valid Authentication Header. -# Expectations: -# Endpoint -- api/memberships/activity/:id -# Expected Status Code -- 200 OK -# Expected Response Content -- A list of json Objects. -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/memberships/activity/' + activity_code - -# def test(self): -# response = api.get(self.session, self.url) -# if not response.status_code == 200: -# self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) -# try: -# response.json() -# except ValueError: -# self.log_error('Expected Json response body, got {0}.'.format(response.text)) -# else: -# if not (type(response.json()) is list): -# self.log_error('Response was not a list.') - - - -class get_leader_memberships_for_an_activity___regular_member(TestCase): - """ Verify that a regular member can fetch all leaders for a specific activity. - - Pre-Conditions: - Valid Authentication Header. - Authenticated as regular member. - Expectations: - Endpoint -- api/memberships/activity/:id/leaders - Expected Status Code -- 200 OK - Expected Response Content -- A list of json objects. - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/memberships/activity/' + activity_code + '/leaders' - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - else: - if not (type(response.json()) is list): - self.log_error('Response was not a list.') - - - -# class post_valid_membership___regular_member(TestCase): -# """ Given valid membership, verify that post works. - -# Pre-conditions: -# Valid Authentication Header. -# Expectations: -# Endpoints -- api/memberships/ -# Expected Statis Cpde -- 201 Created. -# Expected Content -- A Json object with a MEMBERSHIP_ID attribute. -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/memberships/' -# self.data = { -# 'ACT_CDE': activity_code, -# 'SESS_CDE' : '201501', -# 'ID_NUM': my_id_number, -# 'PART_CDE':'GUEST', -# 'BEGIN_DTE':'06/10/2016', -# 'END_DTE':'07/16/2016', -# 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' -# } -# # We will get the actual id when we post. -# # Setting it -1 to check later that we got an id from the post. -# self.createdMembershipID = -1 - -# def test(self): -# response = api.postAsJson(self.session, self.url, self.data) -# if not response.status_code == 201: -# self.log_error('Expected 201 Created, got {0}.'.format(response.status_code)) -# try: -# response.json() -# except ValueError: -# self.log_error('Expected Json response body, got {0}.'.format(response.text)) -# else: -# try: -# self.createdMembershipID = response.json()['MEMBERSHIP_ID'] -# except KeyError: -# self.log_error('Expected MEMBERSHIP_ID in json response, got {0}.'.format(response.json())) - - -# def cleanup(self): -# # We try to delete the membership we created -# if self.createdMembershipID < 0: # The creation wasn't successful -# self.log_error('Expected valid membership ID, got {0}.'.format(self.createdMembershipID)) -# else: -# d = api.delete(self.session, self.url + str(self.createdMembershipID)) -# if not d.status_code == 200: -# self.log_error('Error in cleanup for {0}'.format(self.test_name)) - -# return - -# class post_membership_with_id_that_is_not_you___regular_member(TestCase): -# """ Verify that regular member can't create a membership for someone else. - -# Pre-Conditions: -# Valid Authentication Header. -# Authenticated as a regular member for this Activity. -# Expectations: -# Endpoint -- api/memberships/ -# Expected Status Code -- 401 Unauthorized -# Expected Content -- No Content -# """ - -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/memberships/' -# self.data = { -# 'ACT_CDE': activity_code, -# 'SESS_CDE' : '201501', -# 'ID_NUM': random_id_number, -# 'PART_CDE':'GUEST', -# 'BEGIN_DTE':'06/10/2016', -# 'END_DTE':'07/16/2016', -# 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' -# } -# self.membershipID = -1 - -# def setup(self): -# # Report if there any current memberships for the Club to avoid false negatives. -# # If I am currently a director of the club, this test should fail. -# response = api.get(self.session, self.url + 'student/' + str(my_id_number)) -# try: -# for membership in response.json(): -# if(membership['ActivityCode'] == activity_code and membership['Participation'] in LEADERSHIP_POSITIONS): -# self.log_error('False Negative: This user is a leader for the activity we are testing.') -# except (ValueError, KeyError): -# self.log_error('Error in setup for {0}'.format(self.test_name)) - -# def test(self): -# response = api.post(self.session, self.url, self.data) -# if not response.status_code == 401: -# self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) -# if response.text: -# self.log_error('Expected empty response body, got {0}.'.format(response.text)) -# # If the unauthorized operation went through, try to recover. -# if response.status_code == 201: -# self.log_error('Expected 401 Unauthorized, got 201. Will try to delete the data ...') -# try: -# self.membershipID = response.json()['MEMBERSHIP_ID'] -# except (KeyError, ValueError): -# self.log_error('Error in test for {0}'.format(self.test_name)) - -# def cleanup(self): -# if self.membershipID > 0: # The creation went through even though it wasn't supposed to. -# d = api.delete(self.session, self.url + str(self.membershipID)) -# if d.status_code == 200: -# self.log_error('Unauthorized resource was deleted.') -# else: -# self.log_error('Error deleting unauthorized resource.') - - - -# class post_non_guest_membership___regular_member(TestCase): -# """ Verify that regular member can not create a non-guest membership. - -# Pre-Conditions: -# Authentication Header is Valid. -# Authenticated as a regular member for this Activity. -# Expectations: -# Endpoint -- apo/memberships -# Expected Status Code -- 401 Unauthorized -# Expected Content -- No Content -# """ - -# def __init__(self, -# SSLVerify=False, -# session=None): -# super().__init__(session) -# self.url = hostURL + 'api/memberships/' -# self.data = { -# 'ACT_CDE': activity_code, -# 'SESS_CDE' : '201501', -# 'ID_NUM': my_id_number, -# 'PART_CDE':'DIREC', #A regular user cannot do this directly. -# 'BEGIN_DTE':'06/10/2016', -# 'END_DTE':'07/16/2016', -# 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' -# } -# self.membershipID = -1 - -# def setup(self): -# # Report if there any current memberships for the Club to avoid false negatives. -# # If I am currently a director of the club, this test should fail. -# response = api.get(self.session, self.url + 'student/' + str(my_id_number)) -# try: -# for membership in response.json(): -# if(membership['ActivityCode'] == activity_code and membership['Participation'] in LEADERSHIP_POSITIONS): -# self.log_error('False Negative: This user is a leader for the activity we are testing.') -# except (KeyError, ValueError): -# self.log_error('Error in setup for {0}.'.format(self.test_name)) - - -# def test(self): -# response = api.post(self.session, self.url, self.data) -# if not response.status_code == 401: -# self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) -# if response.text: -# self.log_error('Expected empty response body, got {0}.'.format(response.text)) -# if response.status_code == 201: -# self.log_error('Expected 401 Unauthorized, got 201 Created. Will try to delete data ...') -# try: -# self.membershipID = response.json()['MEMBERSHIP_ID'] -# except (KeyError, ValueError): -# self.log_error('Error in test for {0}.'.format(self.test_name)) - -# def cleanup(self): -# if self.membershipID > 0: # The creation went through even though it wasn't supposed to. -# d = api.delete(self.session, self.url + str(self.membershipID)) -# if d.status_code == 200: -# self.log_error('Unauthorized resource was deleted.') -# else: -# self.log_error('Error deleting unauthorized resource.') - - - - -# class put_valid_membership___regular_member(TestCase): -# """ Verify that a membership can be updated by the owner. - -# Pre-Conditions: -# Authenticated as Regular member. -# Expectations: -# Endpoint -- api/memberships/ -# Expected Status Code -- 200 OK -# Expected Content -- A json object with a MEMBERSHIP_ID attribute. -# """ - -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/memberships/' -# self.data = {} -# self.createdMembershipID = -1 - -# def setup(self): -# # The membership to modify -# self.predata = { -# 'ACT_CDE': activity_code, -# 'SESS_CDE' : '201501', -# 'ID_NUM': my_id_number, -# 'PART_CDE':'GUEST', -# 'BEGIN_DTE':'06/10/2016', -# 'END_DTE':'07/16/2016', -# 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' -# } -# r = api.post(self.session, self.url, self.predata) -# try: -# self.createdMembershipID = r.json()["MEMBERSHIP_ID"] -# # Updated Data -# self.data = { -# 'MEMBERSHIP_ID' : self.createdMembershipID, -# 'ACT_CDE': activity_code, -# 'SESS_CDE' : '201501', -# 'ID_NUM': my_id_number, -# 'PART_CDE':'GUEST', -# 'BEGIN_DTE':'02/10/2016', -# 'END_DTE':'07/16/2016', -# 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' -# } -# except (KeyError, ValueError): -# self.log_error('Error in setup for {0}.'.format(self.test_name)) - -# def test(self): -# response = api.putAsJson(self.session, self.url + str(self.createdMembershipID), self.data) -# if not response.status_code == 200: -# self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) -# try: -# response.json() -# except ValueError: -# self.log_error('Expected Json response body, got {0}.'.format(response.text)) -# else: -# if not ('MEMBERSHIP_ID' in response.json()): -# self.log_error('Expected MEMBERSHIP_ID in response body, got {0}.'.format(response.json())) - -# def cleanup(self): -# # We try to delete the membership we created -# if self.createdMembershipID < 0: # The Creation wasn't successfull. ID is still -1. -# self.log_error('Expected valid membership ID, got {0}.'.format(self.createdMembershipID)) -# else: -# d = api.delete(self.session, self.url + str(self.createdMembershipID)) -# if not d.status_code == 200: -# self.log_error('Error in cleanup for {0}'.format(self.test_name)) - -# class put_non_guest_membership___regular_member(TestCase): -# """ Verify that regular member can't update their membership level. - -# Pre-Conditions: -# Valid Authentication Header. -# Authenticated as a regular member for the activity. -# Expectations: -# Endpoint -- api/memberships/ -# Expected Status Code -- 401 Unauthorized -# Expected Content -- No Content -# """ - -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/memberships/' -# self.data = {} -# self.createdMembershipID = -1 - -# def setup(self): -# # Report if there any current leader memberships under my name to avoid false negatives. -# # If I am currently a director of the club, this test should fail. -# response = api.get(self.session, self.url + 'student/' + str(my_id_number)) -# try: -# for membership in response.json(): -# if(membership['ActivityCode'] == activity_code and membership['Participation'] in LEADERSHIP_POSITIONS): -# self.log_error('False Negative: This user is a leader for the activity we are testing.') -# except (KeyError, ValueError): -# self.log_error('Error in setup for {0}'.format(self.test_name)) - - -# self.predata = { -# 'ACT_CDE': activity_code, -# 'SESS_CDE' : '201501', -# 'ID_NUM': my_id_number, -# 'PART_CDE':'GUEST', -# 'BEGIN_DTE':'06/10/2016', -# 'END_DTE':'07/16/2016', -# 'COMMENT_TXT':'Generated the Raymond Test Suite. IGNORE' -# } -# r = api.postAsJson(self.session, self.url, self.predata) -# try: -# self.createdMembershipID = r.json()['MEMBERSHIP_ID'] -# self.data = { -# 'MEMBERSHIP_ID' : self.createdMembershipID, -# 'ACT_CDE': activity_code, -# 'SESS_CDE' : '201501', -# 'ID_NUM': my_id_number, -# 'PART_CDE':'DIREC', #This is not allowed -# 'BEGIN_DTE':'02/10/2016', -# 'END_DTE':'07/16/2016', -# 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' -# } - -# except (KeyError, ValueError): -# self.log_error('Error in setup for {0}'.format(self.test_name)) - -# def test(self): -# response = api.putAsJson(self.session, self.url + str(self.createdMembershipID),self.data) -# if not response.status_code == 401: -# self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) -# if response.text: -# self.log_error('Expected empty response body, got {0}.'.format(response.text)) - -# def cleanup(self): -# if self.createdMembershipID < 0: -# self.log_error('Expected valid membership ID, got {0}.'.format(self.createdMembershipID)) -# else: -# d = api.delete(self.session, self.url + str(self.createdMembershipID)) -# if not d.status_code == 200: -# self.log_error('Error in cleanup for {0}'.format(self.test_name)) - - -# class delete_membership_for_someone_else___regular_member(TestCase): -# """ Verify that a regular member cannot delete someone else's membership. - -# Pre-Conditions: -# Valid Authentication Header -# Authenticated as Regular Member -# Expectations: -# Endpoint -- api/memberships/:id -# Expected Status Code -- 401 Unauthorized. -# Expected Response Body -- Empty. -# """ - -# def __init__(self, session=None): -# super().__init__(session) -# self.url = hostURL + 'api/memberships/' -# self.membershipID = -1 - -# def setup(self): -# # Get all memberships and pick first one that doesn't belong to me -# response = api.get(self.session, self.url) -# try: -# memberships = response.json() -# except ValueError: -# self.log_error('Error in setup for {0}. Expected a json response, got {1}.'.format(self.test_name, response.text)) -# else: -# try: -# for membership in memberships: -# if not membership['IDNumber'] == str(my_id_number): -# self.membershipID = membership['MembershipID'] -# break -# except KeyError: -# self.log_error('Error in setup for {0}. Expected MembershipID in json response, got {1}.'.format(self.test_name, response.json())) - -# def test(self): -# response = api.delete(self.session, self.url + str(self.membershipID)) -# if not response.status_code == 401: -# self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) -# if response.text: -# self.log_error('Expected empty response body, got {0}.'.format(response.text)) - - -# class delete_valid_membership___regular_member(TestCase): -# """ Verify that a regular member can delete their membership. - -# Pre-Conditions: -# Valid Authentication header. -# Authenticated as regular member for the activity. -# Expectations: -# Endpoint -- api/memberships/ -# Expected Status Code -- 200 OK -# Expected Response Content -- The membership resource that wad delteed. -# """ - -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/memberships/' -# self.createdMembershipID = -1 - -# def setup(self): -# # Create a Memerships that we'll eventually delete -# self.predata = { -# 'ACT_CDE': activity_code, -# 'SESS_CDE' : '201501', -# 'ID_NUM': my_id_number, -# 'PART_CDE':'GUEST', -# 'BEGIN_DTE':'06/10/2016', -# 'END_DTE':'07/16/2016', -# 'COMMENT_TXT':'Generated the Raymond Test Suite. IGNORE' -# } -# r = api.postAsJson(self.session, self.url, self.predata) -# try: -# self.createdMembershipID = r.json()['MEMBERSHIP_ID'] -# except ValueError: -# self.log_error('Error doing setup for {0}'.format(self.test_name)) - -# def test(self): -# response = api.delete(self.session, self.url + str(self.createdMembershipID)) -# if not response.status_code == 200: -# self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) -# try: -# response.json() -# except ValueError: -# self.log_error('Expected Json response body, got {0}.'.format(response.text)) -# else: -# if not ('MEMBERSHIP_ID' in response.json()): -# self.log_error(self.log_error('Expected MEMBERSHIP_ID in response, got {0}.'.format(response.json()))) - - - -# # # # # # # # # # # # # # # -# # MEMBERSHIP REQUEST TESTS # -# # # # # # # # # # # # # # # - -class get_all_membership_requests___regular_member(TestCase): - """ Verify that a regular member cannot access all membership requests. - - Pre-Conditions: - Valid Authentication Header. - Authenticated as regular member. - Expectations: - Endpoint -- api/requests/ - Expected Status Code -- 401 Unauthorized - Expected Response Content -- Empty response content. - """ - - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/requests/' - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 401: - self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) - if response.text: - self.log_error('Expected empty response body, got {0}.'.format(response.text)) - -# class get_my_membership_request___regular_member(TestCase): -# """ Verify that a member can create a request and view it. - -# Pre-Conditions: -# Valid Authentication Header -# Authenticated as regular member -# Expectations: -# Endpoint -- api/requests/:id -# Expected Status Code -- 200 OK -# Expected Response Body -- Json with my membership Request. -# """ - -# def __init__(self,SSLVerify=False, session=None): -# super().__init__(session) -# self.url = hostURL + 'api/requests/' -# self.requestID = -1 - -# def setup(self): -# self.predata = { -# 'SESS_CDE' : '201501', -# 'ACT_CDE' : activity_code, -# 'ID_NUM' : random_id_number, -# 'DATE_SENT' : '07/06/2016', -# 'PART_CDE' : 'MEMBR', -# 'COMMENT_TXT' : 'Generated by the Raymond Test Suite. IGNORE' -# } -# r = api.postAsJson(self.session, self.url, self.predata) -# try: -# self.requestID = r.json()['REQUEST_ID'] -# except (KeyError, ValueError): -# self.log_error('Error in setup for {0}.'.format(self.test_name)) - -# def test(self): -# response = api.get(self.session, self.url + str(self.requestID)) -# if not response.status_code == 200: -# self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) -# try: -# response.json() -# except ValueError: -# self.log_error('Expected Json response body, got {0}.'.format(response.text)) -# else: -# if not ('RequestID' in response.json()): -# self.log_error('Expected RequestID in response, got {0}.'.format(response.json())) - -# def cleanup(self): -# if self.requestID < 0: # ID is still -1 -# self.log_error('Expected valid request id, got {0}.'.format(self.requestID)) -# else: -# d = api.delete(self.session, self.url + str(self.requestID)) -# if not d.status_code == 200: -# self.log_error('Error in cleanup for {0}'.format(self.test_name)) - - -# class get_all_my_membership_requests___regular_member(TestCase): -# """ Verify that a regular member can retrieve all requests belonging to them. - -# Pre-Conditions: -# Valid Authentication Header. -# Authenticated as regular member. -# Expectations: -# Endpoint -- api/requests/student/:id -# Expected Status Code -- 200 OK -# Expected Response Body -- A list of membership requests -# """ - -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/requests/student/' + str(my_id_number) - -# def test(self): -# response = api.get(self.session, self.url) -# if not response.status_code == 200: -# self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) -# try: -# response.json() -# except ValueError: -# self.log_error('Expected Json response body, got {0}.'.format(response.text)) -# else: -# if not (type(response.json()) is list): -# self.log_error('Expected list, got {0}.'.format(response.json())) - -class get_membership_requests_for_someone_else___regular_member(TestCase): - """ Verify that a regular member cannot get the membership requests of somone else. - - Pre-Conditions: - Valid Authentication Header - Authenticated as regular member - Expectations: - Endpoint -- api/requests/student/:id - Expected Status Code -- 401 Unauthorized - Expected Response Body -- Empty - """ - - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/requests/student/' + str(random_id_number) - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 401: - self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) - if response.text: - self.log_error('Expected empty response bodty, got {0}.'.format(response.text)) - -class get_membership_requests_for_activity___regular_member(TestCase): - """ Verify that a regular member can't access memberships requests for activity. - - Pre-Conditions: - Valid Authentication Header - Authenticated as regular member - Expectations: - Endpoint -- api/requests/activity/:id - Expected Status Code -- 401 Unauthorized - Expected Response Body -- Empty - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/requests/activity/' + activity_code - - def setup(self): - # Report if there any current memberships for the Club to avoid false negatives. - # If I am currently a director of the club, this test should fail. - response = api.get(self.session, hostURL + 'api/memberships/student/' + str(my_id_number)) - try: - for membership in response.json(): - if(membership['ActivityCode'] == activity_code and membership['Participation'] in LEADERSHIP_POSITIONS): - self.log_error('False Negative: This user is a leader for the activity we are testing.') - except ValueError: - self.log_error('We did not get a json response back during setup.') - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 401: - self.log_error('We did not get 401 Unauthorized.') - if response.text: - self.log_error('We got a non-empty response body.') - - -class post_valid_membership_request___regular_member(TestCase): - """ Verify that we can create a membership request. - - Pre-conditions: - Valid Authentication Header. - Expectations: - Endpoints -- api/requests/ - Expected Status Cpde -- 201 Created. - Expected Content -- A Json object with a REQUEST_ID attribute. - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/requests/' - self.data = { - 'ACT_CDE': activity_code, - 'SESS_CDE' : '201501', - 'ID_NUM': my_id_number, - 'PART_CDE':'MEMBR', - 'DATE_SENT' : '07/06/2016', - 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' - } - # We will get the actual id when we post. - # Setting it -1 to check later that we got an id from the post. - self.requestID = -1 - - def test(self): - response = api.postAsJson(self.session, self.url, self.data) - if not response.status_code == 201: - self.log_error('Expected 201 Created, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected json response, got {0}.'.format(response.text)) - else: - try: - self.requestID = response.json()['REQUEST_ID'] - except KeyError: - self.log_error('Expected REQUEST_ID in response body, got {0}.'.format(response.json())) - - def cleanup(self): - # We try to delete the request we created - if self.requestID < 0: # The creation wasn't successful - self.log_error('Could not delete request with id of {0}'.format(self.requestID)) - else: - d = api.delete(self.session, self.url + str(self.requestID)) - if not d.status_code == 200: - self.log_error('There was a problem performing cleanup for {0}'.format(self.test_name)) - -class post_membership_request_for_someone_else___regular_member(TestCase): - """ Verify that we can't create a membership request for someone else. - - Pre-conditions: - Valid Authentication Header. - Authenticated as Regular member. - Expectations: - Endpoints -- api/requests/ - Expected Status Code -- 401 Unauthorized. - Expected Response Content -- Empty Response. - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/requests/' - self.data = { - 'ACT_CDE': activity_code, - 'SESS_CDE' : '201501', - 'ID_NUM': random_id_number, - 'PART_CDE':'MEMBR', - 'DATE_SENT' : '07/06/2016', - 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' - } - # We will get the actual id when we post. - self.requestID = -1 - - def test(self): - response = api.post(self.session, self.url, self.data) - if not response.status_code == 401: - self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) - if response.text: - self.log_error('Expected empty response, got {0}.'.format(response.text)) - if response.status_code == 201: - self.log_error('Will try to delete resource...') - try: - self.requestID = response.json()['REQUEST_ID'] - except (ValueError, KeyError): - self.log_error('Error in test for {0}.'.format(self.test_name)) - - def cleanup(self): - # If the creation went through, let's delete the resource - if self.requestID >= 0: - self.log_error('Request {0} was created even though it was supposed to be unauthorized'.format(self.requestID)) - d = api.delete(self.session, self.url + str(self.requestID)) - if d.status_code == 200: - self.log_error('Unauthorized resource deleted.') - else: - self.log_error('Error deleting unauthorized resource.') - -# class put_membership_request___regular_member(TestCase): -# """ Verify that regular member can't edit a membership request. - -# Pre-Conditions: -# Valid Authorization Header. -# Authenticated as regular member. -# Expectations: -# Endpoint -- api/requests/:id -# Expected Status Code -- 401 Unauthorized -# Expected Response Body -- Empty -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + '/api/requests/' -# self.predata = {} -# self.data = {} -# self.requestID = -1 - -# def setup(self): -# self.predata = { -# 'ACT_CDE': activity_code, -# 'SESS_CDE' : '201501', -# 'ID_NUM': my_id_number, -# 'PART_CDE':'MEMBR', -# 'DATE_SENT' : '07/06/2016', -# 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' -# } -# response = api.postAsJson(self.session, self.url, self.predata) -# try: -# self.requestID = response.json()['REQUEST_ID'] -# self.data = { -# 'REQUEST_ID': self.requestID, -# 'ACT_CDE': activity_code, -# 'SESS_CDE' : '201501', -# 'ID_NUM': my_id_number, -# 'PART_CDE':'MEMBR', -# 'DATE_SENT' : '07/06/2016', -# 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' -# } -# except ValueError: -# self.log_error('Error performing setup for {0}.'.format(self.test_name)) - - -# def test(self): -# response = api.putAsJson(self.session, self.url + str(self.requestID), self.data) -# if not response.status_code == 401: -# self.log_error('We did not get a 401 Unauthorized.') -# if response.text: -# self.log_error('We got a non-empty response body.') - -# def cleanup(self): -# d = api.delete(self.session, self.url + str(self.requestID)) -# if not d.status_code == 200: -# self.log_error('There was error performing cleanup for {0}.'.format(self.test_name)) - - -# class approve_my_request___regular_member(TestCase): -# """ Verify that a regular member cannot approve his/her request - -# Pre-Conditions: -# Valid Authentication Header -# Authenticated as a regular member -# Expectations: -# Endpoints -- api/requests/:id/approve -# Expected Status Code -- 401 Unauthorized -# Expected Response Body -- Empty -# """ -# def __init__(self, session=None): -# super().__init__(session) -# self.url = hostURL + 'api/requests/' -# self.data = {} -# self.requestID = -1 - -# def setup(self): -# #Create a memberships request for the trash club. -# self.data = { -# 'ACT_CDE': activity_code, -# 'SESS_CDE' : '201501', -# 'ID_NUM': my_id_number, -# 'PART_CDE':'MEMBR', -# 'DATE_SENT' : '07/06/2016', -# 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' -# } -# response = api.postAsJson(self.session, self.url, self.data) -# if not response.status_code == 201: -# self.log_error('Error in setup for {0}. Expected 201 Created, got {1}.'.format(self.test_name, response.status_code)) -# try: -# response.json() -# except ValueError: -# self.log_error('Error in setup for {0}. Expected json response, got {1}.'.format(self.test_name, response.text)) -# else: -# try: -# self.requestID = response.json()['REQUEST_ID'] -# except KeyError: -# self.log_error('Error in setup for {0}. Expected REQUEST_ID in response, got {1}.'.format(self.test_name, response.json())) - -# def test(self): -# response = api.postAsJson(self.session, self.url + str(self.requestID) + '/approve', None) -# if not response.status_code == 401: -# self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) -# if response.text: -# self.log_error('Expected empty response body, got {0}.'.format(response.text)) - -# def cleanup(self): -# # We try to delete the request we made -# if self.requestID < 0: # The request was not successful -# self.log_error('Error in cleanup for {0}. Expected valid request ID, got {1}.'.format(self.test_name, self.requestID)) -# else: -# d = api.delete(self.session, self.url + str(self.requestID)) -# if not d.status_code == 200: -# self.log_error('Error in cleanup for {0}. Expected 200 OK, got {1}.'.format(self.test_name, d.status_code)) - - -# class deny_my_request___regular_member(TestCase): -# """ Verify that a regular member cannot deny his/her request - -# Pre-Conditions: -# Valid Authentication Header -# Authenticated as a regular member -# Expectations: -# Endpoints -- api/requests/:id/deny -# Expected Status Code -- 401 Unauthorized -# Expected Response Body -- Empty -# """ -# def __init__(self, session=None): -# super().__init__(session) -# self.url = hostURL + 'api/requests/' -# self.data = {} -# self.requestID = -1 - -# def setup(self): -# #Create a memberships request for the trash club. -# self.data = { -# 'ACT_CDE': activity_code, -# 'SESS_CDE' : '201501', -# 'ID_NUM': my_id_number, -# 'PART_CDE':'MEMBR', -# 'DATE_SENT' : '07/06/2016', -# 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' -# } -# response = api.postAsJson(self.session, self.url, self.data) -# if not response.status_code == 201: -# self.log_error('Error in setup for {0}. Expected 201 Created, got {1}.'.format(self.test_name, response.status_code)) -# try: -# response.json() -# except ValueError: -# self.log_error('Error in setup for {0}. Expected json response, got {1}.'.format(self.test_name, response.text)) -# else: -# try: -# self.requestID = response.json()['REQUEST_ID'] -# except KeyError: -# self.log_error('Error in setup for {0}. Expected REQUEST_ID in response, got {1}.'.format(self.test_name, response.json())) - -# def test(self): -# response = api.postAsJson(self.session, self.url + str(self.requestID) + '/deny', None) -# if not response.status_code == 401: -# self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) -# if response.text: -# self.log_error('Expected empty response body, got {0}.'.format(response.text)) - -# def cleanup(self): -# # We try to delete the request we made -# if self.requestID < 0: # The request was not successful -# self.log_error('Error in cleanup for {0}. Expected valid request ID, got {1}.'.format(self.test_name, self.requestID)) -# else: -# d = api.delete(self.session, self.url + str(self.requestID)) -# if not d.status_code == 200: -# self.log_error('Error in cleanup for {0}. Expected 200 OK, got {1}.'.format(self.test_name, d.status_code)) - - - - -# class delete_my_membership_request___regular_member(TestCase): -# """ Verify that regular member can delete his/her membership request - -# Pre-Conditions: -# Valid Authentication Header -# Expectations: -# Endpoint -- api/requests/:id -# Expected Status Code -- 200 OK -# Expected Response Body -- Json object with deleted resource -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/requests/' -# self.predata = {} -# self.requestID = -1 - -# def setup(self): -# self.predata = { -# 'ACT_CDE': activity_code, -# 'SESS_CDE' : '201501', -# 'ID_NUM': my_id_number, -# 'PART_CDE':'MEMBR', -# 'DATE_SENT' : '07/06/2016', -# 'COMMENT_TXT':'Generated by the Raymond Test Suite. IGNORE' -# } -# response = api.postAsJson(self.session, self.url, self.predata) -# try: -# self.requestID = response.json()['REQUEST_ID'] -# except ValueError: -# self.log_error('Error on setup for {0}.'.format(self.test_name)) - -# def test(self): -# response = api.delete(self.session, self.url + str(self.requestID)) -# if not response.status_code == 200: -# self.log_error('Expected Status Code 200, got {0}.'.format(response.status_code)) -# if not response.text: -# self.log_error('We got an empty response body.') -# try: -# deletedData = response.json() -# deletedDataID = deletedData['REQUEST_ID'] -# except ValueError: -# self.log_error('We did not get a json response.') -# else: -# if not deletedDataID == self.requestID: -# self.log_error('The resource we deleted is different from the one we created.') - - -# # # # # # # # # # # -# # SUPERVISOR TESTS # -# # # # # # # # # # # - - -# class get_all_supervisors___regular_member(TestCase): -# """ Verify that a regular member cannot view all supervisors. - -# Pre-Conditions: -# Valid Authentication Header. -# Authenticated as Regular member -# Expectations: -# Endpoint -- api/supervisors/ -# Expected Status Code -- 401 Unauthorized -# Expected Response Body -- Empty -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/supervisors/' - -# def test(self): -# response = api.get(self.session, self.url) -# if not response.status_code == 401: -# self.log_error('Expected Status Code 401 Unauthorized, got {0}.'.format(response.status_code)) -# if response.text: -# self.log_error('Got non-empty response body.') - -# class get_supervisors_for_activity___regular_member(TestCase): -# """ Verify that a regular member can get supervisors for activity - -# Pre-Conditions: -# Valid Authentication Header. -# Authenticated as regular member. -# Expectations: -# Endpoint -- api/supervisors/activity/:id -# Expected Status Code -- 200 OK -# Expected Response Body -- list of json objects -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/supervisors/activity/' + activity_code - -# def test(self): -# response = api.get(self.session, self.url) -# if not response.status_code == 200: -# self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) -# if not response.text: -# self.log_error('Got an empty response body.') -# try: -# response.json() -# except ValueError: -# self.log_error('Did not get a json response.') -# else: -# if not (type(response.json()) is list): -# self.log_error('Did not get a list.') - -# # class post_supervisor___regular_member(TestCase): -# # """ verify that a regular member can't add a supervisor - -# # Pre-Conditions: -# # Valid Authentication Header. -# # Authenticated as a regular member -# # Expectations: -# # Endpoint -- api/supervisors/ -# # Expected Status Code -- 401 Unauthorized -# # Expected Response Body -- Empty -# # """ -# # def __init__(self , session=None): -# # super().__init__(session) -# # self.url = hostURL + 'api/supervisors/' -# # self.data = {} -# # self.supervisorID = -1 - -# # def setup(self): -# # self.data = { -# # 'ID_NUM' : my_id_number, -# # 'ACT_CDE' : activity_code, -# # 'SESS_CDE' : '201501' -# # } - -# # def test(self): -# # response = api.postAsJson(self.session, self.url, self.data) -# # if not response.status_code == 401: -# # self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) -# # if response.text: -# # self.log_error('Expected empty response body, got {0}.'.format(response.text)) -# # if response.status_code == 201: -# # self.log_error('Delete the unauthorized resource...') -# # try: -# # self.supervisorID = response.json()['SUP_ID'] -# # except ValueError: -# # self.log_error('Problem accessing compromised resource.') - - -# # def cleanup(self): -# # if self.supervisorID > 0: # Unauthorized creation took place -# # d = api.delete(self.session, self.url + str(self.supervisorID)) -# # if response.status_code == 200: # Deletion was not successful -# # self.log_error('Unauthorized resource deleted.') -# # else: -# # self.log_error('Error deleting Unauthorized resource.') - -# class put_supervisor___regular_member(TestCase): -# """ Verify that a regular member can't edit an existing supervisor - -# Pre-Conditions: -# Valid Authentication Header. -# Authenticated as regular member. -# Expectations: -# Endpoint -- api/supervisors/:id -# Expected Status Code -- 401 Unauthorized -# Expected Response Body -- Empty -# """ -# def __init__(self , session=None): -# super().__init__(session) -# # Trying to update a random supervisor -# self.url = hostURL + 'api/supervisors/' - -# tempID = 0 -# response = api.get(self.session, self.url + str(tempID)) -# # Iterate until we find an actual supervisor. -# while response.status_code == 404: -# tempID = tempID + 1 -# response = api.get(self.session, self.url + str(tempID)) - -# self.data = { -# 'SUP_ID' : tempID, -# 'ACT_CDE' : activity_code, -# 'SESS_CDE' : '201501', -# 'ID_NUM' : my_id_number -# } - -# self.supervisorID = -1 - -# def test(self): -# response = api.putAsJson(self.session, self.url + str(self.data['SUP_ID']), self.data) -# if not response.status_code == 401: -# self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) -# if response.text: -# self.log_error('Expected empty response body, got {0}.'.format(response.text)) -# if response.status_code == 200: # If supervisor was updated -# self.log_error('Unauthorized update. Attempting to delete...') -# try: -# self.supervisorID = response.json()['SUP_ID'] -# except (ValueError, KeyError): -# self.log_error('Error accessing compromised supervisor.') - -# def cleanup(self): -# if self.supervisorID > 0: # The supervisor was updated. -# d = api.delete(self.session, self.url) -# if d.status_code == 200: -# self.log_error('Compromised resource deleted.') -# else: -# self.log_error('Unable to delete compromised resource.') - - -# class delete_supervisor___regular_member(TestCase): -# """ Verify that regular member can't delete a supervisor - -# Pre-Conditions: -# Valid Authentication Header -# Authenticated as regular member -# Expectations: -# Endpoint -- api/supervisors/:id -# Expected Status Code -- 401 Unauthorized -# Expected Response Body -- Empty -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/supervisors/2' - -# def test(self): -# response = api.delete(self.session, self.url) -# if not response.status_code == 401: -# self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) -# if response.text: -# self.log_error('Expected empty body, got {0}.'.format(response.text)) - - -# # # # # # # # # # -# # ACTIVITY TESTS # -# # # # # # # # # # - -# class get_all_activities___regular_member(TestCase): -# """ Verify that a regular member can get all activities. - -# Pre-Conditions: -# Valid Authentication Header. -# Expectations: -# Endpoint -- api/activities/ -# Expected Status Code -- 200 OK -# Expected Response Body -- List of activities -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/activities/' - -# def test(self): -# response = api.get(self.session, self.url) -# if not response.status_code == 200: -# self.log_error('Expected 200 OK , got {0}.'.format(response.status_code)) -# try: -# response.json() -# except ValueError: -# self.log_error('Expected Json response body, got {0}.'.format(respons.text)) -# else: -# if not (type(response.json()) is list): -# self.log_error('Expected list, got {0}.'.format(response.json())) - -# class get_one_activity___regular_member(TestCase): -# """ Verify that a regular member can a single activity. - -# Pre-Conditions: -# Valid Authentication Header -# Expectations: -# Endpoint -- api/activities -# Expected Status Code -- 200 OK -# Expected Response Body -- Json object with activity resource -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/activities/' + activity_code - -# def test(self): -# response = api.get(self.session, self.url) -# if not response.status_code == 200: -# self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) -# try: -# response.json() -# except ValueError: -# self.log_error('Expected Json response body, got {0}.'.format(response.text)) -# else: -# try: -# response.json()['ActivityCode'] -# except KeyError: -# self.log_error('Expected ACT_CDE in response, got {0}.'.format(response.json())) - -# class get_activities_for_session___regular_member(TestCase): -# """ Verify that a regular member can get all activities for specific session. - -# Pre-Conditions: -# Valid Authentication Header -# Expectations: -# Endpoint -- api/activities/session/:id -# Expected Status Code -- 200 OK -# Expected Response Body -- list of activities -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/activities/session/201501' - -# def test(self): -# response = api.get(self.session, self.url) -# if not response.status_code == 200: -# self.log_error('Expected 200 OK, got {0}.'.format(response.json())) -# try: -# response.json() -# except ValueError: -# self.log_error('Expected Json response body, got {0}.'.format(response.json())) -# else: -# if not (type(response.json()) is list): -# self.log_error('Expected list, got {0}.'.format(response.json())) - -# class update_activity___regular_member(TestCase): -# """ Verify that a regular member cannot update activity information. - -# Pre-Conditions: -# Valid Authentication Header -# Authenticated as regular member -# Expectations: -# Endpoints -- api/activities/:id -# Expected Status Code -- 401 Unauthorized -# Expected Response Body -- Empty -# """ - -# def __init__(self, session=None): -# super().__init__(session) -# self.url = hostURL + 'api/activities/' + activity_code -# self.data = {} - -# def setup(self): -# # Report if there any current memberships for the Club to avoid false negatives. -# # If I am currently a director of the club, this test should fail. -# response = api.get(self.session, hostURL + 'api/memberships/student/' + str(my_id_number)) -# try: -# for membership in response.json(): -# if(membership['ActivityCode'] == activity_code and membership['Participation'] in LEADERSHIP_POSITIONS): -# self.log_error('False Negative: This user is a leader for the activity we are testing.') -# except ValueError: -# self.log_error('We did not get a json response back during setup.') -# else: -# self.data = { -# "ACT_CDE" : activity_code, -# "ACT_IMG" : "HACKING INTO SYSTEM AS REGULAR MEMBER", -# "ACT_BLURB" : "HACKING INTO SYSTEM AS REGULAR MEMBER", -# "ACT_URL" : "HACKING INTO SYSTEM AS REGULAR MEMBER" -# } - -# def test(self): -# response = api.putAsJson(self.session, self.url , self.data) -# if not response.status_code == 401: -# self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) -# if response.text: -# self.log_error('Expected empty response body, got {0}.'.format(response.text)) - -# def cleanup(self): -# # Don't delete activity even if it was updated. That's too drastic. -# pass - - -################# -# PROFILE TESTS # -################# - -class get_my_profile___regular_member(TestCase): - """ Verify that a regular member can get a profile of the current user - - Pre-Conditions: - Valid Authentication header - Expectaions: - Endpoint -- api/profiles/ - Expected Status Code -- 200 OK - Expected Respones Body -- A json object of information on own profile - """ - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/profiles/' - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got {0}.'.format(response.text)) - - -class get_profile_by_username___regular_member(TestCase): - """ Verify that a regular member can get another person's profile, filtering private information - Pre-Conditions: - Valid Authentication Header - Expectations: - Endpoint -- api/profiles/:username - Expected Status Code -- 200 Ok - Expected Response Body -- list of information on the user without private info - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/profiles/' + username - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got{0}.'.format(response.text)) - - -class get_college_role_by_username___regular_member(TestCase): - """ Verify that a regular member can get a college role of the current user - Pre-Conditions: - Valid Authentication Header - Expectations: - Endpoint -- api/profiles/role/:username - Expected Status Code -- 200 Ok - Expected Response Body -- list of information on the user without private info - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/profiles/role/' + username - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got{0}.'.format(response.text)) - - - -class get_image___regular_member(TestCase): - """ Verify that a regular member can get a profile image of the current user - Pre-Conditions: - Valid Authentication Header - Expectations: - Endpoint -- api/profiles/image - Expected Status Code -- 200 Ok - Expected Response Body -- image path of the current user - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/profiles/image/' - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got{0}.'.format(response.text)) - - - -class get_image_by_username___regular_member(TestCase): - """ Verify that a regular member can get a profile image of someone else - Pre-Conditions: - Valid Authentication Header - Expectations: - Endpoint -- api/profiles/image/:username - Expected Status Code -- 200 Ok - Expected Response Body -- image path of another user - """ - def __init__(self , session=None): - super().__init__(session) - self.url = hostURL + 'api/profiles/image/' + username - - def test(self): - response = api.get(self.session, self.url) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - self.log_error('Expected Json response body, got{0}.'.format(response.text)) - - -# Often does not PASS due to permission issue to the image columns in WebSQL/CCT databases -class post_image___regular_member(TestCase): - """ Verify that a user can upload a profile image - Pre-Conditions: - Authenticated as Regular member. - Expectations: - Endpoint -- api/profiles/image/ - Expected Status Code -- 200 OK - Expected Content -- - """ - - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/profiles/image/' - self.data = { - 'ID': my_id_number, - 'FILE_PATH': #File path of the image on the user's computer, - 'FILE_NAME': #Barcode ID of the user - } - - def test(self): - response = api.post(self.session, self.url, self.data) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - - def cleanup(self): - self.data = { - 'ID': my_id_number, - 'FILE_PATH': None, - 'FILE_NAME': None - } - d = api.post(self.session, self.url + 'reset/', self.data) - if not d.status_code == 200: - self.log_error('There was a problem performing cleanup for {0}'.format(self.test_name)) - - - -class post_reset_image___regular_member(TestCase): - """ Verify that a user can reset a profile image - Pre-Conditions: - Authenticated as Regular member. - Expectations: - Endpoint -- api/profiles/image/reset/ - Expected Status Code -- 200 OK - Expected Content -- - """ - - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/profiles/image/reset/' - self.data = { - 'ID': my_id_number, - 'FILE_PATH': None, - 'FILE_NAME': None - } - self.requestID = -1 - - def test(self): - response = api.post(self.session, self.url, self.data) - if not response.status_code == 200: - self.log_error('Expected 200 Created, got {0}.'.format(response.status_code)) - - - -class put_social_media_links___regular_member(TestCase): - """ Verify that a user can add and edit social media links - Pre-Conditions: - Authenticated as Regular member. - Expectations: - Endpoint -- api/profiles/:type - Expected Status Code -- 200 OK - Expected Content -- - """ - - # Any other SNS names can be used to replace 'facebook' to test - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/profiles/facebook/' - self.data = { - 'facebook': #'URL of any SNS including the domain name' - } - - def test(self): - response = api.put(self.session, self.url, self.data) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - - def cleanup(self): - self.resetdata = { - 'facebook': '' - } - d = api.put(self.session, self.url, self.resetdata) - if not d.status_code == 200: - self.log_error('There was a problem performing cleanup for {0}'.format(self.test_name)) - - - -class put_mobile_privacy___regular_member(TestCase): - """ Verify that a user can add and edit social media links - Pre-Conditions: - Authenticated as Regular member. - Expectations: - Endpoint -- api/profiles/mobile_privacy/:value (Y or N) - Expected Status Code -- 200 OK - Expected Content -- - """ - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/profiles/mobile_privacy/Y/' - self.data = { - 'IsMobilePhonePrivate': 'Y' - } - - def test(self): - response = api.put(self.session, self.url, self.data) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - - def cleanup(self): - self.resetdata = { - 'IsMobilePhonePrivate': 'N' - } - d = api.put(self.session, self.url, self.resetdata) - if not d.status_code == 200: - self.log_error('There was a problem performing cleanup for {0}'.format(self.test_name)) - - -class put_image_privacy___regular_member(TestCase): - """ Verify that a user can add and edit social media links - Pre-Conditions: - Authenticated as Regular member. - Expectations: - Endpoint -- api/profiles/image_privacy/:value (Y or N) - Expected Status Code -- 200 OK - Expected Content -- - """ - def __init__(self, session=None): - super().__init__(session) - self.url = hostURL + 'api/profiles/image_privacy/Y/' - self.data = { - 'show_pic': 'Y' - } - - def test(self): - response = api.put(self.session, self.url, self.data) - if not response.status_code == 200: - self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) - - def cleanup(self): - self.resetdata = { - 'show_pic': 'N' - } - d = api.put(self.session, self.url, self.resetdata) - if not d.status_code == 200: - self.log_error('There was a problem performing cleanup for {0}'.format(self.test_name)) - - - -# # # # # # # # # # # # # -# # PARTICIPATIONS TEST # -# # # # # # # # # # # # # - - -# class get_all_participations___regular_member(TestCase): -# """ Verify that a regular member can get all participations - -# Pre-Conditions: -# Valid Authentication Header -# Expectations: -# Endpoint -- api/participations -# Expected Status Code -- 200 OK -# Expected Response Body -- List of all participations -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/participations' - -# def test(self): -# response = api.get(self.session, self.url) -# if not response.status_code == 200: -# self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) -# try: -# response.json() -# except ValueError: -# self.log_error('Expected Json response body, got {0}.'.format(response.text)) -# else: -# if not (type(response.json()) is list): -# self.log_error('Expected list, got {0}.'.format(response.json())) - -# class get_one_participation___regular_member(TestCase): -# """ Verify that a regular member can get a specific participation object - -# Pre-Conditions: -# Valud Authentication Header -# Expectations: -# Endpoint -- api/participations -# Expected Status Code -- 200 OK -# Expected Response Body -- A participation object -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/participations/MEMBR' - -# def test(self): -# response = api.get(self.session, self.url) -# if not response.status_code == 200: -# self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) -# try: -# response.json() -# except ValueErrror: -# self.log_error('Expected Json response body, got {0}.'.format(response.text)) -# else: -# try: -# response.json()['ParticipationCode'] -# except KeyError: -# self.log_error('Expected ParticipationCode in response, got {0}.'.format(response.json())) - - -# # # # # # # # # # -# # SESSIONS TEST # -# # # # # # # # # # - - -# class get_all_sessions___regular_member(TestCase): -# """ Verify that a regular member can get all session objects - -# Pre-Conditions: -# Valid Authentication Header -# Expectations: -# Endpoint -- api/sessions/ -# Expected Status Code -- 200 OK -# Expected Response Body -- List of session resources -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/sessions/' - - -# def test(self): -# response = api.get(self.session, self.url) -# if not response.status_code == 200: -# self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) -# try: -# response.json() -# except ValueError: -# self.log_error('Expected Json response body, got {0}.'.format(response.json())) -# else: -# if not (type(response.json()) is list): -# self.log_error('Expected list, got {0}.'.format(response.json())) - - -# class get_one_session___regular_member(TestCase): -# """ Verify that a regular member can get a session object - -# Pre-Conditions: -# Valid Authentication Header -# Expectations: -# Endpoint -- api/sessions/:id -# Expected Status Code -- 200 OK -# Expected Response Body -- A session resource. -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/sessions/201501' - -# def test(self): -# response = api.get(self.session, self.url) -# if not response.status_code == 200: -# self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) -# try: -# response.json() -# except ValueError: -# self.log_error('Expected Json response body, got {0}.'.format(response.text)) -# else: -# try: -# response.json()['SessionCode'] -# except KeyError: -# self.log_error('Expected SessionCode in response, got {0}.'.format(response.json())) - -# # # # # # # # # # -# # STUDENTS TEST # -# # # # # # # # # # - - -# class get_all_students___regular_member(TestCase): -# """ Verify that a regular member cannot list all students - -# Pre-Conditions: -# Valid Authentications Header -# Expectations: -# Endpoint -- api/students -# Expected Status Code -- 401 Unauthorized -# Expected Response Body -- Empty -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/students/' - -# def test(self): -# response = api.get(self.session, self.url) -# if not response.status_code == 401: -# self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) -# if response.text: -# self.log_error('Expected empty response body, got {0}.'.format(response.text)) - - -# class get_student_by_id___regular_member(TestCase): -# """ Verify that a regular member can get a student resource - -# Pre-Conditions: -# Valid Authentication Header -# Expectations: -# Endpoint -- api/students/:id -# Expected Status Code -- 200 Ok -# Expected Response Body -- A json response with the student resource -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/students/' + str(random_id_number) - -# def test(self): -# response = api.get(self.session, self.url) -# if not response.status_code == 200: -# self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) -# try: -# response.json() -# except ValueError: -# self.log_error('Expected Json response body, got{0}.'.format(response.text)) -# else: -# try: -# response.json()['StudentID'] -# except KeyError: -# self.log_error('Expected StudentID in response, got{0}.'.format(response.json())) - - -# class get_student_by_email___regular_member(TestCase): -# """ Verify that a regular member cannot get a student resource by email. - -# Pre-Conditions: -# Valid Authentication Header -# Expectations: -# Endpoint -- api/students/email/:email -# Expected Status Code -- 200 OK -# Expected Response Body -- A json response with the student resource -# """ - -# def __init__(self, session=None): -# super().__init__(session) -# self.url = hostURL + 'api/students/email/ezeanyinabia.anyanwu@gordon.edu/' - -# def test(self): -# response = api.get(self.session, self.url) -# if not response.status_code == 200: -# self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) -# try: -# response.json() -# except ValueError: -# self.log_error('Expected Json response body, got{0}.'.format(response.text)) -# else: -# try: -# response.json()['StudentID'] -# except KeyError: -# self.log_error('Expected StudentID in response, got{0}.'.format(response.json())) - - -# # # # # # # # # -# # EMAIL TEST # -# # # # # # # # # - - -# class get_emails_for_activity___regular_member(TestCase): -# """ Verify that a regular member cannot get the emails for the members of an activity - -# Pre-conditions: -# Valid Authentication Header -# Authenticated as Regular Member -# Expectations: -# Endpoint -- api/emails/activity/:id -# Expected Status Code -- 401 Unauthorized -# Expected Response Body -- Empty -# """ -# def __init__(self , session=None): -# super().__init__(session) -# self.url = hostURL + 'api/emails/activity/' + activity_code - -# def test(self): -# response = api.get(self.session, self.url) -# if not response.status_code == 401: -# self.log_error('Expected 401 Unauthorized, got {0}.'.format(response.status_code)) -# if response.text: -# self.log_error('Expected empty response body, got {0}.'.format(response.text)) - - - -# class get_emails_for_leaders___regular_member(TestCase): -# """ Verify that a regular member can get the emails for any activity leader - -# Pre-Conditions: -# Valid Authentication header -# Expectaions: -# Endpoint -- api/emails/activity/:id/leaders -# Expected Status Code -- 200 OK -# Expected Respones Body -- Json response with a list of emails -# """ -# def __init__(self, session=None): -# super().__init__(session) -# self.url = hostURL + 'api/emails/activity/' + activity_code + '/leaders' - -# def test(self): -# response = api.get(self.session, self.url) -# if not response.status_code == 200: -# self.log_error('Expected 200 OK, got {0}.'.format(response.status_code)) -# try: -# response.json() -# except ValueError: -# self.log_error('Expected Json response body, got {0}.'.format(response.text)) -# else: -# try: -# response.json()[0]['Email'] -# except KeyError: -# self.log_error('Expected Email in response, got{0}.'.format(response.json())) - -if __name__ == '__main__': - main() diff --git a/Tests/ApiEndpoints/profile.jpg b/Tests/ApiEndpoints/profile.jpg deleted file mode 100644 index ea180581c18e0008f52adbe947a5f8a8ef92e41d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27022 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 0: - api.delete(self.session, self.url + str(self.createdMembershipID)) - -# Verify that an activity leader can assign a new leader -# Precondition -- unknown -# Endpoint -- api/memberships/ -# Expected Status Code -- 200 OK -# Expected Content -- A json response with the created membership - @pytest.mark.skipif(not control.unknownPrecondition, reason = "409 Error") - def test_post_new_leader_membership_for_someone___activity_leader(self): - self.session = \ - self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/memberships/' - self.createdMembershipID = -1 - # Add a new leader - self.data = { - 'ACT_CDE': control.activity_code_AJG, - 'SESS_CDE': control.session_code, - 'ID_NUM': control.valid_id_number, - 'PART_CDE':'LEAD', - 'BEGIN_DTE': control.begin_date, - 'END_DTE': control.end_date, - 'COMMENT_TXT': control.comments - } - response = api.postAsJson(self.session, self.url, self.data) - if not response.status_code == 201: - pytest.fail('Expected 201, got {0}.'.format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - try: - self.createdMembershipID = response.json()['MEMBERSHIP_ID'] - if self.createdMembershipID < 0: # The creation was not successful - pytest.fail('Expected valid memberhsip ID, got {0}.'\ - .format(self.createdMembershipID)) - else: - #checking if the correctness of post - getResponse = api.get(self.session, control.hostURL + \ - 'api/memberships/activity/' + str(control.activity_code_AJG)) - self.membershipID = response.json()['MEMBERSHIP_ID'] - req = getResponse.json() - found = False - for dic in req: - reqID = dic['MembershipID'] - if (reqID == self.membershipID): - found = True - try: - assert dic['ActivityCode'] == control.activity_code_AJG - assert dic['SessionCode'] == control.session_code - assert dic['IDNumber'] == control.valid_id_number - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(getResponse.json)) - if not found: - pytest.fail('MembershipID not found:', self.membershipID) - d = api.delete(self.session, self.url + \ - str(self.createdMembershipID)) - if not d.status_code == 200: - pytest.fail('Error in cleanup. Expected , got {0}.'\ - .format(d.status_code)) - except KeyError: - pytest.fail('Expected MEMBERSHIP ID in response, got {0}.'\ - .format(response.json())) - - - -# Verify that an activity leader can upgrade a normal membership to leader -# status. -# Precondition -- unknown -# Endpoint -- api/memberships/:id -# Expected Status Code -- 200 OK -# Expected Content -- A json object with a MEMBERSHIP_ID attribute. - @pytest.mark.skipif(not control.unknownPrecondition, reason = "Error in setup") - def test_put_edited_membership_member_to_leader___activity_leader(self): - self.session = \ - self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/memberships/' - self.createdMembershipID = -1 - - # The membership to modify - self.predata = { - 'ACT_CDE': control.activity_code_AJG, - 'SESS_CDE' : control.session_code, - 'ID_NUM': control.valid_id_number, - 'PART_CDE':'MEMBR', # Is a participant at first. - 'BEGIN_DTE':'06/10/2016', # Old start date - 'END_DTE':'07/16/2016', - 'COMMENT_TXT': control.comments - } - r = api.postAsJson(self.session, self.url, self.predata) - try: - self.createdMembershipID = r.json()["MEMBERSHIP_ID"] - # Updated Data - self.data = { - 'MEMBERSHIP_ID' : self.createdMembershipID, - 'ACT_CDE': control.activity_code_AJG, - 'SESS_CDE' : control.session_code, - 'ID_NUM': control.valid_id_number, - 'PART_CDE':'LEAD', # Upgrade him to director. - 'BEGIN_DTE':'02/10/2016', # New start date - 'END_DTE':'07/16/2016', - 'COMMENT_TXT': control.comments - } - except (KeyError, ValueError): - pytest.fail('Error in setup.') - response = api.putAsJson(self.session, self.url + \ - str(self.createdMembershipID), self.data) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - try: - self.createdMembershipID = response.json()['MEMBERSHIP_ID'] - except KeyError: - pytest.fail('Expected MEMBERSHIP_ID in json response, got {0}.'\ - .format(response.json())) - assert response.json()['PART_CDE'] == 'LEAD' - if self.createdMembershipID >= 0: - api.delete(self.session, self.url + str(self.createdMembershipID)) - -# Verify that an activity leader can demote a leader membership. -# Precondition -- unknown -# Endpoint -- api/memberships/:id -# Expected Status Code -- 200 OK -# Expected Content -- A json object with a MEMBERSHIP_ID attribute. - @pytest.mark.skipif(not control.unknownPrecondition, reason = "Error in setup.") - def test_put_edited_membership_leader_to_member___activity_leader(self): - self.session = \ - self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/memberships/' - self.createdMembershipID = -1 - # The membership to modify - self.predata = { - 'ACT_CDE': control.activity_code_AJG, - 'SESS_CDE' : control.session_code, - 'ID_NUM': control.valid_id_number, - 'PART_CDE':'LEAD', # Is a leader at first - 'BEGIN_DTE':'06/10/2016', # Old start date - 'END_DTE':'07/16/2016', - 'COMMENT_TXT': control.comments - } - r = api.postAsJson(self.session, self.url, self.predata) - try: - self.createdMembershipID = r.json()["MEMBERSHIP_ID"] - # Updated Data - self.data = { - 'MEMBERSHIP_ID' : self.createdMembershipID, - 'ACT_CDE': control.activity_code_AJG, - 'SESS_CDE' : control.session_code, - 'ID_NUM': control.valid_id_number, - 'PART_CDE':'MEMBR', # Demote him to member - 'BEGIN_DTE':'02/10/2016', # New start date - 'END_DTE':'07/16/2016', - 'COMMENT_TXT': control.comments - } - except (KeyError, ValueError): - pytest.fail('Error in setup.') - response = api.putAsJson(self.session, self.url + \ - str(self.createdMembershipID), self.data) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - try: - self.createdMembershipID = response.json()['MEMBERSHIP_ID'] - except KeyError: - pytest.fail('Expected MEMBERSHIP_ID in json response, got {0}.'\ - .format(response.json())) - assert response.json()['PART_CDE'] == 'MEMBR' - if self.createdMembershipID >= 0: - api.delete(self.session, self.url + str(self.createdMembershipID)) - -# Verify that an activity leader can delete someone else's membership. -# Predcondition -- unknown -# Endpoint -- api/memberships/ -# Expected Status Code -- 200 OK -# Expected Response Content -- The membership resource that wad deleted. - @pytest.mark.skipif(not control.unknownPrecondition, reason = "Error doing setup.") - def test_delete_valid_membership___activity_leader(self): - self.session = \ - self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/memberships/' - self.createdMembershipID = -1 - - # Create a Memerships that we'll eventually delete - self.predata = { - 'ACT_CDE': control.activity_code_AJG, - 'SESS_CDE' : control.session_code, - 'ID_NUM': control.valid_id_number, - 'PART_CDE':'MEMBR', - 'BEGIN_DTE': control.begin_date, - 'END_DTE': control.end_date, - 'COMMENT_TXT': control.comments - } - r = api.postAsJson(self.session, self.url, self.predata) - try: - self.createdMembershipID = r.json()['MEMBERSHIP_ID'] - except (ValueError, KeyError): - pytest.fail('Error doing setup') - response = \ - api.delete(self.session, self.url + str(self.createdMembershipID)) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - if not ('MEMBERSHIP_ID' in response.json()): - pytest.fail('Expected MEMBERSHIP_ID in response, got {0}.'\ - .format(response.json())) diff --git a/Tests/ApiEndpoints/test_allmembershiprequest_pytest.py b/Tests/ApiEndpoints/test_allmembershiprequest_pytest.py deleted file mode 100644 index 02266d911..000000000 --- a/Tests/ApiEndpoints/test_allmembershiprequest_pytest.py +++ /dev/null @@ -1,577 +0,0 @@ -import pytest -import warnings -import string -from pytest_components import requests -from datetime import datetime - -import pytest_components as api -import test_gordon360_pytest as control - -class Test_AllMembershipRequestTest(control.testCase): -# # # # # # # # # # # # # # -# MEMBERSHIP REQUEST TEST # -# # # # # # # # # # # # # # - -# Verify that a regular member cannot access all membership requests. -# Endpoint -- api/requests/ -# Expected Status Code -- 401 Unauthorized -# Expected Response Content -- Empty response content. - def test_not_get_all_membership_requests(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/requests/' - response = api.get(self.session, self.url) - if not response.status_code == 401: - pytest.fail('Expected 401 Unauthorized, got {0}.'\ - .format(response.status_code)) - if response.text: - pytest.fail('Expected empty response body, got {0}.'\ - .format(response.text)) - - -# Verify that a regular member cannot get the membership requests of somone -# else. -# Endpoint -- api/requests/student/:id -# Expected Status Code -- 404 Not Found -# Expected Response Body -- Empty - def test_not_get_membership_requests_for_someone_else(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/requests/student/' + str(control.valid_id_number) - response = api.get(self.session, self.url) - if not response.status_code == 404: - pytest.fail('Expected 404 Not Found, got {0}.'.format(response.status_code)) - - -# Verify that a regular member can't access memberships requests for -# activity. -# Endpoint -- api/requests/activity/:id -# Expected Status Code -- 401 Unauthorized -# Expected Response Body -- Empty -# Passed with activity code 'TRAS', but not AJG because studenttest is a -# leader for AJG - def test_not_get_membership_requests_for_activity(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/requests/activity/' + 'TRAS' - # Report if there any current memberships for the Club to avoid false - # negatives. - # If I am currently a director of the club, this test should fail. - response = api.get(self.session, control.hostURL + 'api/memberships/student/' \ - + str(control.my_id_number)) - try: - for membership in response.json(): - if(membership['ActivityCode'] == control.activity_code_AJG and \ - membership['Participation'] in control.LEADERSHIP_POSITIONS): - pytest.fail('False Negative: This user is a leader for' + \ - 'the activity we are testing.') - except ValueError: - pytest.fail('We did not get a json response back during setup.') - - response = api.get(self.session, self.url) - if not response.status_code == 401: - pytest.fail('We did not get 401 Unauthorized.') - if response.text: - pytest.fail('We got a non-empty response body.') - - -# Verify that we can create a membership request. -# Precondition -- unknown -# Endpoints -- api/requests/ -# Expected Status Cpde -- 201 Created. -# Expected Content -- A Json object with a REQUEST_ID attribute. -# session code 201510 does not work - @pytest.mark.skipif(not control.unknownPrecondition, reason = "409 Error") - def test_post_valid_membership_request__as_member(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/requests/' - self.data = { - 'ACT_CDE': control.activity_code_AJG, - 'SESS_CDE' : control.session_code, - 'ID_NUM': control.my_id_number, - 'PART_CDE':'MEMBR', - 'DATE_SENT' : '06/27/2019', - 'COMMENT_TXT': control.comments - } - # We will get the actual id when we post. - # Setting it -1 to check later that we got an id from the post. - self.requestID = -1 - response = api.postAsJson(self.session, self.url, self.data) - if not response.status_code == 201: - pytest.fail('Expected 201 Created, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected json response, got {0}.'\ - .format(response.text)) - - #checking if the correctness of post\ - self.session = \ - self.createAuthorizedSession(control.leader_username, control.leader_password) - getResponse = api.get(self.session, control.hostURL + \ - 'api/requests/activity/' + str(control.activity_code_AJG)) - self.requestID = response.json()['REQUEST_ID'] - req = getResponse.json() - found = False - for dic in req: - reqID = dic['RequestID'] - if (reqID == self.requestID): - found = True - try: - assert dic['ActivityCode'] == control.activity_code_AJG - assert dic['SessionCode'] == control.session_code - assert dic['IDNumber'] == control.my_id_number - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(getResponse.json)) - if not found: - pytest.fail('requestID not found:', self.requestID) - - #delete the test post - try: - self.requestID = response.json()['REQUEST_ID'] - print(self.requestID) - if self.requestID >= 0: - api.delete(self.session, self.url + str(self.requestID)) - except KeyError: - pytest.fail('Expected REQUEST_ID in response body, got {0}.'\ - .format(response.json())) - - -# Verify that we can't create a membership request for someone else as a -# member. -# Endpoints -- api/requests/ -# Expected Status Code -- 401 Unauthorized. -# Expected Response Content -- Empty Response. -# look up for configuration.py for the data configuration - def test_not_post_membership_request_for_someone_else(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/requests/' - self.data = { - 'ACT_CDE': control.activity_code_AJG, - 'SESS_CDE' : control.session_code, - 'ID_NUM': control.valid_id_number, - 'PART_CDE': control.member_positions, - 'DATE_SENT' : '07/06/2016', - 'COMMENT_TXT': control.comments - } - # We will get the actual id when we post. - self.requestID = -1 - response = api.post(self.session, self.url, self.data) - - if response.status_code == 201: - try: - self.requestID = response.json()['REQUEST_ID'] - if self.requestID >= 0: - api.delete(self.session, self.url + str(self.requestID)) - pytest.fail('Request {0} was created even though it was supposed to be unauthorized'.format(self.requestID)) - except (ValueError, KeyError): - pytest.fail('Error in test') - elif not response.status_code == 401: - pytest.fail('Expected 401 Unauthorized, got {0}.'\ - .format(response.status_code)) - - -# Verify that an activity leader can access all membership requests. -# Endpoint -- api/requests/ -# Expected Status Code -- 200 OK -# Expected Response Content -- List of json objects representing the -# membership requests for all. - def test_get_all_membership_requests(self): - self.session = \ - self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/requests/' - response = api.get(self.session, self.url) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()[0]['ActivityCode'] == control.activity_code_360 - assert response.json()[1]['ActivityCode'] == "BADM" - assert response.json()[2]['ActivityCode'] == "ACS" - assert response.json()[3]['ActivityCode'] == "SCOTTIE" - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - if not (type(response.json()) is list): - pytest.fail('Expected list in response body, got {0}.'\ - .format(response.json())) - - -# Verify that the activity leader can get requests to join the activity -# he/she is leading -# Endpoint -- api/requests/activity/:id -# Expected Status Code -- 200 OK -# Expected Response Body -- List of json objects representing the membership -# requests for an activity. - def test_get_membership_requests_for_activity(self): - self.session = \ - self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/requests/activity/' + control.activity_code_AJG + '/' - response = api.get(self.session, self.url) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()[0]['ActivityCode'] == control.activity_code_AJG - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - if not (type(response.json()) is list): - pytest.fail('Expected list in response body, got {0}.'\ - .format(response.json())) - if control.activity_code_AJG != response.json()[0]["ActivityCode"]: - warnings.warn("Security fault, wrong activity") - - -# Verify that an activity leader cannot get the membership requests of -# someone else. -# Endpoint -- api/requests/student/:id -# Expected Status Code -- 404 Not Found -# Expected Response Body -- Empty - def test_get_membership_requests_for_someone_else___activity_leader(self): - self.session = \ - self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/requests/student/' + str(control.valid_id_number) - response = api.get(self.session, self.url) - if not response.status_code == 404: - pytest.fail('Expected 404 Not Found, got {0}.'\ - .format(response.status_code)) - - -# Verify that we can create a membership request as leader. -# Precondition -- unknown -# Endpoints -- api/requests/ -# Expected Status Cpde -- 201 Created. -# Expected Content -- A Json object with a REQUEST_ID attribute. - @pytest.mark.skipif(not control.unknownPrecondition, reason = "409 Error") - def test_post_valid_membership_request__as_leader(self): - self.session = \ - self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/requests/' - self.data = { - 'ACT_CDE': control.activity_code_AJG, - 'SESS_CDE' : control.session_code, - 'ID_NUM': control.my_id_number, - 'PART_CDE':'MEMBR', - 'DATE_SENT' : '07/06/2016', - 'COMMENT_TXT': control.comments - } - # We will get the actual id when we post. - # Setting it -1 to check later that we got an id from the post. - self.requestID = -1 - - response = api.postAsJson(self.session, self.url, self.data) - if not response.status_code == 201: - pytest.fail('Expected 201 Created, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected json response, got {0}.'\ - .format(response.text)) - - #checking if the correctness of post\ - self.session = \ - self.createAuthorizedSession(control.leader_username, control.leader_password) - getResponse = api.get(self.session, control.hostURL + \ - 'api/requests/activity/' + str(control.activity_code_AJG)) - self.requestID = response.json()['REQUEST_ID'] - req = getResponse.json() - found = False - for dic in req: - reqID = dic['RequestID'] - if (reqID == self.requestID): - found = True - try: - assert dic['ActivityCode'] == control.activity_code_AJG - assert dic['SessionCode'] == control.session_code - assert dic['IDNumber'] == control.my_id_number - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(getResponse.json())) - if not found: - pytest.fail('requestID not found:', self.requestID) - - #try: - # self.requestID = response.json()['REQUEST_ID'] - # if not response.json()['STATUS'] == REQUEST_STATUS_PENDING: - # pytest.fail('Expected Pending status , got {0}.'.format(resposne.json())) - # except KeyError: - # pytest.fail('Expected REQUEST_ID in response body, got {0}.'.format(response.json())) - # We try to delete the request we created - if self.requestID >= 0: - api.delete(self.session, self.url + str(self.requestID)) - -# Verify that we can create a membership request for someone else as leader. -# Precondition -- unknown -# Endpoints -- api/requests/ -# Expected Status Code -- 401 Unauthorized. -# Expected Response Content -- Empty Response. - @pytest.mark.skipif(not control.unknownPrecondition, reason = "get request") - def test_post_membership_request_for_someone_else(self): - self.session = \ - self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/requests/' - self.data = { - 'ACT_CDE': control.activity_code_AJG, - 'SESS_CDE' : control.session_code, - 'ID_NUM': control.valid_id_number, - 'PART_CDE':'MEMBR', - 'DATE_SENT' : '07/06/2016', - 'COMMENT_TXT': control.comments - } - # We will get the actual id when we post. - self.requestID = -1 - response = api.post(self.session, self.url, self.data) - if response.status_code == 201: - try: - self.requestID = response.json()['REQUEST_ID'] - except (ValueError, KeyError): - pytest.fail('Error in test') - - #checking if the correctness of post\ - self.session = \ - self.createAuthorizedSession(control.leader_username, control.leader_password) - getResponse = api.get(self.session, control.hostURL + \ - 'api/requests/activity/' + str(control.activity_code_AJG)) - self.requestID = response.json()['REQUEST_ID'] - req = getResponse.json() - found = False - for dic in req: - reqID = dic['RequestID'] - if (reqID == self.requestID): - found = True - try: - assert dic['ActivityCode'] == control.activity_code_AJG - assert dic['SessionCode'] == control.session_code - assert dic['IDNumber'] == control.valid_id_number - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(getResponse.json())) - if not found: - pytest.fail('requestID not found:', self.requestID) - - - #delete the test post - d = api.delete(self.session, self.url + str(self.requestID)) - if d.status_code != 200: - pytest.fail('Unauthorized resource not deleted.') - - -# Verify that an activity leader can't edit a membership request through a -# put request. -# Pre-Conditions: -# Valid Authorization Header. -# Authenticated as activity leader. -# Expectations: -# Endpoint -- api/requests/:id -# Expected Status Code -- 401 Unauthorized -# Expected Response Body -- Empty -# -# def test_put_membership_request___activity_leader(self): -# self.session = \ -# self.createAuthorizedSession(control.leader_username, control.leader_password) -# self.url = control.hostURL + '/api/requests/' -# self.requestID = -1 -# -# self.predata = { -# 'ACT_CDE': control.activity_code_AJG, -# 'SESS_CDE' : control.session_code, -# 'ID_NUM': control.my_id_number, -# 'PART_CDE':'MEMBR', -# 'DATE_SENT' : '07/06/2016', -# 'COMMENT_TXT': control.comments -# } -# response = api.postAsJson(self.session, self.url, self.predata) -# try: -# self.requestID = response.json()['REQUEST_ID'] -# self.data = { -# 'REQUEST_ID': self.requestID, -# 'ACT_CDE': control.activity_code_AJG, -# 'SESS_CDE' : '201501', -# 'ID_NUM': control.valid_id_number, #Changing values to emulate attacker muhahah -# 'PART_CDE':'PART', -# 'DATE_SENT' : '07/06/2016', -# 'COMMENT_TXT': control.comments -# } -# except ValueError: -# pytest.fail('Error performing setup') -# -# response = api.putAsJson(self.session, self.url + \ -# str(self.requestID), self.data) -# if not response.status_code == 401: -# pytest.fail('Expected 401 Unauthorized, got {0}.'\ -# .format(response.status_code)) -# if response.text: -# pytest.fail('Expected empty response body, got {0}.' -# .format(response.text)) -# api.delete(self.session, self.url + str(self.requestID)) - - -# Verify that an activity leader can delete a membership request for his -# activity -# Endpoints -- api/requests/:id -# Expected Status Code -- 200 OK -# Expected Response Body -- The request that was deleted - def test_delete_membership_request(self): - self.session = \ - self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/requests/' - self.predata = {} - self.requestID = -1 - - self.predata = { - 'ACT_CDE': control.activity_code_AJG, - 'SESS_CDE': control.session_code, - 'PART_CDE': 'MEMBR', - 'ID_NUM': control.leader_id_number, - 'DATE_SENT': '07/19/2016', - 'COMMENT_TXT': control.comments - } - response = api.postAsJson(self.session, self.url, self.predata) - if not response.status_code == 201: - pytest.fail('Error in setup. Expected 201 Created, got {0}.'\ - .format(response.status_code)) - else: - self.requestID = response.json()['REQUEST_ID'] - response = \ - api.delete(self.session, self.url + '/' + str(self.requestID)) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - try: - response.json()['REQUEST_ID'] - except KeyError: - pytest.fail('Expected REQUEST_ID in response body, got {0}.'\ - .format(response.json())) - -# Verify that the activity leader can accept a request directed at their -# activity. -# Endpoints -- api/requests/:id/approve -# Expected Status Code -- 200 OK -# Expected Response Body -- Json response with the request that was accepted. - def Test_Allow_someone_to_join_my_activity___activity_leader(self): - self.session = \ - self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/requests/' - self.requestID = -1 - self.membershipID = -1 - - #Create a memberships request for the trash club. - self.data = { - 'ACT_CDE': control.activity_code_AJG, - 'SESS_CDE' : control.session_code, - 'ID_NUM': control.my_id_number, - 'PART_CDE':'MEMBR', - 'DATE_SENT' : '07/06/2016', - 'COMMENT_TXT': control.comments - } - response = api.postAsJson(self.session, self.url, self.data) - if not response.status_code == 201: - pytest.fail('Error in setup. Expected 201 Created, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Error in setup. Expected json response, got {0}.'\ - .format(response.text)) - try: - self.requestID = response.json()['REQUEST_ID'] - except KeyError: - pytest.fail('Error in setup. Expected REQUEST_ID in response, ' + \ - 'got {0}.'.format(response.json())) - - response = api.postAsJson(self.session, self.url + \ - str(self.requestID) + '/approve', None) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - try: - self.membershipID = response.json()['MEMBERSHIP_ID'] - if self.requestID < 0: - pytest.fail('Error in cleanup for {0}. Expected valid ' + \ - 'request ID, got {1}.'.format(self.requestID)) - else: - d = api.delete(self.session, self.url + str(self.requestID)) - if not d.status_code == 200: - pytest.fail('Error in cleanup for {0}. Expected 200 OK ' + \ - 'when deleting request, got {1}.'\ - .format(d.status_code)) - if self.membershipID < 0: # membership creation was not successful - pytest.fail('Error in cleanup. Expected valid membership ID' + \ - ', got {0}.'.format(self.membershipID)) - else: - api.delete(self.session, control.hostURL + 'api/memberships/' + \ - str(self.membershipID)) - if not d.status_code == 200: - pytest.fail('Error in cleanup. Expected 200 OK when ' + \ - 'deleting membership, got {0}.'.format(d.status_code)) - except KeyError: - pytest.fail('Expected MEMBERSHIP_ID in response bady, got {0}.'\ - .format(response.json())) - -# Verify that the activity leader can deny a request directed at their -# activity. -# Precondition -- unknown -# Endpoints -- api/requests/:id/deny -# Expected Status Code -- 200 OK -# Expected Response Body -- Json response with the request that was denied - @pytest.mark.skipif(not control.unknownPrecondition, reason = "409 Error") - def test_deny_someone_joining_my_activity(self): - self.session = \ - self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/requests/' - self.requestID = -1 - - #Create a memberships request for the trash club. - self.data = { - 'ACT_CDE': control.activity_code_AJG, - 'SESS_CDE' : control.session_code, - 'ID_NUM': control.my_id_number, - 'PART_CDE':'MEMBR', - 'DATE_SENT' : '07/06/2016', - 'COMMENT_TXT': control.comments - } - response = api.postAsJson(self.session, self.url, self.data) - if not response.status_code == 201: - pytest.fail('Expected 201 Created, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected json response, got {0}.'\ - .format(response.text)) - else: - try: - self.requestID = response.json()['REQUEST_ID'] - except KeyError: - pytest.fail('Error in setup. Expected REQUEST_ID in response' + \ - ', got {0}.'.format(response.json())) - response = api.postAsJson(self.session, self.url + \ - str(self.requestID) + '/deny', None) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - else: - try: - if not response.json()['STATUS'] == control.REQUEST_STATUS_DENIED: - pytest.fail('Expected approved request, got {0}.'\ - .format(response.json())) - except KeyError: - pytest.fail('Expected STATUS in response bady, got {0}.'\ - .format(response.json())) - api.delete(self.session, self.url + str(self.requestID)) \ No newline at end of file diff --git a/Tests/ApiEndpoints/test_allmyschedule_pytest.py b/Tests/ApiEndpoints/test_allmyschedule_pytest.py deleted file mode 100644 index c8121a282..000000000 --- a/Tests/ApiEndpoints/test_allmyschedule_pytest.py +++ /dev/null @@ -1,162 +0,0 @@ -import pytest -import warnings -import string -from pytest_components import requests -from datetime import datetime - -import pytest_components as api -import test_gordon360_pytest as control - -class Test_AllMyScheduleTest(control.testCase): -# # # # # # # # # # # -# MYSCHEDULE TESTS # -# # # # # # # # # # # - -# Get all custom events from the schedule of the currently logged in user. -# Endpoint -- api/myschedule/ -# Expected Status code -- 200 Ok -# Expected Content -- all custom events of the currently logged in user. - def test_get_all_myschedule_objects_of_current_user(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/myschedule/' - response = api.get(self.session, self.url) - - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json, got {0}.'.format(response.text)) - assert response.json()[0]["EVENT_ID"] == control.event_id - assert response.json()[0]["LOCATION"] == control.location - assert response.json()[0]["DESCRIPTION"] == control.put_description - assert response.json()[0]["BEGIN_TIME"] == control.begintime - assert response.json()[0]["END_TIME"] == control.endtime - -# Get all custom events of a user with username `username` as a parameter. -# Endpoint -- api/myschedule/{username} -# Expected Status code -- 200 Ok -# Expected Content -- all custom events of a user with username `username` -# as a parameter - def test_get_all_myschedule_objects_of_user(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/myschedule/' + control.leader_username + '/' - response = api.get(self.session, self.url) - - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json, got {0}.'.format(response.text)) - assert response.json()[0]["EVENT_ID"] == '1100' - assert response.json()[0]["GORDON_ID"] == str(control.leader_id_number) - assert response.json()[0]["LOCATION"] == control.location - -# Get a specific custom event of the currently logged in user with `eventId` -# as a parameter -# Endpoint -- api/myschedule/event/{eventID} -# Expected Status code -- 200 Ok -# Expected Content -- a specific custom event of the currently logged in user -# with `eventId` as a parameter - def test_get_myschedule_objects_of_id(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/myschedule/event/' + control.event_id + '/' - response = api.get(self.session, self.url) - - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json, got {0}.'.format(response.text)) - assert response.json()["EVENT_ID"] == control.event_id - assert response.json()["LOCATION"] == control.location - assert response.json()["DESCRIPTION"] == control.put_description - assert response.json()["BEGIN_TIME"] == control.begintime - assert response.json()["END_TIME"] == control.endtime - -# Create a custom event of the currently logged in user. -# Expectations: -# Endpoints -- api/myschedule/ -# Expected Status Code -- 201 Created. -# Expected Content -- a custom event with the data in the test - def test_myschedule_post(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/myschedule/' - self.data = { - 'GORDON_ID' : str(control.my_id_number), - 'LOCATION' : control.location, - 'DESCRIPTION' : control.description, - 'TUE_CDE' : 'T', - 'IS_ALLDAY' : 1, - } - response = api.postAsJson(self.session, self.url, self.data) - if not response.status_code == 201: - pytest.fail('Expected 201 Created, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - assert response.json()["GORDON_ID"] == str(control.my_id_number) - assert response.json()["LOCATION"] == control.location - assert response.json()["DESCRIPTION"] == control.description - - # delete the test post - # Expected Status Code -- 200 OK. - try: - self.GordonID = response.json()["GORDON_ID"] - if self.GordonID == str(control.my_id_number): - response = api.delete(self.session, self.url + \ - str(response.json()["EVENT_ID"])) - except KeyError: - pytest.fail('Expected REQUEST_ID in response body, got {0}.'\ - .format(response.json())) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - -# Update a custom event of the currently logged in user. -# Endpoints -- api/myschedule/ -# Expected Status Code -- 200 OK. -# Expected Content -- The Json object (custom event) with a -# GORDON_ID attribute. - def test_myschedule_put(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/myschedule/' - try: - self.data = { - 'EVENT_ID' : control.event_id, - 'GORDON_ID' : str(control.my_id_number), - 'LOCATION' : control.location, - 'DESCRIPTION' : control.put_description, - 'MON_CDE' : 'M', - 'TUE_CDE' : 'T', - 'WED_CDE' : None, # Showing the options of the value - 'THU_CDE' : 'R', - 'FRI_CDE' : 'F', - 'IS_ALLDAY' : 0, - 'BEGIN_TIME' : control.begintime, - 'END_TIME' : control.endtime, - } - except (KeyError, ValueError): - pytest.fail('Error in setup.') - response = api.putAsJson(self.session, self.url, self.data) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - assert response.json()["GORDON_ID"] == str(control.my_id_number) - assert response.json()["LOCATION"] == control.location - assert response.json()["DESCRIPTION"] == control.put_description - assert response.json()["BEGIN_TIME"] == control.begintime - assert response.json()["END_TIME"] == control.endtime \ No newline at end of file diff --git a/Tests/ApiEndpoints/test_allnews_pytest.py b/Tests/ApiEndpoints/test_allnews_pytest.py deleted file mode 100644 index 9e77214dc..000000000 --- a/Tests/ApiEndpoints/test_allnews_pytest.py +++ /dev/null @@ -1,175 +0,0 @@ -import pytest -import warnings -import string -from pytest_components import requests -from datetime import datetime - -import pytest_components as api -import test_gordon360_pytest as control - -class Test_AllNewsTest(control.testCase): -# # # # # # # -# NEWS TEST # -# # # # # # # - -# Verify that a student can get the full list of category names, category ids -# , and sort order of student news. -# Endpoint -- api/news/category -# Expected Status Code -- 200 OK -# Expected Response Body -- A list of category names, ids and sort order - def test_get_news_category_student(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/news/category/' - response = api.get(self.session, self.url) - - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - -# Verify that a student can get the list of news that hasn't expired -# Endpoint -- api/news/not-expired -# Expected Status Code -- 200 OK -# Expected Response Body -- A list of student news entries that have not -# expired - def test_get_news_not_expired_student(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/news/not-expired/' - response = api.get(self.session, self.url) - - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - if not (type(response.json()) is list): - warnings.warn("Response is not a list.") - if response.json(): - assert response.json()[0].has_key('categoryName') - assert response.json()[0].has_key('ManualExpirationDate') - assert response.json()[0].has_key('SortOrder') - -# Verify that a student can get student news entries that have been accepted -# and not expired, and is new since 10am the day before. -# Endpoint -- api/news/new -# Expected Status Code -- 200 OK -# Expected Response Body -- A list of student news entries that have been -# accepted, are not expired, and are new since 10 am the day before. - def test_get_news_new_student(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/news/new/' - response = api.get(self.session, self.url) - - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - if not (type(response.json()) is list): - warnings.warn("Response is not a list.") - if not response.json(): - print("Find out the content to add") - -# Verify that a faculty user can get the full list of category names, category ids -# , and sort order of student news. -# Endpoint -- api/news/category -# Expected Status Code -- 200 OK -# Expected Response Body -- A list of category names, ids and sort order - def test_get_news_category_faculty(self): - self.session = self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/news/category/' - response = api.get(self.session, self.url) - - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - -# Verify that a faculty user can get the list of news that hasn't expired -# Endpoint -- api/news/not-expired -# Expected Status Code -- 200 OK -# Expected Response Body -- A list of student news entries that have not -# expired - def test_get_news_not_expired_faculty(self): - self.session = self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/news/not-expired/' - response = api.get(self.session, self.url) - - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - if not (type(response.json()) is list): - warnings.warn("Response is not a list.") - if response.json(): - assert response.json()[0].has_key('categoryName') - assert response.json()[0].has_key('ManualExpirationDate') - assert response.json()[0].has_key('SortOrder') - -# Verify that a faculty user can get student news entries that have been accepted -# and not expired, and is new since 10am the day before. -# Endpoint -- api/news/new -# Expected Status Code -- 200 OK -# Expected Response Body -- A list of student news entries that have been -# accepted, are not expired, and are new since 10 am the day before. - def test_get_news_new_faculty(self): - self.session = self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/news/new/' - response = api.get(self.session, self.url) - - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - if not (type(response.json()) is list): - warnings.warn("Response is not a list.") - if not response.json(): - print("Find out the content to add") - -# Verify that a guest can't get the full list of category names, category ids -# , and sort order of student news. -# Endpoint -- api/news/category -# Expected Status Code -- 401 Unauthorized Error -# Expected Response Body -- An authorization denied error - def test_get_news_category_guest(self): - self.session = self.createGuestSession() - self.url = control.hostURL + 'api/news/category/' - response = api.get(self.session, self.url) - - if not response.status_code == 401: - pytest.fail('Expected 401 Unauthorized Error, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['Message'] == control.AUTHORIZATION_DENIED - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(response.text)) - -# Verify that a guest can't get the list of news that hasn't expired -# Endpoint -- api/news/not-expired -# Expected Status Code -- 401 Unauthorized Error -# Expected Response Body -- An authorization denied error - def test_get_news_not_expired_guest(self): - self.session = self.createGuestSession() - self.url = control.hostURL + 'api/news/not-expired/' - response = api.get(self.session, self.url) - - if not response.status_code == 401: - pytest.fail('Expected 401 Unauthorized Error, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['Message'] == control.AUTHORIZATION_DENIED - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(response.text)) - -# Verify that a guest can't get student news entries that have been accepted -# and not expired, and is new since 10am the day before. -# Endpoint -- api/news/new -# Expected Status Code -- 401 Unauthorized Error -# Expected Response Body -- An authorization denied error - def test_get_news_new_guest(self): - self.session = self.createGuestSession() - self.url = control.hostURL + 'api/news/new/' - response = api.get(self.session, self.url) - - if not response.status_code == 401: - pytest.fail('Expected 401 Unauthorized Error, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['Message'] == control.AUTHORIZATION_DENIED - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(response.text)) diff --git a/Tests/ApiEndpoints/test_allprofile_pytest.py b/Tests/ApiEndpoints/test_allprofile_pytest.py deleted file mode 100644 index e43aeb16f..000000000 --- a/Tests/ApiEndpoints/test_allprofile_pytest.py +++ /dev/null @@ -1,383 +0,0 @@ -import pytest -import warnings -import string -from pytest_components import requests -from datetime import datetime - -import pytest_components as api -import test_gordon360_pytest as control - -class Test_AllProfileTest(control.testCase): -################# -# PROFILE TESTS # -################# - -# Verify that a user can get their own profile -# Endpoint -- api/profiles/ -# Expected Status Code -- 200 OK -# Expected Response Body -- A json object of information on own profile - def test_get_my_profile(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/profiles/' - response = api.get(self.session, self.url) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['AD_Username'] == '360.StudentTest' - assert response.json()['ID'] == '999999097' - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - -# Verify that a user can get their own profile -# Endpoint -- api/profiles/ -# Expected Status Code -- 401 Authorization Error -# Expected Response Body -- An authorization denied message - def test_get_guest_my_profile(self): - self.session = self.createGuestSession() - self.url = control.hostURL + 'api/profiles/' - response = api.get(self.session, self.url) - if not response.status_code == 401: - pytest.fail('Expected 401 OK, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['Message'] == control.AUTHORIZATION_DENIED - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - -# Verify that a user can get another person's profile, filtering -# private information -# Endpoint -- api/profiles/:username -# Expected Status Code -- 200 Ok -# Expected Response Body -- list of information on the user without private -# info - def test_get_profile_by_username(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/profiles/' + control.leader_username +'/' - response = api.get(self.session, self.url) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['AD_Username'] == '360.FacultyTest' - assert "ID" not in response.json() - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(response.text)) - -# Verify that a guest can't get another person's profile -# Endpoint -- api/profiles/:username -# Expected Status Code -- 401 Unauthorized Error -# Expected Response Body -- An authorization denied message - def test_get_guest_profile_by_username(self): - self.session = self.createGuestSession() - self.url = control.hostURL + 'api/profiles/' + control.leader_username +'/' - response = api.get(self.session, self.url) - print(response.json()) - if not response.status_code == 401: - pytest.fail('Expected 401 OK, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['Message'] == control.AUTHORIZATION_DENIED - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(response.text)) - -# Verify that a user can get a profile image of the current user -# Endpoint -- api/profiles/image -# Expected Status Code -- 200 Ok -# Expected Response Body -- image path of the current user - def test_get_image(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/profiles/image/' - response = api.get(self.session, self.url) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(response.text)) - -# Verify that a guest can't get a profile image of the current user -# Endpoint -- api/profiles/image -# Expected Status Code -- 401 Unauthorized Error -# Expected Response Body -- An authorization denied message - def test_get_guest_image(self): - self.session = self.createGuestSession() - self.url = control.hostURL + 'api/profiles/image/' - response = api.get(self.session, self.url) - if not response.status_code == 401: - pytest.fail('Expected 401 Unauthorized Error, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['Message'] == control.AUTHORIZATION_DENIED - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(response.text)) - - -# Verify that a user can get a profile image of someone else -# Endpoint -- api/profiles/image/:username -# Expected Status Code -- 200 Ok -# Expected Response Body -- image path of another user - def test_get_image_by_username(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/profiles/image/' + control.leader_username + '/' - response = api.get(self.session, self.url) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(response.text)) - -# Verify that a guest can't get a profile image of someone else -# Endpoint -- api/profiles/image/:username -# Expected Status Code -- 401 Unauthorized Error -# Expected Response Body -- An authorization denied message - def test_get_guest_image_by_username(self): - self.session = self.createGuestSession() - self.url = control.hostURL + 'api/profiles/image/' + control.username + '/' - response = api.get(self.session, self.url) - if not response.status_code == 401: - pytest.fail('Expected 401 Unauthorized Error, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['Message'] == control.AUTHORIZATION_DENIED - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(response.text)) - -# Verify that a user can upload a profile image -# Endpoint -- api/profiles/image/ -# Expected Status Code -- 200 OK -# Expected Content -- updated profile image - def test_post_profile_image(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/profiles/image/' - self.data = { - 'file': open(control.FILE_PATH_PROFILE, 'r') - } - - response = api.postAsFormData(self.session, self.url, self.data) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - #self.data = { - # 'ID': my_id_number, - # 'FILE_PATH': FILE_PATH, - # 'FILE_NAME': FILE_NAME - #} - d = api.post(self.session, self.url + 'reset/', self.data) - if not d.status_code == 200: - pytest.fail('There was a problem performing cleanup') - -# Verify that a guest cannot upload a profile image -# Endpoint -- api/profiles/image/ -# Expected Status Code -- 401 Unauthorized Error -# Expected Content -- An authorization denied message - def test_post_guest_profile_image(self): - self.session = self.createGuestSession() - self.url = control.hostURL + 'api/profiles/image/' - self.data = { - 'file': open(control.FILE_PATH_PROFILE, 'r') - } - - response = api.postAsFormData(self.session, self.url, self.data) - print(response.json()) - if not response.status_code == 401: - pytest.fail('Expected 401 Unauthorized Error, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['Message'] == control.AUTHORIZATION_DENIED - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(response.text)) - -# Verify that a user can upload an ID image -# Pre-conditions -- unknown -# Endpoint -- api/profiles/IDimage/ -# Expected Status Code -- 200 OK -# Expected Content -- upload ID photo - @pytest.mark.skipif(not control.unknownPrecondition, reason = \ - "Unknown reason for error") - def test_post_ID_image(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/profiles/IDimage/' - self.data = { - 'file': open(control.FILE_PATH_ID, 'r') - } - - response = api.postAsFormData(self.session, self.url, self.data) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - - d = api.post(self.session, self.url + 'reset/', self.data) - if not d.status_code == 200: - pytest.fail('There was a problem performing cleanup') - -# Verify that a guest can't upload an ID image -# Endpoint -- api/profiles/IDimage/ -# Expected Status Code -- 401 Unauthorized Error -# Expected Content -- An authorization denied message - def test_post_guest_ID_image(self): - self.session = self.createGuestSession() - self.url = control.hostURL + 'api/profiles/IDimage/' - self.data = { - 'file': open(control.FILE_PATH_ID, 'r') - } - response = api.postAsFormData(self.session, self.url, self.data) - if not response.status_code == 401: - pytest.fail('Expected 401 OK, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['Message'] == control.AUTHORIZATION_DENIED - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(response.text)) - -# Verify that a user can reset a profile image -# Endpoint -- api/profiles/image/reset/ -# Expected Status Code -- 200 OK -# Expected Content -- - def test_post_reset_image(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/profiles/image/reset/' - self.data = { - 'ID': control.my_id_number, - 'FILE_PATH': control.FILE_PATH_PROFILE, - 'FILE_NAME': "" - } - self.requestID = -1 - response = api.post(self.session, self.url, self.data) - if not response.status_code == 200: - pytest.fail('Expected 200 Created, got {0}.'\ - .format(response.status_code)) - -# Verify that a guest can't reset a profile image -# Endpoint -- api/profiles/image/reset/ -# Expected Status Code -- 401 Unauthorized Error -# Expected Content -- An authorization denied message - def test_post_guest_reset_image(self): - self.session = self.createGuestSession() - self.url = control.hostURL + 'api/profiles/image/reset/' - self.data = { - 'ID': control.my_id_number, - 'FILE_PATH': control.FILE_PATH_PROFILE, - 'FILE_NAME': "" - } - self.requestID = -1 - response = api.post(self.session, self.url, self.data) - if not response.status_code == 401: - pytest.fail('Expected 401 Created, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['Message'] == control.AUTHORIZATION_DENIED - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(response.text)) - -# Verify that a user can add and edit social media links -# Endpoint -- api/profiles/:type -# Expected Status Code -- 200 OK -# Expected Content -- - def test_put_social_media_links(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/profiles/facebook/' - self.data = { - 'facebook': 'https://www.facebook.com/360.studenttest' - #'URL of any SNS including the domain name' - } - response = api.put(self.session, self.url, self.data) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - self.resetdata = { - 'facebook': 'Changed for testing' - } - d = api.put(self.session, self.url, self.resetdata) - if not d.status_code == 200: - pytest.fail('There was a problem performing cleanup') - -# Verify that a guest can't add and edit social media links -# Endpoint -- api/profiles/:type -# Expected Status Code -- 401 Unauthorized Error -# Expected Content -- An authorization denied message - def test_put_guest_social_media_links(self): - self.session = self.createGuestSession() - self.url = control.hostURL + 'api/profiles/facebook/' - self.data = { - 'facebook': 'https://www.facebook.com/360.studenttest' - } - response = api.put(self.session, self.url, self.data) - if not response.status_code == 401: - pytest.fail('Expected 401 OK, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['Message'] == control.AUTHORIZATION_DENIED - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(response.text)) - - -# Verify that a user can turn on and off mobile privacy -# Endpoint -- api/profiles/mobile_privacy/:value (Y or N) -# Expected Status Code -- 200 OK -# Expected Content -- Make mobile privacy 0 or 1 - def test_put_mobile_privacy(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/profiles/mobile_privacy/Y/' - self.data = { - 'IsMobilePhonePrivate': 'Y' - } - response = api.put(self.session, self.url, self.data) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - profile_url = control.hostURL + 'api/profiles/' - check_response = api.get(self.session,profile_url) - assert check_response.json()['IsMobilePhonePrivate'] == 1 - self.url = control.hostURL + 'api/profiles/mobile_privacy/N/' - self.resetdata = { - 'IsMobilePhonePrivate': 'N' - } - d = api.put(self.session, self.url, self.resetdata) - if not d.status_code == 200: - pytest.fail('There was a problem performing cleanup') - check_response = api.get(self.session,profile_url) - assert check_response.json()['IsMobilePhonePrivate'] == 0 - -# Verify that a user can edit image privacy -# Endpoint -- api/profiles/image_privacy/:value (Y or N) -# Expected Status Code -- 200 OK -# Expected Content -- - def test_put_image_privacy(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/profiles/image_privacy/Y/' - self.data = { - 'show_pic': 'Y' - } - response = api.put(self.session, self.url, self.data) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - profile_url = control.hostURL + 'api/profiles/' - check_response = api.get(self.session,profile_url) - assert check_response.json()['show_pic'] == 1 - self.url = control.hostURL + 'api/profiles/image_privacy/N/' - self.resetdata = { - 'show_pic': 'N' - } - d = api.put(self.session, self.url, self.resetdata) - if not d.status_code == 200: - pytest.fail('There was a problem performing cleanup') - - check_response = api.get(self.session,profile_url) - assert check_response.json()['show_pic'] == 0 \ No newline at end of file diff --git a/Tests/ApiEndpoints/test_allschedule_pytest.py b/Tests/ApiEndpoints/test_allschedule_pytest.py deleted file mode 100644 index e39d92579..000000000 --- a/Tests/ApiEndpoints/test_allschedule_pytest.py +++ /dev/null @@ -1,58 +0,0 @@ -import pytest -import warnings -import string -from pytest_components import requests -from datetime import datetime - -import pytest_components as api -import test_gordon360_pytest as control - -class Test_AllScheduleTest(control.testCase): -# # # # # # # # # # -# SCHEDULE TESTS # -# # # # # # # # # # - -# Get all schedule objects of the currently logged in user. -# Pre-condition -- student must be enrolled in summer practicum -# Endpoint -- api/schedule/:username -# Expected Status code -- 200 Ok -# Expected Content -- all schedule objects of the currently logged in user. - @pytest.mark.skipif(not control.enrolledInPracticum, reason = \ - "Student not enrolled in Practicum") - def test_get_all_schedule_objects_of_current_user(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/schedule/' + control.username + '/' - response = api.get(self.session, self.url) - - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json, got {0}.'.format(response.text)) - assert response.json()[0]["CRS_TITLE"] == \ - "SUMMER PRACTICUM COMPUTER SCIENCE" - -# Get all schedule objects of a user with username `username` as a parameter. -# Pre-condition -- unknown -# Endpoint -- api/schedule/:username -# Expected Status code -- 200 Ok -# Expected Content -- all schedule objects of a user with username `username` -# as a parameter -# Normal faculty works, student's don't work, facultytest doesn't work - @pytest.mark.skipif(not control.unknownPrecondition, reason = \ - "Unknown reason for error") - def test_get_all_schedule_objects_of_user(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/schedule/' + control.leader_username + '/' - response = api.get(self.session, self.url) - - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json, got {0}.'.format(response.text)) - assert response.json()[0]["GORDON_ID"] == str(control.leader_id_number) \ No newline at end of file diff --git a/Tests/ApiEndpoints/test_allschedulecontrol_pytest.py b/Tests/ApiEndpoints/test_allschedulecontrol_pytest.py deleted file mode 100644 index 309b121d1..000000000 --- a/Tests/ApiEndpoints/test_allschedulecontrol_pytest.py +++ /dev/null @@ -1,107 +0,0 @@ -import pytest -import warnings -import string -from pytest_components import requests -from datetime import datetime - -import pytest_components as api -import test_gordon360_pytest as control - -class Test_AllScheduleControlTest(control.testCase): -# # # # # # # # # # # # # -# SCHEDULECONTROL TESTS # -# # # # # # # # # # # # # - -# Get the privacy status and description of the currently logged in user. -# Endpoint -- api/schedulecontrol -# Expected Status code -- 200 Ok -# Expected Content -- all schedule objects of the currently logged in user. - def test_get_all_schedulecontrol_objects_of_current_user(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/schedulecontrol/' - response = api.get(self.session, self.url) - - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json, got {0}.'\ - .format(response.text)) - assert response.json()['IsSchedulePrivate'] == True - assert response.json()['Description'] == control.put_description - -# Get the privacy, description, and ID of a user's schedule with username -# `leader_username` as a parameter. -# Endpoint -- api/schedulecontrol/{username} -# Expected Status code -- 200 Ok -# Expected Content -- all schedule objects of the currently logged in user. - def test_get_all_schedulecontrol_objects_of_user(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/schedulecontrol/' + control.leader_username + '/' - response = api.get(self.session, self.url) - - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json, got {0}.'.format(response.text)) - assert response.json()['IsSchedulePrivate'] == False - assert response.json()['Description'] == \ - 'httpsCoLnSlShSlShgithubdOTcomSlSh' - -# Update schedule privacy of the currently logged in user to 1. -# Endpoint -- api/schedulecontrol/privacy/{value} -# Expected Status code -- 200 Ok -# Expected Content -- schedule privacy of the currently logged in user. - def test_schedulecontrol_put_privacy(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/schedulecontrol/privacy/N/' - response = api.put(self.session, self.url, 'N') - - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - - self.url = control.hostURL + 'api/schedulecontrol/' - response = api.get(self.session, self.url) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - assert response.json()["IsSchedulePrivate"] == False - - self.url = self.url + 'privacy/Y/' - response = api.put(self.session, self.url, 'Y') - - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - - self.url = control.hostURL + 'api/schedulecontrol/' - response = api.get(self.session, self.url) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - assert response.json()["IsSchedulePrivate"] == True - -# Update the schedule description of the currently logged in user. -# Endpoint -- api/schedulecontrol/description/{value} -# Expected Status code -- 200 Ok -# Expected Content -- schedule description of the currently logged in user. - def test_schedulecontrol_put_description(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/schedulecontrol/description/' + \ - control.put_description + '/' - response = api.put(self.session, self.url, control.put_description) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - self.url = control.hostURL + 'api/schedulecontrol/' - response = api.get(self.session, self.url) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - assert response.json()["Description"] == control.put_description \ No newline at end of file diff --git a/Tests/ApiEndpoints/test_allsession_pytest.py b/Tests/ApiEndpoints/test_allsession_pytest.py deleted file mode 100644 index a637e3c71..000000000 --- a/Tests/ApiEndpoints/test_allsession_pytest.py +++ /dev/null @@ -1,118 +0,0 @@ -import pytest -import warnings -import string -from pytest_components import requests -from datetime import datetime - -import pytest_components as api -import test_gordon360_pytest as control - -class Test_AllSessionTest(control.testCase): - -# # # # # # # # # -# SESSIONS TEST # -# # # # # # # # # - -# Verify that an activity leader can get all session objects -# Endpoint -- api/sessions/ -# Expected Status Code -- 200 OK -# Expected Response Body -- List of all session resources - def test_get_all_sessions(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/sessions/' - response = api.get(self.session, self.url) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.json())) - if not (type(response.json()) is list): - pytest.fail('Expected list, got {0}.'.format(response.json())) - assert response.json()[0]["SessionCode"] == "201209" - assert response.json()[0]["SessionDescription"] == \ - "Fall 12-13 Academic Year" - assert response.json()[0]["SessionBeginDate"] == "2012-08-29T00:00:00" - assert response.json()[0]["SessionEndDate"] == "2012-12-21T00:00:00" - - self.url = control.hostURL + 'api/sessions/current/' - current = api.get(self.session, self.url) - assert response.json()[-2]["SessionCode"] == \ - current.json()["SessionCode"] - assert response.json()[-2]["SessionDescription"] == \ - current.json()["SessionDescription"] - assert response.json()[-2]["SessionBeginDate"] == \ - current.json()["SessionBeginDate"] - assert response.json()[-2]["SessionEndDate"] == \ - current.json()["SessionEndDate"] - -# Verify that an activity leader can get a session object -# Endpoint -- api/sessions/:id -# Expected Status Code -- 200 OK -# Expected Response Body -- A session resource. - def test_get_one_session(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/sessions/' + control.session_code + '/' - - response = api.get(self.session, self.url) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - try: - response.json()['SessionCode'] - except KeyError: - pytest.fail('Expected SessionCode in response, got {0}.'\ - .format(response.json())) - assert response.json()['SessionCode'] == control.session_code - -# Verify that a user can get the current session -# Endpoint -- api/sessions/current/ -# Expected Status Code -- 200 OK -# Expected Response Body -- the current session - def test_get_current_session(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/sessions/current/' - response = api.get(self.session, self.url) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - try: - response.json()['SessionCode'] - except KeyError: - pytest.fail('Expected SessionCode in response, got {0}.'\ - .format(response.json())) - -# Verify that a user can get the days left of the session -# Endpoint -- api/sessions/daysLeft/ -# Expected Status Code -- 200 OK -# Expected Response Body -- numbers of days left - def test_get_daysLeft_session(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/sessions/daysLeft/' - - response = api.get(self.session, self.url) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - try: - response.json() - except KeyError: - pytest.fail('Expected SessionCode in response, got {0}.'\ - .format(response.json())) \ No newline at end of file diff --git a/Tests/ApiEndpoints/test_allstudentemployment_pytest.py b/Tests/ApiEndpoints/test_allstudentemployment_pytest.py deleted file mode 100644 index 9eca73d90..000000000 --- a/Tests/ApiEndpoints/test_allstudentemployment_pytest.py +++ /dev/null @@ -1,36 +0,0 @@ -import pytest -import warnings -import string -from pytest_components import requests -from datetime import datetime - -import pytest_components as api -import test_gordon360_pytest as control - -class Test_AllStudentEmploymentTest(control.testCase): - -# # # # # # # # # # # # # # -# STUDENT EMPLOYMENT TEST # -# # # # # # # # # # # # # # - -# Verify that a student user can get their own student employment information -# Pre-Conditions: Need to be logged in as cct.service in visual studio -# Endpoint -- api/studentemployment/ -# Expected Status Code -- 200 OK -# Expected Response Body -- A json response with student employment info - @pytest.mark.skipif(not control.cctService, reason = \ - "Not logged in as cct.service.") - def test_student_employment___regular_member(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/studentemployment/' - response = api.get(self.session, self.url) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - if not (type(response.json()) is dict): - pytest.fail('Expected dict, got {0}.'.format(response.json())) \ No newline at end of file diff --git a/Tests/ApiEndpoints/test_allvictorypromise_pytest.py b/Tests/ApiEndpoints/test_allvictorypromise_pytest.py deleted file mode 100644 index 5c93244eb..000000000 --- a/Tests/ApiEndpoints/test_allvictorypromise_pytest.py +++ /dev/null @@ -1,80 +0,0 @@ -import pytest -import warnings -import string -from pytest_components import requests -from datetime import datetime - -import pytest_components as api -import test_gordon360_pytest as control - -class Test_AllVictoryPromiseTest(control.testCase): - -# # # # # # # # # # # # # -# VICTORY PROMISE TEST # -# # # # # # # # # # # # # - -# Verify that a student user can get their own victory promise information -# Endpoint -- api/studentemployment/ -# Expected Status Code -- 200 OK -# Expected Response Body -- A json response with victory promise points - def test_victory_promise(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/vpscore/' - response = api.get(self.session, self.url) - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - if not (type(response.json()) is list): - pytest.fail('Expected list, got {0}.'.format(response.json)) - assert response.json()[0]["TOTAL_VP_IM_SCORE"] == 0 - assert response.json()[0]["TOTAL_VP_CC_SCORE"] == 0 - assert response.json()[0]["TOTAL_VP_LS_SCORE"] == 0 - assert response.json()[0]["TOTAL_VP_LW_SCORE"] == 0 - -# Verify that a guest can't get victory promise information -# Endpoint -- api/studentemployment/ -# Expected Status Code -- 401 Unauthorized Error -# Expected Response Body -- An authorization denied message - def test_guest_victory_promise(self): - self.session = self.createGuestSession() - self.url = control.hostURL + 'api/vpscore/' - response = api.get(self.session, self.url) - - if not response.status_code == 401: - pytest.fail('Expected 401 Unauthorized Error, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['Message'] == control.AUTHORIZATION_DENIED - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(response.text)) - -# Verify that a faculty user's victory promise information is always 0. -# Endpoint -- api/studentemployment/ -# Expected Status Code -- 200 OK -# Expected Response Body -- A json response with victory promise points all 0 - def test_faculty_victory_promise(self): - self.session = \ - self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/vpscore/' - response = api.get(self.session, self.url) - - if not response.status_code == 200: - pytest.fail('Expected 200 Unauthorized Error, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - if not (type(response.json()) is list): - pytest.fail('Expected list, got {0}.'.format(response.json)) - assert response.json()[0]["TOTAL_VP_IM_SCORE"] == 0 - assert response.json()[0]["TOTAL_VP_CC_SCORE"] == 0 - assert response.json()[0]["TOTAL_VP_LS_SCORE"] == 0 - assert response.json()[0]["TOTAL_VP_LW_SCORE"] == 0 \ No newline at end of file diff --git a/Tests/ApiEndpoints/test_allwellnesscheck_pytest.py b/Tests/ApiEndpoints/test_allwellnesscheck_pytest.py deleted file mode 100644 index dfcf63f45..000000000 --- a/Tests/ApiEndpoints/test_allwellnesscheck_pytest.py +++ /dev/null @@ -1,321 +0,0 @@ -import pytest -import warnings -import string -from pytest_components import requests -from datetime import datetime - -import pytest_components as api -import test_gordon360_pytest as control - -class Test_AllWellnessCheckTest(control.testCase): -# # # # # # # # # # # # -# WELLNESS CHECK TEST # -# # # # # # # # # # # # - -# Verify that a student can get their current status -# Endpoint -- api/wellness/ -# Expected Status Code -- 200 OK -# Expected Response Body -- A list of one dictionary with user answer - def test_get_wellness_asymptomatic_student(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/wellness/' - response = api.get(self.session, self.url) - - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json respone body, got {0}.'\ - .format(response.text)) - if not (type(response.json()) is list): - warnings.warn("Response is not a list.") - assert response.json()[0]["answerValid"] == True - assert response.json()[0]["userAnswer"] == True or \ - response.json()[0]["userAnswer"] == False - -# Verify that a student can get the wellness check question -# Endpoint -- api/wellness/Question -# Expected Status Code -- 200 OK -# Expected Response Body -- A list of a dictionary of questions -# and prompts. - def test_get_wellness_question_student(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/wellness/question/' - response = api.get(self.session, self.url) - - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - if not (type(response.json()) is list): - warnings.warn("Response is not a list.") - assert response.json()[0].has_key('yesPrompt') - assert response.json()[0].has_key('noPrompt') - assert response.json()[0].has_key('question') - -# Verify that a student can answer if they are symptomatic (true) -# Endpoint -- api/wellness/ -# Expected Status Code -- 201 Created -# Expected Response Body -- none - def test_post_wellness_symptomatic_student(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/wellness/' - self.data = { - 'answerValid': True, - 'timestamp': datetime, - 'userAnswer': True - } - response = api.post(self.session, self.url, self.data) - if not response.status_code == 201: - pytest.fail('Expected 201 OK, got {0}.'\ - .format(response.status_code)) - -# Verify that a student can answer if they are asymptomatic (false) -# Endpoint -- api/wellness/ -# Expected Status Code -- 201 Created -# Expected Response Body -- none - def test_post_wellness_asymptomatic_student(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/wellness/' - self.data = { - 'answerValid': True, - 'timestamp': datetime, - 'userAnswer': False - } - response = api.post(self.session, self.url, self.data) - if not response.status_code == 201: - pytest.fail('Expected 201 OK, got {0}.'\ - .format(response.status_code)) - -# Verify that a student can't change the questions -# Endpoint -- api/wellness/question -# Expected Status Code -- 404 Method Not Allowed -# Expected Response Body -- A method not allowed error message - def test_post_wellness_question_session(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/wellness/question' - self.data = { - 'yesPrompt': 'Trying to change', - 'question': 'No questions', - 'noPrompt': 'Have a nice day of testing' - } - response = api.post(self.session, self.url, self.data) - if not response.status_code == 405: - pytest.fail('Expected 405 Not Found, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['Message'] == \ - "The requested resource does not support http method 'POST'." - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - -# Verify that a faculty user can get their current status -# Endpoint -- api/wellness/ -# Expected Status Code -- 200 OK -# Expected Response Body -- A list of one dictionary with user answer - def test_get_wellness_asymptomatic_faculty(self): - self.session = \ - self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/wellness/' - response = api.get(self.session, self.url) - - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - try: - response.json() - except ValueError: - pytest.fail('Expected Json respone body, got {0}.'\ - .format(response.text)) - if not (type(response.json()) is list): - warnings.warn("Response is not a list.") - assert response.json()[0]["answerValid"] == True - assert response.json()[0]["userAnswer"] == True or \ - response.json()[0]["userAnswer"] == False - -# Verify that a faculty user can get the wellness check question -# Endpoint -- api/wellness/Question -# Expected Status Code -- 200 OK -# Expected Response Body -- A list of a dictionary of questions -# and prompts. - def test_get_wellness_question_faculty(self): - self.session = \ - self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/wellness/question/' - response = api.get(self.session, self.url) - - if not response.status_code == 200: - pytest.fail('Expected 200 OK, got {0}.'\ - .format(response.status_code)) - if not (type(response.json()) is list): - warnings.warn("Response is not a list.") - assert response.json()[0].has_key('yesPrompt') - assert response.json()[0].has_key('noPrompt') - assert response.json()[0].has_key('question') - -# Verify that a faculty user can answer if they are symptomatic (true) -# Endpoint -- api/wellness/ -# Expected Status Code -- 201 Created -# Expected Response Body -- none - def test_post_wellness_symptomatic_faculty(self): - self.session = self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/wellness/' - self.data = { - 'answerValid': True, - 'timestamp': datetime, - 'userAnswer': True - } - response = api.post(self.session, self.url, self.data) - if not response.status_code == 201: - pytest.fail('Expected 201 OK, got {0}.'\ - .format(response.status_code)) - -# Verify that a faculty user can answer if they are asymptomatic (false) -# Endpoint -- api/wellness/ -# Expected Status Code -- 201 Created -# Expected Response Body -- none - def test_post_wellness_asymptomatic_faculty(self): - self.session = self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/wellness/' - self.data = { - 'answerValid': True, - 'timestamp': datetime, - 'userAnswer': False - } - response = api.post(self.session, self.url, self.data) - if not response.status_code == 201: - pytest.fail('Expected 201 OK, got {0}.'\ - .format(response.status_code)) - -# Verify that a faculty user can't change the questions -# Endpoint -- api/wellness/question -# Expected Status Code -- 405 Method Not Allowed -# Expected Response Body -- A method not allowed error message - def test_post_wellness_question_faculty(self): - self.session = \ - self.createAuthorizedSession(control.leader_username, control.leader_password) - self.url = control.hostURL + 'api/wellness/question' - self.data = { - 'yesPrompt': 'Trying to change', - 'question': 'No questions', - 'noPrompt': 'Have a nice day of testing' - } - response = api.post(self.session, self.url, self.data) - if not response.status_code == 405: - pytest.fail('Expected 405 Not Found, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['Message'] == \ - "The requested resource does not support http method 'POST'." - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) - -# Verify that a guest can't get their current status -# Endpoint -- api/wellness/ -# Expected Status Code -- 401 Unauthorized Error -# Expected Response Body -- An authorization denied error - def test_get_wellness_asymptomatic_guest(self): - self.session = self.createGuestSession() - self.url = control.hostURL + 'api/wellness/' - response = api.get(self.session, self.url) - - if not response.status_code == 401: - pytest.fail('Expected 401 Unauthorized Error, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['Message'] == control.AUTHORIZATION_DENIED - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(response.text)) - -# Verify that a guest can't get the wellness check question -# Endpoint -- api/wellness/Question -# Expected Status Code -- 401 Unauthorized Error -# Expected Response Body -- An authorization denied error - def test_get_wellness_question_guest(self): - self.session = self.createGuestSession() - self.url = control.hostURL + 'api/wellness/question/' - response = api.get(self.session, self.url) - - if not response.status_code == 401: - pytest.fail('Expected 401 Unauthorized Error, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['Message'] == control.AUTHORIZATION_DENIED - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(response.text)) - -# Verify that a guest can't answer if they are symptomatic (true) -# Endpoint -- api/wellness/ -# Expected Status Code -- 401 Unauthorized Error -# Expected Response Body -- An authorization denied error - def test_post_wellness_symptomatic_guest(self): - self.session = self.createGuestSession() - self.url = control.hostURL + 'api/wellness/' - self.data = { - 'answerValid': True, - 'timestamp': datetime, - 'userAnswer': True - } - response = api.post(self.session, self.url, self.data) - - if not response.status_code == 401: - pytest.fail('Expected 401 Unauthorized Error, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['Message'] == control.AUTHORIZATION_DENIED - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(response.text)) - - -# Verify that a guest can't answer if they are asymptomatic (false) -# Endpoint -- api/wellness/ -# Expected Status Code -- 401 Unauthorized Error -# Expected Response Body -- An authorization denied error - def test_post_wellness_asymptomatic_guest(self): - self.session = self.createGuestSession() - self.url = control.hostURL + 'api/wellness/' - self.data = { - 'answerValid': True, - 'timestamp': datetime, - 'userAnswer': False - } - response = api.post(self.session, self.url, self.data) - - if not response.status_code == 401: - pytest.fail('Expected 401 Unauthorized Error, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['Message'] == control.AUTHORIZATION_DENIED - except ValueError: - pytest.fail('Expected Json response body, got{0}.'\ - .format(response.text)) - - -# Verify that a guest can't change the questions -# Endpoint -- api/wellness/question -# Expected Status Code -- 404 Method Not Allowed -# Expected Response Body -- A method not allowed error message - def test_post_wellness_question_guest(self): - self.session = self.createAuthorizedSession(control.username, control.password) - self.url = control.hostURL + 'api/wellness/question' - self.data = { - 'yesPrompt': 'Trying to change', - 'question': 'No questions', - 'noPrompt': 'Have a nice day of testing' - } - response = api.post(self.session, self.url, self.data) - if not response.status_code == 405: - pytest.fail('Expected 405 Not Found, got {0}.'\ - .format(response.status_code)) - try: - assert response.json()['Message'] == \ - "The requested resource does not support http method 'POST'." - except ValueError: - pytest.fail('Expected Json response body, got {0}.'\ - .format(response.text)) \ No newline at end of file diff --git a/Tests/ApiEndpoints/test_gordon360_pytest.py b/Tests/ApiEndpoints/test_gordon360_pytest.py deleted file mode 100644 index 762f692d2..000000000 --- a/Tests/ApiEndpoints/test_gordon360_pytest.py +++ /dev/null @@ -1,129 +0,0 @@ -import pytest -import warnings -import string -from pytest_components import requests -from datetime import datetime - -import credentials -import pytest_components as api - - -# # # # # # # # # -# Configuration # -# # # # # # # # # - -# Membership -# Activity to use for testing -activity_code_AJG = 'AJG' -activity_code_360 = '360' -# Description to use for testing -activity_description_AJG = 'A. J. Gordon Scholars Program' -activity_description_360 = '360.gordon.edu' -# Image path to use for testing -activity_image_path_AJG = \ - 'https://360apitrain.gordon.edu/browseable/uploads/AJG/canvasImage.png' -activity_image_path_360 = \ - 'https://360apitrain.gordon.edu/browseable/uploads/360/canvasImage.png' -# Blurb to use for testing -activity_blurb_AJG = 'DOING TESTS, IGNORE' -activity_blurb_360 = 'This is me changing the description' -# URL to use for testing -activity_URL_AJG = 'http://www.lolcats.com/' -activity_URL_360 = 'http://360.gordon.edu' -# Type to use for testing -activity_type_AJG = 'LEA' -activity_type_360 = 'STU' -# Type description to use for testing -activity_type_description_AJG = 'Leadership Program' -activity_type_description_360 = 'Student Life' -# Join info to use for testing -activity_join_info_AJG = '' -activity_join_info_360 = 'me adding special information' -# Id number to use for testing -valid_id_number = 50146557 -# Session to use for testing -session_code = '201809' -# Specific term to use for testing -term_code = 'FA18' -# Participation Code that correspond to member: -member_positions = ['MEMBR', 'GUEST', 'PART'] -# Date -begin_date = '06/10/2016' -end_date = '07/16/2016' - -_email = '360.studenttest@gordon.edu' -# Comments -comments = 'Generated by 360-Gordon-Test. IGNORE' -# comments = 'Generated by Gordon 360 API Test Suite. IGNORE' -searchString = 'michael' -searchString2 = 'lindsay' -# Event or Type ID used for events testing -Event_OR_Type_ID = '10' - -# Profile image path -FILE_PATH_PROFILE = r'..\..\Gordon360\browseable\profile\Default\profile.png' -FILE_PATH_ID = r'..\..\Gordon360\browseable\profile\Default\ID.png' - -# API. Choose only 1. -# localhost set up using Visual Studio to enable local testing. -hostURL = 'https://360ApiTrain.gordon.edu/' -# hostURL = 'http://localhost:2477/' - -# Constants -LEADERSHIP_POSITIONS = ['CAPT','CODIR','CORD','DIREC','PRES','VICEC','VICEP'] -REQUEST_STATUS_APPROVED = 'Approved' -REQUEST_STATUS_DENIED = 'Denied' -REQUEST_STATUS_PENDING = 'Pending' -AUTHORIZATION_DENIED = 'Authorization has been denied for this request.' - -# Configuration Details -username = credentials.username -password = credentials.password -my_id_number = credentials.id_number -grant_payload = \ - { 'username':username, 'password':password, 'grant_type':'password' } - -leader_username = credentials.username_activity_leader -leader_password = credentials.password_activity_leader -leader_id_number = credentials.id_number_activity_leader -leader_grant_payload = { 'username':leader_username, \ - 'password':leader_password, 'grant_type':'password' } - -# Global variables for myschedule test events -event_id = '10000' -location = 'KOSC 244' -description = 'Summer Practicum' -begintime = '09:00:00' -endtime = '17:00:00' - -# Global variable for new description for test events -put_description = 'DOING TESTS - IGNORE' -shortened_begintime = '09:00:00' -shortened_endtime = '17:00:00' - -# Pre-conditions. -# Statically disabled/enabled tests that have yet to be resolved. -cctService = False -enrolledInPracticum = False -unknownPrecondition = False - - -# Logins -class testCase: - - # Create an authorized session to test authorized calls. - def createAuthorizedSession(self, userLogin, userPassword): - r = requests.post(hostURL+'token', { 'username':userLogin, \ - 'password':userPassword, 'grant_type':'password' }) - access_token = r.json()["access_token"] - authorization_header = "Bearer " + access_token - authorized_session = requests.Session() - authorized_session.verify = True - authorized_session.headers.update({ \ - "Authorization":authorization_header }) - return authorized_session - - # Create a guest session to test guest calls. - def createGuestSession(self): - authorized_session = requests.Session() - return authorized_session diff --git a/get-route-list.py b/get-route-list.py deleted file mode 100644 index 4fdc3ce0f..000000000 --- a/get-route-list.py +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/env python3 - -"""Prints list of API routes to standard output. - -Usage: - [python3] get-route-list.py [FILE_LIST] - -Finds all routes in the API controller source files. The route type -('HttpGet', 'HttpPut', etc.) must appear BEFORE the 'Route(...)' statement. - -FILE_LIST, if supplied, is a whitespace-delimited list of controller file -paths. If not supplied then all controller files in Gordon360/ApiControllers/ -directory will be used. -""" - -def findRoutes(controllerFileName, tag="HttpGet"): - """Returns list of routes matching specified type. - - Args: - controllerFileName (str): name of controller source file. - tag (str): route type. - - Returns: - list of str: list of routes that match the specfied type. - """ - with open(controllerFileName, "r") as controllerFile: - text = controllerFile.read() - routePrefix = "/" + getRoutePrefix(text) - routes = [] - tagStart = text.find(tag) - while tagStart >= 0: - routeStart = text.find("[Route", tagStart+1) - if routeStart >= 0: - routeEnd = text.find("]", routeStart+1) - route = getDoubleQuotedText(text[routeStart:routeEnd+1]) - routes.append(f" {routePrefix}/{route}") - tagStart = text.find(tag, routeStart+1) - return routes - -def getRoutePrefix(text): - """Return the contents of RoutePrefix() stored in text.""" - start = text.find("[RoutePrefix") - end = text.find("]", start+1) - return getDoubleQuotedText(text[start:end+1]) - -def getDoubleQuotedText(text): - """Return first substring of text delimited by double quotes.""" - start = text.find('"') - end = text.find('"', start+1) - return text[start+1:end] - -import os, sys -if __name__ == "__main__": - fileList = sys.argv[1:] - if len(fileList) == 0: - controllerDir = "Gordon360/ApiControllers/" - dirList = os.listdir(controllerDir) - dirList.sort() - fileList = [f"{controllerDir}{f}" for f in dirList] - for controllerFileName in fileList: - #print(f"\x1b[31m\x1b[1m{os.path.basename(controllerFileName)}\x1b[0m") - print(os.path.basename(controllerFileName)) - for tag in 'HttpGet', 'HttpPut', 'HttpPost', 'HttpDelete': - routes = findRoutes(controllerFileName, tag=tag) - if len(routes) > 0: - #print(f"\x1b[32m {tag}\x1b[0m") - print(f" {tag}") - for route in routes: - print(route) - diff --git a/get-route-list.sh b/get-route-list.sh deleted file mode 100755 index c2453e9b2..000000000 --- a/get-route-list.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -# 2019-06-28 -# -# Grabs API routes from the API controllers and displays them in a list. -# Route prefixes are indented 4 spaces and subroutes are indented 8 spaces. -# Actual routes are composed of a prefix followed by a subroute. - -find ./Gordon360/ApiControllers/ -type f -exec grep -H '\[Route' {} \; |\ - awk '{print $2,$3,$4,$5}' |\ - sed -e 's/\[RoutePrefix(/ &/g' -e 's/\[Route(/ &/g' -e 's/ *$//g'