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

            builder.GroupBys
            .Should()
            .NotBeNull();

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

            builder.AdicionarAgrupamento("campoQueDeveSerAgrupado");

            builder.GroupBys
            .Should()
            .HaveCount(1);

            builder.GroupBys[0]
            .Should()
            .Be("campoQueDeveSerAgrupado");
        }
        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 ");
        }