- Toimii ongelmitta.
- Sijainnissa: index-4-1.js
- Tehty yhteen tiedostoon koodatusta sovellusrungosta toimiva npm-projekti.
- Sovellus konfiguroitu suoritettavaksi nodemonilla
- Sovellus käyttää MongoDB Atlasissa sijaitsevaa tietokantaa.
- Lisätty ympäristömuuttujat mm. tietokannan URL-osoitteelle ja sovelluksen käytämmälle portille.
- Sovellukseen on mahdollista lisätä blogeja esim. VS Code REST Clientilla ja sovellus näyttää lisätyt blogit.
- Lisättyjä blogeja voi tarkastella myös osoitteessa
localhost:{portti}/api/blogs
- Lisättyjä blogeja voi tarkastella myös osoitteessa
- Toimii ongelmitta.
- Toistaiseksi sijainnissa: index.js
- Sovelluksen koodi jaettu useaan moduuliin.
- Virheiden käsittely keskitetty middlewareen.
- Sovelluksen hakemistorakenne muutettu seuraavanlaiseksi:
├── index.js
├── app.js
├── controllers
│ └── blogs.js
├── models
│ └── blog.js
├── package-lock.json
├── package.json
├── utils
│ ├── config.js
│ └── logger.js
│ └── middleware.js
- Toimii ongelmitta.
- Tehty apufunktio
dummy
tiedostoon utils/list_helper.js - Tehty testi tiedostoon tests/dummy.test.js
- Komento
npm test
tulostaa seuraavasti, eli testi on läpäisty onnistuneesti:
> part4-bloglist-backend@0.0.1 test
> jest --verbose
PASS tests/dummy.test.js
√ dummy returns one (2 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 0.93 s
Ran all test suites.
- Toimii ongelmitta.
- Tehty apufunktio
totalLikes
tiedostoon utils/list_helper.js- Funktio palauttaa blogien yhteenlaskettujen tykkäysten eli likejen määrän.
- Määritelty funktiolle sopivat testit:
- Tyhjä lista palauttaa nollan.
- Yhden blogin sisältävän listan yhteistykkäykset vastaavat kyseisen blogin tykkäysten määrää.
- Erään isomman blogilistan tykkäykset lasketaan oikein.
- Testit on sijoitettu describe-lohkoon tiedostossa tests/totalLikes.test.js
- Komento
npm test
tulostaa seuraavasti, eli testit on läpäisty onnistuneesti:
> part4-bloglist-backend@0.0.1 test
> jest --verbose
PASS tests/dummy.test.js
√ dummy returns one (5 ms)
PASS tests/totalLikes.test.js
√ when list has only one blog equals the likes of that (2 ms)
√ when list has no blogs equals the likes 0
√ when list has multiple blogs equals the likes the sum of all likes (1 ms)
Test Suites: 2 passed, 2 total
Tests: 4 passed, 4 total
Snapshots: 0 total
Time: 3.172 s
Ran all test suites.
- Toimii ongelmitta.
- Tehty SuperTest-kirjastolla testi blogilistan osoitteeseen
/api/blogs
tapahtuvalle HTTP GET -pyynnölle.- Testataan, että sovellus palauttaa oikean määrän JSON-muotoisia blogeja.
- Testit läpäistään onnistuneesti, testattu komennolla
npm test
:
PASS tests/blogs_api.test.js √ all blogs are returned (734 ms)
- Luotu uusi testi tiedostoon tests/blogs_api.test.js.
- Muita osiossa tehtyjä muutoksia:
package.json muokattu
, SuperTest asennettu.- utils/config.js muokattu, lisätty erillinen osoite testitietokannalle.
- logger.js muokattu, ei tulosta ilmoituksia testitilassa.
- Refaktoroitu blogilistan kaikki blogit palauttava metodi
blogsRouter.get
käyttämään promisejen sijaan async/awaitia.- Sijainti: controllers/blogs.js
- Toimii ongelmitta.
- Tehty testi, joka varmistaa, että sovellukseen voi lisätä blogeja osoitteeseen
/api/blogs
tapahtuvallaHTTP POST
-pyynnöllä.- Tämä uusi testi myös tiedostossa tests/blogs_api.test.js.
- Testit läpäistään onnistuneesti, testattu komennolla
npm test
:
- Testit läpäistään onnistuneesti, testattu komennolla
PASS tests/blogs_api.test.js √ a valid blog can be added (197 ms)
- Tämä uusi testi myös tiedostossa tests/blogs_api.test.js.
- Refaktoroitu blogin lisäyksen tietokantaan suorittava metodi
blogsRouter.post
käyttämään promisejen sijaan async/awaitia.
- Toimii ongelmitta.
- Toteutetty sovellukseen mahdollisuus yksittäisen blogin poistoon metodilla
blogsRouter.delete
.- Sijainti: controllers/blogs.js
- Lisätty myös requests/delete_blog.rest
- Lisätty samalla sijaintiin myös metodi
blogsRouter.get
yksittäisen blogin hakemiseen.
- Käytetään async/awaitia ja noudatetaan HTTP-rajapinnassa RESTful-käytänteitä.
- Toteutettu ominaisuudelle myös testit:
- Testataan, että poiston jälkeen blogeja on yksi vähemmän.
- Testataan myös, että poiston jälkeen samalla id:llä ei blogia enää löydy.
- Toimii ongelmitta.
- Toteutettu sovellukseen mahdollisuus yksittäisen blogin muokkaamiseen.
- Käytetään edelleen async/awaitia ja noudatetaan HTTP-rajapinnassa RESTful-käytänteitä.
- Käytetään
express-async-errors
-kirjastoa. - Lisätty myös requests/edit_blog.rest pyynnön ja toiminnallisuuden testaamiseen.
- Toimii ongelmitta.
- Toteutettu sovellukseen mahdollisuus luoda käyttäjiä tekemällä HTTP POST -pyyntö osoitteeseen
api/users
.- Käyttäjien router: controllers/users.js
- Käyttäjien skeema: models/users.js
- Käyttäjillä on käyttäjätunnus, salasana ja nimi.
- Lisätty myös requests/edit_blog.rest pyynnön ja sen toiminnallisuuden testaamiseen.
- Toimii ongelmitta.
- Laajennettu sovellusta siten, että blogiin tulee tieto sen lisänneestä käyttäjästä.
- Nyt blogin lisäämisen yhteydessä määritellään blogin lisääjäksi joku järjestelmän tietokannassa olevista käyttäjistä.
- Muokattu pyyntöä requests/add_blog.rest siten, että sillä määritellään myös blogin lisääjä
- Blogien yhteydessä näytetään nyt lisääjän tiedot.
- Lisättyjä blogeja voi tarkastella osoitteessa
localhost:{portti}/api/blogs
- Uusiin blogeihin liitetään nyt aina blogin lisääjän tiedot.
- Lisättyjä blogeja voi tarkastella osoitteessa
- Toimii ongelmitta.
- Tehty järjestelmään token-perustainen autentikointi.
- Toiminallisuus toteutettu routeriin controllers/login.js
- Toimii ongelmitta.
- Muutettu blogien lisäämistä siten, että se on mahdollista vain, jos lisäyksen tekevässä HTTP POST -pyynnössä on mukana validi token.
- Tokenin haltija määritellään blogin lisääjäksi.
- Toiminallisuus toteutettu routeriin controllers/blogs.js
- Myös tätä ominaisuutta voidaan testata VS Code REST clientillä ja täten asiaankuuluvat testit on myös päivitetty käsittelemään uudentyyppisiä pyyntöjä.
- Nämä pyynnöt löytyy sijannista: requests