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"
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)
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';", "★" 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)