/*
 * 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.
 */
package org.apache.openjpa.persistence.annotations;

import java.util.List;

import org.apache.openjpa.persistence.OpenJPAEntityManager;
import org.apache.openjpa.persistence.annotations.common.apps.annotApp.annotype.OrderByEntity;
import org.apache.openjpa.persistence.test.AllowFailure;

/**
 * <p>Test @OrderBy annotation support.</p>
 *
 * @author Abe White
 */
@AllowFailure(message="excluded")
public class TestEntityOrderBy extends AnnotationTestCase
{

	public TestEntityOrderBy(String name)
	{
		super(name, "annotationcactusapp");
	}

//    private ClassMetaData _meta;

    @Override
    public void setUp()
    {
//        _meta = ((OpenJPAConfiguration) getConfiguration()).
//            getMetaDataRepositoryInstance().getMetaData(OrderByEntity.class,
//            null, true);
    }

 /*   public void testEmptyOrderBy() {
        String dec = Order.ELEMENT + " asc";
        assertEquals(dec, _meta.getField("strings").getOrderDeclaration());
        assertEquals(dec, _meta.getField("pkRels").getOrderDeclaration());
    }

    public void testSpecifiedOrderBy() {
        assertEquals("string desc", _meta.getField("stringRels").
            getOrderDeclaration());
    }
*/
    public void testUse() {
        // note: functionality thoroughly tested in kodo.meta.TestOrderBy;
        // this is just a sanity check on JPA use
        deleteAll(OrderByEntity.class);

        OrderByEntity pc = new OrderByEntity();
        pc.setId(1L);
        pc.getStrings().add("2");
        pc.getStrings().add("1");
        pc.getStrings().add("3");

        OrderByEntity rel1 = new OrderByEntity();
        rel1.setId(102L);
        rel1.setString("2");
        OrderByEntity rel2 = new OrderByEntity();
        rel2.setId(101L);
        rel2.setString("1");
        OrderByEntity rel3 = new OrderByEntity();
        rel3.setId(103L);
        rel3.setString("3");
        pc.getPKRels().add(rel1);
        pc.getPKRels().add(rel2);
        pc.getPKRels().add(rel3);
        pc.getStringRels().add(rel1);
        pc.getStringRels().add(rel2);
        pc.getStringRels().add(rel3);

        OpenJPAEntityManager em = (OpenJPAEntityManager) currentEntityManager();
        startTx(em);
        em.persistAll(pc, rel1, rel2, rel3);
        endTx(em);
        endEm(em);

        em = (OpenJPAEntityManager) currentEntityManager();
        pc = em.find(OrderByEntity.class, 1L);
        List<String> strings = pc.getStrings();
        assertEquals("1", strings.get(0));
        assertEquals("2", strings.get(1));
        assertEquals("3", strings.get(2));

        List<OrderByEntity> pkRels = pc.getPKRels();
        assertEquals(101L, pkRels.get(0).getId());
        assertEquals(102L, pkRels.get(1).getId());
        assertEquals(103L, pkRels.get(2).getId());

        List<OrderByEntity> stringRels = pc.getStringRels();
        assertEquals("3", stringRels.get(0).getString());
        assertEquals("2", stringRels.get(1).getString());
        assertEquals("1", stringRels.get(2).getString());
        endEm(em);
    }
}
