Example #1
0
 def test_no_agrs(self):
     ''' Retorna normalmente quando não há agregações. '''
     repo = StubHadoopRepository()
     cats = [
         'cd_indicador', 'nu_competencia', 'vl_indicador', 'lat_mun',
         'long_mun'
     ]
     valor = ['vl_indicador']
     agregacao = None
     joined = 'municipio'
     result = repo.build_joined_categorias(cats, valor, agregacao, joined)
     self.assertEqual(
         result, 'cd_indicador, nu_competencia, vl_indicador, lat, long')
Example #2
0
 def test_no_agrs(self):
     ''' Retorna normalmente quando não há agregações. '''
     repo = StubHadoopRepository()
     cats = ['cd_indicador', 'nu_competencia', 'vl_indicador']
     options = {
         "categorias": cats,
         "valor": ['vl_indicador'],
         "agregacao": None
     }
     result = repo.build_categorias(cats, options)
     self.assertEqual(
         result,
         ' cd_indicador, nu_competencia, vl_indicador, vl_indicador')
Example #3
0
 def test_in_clause(self):
     ''' Retorna cláusula where de consulta com cláusula IN. '''
     repo = StubHadoopRepository()
     whrs = [
         'eq-nu_competencia-2010', 'and',
         'in-cd_indicador-01_02_03_04-01_02_03_05-01_02_03_06'
     ]
     is_on = False
     joined = None
     result = repo.build_filter_string(whrs, joined, is_on)
     self.assertEqual(
         result, ('nu_competencia = 2010 and cd_indicador IN (01_02_03_04,'
                  '01_02_03_05,01_02_03_06)'))
 def test_full(self):
     ''' Retorna normalmente quando não há agregações. '''
     repo = StubHadoopRepository()
     cats = ['cd_indicador', 'nu_competencia', 'vl_indicador']
     options = {
         "categorias": cats,
         "valor": ['vl_indicador'],
         "agregacao": ['sum', 'pct_sum']
     }
     expected = (' cd_indicador, nu_competencia, vl_indicador, '
                 'sum(vl_indicador) AS agr_sum_vl_indicador, '
                 'SUM(vl_indicador) * 100 / SUM(vl_indicador) OVER() AS '
                 'agr_pct_sum_vl_indicador')
     result = repo.build_categorias(cats, options)
     self.assertEqual(result, expected)
 def test_no_valor(self):
     ''' Retorna normalmente quando não há valor. '''
     repo = StubHadoopRepository()
     cats = [
         'cd_indicador', 'nu_competencia', 'vl_indicador', 'lat_mun',
         'long_mun'
     ]
     valor = None
     agregacao = ['sum']
     joined = 'municipio'
     result = repo.build_joined_categorias(cats, valor, agregacao, joined)
     self.assertEqual(
         result,
         ('cd_indicador, nu_competencia, vl_indicador, lat, long, sum(*) '
          'AS agr_sum'))
Example #6
0
 def test_sz_criteria(self):
     """ Tests string size comparison criteria """
     w_clause = ['ltsz', 'column', 'value']
     self.assertEqual(
         StubHadoopRepository.build_complex_criteria(
             w_clause, self.SIMPLE_OPERATORS),
         "LENGTH(CAST(column AS STRING)) < value")
 def test_full_join(self):
     ''' Retorna normalmente. '''
     repo = StubHadoopRepository()
     cats = [
         'cd_indicador', 'nu_competencia', 'vl_indicador', 'lat_mun',
         'long_mun'
     ]
     valor = ['vl_indicador']
     agregacao = ['sum', 'pct_sum']
     joined = 'municipio'
     expected = ('cd_indicador, nu_competencia, vl_indicador, lat, long, '
                 'sum(vl_indicador) AS agr_sum_vl_indicador, '
                 'SUM(vl_indicador) * 100 / SUM(vl_indicador) OVER() AS '
                 'agr_pct_sum_vl_indicador')
     result = repo.build_joined_categorias(cats, valor, agregacao, joined)
     self.assertEqual(result, expected)
 def test_invalid_agregation(self):
     ''' Lança erro ao tentar agrupar sem join. '''
     repo = StubHadoopRepository()
     cats = ['nm_indicador', 'vl_indicador']
     agrs = None
     joined = 'municipio'
     self.assertRaises(ValueError, repo.build_joined_grouping_string, cats,
                       agrs, joined)
 def test_invalid_cats(self):
     ''' Lança erro ao tentar agrupar sem categoria. '''
     repo = StubHadoopRepository()
     cats = None
     agrs = None
     joined = 'municipio'
     self.assertRaises(ValueError, repo.build_joined_grouping_string, cats,
                       agrs, joined)
Example #10
0
 def test_on_criteria(self):
     """ Tests only_numbers criteria """
     w_clause = ['eqon', 'column', 'value']
     self.assertEqual(
         StubHadoopRepository.build_complex_criteria(
             w_clause, self.SIMPLE_OPERATORS),
         "regexp_replace(CAST(column AS STRING), '[^[:digit:]]','') = 'value'"
     )
Example #11
0
 def test_lponstr_criteria(self):
     """ Tests only_numbers_against_string criteria with left padding """
     w_clause = ['nelponstr', 'column', 'value']
     self.assertEqual(
         StubHadoopRepository.build_complex_criteria(
             w_clause, self.SIMPLE_OPERATORS),
         "regexp_replace(CAST(column AS STRING), '[^[:digit:]]','') != 'value'"
     )
Example #12
0
 def test_on_criteria_substring(self):
     """ Tests only_numbers criteria with substring """
     w_clause = ['eqon', 'column', 'value', 'slice_start', 'slice_end']
     self.assertEqual(
         StubHadoopRepository.build_complex_criteria(
             w_clause, self.SIMPLE_OPERATORS),
         "substring(regexp_replace(CAST(column AS STRING), "
         "'[^[:digit:]]',''), slice_start, slice_end) = 'value'")
 def test_empty_cats(self):
     ''' Lança exceção quando há categorias vazias. '''
     repo = StubHadoopRepository()
     cats = []
     valor = ['vl_indicador']
     agregacao = ['sum']
     joined = 'municipio'
     self.assertRaises(ValueError, repo.build_joined_categorias, cats,
                       valor, agregacao, joined)
 def test_no_join(self):
     ''' Retorna normalmente quando não há join. '''
     repo = StubHadoopRepository()
     cats = ['cd_indicador', 'nu_competencia', 'vl_indicador']
     valor = ['vl_indicador']
     agregacao = ['sum', 'pct_sum']
     joined = None
     self.assertRaises(KeyError, repo.build_joined_categorias, cats, valor,
                       agregacao, joined)
 def test_invalid(self):
     ''' Lança exceção quando um campo é inválido. '''
     repo = StubHadoopRepository()
     cats = ['cd_indicador;', 'nu_competencia', 'vl_indicador']
     valor = ['vl_indicador']
     agregacao = ['sum', 'pct_sum']
     joined = 'municipio'
     self.assertRaises(ValueError, repo.build_joined_categorias, cats,
                       valor, agregacao, joined)
 def test_no_cats(self):
     ''' Lança exceção se não houver categoria nos parâmetros '''
     repo = StubHadoopRepository()
     options = {
         "valor": ['vl_indicador'],
         "agregacao": ['sum'],
         "ordenacao": ['-vl_indicador'],
         "where": ['eq-nu_competencia-2010']
     }
     self.assertRaises(KeyError, repo.find_dataset, options)
 def test_std_calc_invalid_calc(self):
     ''' Testa se lança exceção quando envia um tipo de cálculo não previsto '''
     options = {
         "valor": "vl_indicador",
         "calcs": ["sum"],
         "categorias": ["cd_mun_ibge", "nu_ano"],
         "partition": "nu_ano"
     }
     repo = StubHadoopRepository()
     self.assertRaises(KeyError, repo.build_std_calcs, options)
Example #18
0
 def test_str_criteria(self):
     """ Tests substrings comparison criteria """
     w_clause = [
         'lestr', 'column', "'quoted_value'", 'slice_start', 'slice_end'
     ]
     self.assertEqual(
         StubHadoopRepository.build_complex_criteria(
             w_clause, self.SIMPLE_OPERATORS),
         "substring(CAST(column AS STRING), slice_start, slice_end) <= 'quoted_value'"
     )
 def test_empty_cats(self):
     ''' Lança exceção quando há categorias vazias. '''
     repo = StubHadoopRepository()
     cats = []
     options = {
         "categorias": cats,
         "valor": ['vl_indicador'],
         "agregacao": ['sum']
     }
     self.assertRaises(ValueError, repo.build_categorias, cats, options)
 def test_invalid(self):
     ''' Lança exceção quando um campo é inválido. '''
     repo = StubHadoopRepository()
     cats = ['cd_indicador;', 'nu_competencia', 'vl_indicador']
     options = {
         "categorias": cats,
         "valor": ['vl_indicador'],
         "agregacao": ['sum', 'pct_sum']
     }
     self.assertRaises(ValueError, repo.build_categorias, cats, options)
 def test_full_query(self):
     ''' Verifica correta formação da query '''
     repo = StubHadoopRepository()
     options = {
         "categorias": ['nm_indicador', 'nu_competencia', 'vl_indicador'],
         "valor": ['vl_indicador'],
         "agregacao": ['sum'],
         "ordenacao": ['-nm_indicador'],
         "where": ['eq-nu_competencia-2010'],
         "pivot": None,
         "limit": None,
         "offset": None,
         "calcs": None
     }
     result = repo.find_dataset(options)
     self.assertEqual(
         result,
         ('SELECT  nm_indicador, nu_competencia, vl_indicador, '
          'sum(vl_indicador) AS agr_sum_vl_indicador FROM indicadores  '
          'WHERE nu_competencia = 2010 GROUP BY nm_indicador, '
          'nu_competencia, vl_indicador ORDER BY nm_indicador DESC  '))
Example #22
0
 def test_lpint_criteria(self):
     """ Tests integer with left padding comparison criteria """
     w_clause = [
         'gtlpint', 'column', 'value', 'string_size', 'padding_char',
         'slice_start', 'slice_end'
     ]
     self.assertEqual(
         StubHadoopRepository.build_complex_criteria(
             w_clause, self.SIMPLE_OPERATORS),
         "CAST(substring(LPAD(CAST(column AS VARCHAR(string_size)), "
         "string_size, 'padding_char'), slice_start, slice_end) AS INTEGER) > value"
     )
 def test_sql_injection_rejection(self):
     ''' Lança exceção se houver categorias com palavra bloqueada '''
     repo = StubHadoopRepository()
     options = {
         "categorias":
         ['nm_indicador;select', 'nu_competencia', 'vl_indicador'],
         "valor": ['vl_indicador'],
         "agregacao": ['sum'],
         "ordenacao": ['-vl_indicador'],
         "where": ['eq-nu_competencia-2010']
     }
     self.assertRaises(ValueError, repo.find_dataset, options)
Example #24
0
 def test_lponstr_criteria_substring(self):
     """ Tests only_numbers_against_string criteria with left padding """
     w_clause = [
         'nelponstr', 'column', 'value', 'string_size', 'padding_char',
         'slice_start', 'slice_end'
     ]
     self.assertEqual(
         StubHadoopRepository.build_complex_criteria(
             w_clause, self.SIMPLE_OPERATORS),
         "substring(LPAD(regexp_replace(CAST(column AS STRING), "
         "'[^[:digit:]]',''), string_size, 'padding_char'), slice_start, slice_end) "
         "!= 'value'")
Example #25
0
 def test_lpstr_criteria(self):
     """ Tests string with left padding comparison criteria """
     w_clause = [
         'gelpstr', 'column', "'quoted_value'", 'string_size',
         'padding_char', 'slice_start', 'slice_end'
     ]
     self.assertEqual(
         StubHadoopRepository.build_complex_criteria(
             w_clause, self.SIMPLE_OPERATORS),
         "substring(LPAD(CAST(column AS VARCHAR(string_size)), "
         "string_size, 'padding_char'), slice_start, slice_end) >= 'quoted_value'"
     )
 def test_empty_cats(self):
     ''' Lança exceção se houver categorias vazias '''
     repo = StubHadoopRepository()
     options = {
         "categorias": [],
         "valor": ['vl_indicador'],
         "agregacao": ['sum'],
         "ordenacao": ['-vl_indicador'],
         "where": ['eq-nu_competencia-2010'],
         "pivot": None
     }
     self.assertRaises(ValueError, repo.find_dataset, options)
 def test_invoke_complex_criteria(self):
     ''' Tests if a complex op is correctly built '''
     self.assertEqual(
         StubHadoopRepository().build_criteria(['ltsz', 'column', 'value']),
         "LENGTH(CAST(column AS STRING)) < value")
 def test_build_criteria_in_op(self):
     ''' Tests if a IN operator string is correctly built '''
     self.assertEqual(
         StubHadoopRepository().build_criteria(['in', 'field', 'a', 'b']),
         'field IN (a,b)')
 def test_build_criteria_boolean_op(self):
     ''' Tests if a boolean op string is correctly built '''
     self.assertEqual(
         StubHadoopRepository().build_criteria(['nn', 'field']),
         'field IS NOT NULL')
 def test_build_criteria_simple_op(self):
     ''' Tests if a simple op string is correctly built '''
     self.assertEqual(
         StubHadoopRepository().build_criteria(['eq', 'field', 'value']),
         'field = value')