class TestImpressora(unittest.TestCase):
    
    def setUp(self):
        self.impressora = Impressora(123, 'HP 2341', '100')

    def test_ligacao_com_servidor(self):
        servidor = ServidorDeImpressora(1234, 'HP 3210', 500, 4, 500, 6)
        servidor.adicionar_impressora(self.impressora)
        self.impressora.servidor |should| equal_to(servidor)
    
    def test_impressora_pode_estar_ligada_a_somente_1_servidor(self):
        servidor1 = ServidorDeImpressora(1234, 'BlaBla', 500, 4, 500, 6)
        servidor2 = ServidorDeImpressora(4568, 'Grilo', 500, 4, 500, 6)
        servidor1.adicionar_impressora(self.impressora)
        (servidor2.adicionar_impressora, self.impressora) |should| throw(TypeError("Impressora deve estar ligada a apenas 1 servidor"))

    def test_imprimir_arquivo(self):
        self.impressora.imprimir() |should| equal_to('Impressao realizada com sucesso')
    def test_obter_mais_copias(self):
        estacao = Estacao(1,'DELL',4,512,'lab-8')
        servidor = Servidor(2,'PC',512,4088,128,10000)
        impressora = Impressora(20,'lASERjET HP',40)
        usuario = Usuario('mauro','123456')
        
        usuario.logar(estacao)
        servidor.adicionar_impressora(impressora)
        
        impressao = Impressao('arquivo1.txt',impressora, usuario)
        impressao.copias |should| equal_to(1)
        impressao2 =Impressao('arquivo1.txt',impressora, usuario,2)

#        impressao |should| equal_to(impressao2)
        impressao.copias |should| equal_to(3)
        impressao2.copias |should| equal_to(3)
        impressao |should| equal_to(impressao2)

        impressora.imprimir()
        usuario.apagar_usuario()
        impressora.destruir_maquina()      
        estacao.destruir_maquina()        
        servidor.destruir_maquina()
    def test_obter_impressao(self):
        estacao = Estacao(1,'DELL',4,512,'lab-8')
        servidor = Servidor(2,'PC',512,4088,128,10000)
        impressora = Impressora(20,'lASERjET HP',40)
        usuario = Usuario('mauro','123456')
        
        usuario.logar(estacao)
        servidor.adicionar_impressora(impressora)
        
        impressao = Impressao('arquivo1.txt',impressora, usuario)
       
        (impressao._validar_valor_positivo,1) |should_not| throw(ValueError)
        (impressao._validar_valor_positivo,0) |should| throw(ValueError)

        impressao.copias |should| equal_to(1)
        impressao.arquivo |should| equal_to('arquivo1.txt')
        impressao.usuario |should| equal_to(usuario)

        impressora.imprimir()
        usuario.apagar_usuario()
        impressora.destruir_maquina()      
        estacao.destruir_maquina()        
        servidor.destruir_maquina()
    def test_listar_estacoes_usuarios(self):
        usuario = Usuario('Luiz Mauro Piraciaba Cassiano Dias','123456')
        usuario2 = Usuario('fabio','123456')
        estacao = Estacao(1,'DELL',4,512,'lab-8')
        servidor = Servidor(2,'PC',512,4088,128,10000)
        impressora = Impressora(20,'lASERjET HP',40)
        
        usuario2.logar(estacao)
        servidor.adicionar_impressora(impressora)
        
        impressao = Impressao('arquivo3.txt',impressora, usuario2,40)        


        impressora.linha_lista(impressora,impressao) |should| equal_to('| arquivo3.txt                     | fabio                           |')

        
        usuario2.deslogar()
        #truncating
        usuario.logar(estacao)
        impressao2 = Impressao('Relatorio unico de surpresa do dia de agosto do ano 2012.txt',impressora, usuario,10)        
        impressora.linha_lista(impressora,impressao2) |should| equal_to('| Relatorio unico de surpresa d... | Luiz Mauro Piraciaba Cassiano...|')
       
       
        Impressora.mostrar_fila() |should_not| equal_to('Nenhuma impressora')
        
        impressora.imprimir()
        impressora.imprimir()

        usuario.apagar_usuario()
        usuario2.apagar_usuario()

        impressora.destruir_maquina()      
        estacao.destruir_maquina()        
        servidor.destruir_maquina()