diff --git a/app/View/ViewController.php b/app/View/ViewController.php index 742b4be..c131683 100644 --- a/app/View/ViewController.php +++ b/app/View/ViewController.php @@ -29,4 +29,12 @@ class ViewController return $response; } + + public function home(Response $response): Response + { + $html = file_get_contents(__DIR__ . '/../../views/templates/home.php', true); + $response->getBody()->write($html); + + return $response; + } } diff --git a/bootstrap/app.php b/bootstrap/app.php index 6dfce21..db0dd63 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -13,6 +13,7 @@ $app = Bridge::create($container); // change first param to false for production $app->addErrorMiddleware(true, true, true); +$app->get('/home', [ViewController::class, 'home']); $app->get('/admin', [ViewController::class, 'admin']); $app->get('/admin/texts', [ViewController::class, 'texts']); $app->get('/admin/texts/{textId}', [ViewController::class, 'text']); diff --git a/cypress/e2e/home.cy.js b/cypress/e2e/home.cy.js new file mode 100644 index 0000000..d0ba1fe --- /dev/null +++ b/cypress/e2e/home.cy.js @@ -0,0 +1,20 @@ +describe('The home page', () => { + beforeEach(() => { + cy.exec('npm run db:seed') + }) + afterEach(() => { + cy.exec('npm run db:wipe') + }) + + it('displays heading', () => { + cy.visit('/home') + cy.get('h1').should('contain', 'Home') + }) + + it('displays texts from api', () => { + cy.intercept('GET', '/api/texts').as('getTexts') + cy.visit('/home') + cy.wait('@getTexts') + cy.get('#texts-list').should('contain', 'Tanach') + }) +}) diff --git a/public/js/home.js b/public/js/home.js new file mode 100644 index 0000000..3e7cde8 --- /dev/null +++ b/public/js/home.js @@ -0,0 +1,13 @@ +document.addEventListener('DOMContentLoaded', () => { + const textsList = document.getElementById('texts-list'); + + async function loadTexts() { + const response = await fetch('/api/texts'); + const texts = await response.json(); + textsList.innerHTML = texts + .map(text => '