Skip to content

Instantly share code, notes, and snippets.

@rodrigomanhaes
Created December 6, 2011 19:08
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save rodrigomanhaes/1439476 to your computer and use it in GitHub Desktop.
Save rodrigomanhaes/1439476 to your computer and use it in GitHub Desktop.
Carrinho
class Carrinho
def initialize
@itens = []
end
def incluir(produto)
@itens << ItemCarrinho.new(produto)
end
def remover(produto)
for item in @itens
@itens.delete(item) if item.produto == produto
end
end
def produtos
result = []
for item in @itens
result << item.produto
end
result
end
def quantidade(produto)
item_contendo(produto).quantidade
end
def alterar_quantidade(produto, quantidade)
item_contendo(produto).quantidade = quantidade
end
def total
soma = 0
for item in @itens
# soma += item.quantidade * item.produto.preco (NÃO!!!)
soma += item.total
end
soma
end
private
def item_contendo(produto)
for item in @itens
return item if item.produto == produto
end
end
end
class ItemCarrinho
def initialize(produto)
@produto = produto
@quantidade = 1
end
def total
@quantidade * @produto.preco
end
attr_reader :produto
attr_accessor :quantidade
end
class Produto
def initialize(nome, preco)
@nome, @preco = nome, preco
end
attr_reader :nome, :preco
end
# coding: utf-8
require './carrinho'
describe Carrinho do
let(:produto) { Produto.new('livro de java', 50) }
let(:carrinho) { Carrinho.new }
it 'permite incluir produto' do
carrinho.incluir(produto)
carrinho.produtos.should == [produto]
end
it 'permite remover produto' do
carrinho.incluir(produto)
carrinho.remover(produto)
carrinho.produtos.count.should == 0
end
it 'permite alterar quantidade do produto' do
carrinho.incluir(produto)
carrinho.quantidade(produto).should == 1
carrinho.alterar_quantidade(produto, 2)
carrinho.quantidade(produto).should == 2
end
it 'calcula seu total' do
carrinho.incluir(produto)
livro_ruby = Produto.new('livro de ruby', 40)
carrinho.incluir(livro_ruby)
carrinho.alterar_quantidade(livro_ruby, 2)
carrinho.total.should == 130
end
end
@elissonmichael
Copy link

elissonmichael commented Jun 19, 2018

@ThawanFidelis, @rodrigomanhaes já pararam para imaginar como seria a implementação disso usando mocks e stubs nos testes para diminuir dependências e acoplamento? Fiquei curioso e vou tentar, mas gostaria de ouvir o que acham.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment