*** Settings ***
Documentation  Setup WebGoat Robotframework tests
Library  SeleniumLibrary  timeout=100  run_on_failure=Capture Page Screenshot
Library  String

Suite Setup  Initial_Page  ${ENDPOINT}  ${BROWSER}
Suite Teardown  Close_Page

*** Variables ***
${BROWSER}  chrome
${SLEEP}  100
${DELAY}  0.25
${ENDPOINT}  http://127.0.0.1:8080/WebGoat
${ENDPOINT_WOLF}  http://127.0.0.1:9090
${USERNAME}  robotuser
${PASSWORD}  password
${HEADLESS}  ${FALSE}

*** Keywords ***
Initial_Page
  [Documentation]  Check the inital page
  [Arguments]  ${ENDPOINT}  ${BROWSER}
  Log To Console  Start WebGoat UI Testing
  IF  ${HEADLESS}
      Open Browser  ${ENDPOINT}  ${BROWSER}  options=add_argument("-headless");add_argument("--start-maximized");add_experimental_option('prefs', {'intl.accept_languages': 'en,en_US'})  alias=webgoat
  ELSE
      Open Browser  ${ENDPOINT}  ${BROWSER}  options=add_experimental_option('prefs', {'intl.accept_languages': 'en,en_US'})  alias=webgoat
  END
  IF  ${HEADLESS}
      Open Browser  ${ENDPOINT_WOLF}/WebWolf  ${BROWSER}  options=add_argument("-headless");add_argument("--start-maximized");add_experimental_option('prefs', {'intl.accept_languages': 'en,en_US'})  alias=webwolf
  ELSE
      Open Browser  ${ENDPOINT_WOLF}/WebWolf  ${BROWSER}  options=add_experimental_option('prefs', {'intl.accept_languages': 'en,en_US'})  alias=webwolf
  END
  Switch Browser  webgoat
  Maximize Browser Window
  Set Window Size  ${1400}  ${1000}
  Switch Browser  webwolf
  Maximize Browser Window
  Set Window Size  ${1400}  ${1000}
  Set Window Position  ${400}  ${200}
  Set Selenium Speed  ${DELAY}

Close_Page
  [Documentation]  Closing the browser
  Log To Console  ==> Stop WebGoat UI Testing
  IF  ${HEADLESS}
    Switch Browser  webgoat
    Close Browser
    Switch Browser  webwolf
    Close Browser
  END

*** Test Cases ***

Check_Initial_Page
  Switch Browser  webgoat
  Page Should Contain  Username
  Click Button  Sign in
  Page Should Contain  Invalid username
  Click Link  /WebGoat/registration

Check_Registration_Page
  Page Should Contain  Username
  Input Text  username  ${USERNAME}
  Input Text  password  ${PASSWORD}
  Input Text  matchingPassword  ${PASSWORD}
  Click Element  agree
  Click Button  Sign up

Check_Welcome_Page
  Page Should Contain  WebGoat
  Go To  ${ENDPOINT}/login
  Page Should Contain  Username
  Input Text  username  ${USERNAME}
  Input Text  password  ${PASSWORD}
  Click Button  Sign in
  Page Should Contain  WebGoat

Check_Menu_Page
  Click Element  css=a[category='Introduction']
  Click Element  Introduction-WebGoat
  CLick Element  Introduction-WebWolf
  Click Element  css=a[category='General']
  CLick Element  General-HTTPBasics
  Click Element  xpath=//*[.='2']
  Input Text     person  ${USERNAME}
  Click Button   Go!
  ${OUT_VALUE}   Get Text  xpath=//div[contains(@class, 'attack-feedback')]
  ${OUT_RESULT}  Evaluate  "resutobor" in """${OUT_VALUE}"""
  IF  not ${OUT_RESULT}
    Fail  "not ok"
  END

Check_WebWolf
  Switch Browser  webwolf
  location should be  ${ENDPOINT_WOLF}/WebWolf
  Go To  ${ENDPOINT_WOLF}/mail
  Input Text  username  ${USERNAME}
  Input Text  password  ${PASSWORD}
  Click Button  Sign In