from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.webdriver.chrome.options import Options
import os
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import unittest, time, re
import random
import requests
import json

class Pearson(unittest.TestCase):
	def setUp(self):
		options = Options()
		options.add_argument("--headless")
		options.add_argument("--no-sandbox")
		self.driver = webdriver.Chrome(options=options)
		self.driver.implicitly_wait(30)
		self.base_url = "https://www.katalon.com/"
		self.verificationErrors = []
		self.accept_next_alert = True
	
	def test_pearson(self):
		appointmentId = ""
		try:
			url = 'https://mast-api.3cubemedicare.com/api/getAnswersByAppointment/'
			response = requests.get(url)
			responseJson = response.json()
			name = responseJson["name"]
			email = responseJson["email"]
			gender = responseJson["gender"]
			date_of_birth = responseJson["date_of_birth"]
			nameArr = name.split()
			firstName = nameArr[0]
			try:
				lastName = nameArr[1]
			except Exception as e:
				lastName = ""
			answersList = responseJson["answersList"]
			appointmentId = responseJson["appointmentId"]
			
			driver = self.driver
			driver.get("https://qglobal.pearsonclinical.com/qg/in/login.seam")

			time.sleep(2)
			driver.find_element_by_id("login:uname").click()

			driver.find_element_by_id("login:uname").clear()
			
			driver.find_element_by_id("login:uname").send_keys("3cubemedicare")
			driver.find_element_by_id("login:pword").click()
			driver.find_element_by_id("login:pword").clear()
			driver.find_element_by_id("login:pword").send_keys("QuantumEffect@2019")
			driver.find_element_by_id("login:signInButton").click()
			time.sleep(3)
			driver.implicitly_wait(5)
			try:
				wait = WebDriverWait(driver, 10)
				element = wait.until(EC.element_to_be_clickable((By.ID, 'showStartingTipsForm:gettingStartedClose')))
			except:
				pass
			try:
				driver.find_element_by_id("showStartingTipsForm:gettingStartedClose").click()
			except:
				pass
			try:
				wait = WebDriverWait(driver, 10)
				element = wait.until(EC.element_to_be_clickable((By.ID, 'j_id100:confirmTerminate')))
			except:
				pass
			try:
				driver.find_element_by_id("j_id100:confirmTerminate").click()
			except:
				pass
			try:
				loader = driver.find_element_by_id("spinnerModalContainer")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			try:
				loader = driver.find_element_by_id("spinnerModalDiv")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			time.sleep(3)
			driver.implicitly_wait(5)
			driver.find_element_by_id("searchForm:newExamineeButton").click()
			driver.find_element_by_id("firstName").click()
			driver.find_element_by_id("firstName").clear()
			driver.find_element_by_id("firstName").send_keys(firstName)
			driver.find_element_by_id("calendarInputDate").click()
			driver.find_element_by_id("calendarInputDate").clear()
			driver.find_element_by_id("calendarInputDate").send_keys(date_of_birth)
			driver.find_element_by_id("emailId").click()
			driver.find_element_by_id("emailId").clear()
			driver.find_element_by_id("emailId").send_keys(email)
			driver.find_element_by_id("addExamineeLeftpanel").click()
			driver.find_element_by_id("save").click()
			driver.find_element_by_id("lastName").click()
			driver.find_element_by_id("lastName").clear()
			driver.find_element_by_id("lastName").send_keys(lastName)
			driver.find_element_by_id("examineeId").clear()
			driver.find_element_by_id("examineeId").send_keys(appointmentId)
			Select(driver.find_element_by_id("genderMenu")).select_by_visible_text(gender)
			driver.find_element_by_id("save").click()
			try:
				loader = driver.find_element_by_id("spinnerModalContainer")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			try:
				loader = driver.find_element_by_id("spinnerModalDiv")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			time.sleep(3)
			driver.implicitly_wait(5)
			element = WebDriverWait(driver, 10).until(
				EC.presence_of_element_located((By.ID, "searchForm:j_id332"))
			)
			driver.find_element_by_id("searchForm:j_id332").click()
			try:
				loader = driver.find_element_by_id("spinnerModalContainer")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			try:
				loader = driver.find_element_by_id("spinnerModalDiv")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			time.sleep(3)
			driver.implicitly_wait(5)
			driver.find_element_by_id("editExamineeForm:examineeId").clear()
			driver.find_element_by_id("editExamineeForm:examineeId").send_keys(appointmentId)
			driver.find_element_by_id("editExamineeForm:search").click()
			try:
				loader = driver.find_element_by_id("spinnerModalContainer")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			try:
				loader = driver.find_element_by_id("spinnerModalDiv")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			time.sleep(3)
			driver.implicitly_wait(5)
			driver.find_element_by_xpath('/html/body/div[1]/div[1]/div/div[9]/div/div/div/div/div/div/div/table/tbody/tr[2]/td/table/tbody/tr/td/span/form/div[3]/div/div/div[3]/div[4]/div/table/tbody/tr[2]/td[2]').click()
			try:
				loader = driver.find_element_by_id("spinnerModalContainer")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			try:
				loader = driver.find_element_by_id("spinnerModalDiv")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			time.sleep(3)
			driver.implicitly_wait(5)
			a_button = driver.find_element_by_id("searchForm:newExAssessmentBtn")
			a_button.click()
			try:
				loader = driver.find_element_by_id("spinnerModalContainer")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			try:
				loader = driver.find_element_by_id("spinnerModalDiv")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			time.sleep(3)
			driver.implicitly_wait(5)
			driver.find_element_by_id("searchText").send_keys("MCMI-IV")
			try:
				loader = driver.find_element_by_id("spinnerModalContainer")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			try:
				loader = driver.find_element_by_id("spinnerModalDiv")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			time.sleep(3)
			driver.implicitly_wait(5)
			driver.find_element_by_id("3051_radio_span").click()
			assign_button = driver.find_element_by_id("searchForm:assignAssessmentBtn")
			assign_button.click()
			try:
				loader = driver.find_element_by_id("spinnerModalContainer")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			try:
				loader = driver.find_element_by_id("spinnerModalDiv")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			time.sleep(3)
			driver.implicitly_wait(5)
			driver.find_element_by_id("tabContainer_tablist_irTab").click()
			count = 1
			for x in answersList:
				countStr = str(count)
				while (len(countStr) < 3):
					countStr = "0"+countStr
				rid = "mcmi4_r"+str(countStr)
				driver.find_element_by_id(rid).click()
				driver.find_element_by_id(rid).clear()
				driver.find_element_by_id(rid).send_keys(x["ans"])
				count = count + 1
			driver.find_element_by_id("editAssessmentForm:saveButtonIdAboveHtml").click()
			time.sleep(3)
			driver.implicitly_wait(5)
			try:
				loader = driver.find_element_by_id("spinnerModalContainer")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			try:
				loader = driver.find_element_by_id("spinnerModalDiv")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			time.sleep(3)
			driver.implicitly_wait(5)
			element = driver.find_element_by_id("editAssessmentForm:j_id704")
			element.click()
			try:
				loader = driver.find_element_by_id("spinnerModalContainer")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			try:
				loader = driver.find_element_by_id("spinnerModalDiv")
				while (loader.is_displayed()):
					pass
			except Exception as e:
				pass
			time.sleep(3)
			driver.implicitly_wait(5)
			signOutBtn = driver.find_element_by_id("custFacingHeader:signOut")
			while(signOutBtn.is_displayed()==False):
				pass
			signOutBtn.click()
			driver.find_element_by_id("confirmLogoutForm:ok").click()
			headers = {"content-type":"application/json"}
			url = 'https://mast-api.3cubemedicare.com/api/updatePearsonStatus/'
			payload = {"appointmentId":appointmentId,"status":"Success"}
			response = requests.post(url,json=payload,headers=headers)
			# print("Done")
		except Exception as e:
			# print(str(e))
			if(appointmentId == ""):
				pass
			else:
				headers = {"content-type":"application/json"}
				url = 'https://mast-api.3cubemedicare.com/api/updatePearsonStatus/'
				payload = {"appointmentId":appointmentId,"status":"Fail"}
				response = requests.post(url,json=payload,headers=headers)

	def is_element_present(self, how, what):
		try: self.driver.find_element(by=how, value=what)
		except NoSuchElementException as e: return False
		return True
	
	def is_alert_present(self):
		try: self.driver.switch_to_alert()
		except NoAlertPresentException as e: return False
		return True
	
	def close_alert_and_get_its_text(self):
		try:
			alert = self.driver.switch_to_alert()
			alert_text = alert.text
			if self.accept_next_alert:
				alert.accept()
			else:
				alert.dismiss()
			return alert_text
		finally: self.accept_next_alert = True
	
	def tearDown(self):
		self.driver.quit()
		self.assertEqual([], self.verificationErrors)

if __name__ == "__main__":
	unittest.main()

