def testa_novos_valores():
    id_poltrona = "A-00000001"
    poltrona_antiga = poltrona.busca_por_identificador(id_poltrona)
    assert poltrona_antiga is not None, "Poltrona A-00000001 não encontrada no banco"

    # Valores antigos
    atributos_antigos = poltrona.obtem_atributos(poltrona_antiga)

    # Novos valores
    nova_oferta = "off"
    novo_preco = "88.00"
    args = {'id_poltrona': id_poltrona,
     'id_trecho': atributos_antigos['id_trecho'], 
     'id_compra': atributos_antigos['id_compra'], 
     'numero': atributos_antigos['numero'], 
     'oferta': nova_oferta, 
     'preco': novo_preco}
    
    testa("ValoresAlterados", ses, args)

    # Valores atualizados
    poltrona_atualizada = poltrona.busca_por_identificador(id_poltrona)
    atributos_atualizados = poltrona.obtem_atributos(poltrona_atualizada)
    
    assert atributos_atualizados['oferta'] == False, "Oferta não atualizada"
    assert atributos_atualizados['preco'] == float(novo_preco), "Preco não atualizado"
Example #2
0
def gera(pol, id_compra, ver, excluir):

    # Atributos da poltrona:
    id_pol = poltrona.obtem_identificador(pol)
    atrs_pol = poltrona.obtem_atributos(pol)
    assert atrs_pol['id_compra'] == id_compra

    preco_pol = atrs_pol['preco']
    numero_pol = atrs_pol['numero']

    # Atributos do trecho da poltrona
    id_trecho = atrs_pol['id_trecho']
    trc = trecho.busca_por_identificador(id_trecho)
    atrs_trc = trecho.obtem_atributos(trc)
    origem_trc = atrs_trc['origem']
    dt_partida_trc = atrs_trc['dia_partida'] + ' ' + atrs_trc['hora_partida']
    destino_trc = atrs_trc['destino']
    dt_chegada_trc = atrs_trc['dia_chegada'] + ' ' + atrs_trc['hora_chegada']

    # Campos da linha para {html_table.gera}:
    ht_trecho = html_span.gera(None, id_trecho)
    ht_origem = html_span.gera(None, origem_trc)
    ht_dt_partida = html_span.gera(None, dt_partida_trc)
    ht_destino = html_span.gera(None, destino_trc)
    ht_dt_chegada = html_span.gera(None, dt_chegada_trc)

    ht_numero = html_span.gera(None, numero_pol)
    ht_preco = html_span.gera(None, preco_pol)

    linha = [ \
      ht_trecho, ht_origem, ht_dt_partida, ht_destino, ht_dt_chegada,
      ht_numero, ht_preco
    ]
    ver = True  # Por enquanto.
    if ver:
        args_ver = {'id_poltrona': id_pol}
        ht_ver = html_botao_simples.gera("Ver", 'ver_poltrona', args_ver,
                                         '#60a3bc')
        linha.append(ht_ver)
        linha.append("</form>")

    if excluir:
        args_excluir = {'id_poltrona': id_pol, 'id_compra': id_compra}
        ht_excluir = html_botao_simples.gera("Excluir", 'excluir_poltrona',
                                             args_excluir, '#ff4422')
        linha.append(ht_excluir)

    return linha
def processa(ses, args):

  # Determina se usuario é administrador
  assert sessao.eh_administrador(ses)
  
  # Obtem a poltrona: 
  id_poltrona = args['id_poltrona']
  assert id_poltrona != None # Paranóia (o formulário deve incluir).
  del args['id_poltrona']
  pol = poltrona.busca_por_identificador(id_poltrona)
  assert pol != None # Paranóia.
  pol_atrs = poltrona.obtem_atributos(pol)
  
  id_trecho = args['id_trecho']
  assert id_trecho == pol_atrs['id_trecho'] # Deve ser readonly no form.
  
  id_compra = args['id_compra']
  assert id_compra == pol_atrs['id_compra'] # Deve ser readonly no form.

  numero = args['numero']
  assert numero == pol_atrs['numero'] # Deve ser readonly no form.
 
  # Monta dicionário com alterações:
  atrs_a_mudar = {}.copy()
  
  oferta = args['oferta'] if 'oferta' in args else None  # Alterável.
  if oferta != None and type(oferta) is str: oferta = (oferta == "on")
  if oferta != None: atrs_a_mudar['oferta'] = oferta
  
  preco = args['preco'] if 'preco' in args else None  # Alterável.
  if preco != None and type(preco) is str: preco = float(preco)
  if preco != None: atrs_a_mudar['preco'] = preco

  # Editar poltrona
  try:
    poltrona.muda_atributos(pol, atrs_a_mudar)
    # Mostra poltrona com dados alterados:
    pag = html_pag_poltrona.gera(ses, pol, None, None)

  except ErroAtrib as ex:
    # Mostra novamente a poltrona com mesmos args e mens de erro:
    erros = ex[0]
    pag = html_pag_poltrona.gera(ses, pol, args, erros)
  
  return pag
def testa_valores_criticos_invalidos():
    id1 = "A-00000001"
    ptr1 = poltrona.busca_por_identificador(id1)
    assert ptr1 is not None, "Poltrona A-00000001 não encontrada no banco"

    # Valores antigos
    atributos_antigos = poltrona.obtem_atributos(ptr1)

    ptr2 = poltrona.busca_por_identificador("A-00000002")
    assert ptr2 is not None, "Poltrona A-00000002 não encontrada no banco"

    # Argumentos com id de trecho E número sendo usado por outra poltrona (A-00000002)
    args_mesmo_trecho = {'id_poltrona': id1,
     'id_trecho': poltrona.obtem_atributo(ptr2, 'id_trecho'), 
     'id_compra': atributos_antigos['id_compra'], 
     'numero': poltrona.obtem_atributo(ptr2, 'numero'), 
     'oferta': 'on' if atributos_antigos['oferta'] else 'off', 
     'preco': atributos_antigos['preco']}
    
    testa("MesmoTrechoENumero", ses, args_mesmo_trecho)
Example #5
0
def gera(ses, pol, atrs, erros):
    # Obtem dados da sessão e seu usuário:
    usr_ses = None if ses == None else sessao.obtem_usuario(ses)
    admin = sessao.eh_administrador(ses)
    carr = None if (ses == None) or admin else sessao.obtem_carrinho(ses)

    # Obtem dados correntes da poltrona:
    assert pol != None, "poltrona deve ser especificada"
    assert type(pol) is poltrona.Objeto_Poltrona
    id_pol = poltrona.obtem_identificador(pol)
    assert id_pol != None  # Paranóia.

    # Completa {atrs} com atributos correntes de {pol}:
    if atrs == None: atrs = {}.copy()  # Por via das dúvidas.
    atrs_pol = poltrona.obtem_atributos(pol)
    assert atrs_pol != None  # Paranóia
    for ch, val in atrs_pol.items():
        if not ch in atrs: atrs[ch] = val

    # Obtem compra {cpr} da poltrona, se houver:
    id_cpr = poltrona.obtem_atributo(pol, 'id_compra')
    cpr = None if id_cpr == None else compra.busca_por_identificador(id_cpr)
    cpr_aberta = False if cpr == None else compra.obtem_status(
        cpr) == 'comprando'
    usr_cpr = None if cpr == None else compra.obtem_cliente(cpr)

    # Obtem trecho {trc} da poltrona:
    id_trc = poltrona.obtem_atributo(pol, 'id_trecho')
    assert id_trc != None  # Paranóia.
    trc = trecho.busca_por_identificador(id_trc)
    assert trc != None  # Paranóia.
    encerrado = trecho.obtem_atributo(trc, 'encerrado')

    # Gera botões da página:
    ht_submit = ""
    # Tem botão "Alterar" para alterar dados?
    if admin:
        ht_submit += html_botao_submit.gera("Alterar", "alterar_poltrona",
                                            None, "#ff0000")

    # Tem botão "Excluir" para excluir a poltrona de {cpr}?
    if poltrona.pode_excluir(usr_ses, pol):
        ht_submit += html_botao_simples.gera("Excluir", "excluir_poltrona",
                                             {'id_poltrona': id_pol},
                                             "#ff4400")

    # Tem botão "Comprar" para comprar a poltrona?
    if poltrona.pode_comprar(usr_ses, pol, carr):
        ht_submit += html_botao_simples.gera("Comprar", "comprar_poltrona",
                                             {'id_poltrona': id_pol},
                                             "#ff4400")

    # Tem botão "Trocar" para trocar a poltrona?
    if poltrona.pode_trocar(usr_ses, pol):
        ht_submit += html_botao_simples.gera("Trocar", "trocar_poltrona",
                                             {'id_poltrona': id_pol},
                                             "#ff4400")

    # Botão de cancelar alteração:
    if admin:
        ht_submit += html_botao_simples.gera("Cancelar", "principal", None,
                                             "#00ff00")

    ht_conteudo = html_form_dados_de_poltrona.gera(id_pol, atrs, admin,
                                                   ht_submit)
    pag = html_pag_generica.gera(ses, ht_conteudo, erros)
    return pag
    rot = "%d" % (ind + pols_next)
    id = "A-%08d" % (ind + pols_next)
    pol[ind] = testa_cria_poltrona(rot, id, atrs)
    id_pol[ind] = id

# ----------------------------------------------------------------------
sys.stderr.write("testando {poltrona.muda_atributos}:\n")

pol1 = pol[0]
pol1_id = id_pol[0]
pol1_mods = {
    'numero': "45",
    'id_compra': "C-00000005",
}
poltrona.muda_atributos(pol[0], pol1_mods)
pol1_atrs_m = poltrona.obtem_atributos(pol1)
for k, v in pol1_mods.items():
    pol1_atrs_m[k] = v
verifica_poltrona("pol1_m", pol1, pol1_id, pol1_atrs_m)

# ----------------------------------------------------------------------
sys.stderr.write("testando {poltrona.cria_conjunto}:\n")

trc = trecho.busca_por_identificador('T-00000001')

poltronas = poltrona.cria_conjunto(
    trc, "001, 05, 5B, 7-10, 12A-15D: 90.50; 04K-6M: 130.00")
print(str(poltronas))

# ----------------------------------------------------------------------
sys.stderr.write("testando {poltrona.resume_numeros_e_precos}:\n")
cpr1 = compra.busca_por_identificador(cpr1_id)
assert cpr1 != None
cpr1_atrs = compra.obtem_atributos(cpr1)
compra.verifica(cpr1, cpr1_id, cpr1_atrs)

assert cpr1 == tabelas.id_para_objeto(cpr1_id)

sys.stderr.write("\n")

# ----------------------------------------------------------------------
sys.stderr.write("verificando tabela \"poltronas\" ptr = %s\n" % "ptr1")

ptr1_id = "A-00000001"
ptr1 = poltrona.busca_por_identificador(ptr1_id)
assert ptr1 != None
ptr1_atrs = poltrona.obtem_atributos(ptr1)
poltrona.verifica(ptr1, ptr1_id, ptr1_atrs)

assert ptr1 == tabelas.id_para_objeto(ptr1_id)

sys.stderr.write("\n")

# ----------------------------------------------------------------------
sys.stderr.write("verificando tabela \"trechos\" trc = %s\n" % "trc1")

trc1_id = "T-00000001"
trc1 = trecho.busca_por_identificador(trc1_id)
assert trc1 != None
trc1_atrs = trecho.obtem_atributos(trc1)
trecho.verifica(trc1, trc1_id, trc1_atrs)
ht_submit += html_botao_submit.gera("Escovar", "escovar_poltrona", None,
                                    "#ffff00")
ht_submit += html_botao_simples.gera("Repensar", "repensar_a_vida",
                                     {'coisa': "418"}, "#00cc00")

pol1_id = "A-00000001"
pol1 = poltrona.busca_por_identificador(pol1_id)
pol1_atrs = {}
pol1_id_cpr = None
testa("pol1_alterar_vazio", pol1_id, pol1_atrs, True, ht_submit)

pol2_id = "A-00000007"
pol2 = poltrona.busca_por_identificador(pol2_id)
pol2_atrs = {'preco': 23.45, 'id_trecho': "T-00000231", 'numero': "99F"}
assert poltrona.obtem_atributo(pol2, 'id_compra') == None
pol2_id_cpr = None
testa("pol2_alterar_alguns", pol2_id, pol2_atrs, True, ht_submit)

pol3_id = "A-00000003"
pol3 = poltrona.busca_por_identificador(pol3_id)
pol3_atrs = poltrona.obtem_atributos(pol3)
pol3_id_cpr = poltrona.obtem_atributo(pol3, 'id_compra')
testa("pol3_ver_todos", pol3_id, pol3_atrs, False, ht_submit)

pol4_id = "A-00000007"
pol4 = poltrona.busca_por_identificador(pol4_id)
pol4_atrs = poltrona.obtem_atributos(pol4)
assert poltrona.obtem_atributo(pol4, 'id_compra') == None
pol4_id_cpr = "C-00000002"
testa("pol4_comprar_todos", pol4_id, pol4_atrs, False, ht_submit)
def gera(pol, alterar, comprar, excluir, fazer_checkin, embarcar):
  
  assert int(alterar) + int(comprar) + int(excluir) <= 1 # No máximo um deve ser "True"

  campos = [].copy() # Campos a devolver

  estilo = "font-size:20px;font-weight:bold;" 

  # Obtem atributos da poltrona:
  id_pol = poltrona.obtem_identificador(pol)
  atrs_pol = poltrona.obtem_atributos(pol)

  numero = atrs_pol['numero']
  preco = atrs_pol['preco']
  oferta = atrs_pol['oferta'] # Se a poltrona está em oferta.
  id_cpr = atrs_pol['id_compra'] # Pedido de compra que reservou a poltrona, ou {None}
  fez_checkin = atrs_pol['fez_checkin'] # Passageiro já fez checkin?
  embarcou = atrs_pol['embarcou'] # Passageiro já embarcou?
  if id_cpr != None:
    # Poltrona está reservada.  Determina a compra:
    cpr = compra.busca_por_identificador(id_cpr)
    assert cpr != None # Paranóia.
  else:
    # Poltrona está livre:
    cpr = None

  args_cmd = { 'íd_poltrona': id_pol } # Argumentos para os comandos.

  # Número da poltrona sempre aparece:
  ht_numero = html_span.gera(estilo, numero)
  campos.append(ht_numero)

  # Preço da poltrona senmpre aparece:
  ht_preco = html_span.gera(estilo, preco)
  campos.append(ht_preco)

  # Indicação de oferta sempre aparece:
  ht_oferta = html_span.gera(estilo + "color:'#ffbb00';", "&#9733;" if oferta else "")
  campos.append(ht_oferta)

  # Coluna de identificador da compra sempre aparece:
  ht_id_cpr = html_span.gera(estilo, id_cpr if cpr != None else "LIVRE")
  campos.append(ht_id_cpr);

  # Coluna de "fez checkin" sempre aparece:
  ht_fez_checkin = html_span.gera(estilo, "CK" if fez_checkin else "")
  campos.append(ht_fez_checkin);

  # Coluna de "embarcou" sempre aparece:
  ht_embarcou = html_span.gera(estilo, "EM" if embarcou else "")
  campos.append(ht_embarcou);

  # Coluna do botão "Ver" sempre aparece:
  ht_bt_ver = html_botao_simples.gera("Ver", "ver_poltrona", {'id_poltrona': id_pol}, "55ee55")
  campos.append(ht_bt_ver);

  # Coluna do botão de ação:
  if alterar:
    ht_bt_acao = html_botao_simples.gera("Alterar", "solicitar_pag_alterar_poltrona", args_cmd, '#bca360')
  elif comprar:
    ht_bt_acao = html_botao_simples.gera("Comprar", 'comprar_poltrona', args_cmd, '#ff0000')
  elif excluir:
    ht_bt_acao = html_botao_simples.gera("Excluir", 'excluir_poltrona', args_cmd, '#ff0000')
  else:
    ht_bt_acao = ""
  campos.append(ht_bt_acao);

  if fazer_checkin:
    # Campos para checkin:
    if cpr != None:
      # Nome e documento do passageiro, e botão de fazer checkin:
      nome_pass = compra.obtem_atributo(cpr, 'nome_pass')
      doc_pass = compra.obtem_atributo(cpr, 'doc_pass')

      ht_nome_pass = html_span.gera(estilo, nome_pass)
      campos.append(ht_nome_pass);

      ht_doc_pass = html_span.gera(estilo, doc_pass)
      campos.append(ht_doc_pass);

      if fez_checkin:
        ht_bt_checkin = ""
      else:
        # Apresentando o botão fazer checkin somente quando o status é pago
        if compra.obtem_atributo(cpr, 'status') == 'pago':
          ht_bt_checkin = html_botao_simples.gera("Checkin", 'fazer_checkin', args_cmd, '#55ee55')
          campos.append(ht_bt_checkin);
    else:
      # Campos em branco:
      campos.append("");
      campos.append("");
      campos.append("");

  if embarcar:
    ht_bt_embarcar = ""
    if fez_checkin:
      ht_bt_embarcar = html_botao_simples.gera("Embarcar", 'embarcar', args_cmd, '#55ee55')
    campos.append(ht_bt_embarcar);

  return campos
# Sessão de administrador:
sesA = sessao.busca_por_identificador("S-00000004")
assert sessao.eh_administrador(sesA)

# Poltrona reservada pelo usuario 1:
polR_id = "A-00000001"
polR = poltrona.busca_por_identificador(polR_id)
assert poltrona.obtem_atributo(polR, 'id_compra') == "C-00000001"

# Poltrona livre:
polL_id = "A-00000005"
polL = poltrona.busca_por_identificador(polL_id)
assert poltrona.obtem_atributo(polL, 'id_compra') == None

# Atributos a alterar:
atrs_m = {}.copy()

for ses_tag, ses in (("sesN", None), ("sesC", sesC), ("sesO", sesO), ("sesA",
                                                                      sesA)):
    for pol_tag, pol in (("polL", polL), ("polR", polR)):
        for err_tag, err in (("err0", None), ("err1",
                                              "Das schibunga is kaput")):
            atrs_pol = poltrona.obtem_atributos(pol)
            rot = "test-" + ses_tag + "-" + pol_tag + "-" + err_tag
            # Teste com atributos originais:
            testa(rot + "-O", ses, pol, atrs_pol, err)
            # Teste com atributos alterados:
            atrs_pol['preco'] = 999.99
            atrs_pol['oferta'] = not atrs_pol['oferta']
            testa(rot + "-M", ses, pol, atrs_pol, err)