<?xml version="1.0" encoding="UTF-8"?>
<!--
    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at
    
    http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.
-->

<site-conf xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/site-conf.xsd">
    <!-- The controller elements that are common to all OFBiz components
        can be found in the following xml file. A component can override the
        elements found in the common-controller.xml file. -->
    <include location="component://common/webcommon/WEB-INF/common-controller.xml"/>
    
    <!--  selenium Test Case -->
    <request-map uri="selenium">
        <security https="true" auth="true"/>
        <event type="java" path="org.ofbiz.testtools.VerifySeleniumSetups" invoke="verifyConfig"/>
        <response name="success" type="view" value="selenium"/>
    </request-map>
    <request-map uri="verify">
        <security https="true" auth="true"/>
        <event type="java" path="org.ofbiz.testtools.VerifySeleniumSetups" invoke="verifyConfig"/>
        <response name="success" type="view" value="selenium"/>
    </request-map>
    <request-map uri="downloadSeleniumlib">
        <security https="true" auth="true"/>
        <!-- validate Install all libs want to use in selenium -->
        <event type="java" path="org.ofbiz.testtools.VerifySeleniumSetups" invoke="doDownload"/>
        <response name="success" type="view" value="selenium"/>
    </request-map>
    <request-map uri="progressDownloadStatus">
        <security https="true" auth="true"/>
        <event type="java" path="org.ofbiz.testtools.VerifySeleniumSetups" invoke="checkProgressDownloadStatus"/>
        <response name="success" type="view" value="selenium"/>
    </request-map>
    <request-map uri="runTestSuite">
        <security https="false" auth="false"/>
        <event type="java" path="org.ofbiz.testtools.seleniumxml.SeleniumXml" invoke="runTestSuite"/>
        <response name="success" type="request-redirect" value="selenium" />
    </request-map>
    
    <request-map uri="updateSeleniumTestSuitePath">
        <security https="true" auth="true"/>
        <event type="simple" path="component://testtools/script/org/ofbiz/selenium/SeleniumTestSuitePathEvents.xml" invoke="updateSeleniumTestSuitePath"/>
        <response name="success" type="request" value="selenium"/>
    </request-map>
    <request-map uri="removeSeleniumTestSuitePath">
        <security https="true" auth="true"/>
        <event type="simple" path="component://testtools/script/org/ofbiz/selenium/SeleniumTestSuitePathEvents.xml" invoke="removeSeleniumTestSuitePath"/>
        <response name="success" type="request" value="selenium"/>
    </request-map>
    
    <request-map uri="editSeleniumTestSuitePath">
        <security https="true" auth="true"/>
        <response name="success" type="request" value="selenium"/>
    </request-map>

    <request-map uri="runHtmlSuite">
        <event type="java" path="org.ofbiz.testtools.selenium.SeleniumHtml" invoke="runHtmlTestSuite"/>
        <response name="success" type="view" value="selenium" />
        <response name="error" type="view" value="selenium" />
    </request-map>
    
    <!--  selenium Test Case -->
    <view-map name="selenium" type="screen" page="component://testtools/widget/CommonScreens.xml#selenium"/>
</site-conf>