|
# python 3.8 |
|
import unittest |
|
from dataclasses import dataclass |
|
from typing import Dict |
|
|
|
|
|
class LoginNecessario(Exception): |
|
pass |
|
|
|
|
|
@dataclass |
|
class Produto: |
|
id: int |
|
nome: str |
|
|
|
|
|
class CarrinhoCompras: |
|
|
|
produtos: Dict[int, int] = {} |
|
|
|
def adiciona_produto(self, produto: Produto, quantidade: int) -> None: |
|
self.produtos[produto.id] = quantidade |
|
|
|
def total_produtos(self) -> int: |
|
return len(self.produtos) |
|
|
|
|
|
|
|
@dataclass |
|
class Usuario: |
|
id: int |
|
carrinho: CarrinhoCompras |
|
|
|
def adicionar_produto_carrinho(self, produto: Produto, quantidade: int) -> None: |
|
if not self.logado(): |
|
raise LoginNecessario("Por favor, faça seu login antes de continuar") |
|
self.carrinho.adiciona_produto(produto, quantidade) |
|
|
|
def logado(self) -> bool: |
|
return self.id != 0 |
|
|
|
|
|
class ColocarProdutoNoCarrinhoDeComprasTestCase(unittest.TestCase): |
|
|
|
def test_usuario_logado_adiciona_produto_no_carrinho_de_compras(self): |
|
carrinho = CarrinhoCompras() |
|
usuario = Usuario(id=1, carrinho=carrinho) |
|
produto = Produto(id=9, nome='produto') |
|
usuario.adicionar_produto_carrinho(produto, quantidade=1) |
|
self.assertEqual(1, carrinho.total_produtos()) |
|
self.assertIn(produto.id, carrinho.produtos) |
|
|
|
def test_usuario_anonimo_tenta_adicionar_um_produto_no_carrinho_de_compras(self): |
|
carrinho = CarrinhoCompras() |
|
usuario = Usuario(id=0, carrinho=carrinho) |
|
produto = Produto(id=9, nome='produto') |
|
with self.assertRaises(LoginNecessario): |
|
usuario.adicionar_produto_carrinho(produto, quantidade=1) |
|
self.assertEqual(0, carrinho.total_produtos()) |
|
self.assertNotIn(produto.id, carrinho.produtos) |
|
|
|
unittest.main() |