def testCreatePersonProgramCreatorLogInOut(self): self.testname="TestCreatePersonProgramCreatorLogInOut" self.setup() util = WebdriverUtilities() util.setDriver(self.driver) element = Elements() do = Helpers(self) do.setUtils(util) do.login() aEmail = "auto_email_" + str(do.getRandomNumber(65535)) + "@gmail.com" aName = do.getUniqueString("name") aCompany = do.getUniqueString("company") do.selectMenuInTopRight("Admin Dashboard") do.selectMenuItemInnerNavDashBoard("People") do.addPersonInAdminDB(aName, aEmail, aCompany) self.assertTrue(do.searchPersonInAdminDB(aName), "Fail searching for newly created person in Admin Dashboard.") # edit person authorization do.selectMenuItemInnerNavDashBoard("People") # on the roles selection do.clickOnEditAuthorization(aName) do.assignUserRole("ProgramCreator") # now log out and then log in with the new account and try to create a program oldEmail = "*****@*****.**" oldName = "Example User" absFilePath = expanduser("~") + "/ggrc-core/src/ggrc/login/noop.py" do.changeUsernameEmail(oldName, aName, oldEmail, aEmail, absFilePath) do.selectMenuInTopRight("Logout") # Refresh the page do.refresh() # Log in with new user do.login() print "Log in as : " + do.whoAmI() object_list = ["Program", "Workflow", "Audit", "Regulation", "Policy", "Standard", "Contract", "Clause", "Section", "Objective", "Control", "Person", "OrgGroup", "System","Process", "DataAsset", "Product", "Project", "Facility", "Market"] for object in object_list: # cannot create audit; it requires other non-system wide role if object == "Audit": do.assertFalse(do.doesCreateNewExist(object), "Create New button exists for " + str(object)) else: do.assertTrue(do.doesCreateNewExist(object), "Create New button does not exist for " + str(object)) # should be able to create a program object last_created_object_link = do.createObject("Program") object_name = str(do.util.getTextFromXpathString(last_created_object_link)).strip() self.assertTrue(do.partialMatch("program-auto-test", object_name), "Fail to match program name.") # Restore old login information do.changeUsernameEmail(aName, oldName, aEmail, oldEmail, absFilePath) do.selectMenuInTopRight("Logout")
def testCreatePersonNoAccessLogInOut(self): self.testname="TestCreatePersonNoAccessLogInOut" self.setup() util = WebdriverUtilities() util.setDriver(self.driver) element = Elements() do = Helpers(self) do.setUtils(util) do.login() aEmail = "auto_email_" + str(do.getRandomNumber(65535)) + "@gmail.com" aName = do.getUniqueString("name") aCompany = do.getUniqueString("company") do.selectMenuInTopRight("Admin Dashboard") do.selectMenuItemInnerNavDashBoard("People") do.addPersonInAdminDB(aName, aEmail, aCompany) self.assertTrue(do.searchPersonInAdminDB(aName), "Fail searching for newly created person in Admin Dashboard.") # edit person authorization do.selectMenuItemInnerNavDashBoard("People") # on the roles selection do.clickOnEditAuthorization(aName) do.assignUserRole("No access") # now log out and then log in with the new account and try to create a program oldEmail = "*****@*****.**" oldName = "Example User" absFilePath = expanduser("~") + "/ggrc-core/src/ggrc/login/noop.py" do.changeUsernameEmail(oldName, aName, oldEmail, aEmail, absFilePath) do.selectMenuInTopRight("Logout") # Refresh the page do.refresh() # Log in with new user do.login() print "Log in as : " + do.whoAmI() object_list = ["Program", "Task", "Audit", "Regulation", "Policy", "Standard", "Contract", "Clause", "Section", "Objective", "Control", "Person", "OrgGroup", "System","Process", "DataAsset", "Product", "Project", "Facility", "Market"] # no Create New occurs for object in object_list: do.navigateLHSMenu4NoAccess(object) do.assertFalse(do.doesThisElementExist(str(Elements.left_nav_object_section_add_button).replace("OBJECT", object), 8)) # Restore old login information do.changeUsernameEmail(aName, oldName, aEmail, oldEmail, absFilePath) do.selectMenuInTopRight("Logout")
def testAdminDBGeneral(self): # testrecip@gmail exists in the database the_email = '*****@*****.**' roles = 9 # nine types of roles self.testname="TestAdminDBGeneral" self.setup() util = WebdriverUtilities() util.setDriver(self.driver) element = Elements() do = Helpers(self) do.setUtils(util) do.login() do.selectMenuInTopRight("Admin Dashboard") # verify people table do.selectMenuItemInnerNavDashBoard("People") self.assertTrue(do.searchPersonInAdminDB(the_email), "Cannot find it in the People table.") people_count = do._countOfObjectsFromAdminDB("people") self.assertEquals(1, people_count, "Expect count equals to 1, but it's " + str(people_count)) # verify Roles table do.selectMenuItemInnerNavDashBoard("Roles") roles_count = do._countOfObjectsFromAdminDB("roles") self.assertEquals(roles, roles_count, "Expect count equals to" + str(roles) + ", but it's " + str(roles_count)) # verify events table # There are more than 22 thousands entries so can't count every entries. Work-around is to verify that it # increments by 1 when you create an object for example do.selectMenuItemInnerNavDashBoard("Events") events_count_before = do._countOfObjectsFromAdminDB("events") #events_count_from_label = do._countOfObjectsFromAdminDBLabel("events") #self.assertEquals(events_count_before, events_count_from_label, "Events count is not in sync.") xpath = do.createObject("Contract") title = util.getTextFromXpathString(xpath) do.selectMenuInTopRight("Admin Dashboard") do.selectMenuItemInnerNavDashBoard("Events") do.delay(20) #events table takes time to load events_count_after = do._countOfObjectsFromAdminDB("events") #self.assertEquals(events_count_before, events_count_from_label, "Events count is not in sync.") self.assertLess(events_count_before, events_count_after, "Count before=" + str(events_count_before) + "; Count after=" + str(events_count_after))
def testCreatePeople(self): self.testname="TestCreatePeople" self.setup() if 'localhost' in config.url: util = WebdriverUtilities() util.setDriver(self.driver) element = Elements() do = Helpers(self) do.setUtils(util) do.login() entity = "*****@*****.**" do.selectMenuInTopRight("Admin Dashboard") do.selectMenuItemInnerNavDashBoard("People") for x in range(3): if x==1: entity = "*****@*****.**" elif x==2: entity = "*****@*****.**" try: self.assertTrue(do.addPersonInAdminDB(entity, entity, entity), "Fail to add person or person already exists") do.refresh() self.assertTrue(do.searchPersonInAdminDB(entity), "Fail searching for newly created person in Admin Dashboard.") # edit person authorization do.selectMenuItemInnerNavDashBoard("People") # on the roles selection do.clickOnEditAuthorization(entity) do.assignUserRole("gGRC Admin") except: do.clickCancelButtonOnAddPersonModal() continue # if it already exist then fine
def testCreatePersonObjectEditorLogInOut(self): self.testname="TestCreatePersonObjectEditorLogInOut" self.setup() util = WebdriverUtilities() util.setDriver(self.driver) element = Elements() do = Helpers(self) do.setUtils(util) do.login() # ***************************** run this block of codes if run locally ***************************** if "localhost" in config.url: print "Executing the block of codes locally ..." aEmail = "auto_email_" + str(do.getRandomNumber(65535)) + "@gmail.com" aName = do.getUniqueString("name") aCompany = do.getUniqueString("company") do.selectMenuInTopRight("Admin Dashboard") do.selectMenuItemInnerNavDashBoard("People") do.addPersonInAdminDB(aName, aEmail, aCompany) self.assertTrue(do.searchPersonInAdminDB(aName), "Fail searching for newly created person in Admin Dashboard.") # edit person authorization do.selectMenuItemInnerNavDashBoard("People") # on the roles selection do.clickOnEditAuthorization(aName) do.assignUserRole("ObjectEditor") # now log out and then log in with the new account and try to create a program oldEmail = "Example user" oldName = "*****@*****.**" absFilePath = expanduser("~") + "/ggrc-core/src/ggrc/login/noop.py" do.changeUsernameEmail(oldName, aName, oldEmail, aEmail, absFilePath) do.selectMenuInTopRight("Logout") # Refresh the page do.refresh() # Log in with new user do.login() print "Log in as : " + do.whoAmI() object_list = ["Workflow", "Vendor", "Regulation", "Policy", "Standard", "Contract", "Clause", "Section", "Section", "Objective", "Control", "Person", "OrgGroup", "System","Process", "DataAsset", "Product", "Project", "Facility", "Market", "Program", "Audit"] # since it's an object editor role, the Create New button won't show for certain types for object in object_list: if object=="Program" or object=="Audit": do.assertFalse(do.doesCreateNewExist(object), "Create New button exists for " + str(object)) else: do.assertTrue(do.doesCreateNewExist(object), "Create New button does not exist for " + str(object)) # should be able to create an object that is not Program or Audit last_created_object_link = do.createObject("Contract") object_name = str(do.util.getTextFromXpathString(last_created_object_link)).strip() self.assertTrue(do.partialMatch("contract-auto-test", object_name), "Fail to match contract name.") # Restore old login information do.changeUsernameEmail(aName, oldName, aEmail, oldEmail, absFilePath) do.selectMenuInTopRight("Logout") # ******************* execute this else block of codes if not run locally ******************* else: print "Executing the block of codes for non-local ..." aEmail = config.editor2 aName = do.getUniqueString("name") aCompany = do.getUniqueString("company") do.selectMenuInTopRight("Admin Dashboard") do.selectMenuItemInnerNavDashBoard("People") do.addPersonInAdminDB(aName, aEmail, aCompany) self.assertTrue(do.searchPersonInAdminDB(aName), "Fail searching for newly created person in Admin Dashboard.") # edit person authorization do.selectMenuItemInnerNavDashBoard("People") # on the roles selection do.clickOnEditAuthorization(aName) do.assignUserRole("ObjectEditor") # now log out and then log in with the new account and try to create a program do.selectMenuInTopRight("Logout") # Refresh the page do.refresh() # Log in with new user do.login(aEmail, config.password) print "Log in as : " + do.whoAmI() object_list = ["Workflow", "Vendor", "Regulation", "Policy", "Standard", "Contract", "Clause", "Section", "Section", "Objective", "Control", "Person", "OrgGroup", "System","Process", "DataAsset", "Product", "Project", "Facility", "Market", "Program", "Audit"] # since it's an object editor role, the Create New button won't show for certain types for object in object_list: do.ensureLHNSectionExpanded(object) if object=="Program" or object=="Audit": do.assertFalse(do.doesCreateNewExist(object), "Create New button exists for " + str(object)) else: do.assertTrue(do.doesCreateNewExist(object), "Create New button does not exist for " + str(object)) # should be able to create an object that is not Program or Audit last_created_object_link = do.createObject("Contract") object_name = str(do.util.getTextFromXpathString(last_created_object_link)).strip() self.assertTrue(do.partialMatch("contract-auto-test", object_name), "Fail to match contract name.") if "localhost" in config.url: # Restore old login information do.changeUsernameEmail(aName, oldName, aEmail, oldEmail, absFilePath) do.selectMenuInTopRight("Logout")
def testCreatePersonReaderLogInOut(self): self.testname="TestCreatePersonReaderLogInOut" self.setup() util = WebdriverUtilities() util.setDriver(self.driver) element = Elements() do = Helpers(self) do.setUtils(util) do.login() # run this block of codes if run locally if "localhost" in config.url: print "Executing the block of codes locally ..." aEmail = "auto_email_" + str(do.getRandomNumber(65535)) + "@gmail.com" aName = do.getUniqueString("name") aCompany = do.getUniqueString("company") do.selectMenuInTopRight("Admin Dashboard") do.selectMenuItemInnerNavDashBoard("People") do.addPersonInAdminDB(aName, aEmail, aCompany) self.assertTrue(do.searchPersonInAdminDB(aName), "Fail searching for newly created person in Admin Dashboard.") # edit person authorization do.selectMenuItemInnerNavDashBoard("People") # on the roles selection do.clickOnEditAuthorization(aName) do.assignUserRole("Reader") # now log out and then log in with the new account and try to create a program oldEmail = "*****@*****.**" oldName = "Example User" absFilePath = expanduser("~") + "/ggrc-core/src/ggrc/login/noop.py" do.changeUsernameEmail(oldName, aName, oldEmail, aEmail, absFilePath) do.selectMenuInTopRight("Logout") # Refresh the page do.refresh() # Log in with new user do.login() print "Log in as : " + do.whoAmI() object_list = ["Vendor", "Regulation", "Policy", "Standard", "Contract", "Clause", "Section", "Section", "Objective", "Control", "Person", "OrgGroup", "System","Process", "DataAsset", "Product", "Project", "Facility", "Market", "Program", "Audit"] # since it's a reader role, the Create New button won't show for object in object_list: do.assertFalse(do.doesCreateNewExist(object), "Create New button exists for " + str(object)) print "hi" # Restore old login information do.changeUsernameEmail(aName, oldName, aEmail, oldEmail, absFilePath) do.selectMenuInTopRight("Logout") else: print "Executing the block of codes for non-local ..." aEmail = config.reader2 aName = do.getUniqueString("name") aCompany = do.getUniqueString("company") do.selectMenuInTopRight("Admin Dashboard") do.selectMenuItemInnerNavDashBoard("People") do.addPersonInAdminDB(aName, aEmail, aCompany) self.assertTrue(do.searchPersonInAdminDB(aName), "Fail searching for newly created person in Admin Dashboard.") # edit person authorization do.selectMenuItemInnerNavDashBoard("People") # on the roles selection do.clickOnEditAuthorization(aName) do.assignUserRole("Reader") # now log out and then log in with the new account and try to create a program do.selectMenuInTopRight("Logout") # Refresh the page do.refresh() # Log in with new user do.login(aEmail, config.same_password) print "Log in as : " + do.whoAmI() # Workflow is left out on purpose because Create New is there but reader can't create object anyway object_list = ["Vendor", "Regulation", "Policy", "Standard", "Contract", "Clause", "Section", "Section", "Objective", "Control", "Person", "OrgGroup", "System","Process", "DataAsset", "Product", "Project", "Facility", "Market", "Program", "Audit"] # since it's a reader role, the Create New button won't show for object in object_list: do.ensureLHNSectionExpanded(object) do.assertFalse(do.doesCreateNewExist(object), "Create New button exists for " + str(object))
def testCreatePersonAuthorizationLogInOut(self): self.testname="TestCreatePersonAuthorizationLogInOut" self.setup() util = WebdriverUtilities() util.setDriver(self.driver) element = Elements() do = Helpers(self) do.setUtils(util) do.login() aEmail = "*****@*****.**" aName = do.getUniqueString("name") aCompany = do.getUniqueString("company") role = "ProgramCreator" do.selectMenuInTopRight("Admin Dashboard") # verify people tab do.selectMenuItemInnerNavDashBoard("People") # SETUP: if that email is already used change it to something else do.zeroizeThePersonEmail(aEmail) # you can add a person do.addPersonInAdminDB(aName, aEmail, aCompany) # the Next and PREVIOUS page buttons work self.assertTrue(do.verifyPrevNextOperation("people"), "Fail verifying Prev and Next buttons.") # search or filter works self.assertTrue(do.searchPersonInAdminDB(aName), "Fail searching for newly created person in Admin Dashboard.") # edit person authorization do.clickOnEditAuthorization(aName) do.assignUserRole(role) # at this point, 2nd tier is expanded and it's the only row displayed... do.verifyPersonInfoOnSecondTier(aName, aEmail, aCompany, role) if 'local' not in config.url: do.selectMenuInTopRight("Logout") do.refresh() do.login(aEmail, config.password) self.assertEqual(aEmail, do.whoAmI(), "Expect: " + aEmail + ", but see: " + do.whoAmI()) # I can test login with the new user locally but not on on grc-test.appspot.com because it requires actual email # and that email has to be unique. I can't automatically create new fake email account with google that's fraud else: oldEmail = "*****@*****.**" oldName = "Example User" absFilePath = expanduser("~") + "/ggrc-core/src/ggrc/login/noop.py" do.changeUsernameEmail(oldName, aName, oldEmail, aEmail, absFilePath) # now log out and then log in with the new account and try to create a program do.selectMenuInTopRight("Logout") # Refresh the page do.refresh() # Log back in do.login() print "Log in as : " + do.whoAmI() last_created_object_link = do.createObject("Program") object_name = str(do.util.getTextFromXpathString(last_created_object_link)).strip() self.assertTrue(do.partialMatch("program-auto-test", object_name), "Fail to match program name.") self.assertEqual(do.whoAmI(), aEmail, "Mismatched. I am: " + do.whoAmI() + ", " + "aEmail: " + aEmail) do.selectMenuInTopRight("Logout") # Restore old login information do.changeUsernameEmail(aName, oldName, aEmail, oldEmail, absFilePath)