public void SeGerarScriptQueVerificaExistenciaNaQueryFakeSemDicionarioDeveGerarScriptCorretamente()
        {
            var builder = new QueryFakeBuilder();

            builder.DefinirTabela("Tabela");

            builder.GerarScriptExistencia(null)
            .Should()
            .Be("select top 1 1 from[Tabela]");

            builder.DefinirLimite(15);

            builder.GerarScriptExistencia(null)
            .Should()
            .Be("select top 1 1 from[Tabela]");

            builder.DefinirLimite(20);
            builder.AdicionarRelacionamento("inner join Relacionamento on Tabela.campo = Relacionamento.campo");
            builder.AdicionarRelacionamento("left join Parente on Tabela.Relacao = Parente.Relacao");

            builder.GerarScriptExistencia(null)
            .Should()
            .Be("select top 1 1 from[Tabela]" +
                "inner join Relacionamento on Tabela.campo = Relacionamento.campo " +
                "left join Parente on Tabela.Relacao = Parente.Relacao ");

            builder.DefinirLimite(25);
            builder.AdicionarCondicao("campoA", (int)Operadores.Igual, 1);
            builder.AdicionarCondicao("campoB", (int)Operadores.Igual, 2);

            builder.GerarScriptExistencia(null)
            .Should()
            .Be("select top 1 1 from[Tabela]" +
                "inner join Relacionamento on Tabela.campo = Relacionamento.campo " +
                "left join Parente on Tabela.Relacao = Parente.Relacao " +
                "where([campoA]=@_p0)and([campoB]=@_p1) ");

            builder.DefinirLimite(30);
            builder.AdicionarAgrupamento("Tabela.CampoX");
            builder.AdicionarAgrupamento("Tabela.CampoY");
            builder.AdicionarAgrupamento("Tabela.CampoZ");

            builder.GerarScriptExistencia(null)
            .Should()
            .Be("select top 1 1 from[Tabela]" +
                "inner join Relacionamento on Tabela.campo = Relacionamento.campo " +
                "left join Parente on Tabela.Relacao = Parente.Relacao " +
                "where([campoA]=@_p0)and([campoB]=@_p1) " +
                "group by Tabela.CampoX,Tabela.CampoY,Tabela.CampoZ ");

            builder.DefinirLimite(35);
            builder.AdicionarCondicaoAgrupamento("Count(*)>0");
            builder.AdicionarCondicaoAgrupamento("Max(Tabela.Quantidade)>1000");

            builder.GerarScriptExistencia(null)
            .Should()
            .Be("select top 1 1 from[Tabela]" +
                "inner join Relacionamento on Tabela.campo = Relacionamento.campo " +
                "left join Parente on Tabela.Relacao = Parente.Relacao " +
                "where([campoA]=@_p0)and([campoB]=@_p1) " +
                "group by Tabela.CampoX,Tabela.CampoY,Tabela.CampoZ " +
                "having(Count(*)>0)and(Max(Tabela.Quantidade)>1000) ");

            builder.AdicionarOrdemDescendente("Tabela.OrdemB");
            builder.AdicionarOrdem("Tabela.OrdemA");

            builder.GerarScriptExistencia(null)
            .Should()
            .Be("select top 1 1 from[Tabela]" +
                "inner join Relacionamento on Tabela.campo = Relacionamento.campo " +
                "left join Parente on Tabela.Relacao = Parente.Relacao " +
                "where([campoA]=@_p0)and([campoB]=@_p1) " +
                "group by Tabela.CampoX,Tabela.CampoY,Tabela.CampoZ " +
                "having(Count(*)>0)and(Max(Tabela.Quantidade)>1000) " +
                "order by Tabela.OrdemB DESC,Tabela.OrdemA ");
        }
        public void SeAdicionarCondicaoNaQueryFakeAVariavelDeveSerDefinidaCorretamente()
        {
            var builder = new QueryFakeBuilder();

            builder.Wheres
            .Should()
            .NotBeNull();

            builder.Wheres
            .Should()
            .HaveCount(0);

            builder.ProximoParametro
            .Should()
            .Be(0);

            builder.AdicionarCondicao("campoQueDeveSerValidado", (int)Operadores.Igual, 1);
            builder.AdicionarCondicao("campoQueDeveSerValidado", (int)Operadores.Igual, null);
            builder.AdicionarCondicao("campoQueDeveSerValidado", (int)Operadores.Igual, DBNull.Value);

            builder.AdicionarCondicao("campoQueDeveSerValidado", (int)Operadores.Diferente, 1);
            builder.AdicionarCondicao("campoQueDeveSerValidado", (int)Operadores.Maior, 1);
            builder.AdicionarCondicao("campoQueDeveSerValidado", (int)Operadores.MaiorOuIgual, 1);
            builder.AdicionarCondicao("campoQueDeveSerValidado", (int)Operadores.Menor, 1);
            builder.AdicionarCondicao("campoQueDeveSerValidado", (int)Operadores.MenorOuIgual, 1);

            builder.AdicionarCondicao("campoQueDeveSerValidado", (int)OperadoresTexto.Contendo, 1);
            builder.AdicionarCondicao("campoQueDeveSerValidado", (int)OperadoresTexto.NaoContendo, 1);

            builder.AdicionarCondicao("campoQueDeveSerValidado", (int)OperadoresEspeciais.Is, 1);
            builder.AdicionarCondicao("campoQueDeveSerValidado", (int)OperadoresEspeciais.IsNot, 1);
            builder.AdicionarCondicao("campoQueDeveSerValidado", (int)OperadoresEspeciais.In, 1);
            builder.AdicionarCondicao("campoQueDeveSerValidado", (int)OperadoresEspeciais.NotIn, 1);

            builder.Wheres
            .Should()
            .HaveCount(14);

            builder.Wheres[0].Should().Be("([campoQueDeveSerValidado]=@_p0)");
            builder.Wheres[1].Should().Be("([campoQueDeveSerValidado]IS NULL)");
            builder.Wheres[2].Should().Be("([campoQueDeveSerValidado]IS NULL)");
            builder.Wheres[3].Should().Be("([campoQueDeveSerValidado]<>@_p3)");
            builder.Wheres[4].Should().Be("([campoQueDeveSerValidado]>@_p4)");
            builder.Wheres[5].Should().Be("([campoQueDeveSerValidado]>=@_p5)");
            builder.Wheres[6].Should().Be("([campoQueDeveSerValidado]<@_p6)");
            builder.Wheres[7].Should().Be("([campoQueDeveSerValidado]<=@_p7)");
            builder.Wheres[8].Should().Be("([campoQueDeveSerValidado]like@_p8)");
            builder.Wheres[9].Should().Be("([campoQueDeveSerValidado]not like@_p9)");
            builder.Wheres[10].Should().Be("([campoQueDeveSerValidado]is@_p10)");
            builder.Wheres[11].Should().Be("([campoQueDeveSerValidado]is not@_p11)");
            builder.Wheres[12].Should().Be("([campoQueDeveSerValidado]in@_p12)");
            builder.Wheres[13].Should().Be("([campoQueDeveSerValidado]not in@_p13)");

            builder.ProximoParametro
            .Should()
            .Be(14);
        }