Created
December 6, 2011 19:08
-
-
Save rodrigomanhaes/1439476 to your computer and use it in GitHub Desktop.
Carrinho
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@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.