/*
 * Licensed 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 io.prestosql.tests.teradata;

import io.prestosql.tempto.ProductTest;
import org.testng.annotations.Test;

import java.sql.Date;
import java.sql.Timestamp;
import java.time.LocalDateTime;

import static io.prestosql.tempto.assertions.QueryAssert.Row.row;
import static io.prestosql.tempto.assertions.QueryAssert.assertThat;
import static io.prestosql.tests.TestGroups.FUNCTIONS;
import static io.prestosql.tests.utils.QueryExecutors.onPresto;

public class TestTeradataFunctions
        extends ProductTest
{
    @Test(groups = FUNCTIONS)
    public void testIndex()
    {
        assertThat(onPresto().executeQuery("SELECT index('high', 'ig')")).contains(row(2));
    }

    @Test(groups = FUNCTIONS)
    public void testChar2HexInt()
    {
        assertThat(onPresto().executeQuery("SELECT char2hexint('ಠ益ಠ')")).contains(row("0CA076CA0CA0"));
    }

    @Test(groups = FUNCTIONS)
    public void testToDate()
    {
        assertThat(onPresto().executeQuery("SELECT to_date('1988/04/01', 'yyyy/mm/dd')"))
                .contains(row(Date.valueOf("1988-04-01")));
        assertThat(onPresto().executeQuery("SELECT to_date('1988/04/08', 'yyyy/mm/dd')"))
                .contains(row(Date.valueOf("1988-04-08")));
    }

    @Test(groups = FUNCTIONS)
    public void testToTimestamp()
    {
        assertThat(onPresto().executeQuery("SELECT to_timestamp('1988/04/08;02:03:04','yyyy/mm/dd;hh24:mi:ss')"))
                .contains(row(Timestamp.valueOf(LocalDateTime.of(1988, 4, 8, 2, 3, 4))));
    }

    @Test(groups = FUNCTIONS)
    public void testToChar()
    {
        assertThat(onPresto().executeQuery("SELECT to_char(TIMESTAMP '1988-04-08 14:15:16 +02:09','yyyy/mm/dd;hh24:mi:ss')"))
                .contains(row("1988/04/08;14:15:16"));
    }
}
