﻿/*
* 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.
*/

using Microsoft.VisualStudio.TestTools.UnitTesting;
using PortCMIS.Binding;
using PortCMIS.Client;
using PortCMIS.Client.Impl;
using System;
using System.Collections.Generic;

namespace PortCMISTests
{
    [TestClass]
    public class QueryStatementTest
    {
        [TestMethod]
        public void TestStaticQueries()
        {
            Session session = new Session(new Dictionary<string, string>(), null, null, null);
            String query;
            IQueryStatement st;

            query = "SELECT cmis:name FROM cmis:folder";
            st = new QueryStatement(session, query);
            Assert.AreEqual(query, st.ToQueryString());

            query = "SELECT * FROM cmis:document WHERE cmis:createdBy = \'admin\' AND abc:int = 42";
            st = new QueryStatement(session, query);
            Assert.AreEqual(query, st.ToQueryString());

            query = "SELECT * FROM cmis:document WHERE abc:test = 'x?z'";
            st = new QueryStatement(session, query);
            st.SetString(1, "y");
            Assert.AreEqual(query, st.ToQueryString());
        }

        [TestMethod]
        public void TestWherePlacholder()
        {
            Session session = new Session(new Dictionary<string, string>(), null, null, null);
            String query;
            IQueryStatement st;

            // strings
            query = "SELECT * FROM cmis:document WHERE abc:string = ?";
            st = new QueryStatement(session, query);
            st.SetString(1, "test");
            Assert.AreEqual("SELECT * FROM cmis:document WHERE abc:string = 'test'", st.ToQueryString());

            query = "SELECT * FROM cmis:document WHERE abc:string = ?";
            st = new QueryStatement(session, query);
            st.SetString(1, "te'st");
            Assert.AreEqual("SELECT * FROM cmis:document WHERE abc:string = 'te\\'st'", st.ToQueryString());

            // likes
            query = "SELECT * FROM cmis:document WHERE abc:string LIKE ?";
            st = new QueryStatement(session, query);
            st.SetStringLike(1, "%test%");
            Assert.AreEqual("SELECT * FROM cmis:document WHERE abc:string LIKE '%test%'", st.ToQueryString());

            query = "SELECT * FROM cmis:document WHERE abc:string LIKE ?";
            st = new QueryStatement(session, query);
            st.SetStringLike(1, "\\_test\\%blah\\\\blah");
            Assert.AreEqual("SELECT * FROM cmis:document WHERE abc:string LIKE '\\_test\\%blah\\\\\\\\blah'",
                    st.ToQueryString());

            // contains

            // *, ? and - are treated as text search operators: 1st level escaping:
            // none, 2nd level escaping: none
            // \*, \? and \- are used as literals, 1st level escaping: none, 2nd
            // level escaping: \\*, \\?, \\-
            // ' and " are used as literals, 1st level escaping: \', \", 2nd level
            // escaping: \\\', \\\",
            // \ plus any other character, 1st level escaping \\ plus character, 2nd
            // level: \\\\ plus character

            query = "SELECT * FROM cmis:document WHERE CONTAINS(?)";
            st = new QueryStatement(session, query);
            st.SetStringContains(1, "John's");
            Assert.AreEqual("SELECT * FROM cmis:document WHERE CONTAINS('John\\\\\\'s')", st.ToQueryString());
            st.SetStringContains(1, "foo -bar");
            Assert.AreEqual("SELECT * FROM cmis:document WHERE CONTAINS('foo -bar')", st.ToQueryString());
            st.SetStringContains(1, "foo*");
            Assert.AreEqual("SELECT * FROM cmis:document WHERE CONTAINS('foo*')", st.ToQueryString());
            st.SetStringContains(1, "foo?");
            Assert.AreEqual("SELECT * FROM cmis:document WHERE CONTAINS('foo?')", st.ToQueryString());
            st.SetStringContains(1, "foo\\-bar");
            Assert.AreEqual("SELECT * FROM cmis:document WHERE CONTAINS('foo\\\\-bar')", st.ToQueryString());
            st.SetStringContains(1, "foo\\*");
            Assert.AreEqual("SELECT * FROM cmis:document WHERE CONTAINS('foo\\\\*')", st.ToQueryString());
            st.SetStringContains(1, "foo\\?");
            Assert.AreEqual("SELECT * FROM cmis:document WHERE CONTAINS('foo\\\\?')", st.ToQueryString());
            st.SetStringContains(1, "\"Cool\"");
            Assert.AreEqual("SELECT * FROM cmis:document WHERE CONTAINS('\\\\\\\"Cool\\\\\\\"')", st.ToQueryString());
            st.SetStringContains(1, "c:\\MyDcuments");
            Assert.AreEqual("SELECT * FROM cmis:document WHERE CONTAINS('c:\\\\MyDcuments')", st.ToQueryString());

            // ids
            query = "SELECT * FROM cmis:document WHERE abc:id = ?";
            st = new QueryStatement(session, query);
            st.SetId(1, new ObjectId("123"));
            Assert.AreEqual("SELECT * FROM cmis:document WHERE abc:id = '123'", st.ToQueryString());

            // booleans
            query = "SELECT * FROM cmis:document WHERE abc:bool = ?";
            st = new QueryStatement(session, query);
            st.SetBoolean(1, true);
            Assert.AreEqual("SELECT * FROM cmis:document WHERE abc:bool = TRUE", st.ToQueryString());

            // numbers
            query = "SELECT * FROM cmis:document WHERE abc:int = ? AND abc:int2 = 123";
            st = new QueryStatement(session, query);
            st.SetInteger(1, 42);
            Assert.AreEqual("SELECT * FROM cmis:document WHERE abc:int = 42 AND abc:int2 = 123", st.ToQueryString());

            // dateTime
            query = "SELECT * FROM cmis:document WHERE abc:dateTime = TIMESTAMP ?";
            DateTime cal = new DateTime(2012, 2, 2, 3, 4, 5, DateTimeKind.Utc);

            st = new QueryStatement(session, query);
            st.SetDateTime(1, cal);
            Assert.AreEqual("SELECT * FROM cmis:document WHERE abc:dateTime = TIMESTAMP '2012-02-02T03:04:05.000Z'",
                    st.ToQueryString());

            st = new QueryStatement(session, query);
            st.SetDateTime(1, DateTimeHelper.ConvertDateTimeToMillis(cal));
            Assert.AreEqual("SELECT * FROM cmis:document WHERE abc:dateTime = TIMESTAMP '2012-02-02T03:04:05.000Z'",
                    st.ToQueryString());

            // dateTime Timestamp
            query = "SELECT * FROM cmis:document WHERE abc:dateTime = ?";

            st = new QueryStatement(session, query);
            st.SetDateTimeTimestamp(1, cal);
            Assert.AreEqual("SELECT * FROM cmis:document WHERE abc:dateTime = TIMESTAMP '2012-02-02T03:04:05.000Z'",
                    st.ToQueryString());

            st = new QueryStatement(session, query);
            st.SetDateTimeTimestamp(1, DateTimeHelper.ConvertDateTimeToMillis(cal));
            Assert.AreEqual("SELECT * FROM cmis:document WHERE abc:dateTime = TIMESTAMP '2012-02-02T03:04:05.000Z'",
                    st.ToQueryString());

            query = "SELECT * FROM cmis:document WHERE abc:dateTime IN (?)";

            st = new QueryStatement(session, query);
            st.SetDateTimeTimestamp(1, cal, cal);
            Assert.AreEqual("SELECT * FROM cmis:document WHERE abc:dateTime "
                    + "IN (TIMESTAMP '2012-02-02T03:04:05.000Z',TIMESTAMP '2012-02-02T03:04:05.000Z')", st.ToQueryString());
        }

    }
}
