/*
 * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0,
 * or the Eclipse Distribution License v. 1.0 which is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
 */

// Contributors:
//     Vikram Bhatia - initial API and implementation.
//     David Minsky - tweaks and comments
package org.eclipse.persistence.testing.tests.writing;

import java.util.HashMap;
import java.util.List;

import org.eclipse.persistence.internal.helper.Helper;
import org.eclipse.persistence.sessions.DatabaseSession;

import org.eclipse.persistence.testing.framework.TestCase;
import org.eclipse.persistence.testing.framework.TestErrorException;

// MODEL SYSTEMS USED IN THIS TESTCASE FOR COMMIT ORDER TESTING
import org.eclipse.persistence.testing.models.employee.relational.EmployeeSystem;
import org.eclipse.persistence.testing.models.inheritance.InheritanceSystem;
import org.eclipse.persistence.testing.models.insurance.InsuranceSystem;
import org.eclipse.persistence.testing.models.ownership.OwnershipSystem;

/**
 * This test compares a hard-coded commit order to a generated commit order from CommitManager.
 * If mapped classes are added into the models above, the hard-coded commit order is no longer
 * valid, and they need to be added into the expected commit order.
 */
public class CommitOrderTest extends TestCase {

    private static final String expectedCommitOrder = initializeExpectedCommitOrder();

    private String orderAResults = null;
    private String orderBResults = null;
    private String orderCResults = null;
    private String orderDResults = null;

    public CommitOrderTest() {
        super();
        setDescription("Test to verify that the generated commit order is consistent with an expected commit order.");
    }

    @Override
    public void test() {
        getSession().getProject().setDescriptors(new HashMap());
        ((DatabaseSession)getSession()).logout();
        ((DatabaseSession)getSession()).login();
        new EmployeeSystem().addDescriptors(getDatabaseSession());
        orderAResults = getCommitOrderListAsString(getAbstractSession().getCommitManager().getCommitOrder());

        getSession().getProject().setDescriptors(new HashMap());
        ((DatabaseSession)getSession()).logout();
        ((DatabaseSession)getSession()).login();
        new InsuranceSystem().addDescriptors(getDatabaseSession());
        orderBResults = getCommitOrderListAsString(getAbstractSession().getCommitManager().getCommitOrder());

        getSession().getProject().setDescriptors(new HashMap());
        ((DatabaseSession)getSession()).logout();
        ((DatabaseSession)getSession()).login();
        new OwnershipSystem().addDescriptors(getDatabaseSession());
        orderCResults = getCommitOrderListAsString(getAbstractSession().getCommitManager().getCommitOrder());

        getSession().getProject().setDescriptors(new HashMap());
        ((DatabaseSession)getSession()).logout();
        ((DatabaseSession)getSession()).login();
        new InheritanceSystem().addDescriptors(getDatabaseSession());
        orderDResults = getCommitOrderListAsString(getAbstractSession().getCommitManager().getCommitOrder());
    }

    @Override
    public void verify() {
        if (!expectedCommitOrder.equals(orderAResults)) {
            throw new TestErrorException(getErrorMessage(orderAResults));
        }
        if (!expectedCommitOrder.equals(orderBResults)) {
            throw new TestErrorException(getErrorMessage(orderBResults));
        }
        if (!expectedCommitOrder.equals(orderCResults)) {
            throw new TestErrorException(getErrorMessage(orderCResults));
        }
        if (!expectedCommitOrder.equals(orderDResults)) {
            throw new TestErrorException(getErrorMessage(orderDResults));
        }
    }

    @Override
    public void reset() {
        ((DatabaseSession)getSession()).logout();
        ((DatabaseSession)getSession()).login();
        orderAResults = null;
        orderBResults = null;
        orderCResults = null;
        orderDResults = null;
    }

    protected String getErrorMessage(String resultList) {
        StringBuffer sb = new StringBuffer();
        String cr = Helper.cr();
        sb.append("Error: An unexpected commit order was found.");
        sb.append(cr);
        sb.append("A possible cause of this problem may be additional mapped classes were added to test models used by the testcase ");
        sb.append(getClass().getName());
        sb.append(cr);
        sb.append("Mapped classes added to these model(s) should be added into the expected commit order within this testcase.");
        sb.append(cr);
        sb.append("[Found commit order] : ");
        sb.append(cr);
        sb.append(cr);
        sb.append(resultList);
        sb.append(cr);
        sb.append("[Expected commit order] : ");
        sb.append(cr);
        sb.append(cr);
        sb.append(expectedCommitOrder);
        return sb.toString();
    }

    protected String getCommitOrderListAsString(List<Class> classes) {
        StringBuffer sb = new StringBuffer();
        String cr = Helper.cr();
        for (Class clazz : classes) {
            sb.append(clazz.getName());
            sb.append(cr);
        }
        return sb.toString();
    }

    protected static String initializeExpectedCommitOrder() {
        StringBuffer sb = new StringBuffer();
        String cr = Helper.cr();
        sb.append("org.eclipse.persistence.testing.models.aggregate.Address" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Address1" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.AddressDescription" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Agent" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Cousin" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Aggregate" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Bicycle" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Builder" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Car" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Parent" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Child" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Client" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Company" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Computer" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Customer" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Dependant" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Employee" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Employee1" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.EvaluationClient" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Manufacturer" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.GolfClub" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.GolfClubShaft" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.HomeAddress" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.House" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Job" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Language" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Oid" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Period" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.PeriodDescription" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.ProjectDescription" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Relative" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Responsibility" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.RoomSellingPoint" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.SellingPoint" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.SingleHouse" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.StepChild" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Switch" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.SwitchState" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.SwitchStateOFF" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.SwitchStateON" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.TownHouse" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Transport" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Vehicle" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Version" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.Worker" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.WorkingAddress" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.nested.Guardian" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.nested.MailingAddress" + cr);
        sb.append("org.eclipse.persistence.testing.models.aggregate.nested.Student" + cr);
        sb.append("org.eclipse.persistence.testing.models.bigbad.BigBadAggregate" + cr);
        sb.append("org.eclipse.persistence.testing.models.bigbad.BigBadReferenceData" + cr);
        sb.append("org.eclipse.persistence.testing.models.bigbad.BigBadObject" + cr);
        sb.append("org.eclipse.persistence.testing.models.collections.Diner" + cr);
        sb.append("org.eclipse.persistence.testing.models.collections.Location" + cr);
        sb.append("org.eclipse.persistence.testing.models.collections.Restaurant" + cr);
        sb.append("org.eclipse.persistence.testing.models.collections.Menu" + cr);
        sb.append("org.eclipse.persistence.testing.models.collections.MenuItem" + cr);
        sb.append("org.eclipse.persistence.testing.models.collections.Person" + cr);
        sb.append("org.eclipse.persistence.testing.models.collections.Waiter" + cr);
        sb.append("org.eclipse.persistence.testing.models.employee.domain.Address" + cr);
        sb.append("org.eclipse.persistence.testing.models.employee.domain.Employee" + cr);
        sb.append("org.eclipse.persistence.testing.models.employee.domain.Child" + cr);
        sb.append("org.eclipse.persistence.testing.models.employee.domain.EmploymentPeriod" + cr);
        sb.append("org.eclipse.persistence.testing.models.employee.domain.LargeProject" + cr);
        sb.append("org.eclipse.persistence.testing.models.employee.domain.PhoneNumber" + cr);
        sb.append("org.eclipse.persistence.testing.models.employee.domain.Project" + cr);
        sb.append("org.eclipse.persistence.testing.models.employee.domain.SmallProject" + cr);
        sb.append("org.eclipse.persistence.testing.models.events.AboutToInsertMultiTableObject" + cr);
        sb.append("org.eclipse.persistence.testing.models.events.AboutToInsertSingleTableObject" + cr);
        sb.append("org.eclipse.persistence.testing.models.events.Address" + cr);
        sb.append("org.eclipse.persistence.testing.models.events.CreditCard" + cr);
        sb.append("org.eclipse.persistence.testing.models.events.EmailAccount" + cr);
        sb.append("org.eclipse.persistence.testing.models.events.Phone" + cr);
        sb.append("org.eclipse.persistence.testing.models.events.Customer" + cr);
        sb.append("org.eclipse.persistence.testing.models.events.Order" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.A_1_King2" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.A_2_1_King2" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.A_2_King2" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.A_King2" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Animal_Matt" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Human" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.JavaProgrammer" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Mammal" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Primate" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Programmer" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Alligator" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Animal" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Teacher" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Apple" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.BudgettedProject" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.ProjectWorker" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.BaseProject" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Company" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Bicycle" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Boat" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Car" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.SportsCar" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.SalesRep" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.SoftwareEngineer" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Engineer" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Person" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Bus" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Cat" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.CompanyWorker" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Computer" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Developer_King" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Dog" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Entomologist" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Fruit" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.FueledVehicle" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.GrassHopper" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.IBMPC" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Insect" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.LabradorRetriever" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.LadyBug" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Mac" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Mainframe" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.NonFueledVehicle" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.PC" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Pear" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Person_King" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.SeniorDeveloper_King" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Vehicle" + cr);
        sb.append("org.eclipse.persistence.testing.models.inheritance.Worker" + cr);
        sb.append("org.eclipse.persistence.testing.models.insurance.PolicyHolder" + cr);
        sb.append("org.eclipse.persistence.testing.models.insurance.Address" + cr);
        sb.append("org.eclipse.persistence.testing.models.insurance.BicyclePolicy" + cr);
        sb.append("org.eclipse.persistence.testing.models.insurance.Policy" + cr);
        sb.append("org.eclipse.persistence.testing.models.insurance.HealthPolicy" + cr);
        sb.append("org.eclipse.persistence.testing.models.insurance.HousePolicy" + cr);
        sb.append("org.eclipse.persistence.testing.models.insurance.VehiclePolicy" + cr);
        sb.append("org.eclipse.persistence.testing.models.insurance.Claim" + cr);
        sb.append("org.eclipse.persistence.testing.models.insurance.HealthClaim" + cr);
        sb.append("org.eclipse.persistence.testing.models.insurance.HouseClaim" + cr);
        sb.append("org.eclipse.persistence.testing.models.insurance.Phone" + cr);
        sb.append("org.eclipse.persistence.testing.models.insurance.VehicleClaim" + cr);
        sb.append("org.eclipse.persistence.testing.models.legacy.Employee" + cr);
        sb.append("org.eclipse.persistence.testing.models.legacy.Computer" + cr);
        sb.append("org.eclipse.persistence.testing.models.legacy.GaurenteedShipment" + cr);
        sb.append("org.eclipse.persistence.testing.models.legacy.InsuredShipment" + cr);
        sb.append("org.eclipse.persistence.testing.models.legacy.Shipment" + cr);
        sb.append("org.eclipse.persistence.testing.models.legacy.Order" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.Address" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.BabyMonitor" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.Crib" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.Baby" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.CompanyCard" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.Cubicle" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.Employee" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.Monitor" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.Computer" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.EmergencyExit" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.Employee1" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.Employee2" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.Hardware" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.Identification" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.Keyboard" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.Joystick" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.Key" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.Peripheral" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.Phone" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.SecureSystem" + cr);
        sb.append("org.eclipse.persistence.testing.models.mapping.Shipment" + cr);
        sb.append("org.eclipse.persistence.testing.models.multipletable.Budget" + cr);
        sb.append("org.eclipse.persistence.testing.models.multipletable.BusinessProject" + cr);
        sb.append("org.eclipse.persistence.testing.models.multipletable.LargeBusinessProject" + cr);
        sb.append("org.eclipse.persistence.testing.models.ownership.ObjectB" + cr);
        sb.append("org.eclipse.persistence.testing.models.ownership.ObjectA" + cr);
        sb.append("org.eclipse.persistence.testing.models.ownership.ObjectD" + cr);
        sb.append("org.eclipse.persistence.testing.models.ownership.ObjectC" + cr);
        sb.append("org.eclipse.persistence.testing.models.ownership.ObjectE" + cr);
        sb.append("org.eclipse.persistence.testing.models.sequencing.SeqTestClass1" + cr);
        sb.append("org.eclipse.persistence.testing.models.sequencing.SeqTestClass2" + cr);
        sb.append("org.eclipse.persistence.testing.models.vehicle.EngineType" + cr);
        sb.append("org.eclipse.persistence.testing.models.vehicle.FuelType" + cr);
        sb.append("org.eclipse.persistence.testing.models.vehicle.SportsCar" + cr);
        sb.append("org.eclipse.persistence.testing.models.vehicle.CarOwner" + cr);
        sb.append("org.eclipse.persistence.testing.tests.queries.TestClass1" + cr);
        sb.append("org.eclipse.persistence.testing.tests.queries.options.QueryOptionHistory" + cr);
        sb.append("org.eclipse.persistence.testing.tests.queries.options.QueryOptionEmployee" + cr);
        sb.append("org.eclipse.persistence.testing.tests.queries.report.Brewer" + cr);
        sb.append("org.eclipse.persistence.testing.tests.queries.report.Beer" + cr);
        sb.append("org.eclipse.persistence.testing.tests.queries.report.Person" + cr);
        sb.append("org.eclipse.persistence.testing.tests.queries.report.Bar" + cr);
        sb.append("org.eclipse.persistence.testing.tests.queries.report.History" + cr);
        sb.append("org.eclipse.persistence.testing.tests.queries.report.ReportEmployee" + cr);
        return sb.toString();
    }
}
