diff --git a/TDD/biblioteca_test b/TDD/biblioteca_test index 5fa6b4a1ff76cde638fcf9cacb11eedc32b9228b..8f843d131fb39fe35731bf115fab0f6414f0e910 100755 Binary files a/TDD/biblioteca_test and b/TDD/biblioteca_test differ diff --git a/TDD/sources/biblioteca-test.cpp b/TDD/sources/biblioteca-test.cpp index 05603404d0656da8a4cb8212eb6510c0fa61ad1c..681630301b11aee96db362b137e4d0b25c3fc2bb 100644 --- a/TDD/sources/biblioteca-test.cpp +++ b/TDD/sources/biblioteca-test.cpp @@ -1,6 +1,7 @@ #include <iostream> #include <tuple> #include <chrono> +#include <memory> #include "doctest.h" #include "ControladorObras.hpp" #include "ControladorUsuarios.hpp" @@ -45,18 +46,18 @@ TEST_CASE("Biblioteca") { CHECK (3 == p.getMes()); cout << "==> Adicionando a obra" << endl; - contObras.adicionarObra(p); + contObras.adicionarObra(make_shared<Periodico>(p)); contObras.mostrarDetalhes(); - auto [total, disponiveis] = contObras.pesquisarObra(p); + auto [total, disponiveis] = contObras.pesquisarObra(make_shared<Periodico>(p)); CHECK (1 == total); CHECK (1 == disponiveis); cout << "==> Adicionando mais uma unidade da obra" << endl; - contObras.adicionarObra(p); + contObras.adicionarObra(make_shared<Periodico>(p)); contObras.mostrarDetalhes(); - tie(total, disponiveis) = contObras.pesquisarObra(p); + tie(total, disponiveis) = contObras.pesquisarObra(make_shared<Periodico>(p)); CHECK (2 == total); CHECK (2 == disponiveis); @@ -71,10 +72,10 @@ TEST_CASE("Biblioteca") { CHECK ("Tech Books" == l.getEditora()); cout << "==> Adicionando a obra" << endl; - contObras.adicionarObra(l); + contObras.adicionarObra(make_shared<Livro>(l)); contObras.mostrarDetalhes(); - tie(total, disponiveis) = contObras.pesquisarObra(l); + tie(total, disponiveis) = contObras.pesquisarObra(make_shared<Livro>(l)); CHECK (1 == total); CHECK (1 == disponiveis); cout << "======================================================" << endl; @@ -84,32 +85,32 @@ TEST_CASE("Biblioteca") { chrono::year_month_day epoch = chrono::year_month_day{chrono::year{0}, chrono::month{0}, chrono::day{0}}; cout << "=> Usuario que nao existe tenta realizar um emprestimo: " << endl; - chrono::year_month_day dataDevolucao = contUsuarios.registrarEmprestimo("11234", l); + chrono::year_month_day dataDevolucao = contUsuarios.registrarEmprestimo("11234", make_shared<Livro>(l)); CHECK (int(epoch.year()) == int(dataDevolucao.year())); CHECK (unsigned(epoch.month()) == unsigned(dataDevolucao.month())); CHECK (unsigned(epoch.day()) == unsigned(dataDevolucao.day())); cout << "=> Usuario que nao existe tenta retornar um emprestimo: " << endl; - CHECK (-1 == contUsuarios.retornarEmprestimo("11234", l)); + CHECK (-1 == contUsuarios.retornarEmprestimo("11234", make_shared<Livro>(l))); cout << "=> Tenta emprestar uma obra que nao existe " << endl; Periodico p1("Revista de Metodos", 2023, 5, 3); - dataDevolucao = contUsuarios.registrarEmprestimo("12345", p1); + dataDevolucao = contUsuarios.registrarEmprestimo("12345", make_shared<Periodico>(p1)); CHECK (int(epoch.year()) == int(dataDevolucao.year())); CHECK (unsigned(epoch.month()) == unsigned(dataDevolucao.month())); CHECK (unsigned(epoch.day()) == unsigned(dataDevolucao.day())); cout << "=> Tenta retornar uma obra que nao existe " << endl; - CHECK (-1 == contUsuarios.retornarEmprestimo("12345", p1)); + CHECK (-1 == contUsuarios.retornarEmprestimo("12345", make_shared<Periodico>(p1))); cout << "=> Empresta uma obra que existe: " << endl; - dataDevolucao = contUsuarios.registrarEmprestimo("12345", p); + dataDevolucao = contUsuarios.registrarEmprestimo("12345", make_shared<Periodico>(p)); CHECK (int(hoje.year()) == int(dataDevolucao.year())); CHECK (unsigned(hoje.month()) == unsigned(dataDevolucao.month())); CHECK (unsigned(hoje.day()) == unsigned(dataDevolucao.day())); cout << "=> Retorna uma obra que existe: " << endl; - CHECK (0 == contUsuarios.retornarEmprestimo("12345", p)); + CHECK (0 == contUsuarios.retornarEmprestimo("12345", make_shared<Periodico>(p))); //obra existe e ja tem tres emprestimos //usuario devolveu com atraso, nao pode emprestar depois diff --git a/sources/ControladorObras.cpp b/sources/ControladorObras.cpp index 73ab46fdc11e5a2a8ddb15f430d36c51b0c23188..1d17dbd488f71cbf424bb3c535a7cb2a0cd313a2 100644 --- a/sources/ControladorObras.cpp +++ b/sources/ControladorObras.cpp @@ -19,7 +19,7 @@ ControladorObras& ControladorObras::getInstance() { void ControladorObras::mostrarDetalhes() const { cout << endl << "> LISTANDO OBRAS DO SISTEMA:" << endl << endl; for (const auto& obra : this->obras) { - obra.mostrarDetalhes(); + obra->mostrarDetalhes(); cout << endl << "-----" << endl << endl; } } @@ -28,52 +28,52 @@ void ControladorObras::mostrarDetalhes() const { pair<int, int> ControladorObras::pesquisarObra(shared_ptr<DescricaoObra> descricao){ pair <int, int> p = make_pair(0, 0); - auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](Obra& d) { - return descricao->getTitulo() == d.getTitulo(); + auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](shared_ptr<Obra>(obra)) { + return descricao->getTitulo() == obra->getTitulo(); }); if (it_obra == this->obras.end()) { cout << "> Erro: Obra não encontrada" << endl; } else { - p = make_pair(it_obra->getTotal(), it_obra->getDisponiveis()); + p = make_pair((*it_obra)->getTotal(), (*it_obra)->getDisponiveis()); } return p; } void ControladorObras::adicionarObra(shared_ptr<DescricaoObra> descricao) { - auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](Obra& d) { - return descricao->getTitulo() == d.getTitulo(); + auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](shared_ptr<Obra>(obra)) { + return descricao->getTitulo() == obra->getTitulo(); }); if (it_obra == this->obras.end()) { - this->obras.push_back(Obra(descricao)); + this->obras.push_back(make_shared<Obra>(Obra(descricao))); } else { - it_obra->adicionarObra(); + (*it_obra)->adicionarObra(); } } bool ControladorObras::solicitarEmprestimo(shared_ptr<DescricaoObra> descricao){ - auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](Obra& d) { - return descricao->getTitulo() == d.getTitulo(); + auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](shared_ptr<Obra>(obra)) { + return descricao->getTitulo() == obra->getTitulo(); }); if (it_obra == this->obras.end()) { return false; } - return it_obra->emprestar(); + return (*it_obra)->emprestar(); } bool ControladorObras::devolverEmprestimo(shared_ptr<DescricaoObra> descricao){ - auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](Obra& d) { - return descricao->getTitulo() == d.getTitulo(); - }); + auto it_obra = find_if(this->obras.begin(), this->obras.end(), [&descricao](shared_ptr<Obra>(obra)) { + return descricao->getTitulo() == obra->getTitulo(); + }); if (it_obra == this->obras.end()) { return false; } - return it_obra->devolver(); + return (*it_obra)->devolver(); } diff --git a/sources/ControladorObras.hpp b/sources/ControladorObras.hpp index 09dac116e500dfa9fe2c46a3d7273c268f4a67fb..0a25dfe986e411ab64b3a5d68e8214466b5f2792 100644 --- a/sources/ControladorObras.hpp +++ b/sources/ControladorObras.hpp @@ -14,7 +14,7 @@ class ControladorObras { private: // Constructor ControladorObras(); - vector<Obra> obras; + vector<shared_ptr<Obra>> obras; public: