<?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.
  -->
<test-suite suite-name="partytests"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/test-suite.xsd">

    <test-case case-name="party-tests-data-load">
        <entity-xml action="load" entity-xml-url="component://party/testdef/data/PartyTestsData.xml"/>
    </test-case>

    <test-case case-name="party-tests">
        <simple-method-test location="component://party/minilang/test/PartyTests.xml"/>
    </test-case>
    <test-case case-name="partystatuschangetestdata">
        <entity-xml action="load" entity-xml-url="component://party/testdef/data/PartyStatusChangeTestData.xml"/>
    </test-case>
    <test-case case-name="partystatuschangetest">
        <simple-method-test location="component://party/minilang/test/PartyStatusChangeTests.xml"/>
    </test-case> 
    
</test-suite>
