Skip to content

Commit

Permalink
happy path testing added to all endpoints
Browse files Browse the repository at this point in the history
  • Loading branch information
fernandogaol committed Jun 5, 2020
1 parent 53e1019 commit 9917407
Show file tree
Hide file tree
Showing 16 changed files with 408 additions and 112 deletions.
100 changes: 84 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,94 @@
# Express Boilerplate!
# It Takes A Village

This is a boilerplate project used for starting new projects!
> A community based altruistic application
## Set up
[![Build Status][travis-image]][travis-url]
[![NPM Version][npm-image]][npm-url]

Complete the following steps to start a new project (NEW-PROJECT-NAME):
## Live App link

1. Clone this repository to your local machine `git clone BOILERPLATE-URL NEW-PROJECTS-NAME`
2. `cd` into the cloned repository
3. Make a fresh start of the git history for this project with `rm -rf .git && git init`
4. Install the node dependencies `npm install`
5. Move the example Environment file to `.env` that will be ignored by git and read by the express server `mv example.env .env`
6. Edit the contents of the `package.json` to use NEW-PROJECT-NAME instead of `"name": "express-boilerplate",`
<<<<<<< HEAD

## Scripts
- # https://itav-app.now.sh/login
- https://itav-app.now.sh/

Start the application `npm start`
> > > > > > > master
Start nodemon for the application `npm run dev`
- Client deployed on zeit
- Server deployed on Heroku

Run the tests `npm test`
## App Images

## Deploying
<p align="center">
<img width="223" height="395.5" src="assets/Login.png">
<img width="223" height="395.5" src="assets/Registration.png">
<img width="223" height="395.5" src="assets/Landing.png">
<img width="223" height="395.5" src="assets/Dashboard.png">
<img width="223" height="395.5" src="assets/CreateStory.png">
</p>

When your new project is ready for deployment, add a new Heroku application with `heroku create`. This will make a new git remote called "heroku" and you can then `npm run deploy` which will push to this remote's master branch.
## Summary

It Takes a Village is a community based altruism application that lets users notify their community that they are in need of assistance, be it food, clothing, transportation, etc. A user can post a story explaining what kind of help they are in need of, and other users in their real world "community" (based off geo-location proximity) can indicate whether they are able to provide aid, or can share to others in their off-app communities that might be able to help.

## Technology Stack

### Front End

- HTML5
- CSS
- JavaScript
- React
- Enzyme
- Redux

### Back End

- Node.js
- Express
- Mocha
- Chai
- PostgreSQL
- Bcryptjs
- Passport
- JWT Authentication

### Development Environment

- Git
- GitHub
- Postman
- DBeaver
- Visual Studio Code
- GitHub Projects

## API Documentation

### API endpoints

- POST to '/api/auth/login' authenticate and login returning user
- POST to '/api/auth/refresh' refresh Auth token
- POST to '/api/users' posts new user info into database
- GET to '/api/users' get all users from database
- GET to '/api/user/:id' get all stories by id
- DELETE to '/api/user/:id' delete a user by id
- PATCH to '/api/user/:id' update a user by id
- GET to '/api/story' get all stories from database
- POST to '/api/story' posts a story to the database
- GET to '/api/story/:id' get all stories by id
- DELETE to '/api/story/:id' delete a story by id
- PATCH to '/api/story/:id' update a story by id
- GET to '/api/comment' get all comments from database
- POST to '/api/comment' posts a comment to the database
- GET to '/api/comment/:id' get all comments by id
- DELETE to '/api/comment/:id' delete a comment by id
- PATCH to '/api/comment/:id' update a comment by id

<!-- Markdown link & img dfn's -->

[npm-image]: https://img.shields.io/npm/v/datadog-metrics.svg?style=flat-square
[npm-url]: https://npmjs.org/package/datadog-metrics
[travis-image]: https://img.shields.io/travis/dbader/node-datadog-metrics/master.svg?style=flat-square
[travis-url]: https://travis-ci.org/dbader/node-datadog-metrics

---
148 changes: 148 additions & 0 deletions info.log
Original file line number Diff line number Diff line change
Expand Up @@ -699,3 +699,151 @@
{"message":"user_id is required","level":"error"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"new project created with id number 2","level":"info"}
{"message":"new project created with id number 2","level":"info"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"new project created with id number 2","level":"info"}
{"message":"new project created with id number 2","level":"info"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"project_id is required","level":"error"}
{"message":"project_id is required","level":"error"}
{"message":"project_id is required","level":"error"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"project_id is required","level":"error"}
{"message":"project_id is required","level":"error"}
{"message":"project_id is required","level":"error"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"project_id is required","level":"error"}
{"message":"new list created with id number 5","level":"info"}
{"message":"new list created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"project_id is required","level":"error"}
{"message":"new list created with id number 5","level":"info"}
{"message":"new list created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"project_id is required","level":"error"}
{"message":"new list created with id number 5","level":"info"}
{"message":"new list created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"project_id is required","level":"error"}
{"message":"new list created with id number 5","level":"info"}
{"message":"new list created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"project_id is required","level":"error"}
{"message":"new list created with id number 5","level":"info"}
{"message":"new list created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"project_id is required","level":"error"}
{"message":"new list created with id number 5","level":"info"}
{"message":"new list created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"content is required","level":"error"}
{"message":"list_id is required","level":"error"}
{"message":"content is required","level":"error"}
{"message":"list_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"content is required","level":"error"}
{"message":"list_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"content is required","level":"error"}
{"message":"list_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"content is required","level":"error"}
{"message":"list_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"content is required","level":"error"}
{"message":"list_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"content is required","level":"error"}
{"message":"list_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"project_id is required","level":"error"}
{"message":"new list created with id number 5","level":"info"}
{"message":"new list created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"content is required","level":"error"}
{"message":"list_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"project_id is required","level":"error"}
{"message":"new list created with id number 5","level":"info"}
{"message":"new list created with id number 5","level":"info"}
{"message":"title is required","level":"error"}
{"message":"user_id is required","level":"error"}
{"message":"new project created with id number 5","level":"info"}
{"message":"new project created with id number 5","level":"info"}
3 changes: 2 additions & 1 deletion src/auth/auth-router.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ authRouter.post('/login', jsonBodyParser, (req, res, next) => {
error: 'Incorrect username or password',
});
}
//WILL BE USED IN THE FUTURE
// AuthService.comparePasswords(loginUser.password, dbUser.password);
if (loginUser.password !== dbUser.password) {
return res.status(400).json({
Expand All @@ -39,7 +40,7 @@ authRouter.post('/login', jsonBodyParser, (req, res, next) => {
.catch(next);
});

//WILL BE UTILIZED IN THE FUTURE
//WILL BE USED IN THE FUTURE

// authRouter.post('/refresh', requireAuth, (req, res) => {
// const sub = req.user.user_name;
Expand Down
31 changes: 8 additions & 23 deletions src/cards/cards-route.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ const express = require('express');
const CardsService = require('./cards-service');
const logger = require('../logger');
const bodyParser = express.json();
// const { requireAuth } = require('../middleware/jwt-auth');
// needs API KEY set

const cardsRouter = express.Router();

Expand All @@ -29,10 +27,6 @@ cardsRouter
}
}

// CardsService.cardExists(req.app.get('db'), content).then((cardExists) => {
// if (cardExists)
// return res.status(400).json({ error: `card name already exists` });

return CardsService.insertCard(req.app.get('db'), newCard).then((card) => {
logger.info(`new project created with id number ${card.id}`);
res
Expand All @@ -41,7 +35,6 @@ cardsRouter
.json(CardsService.serializeCard(card));
});
});
// });

cardsRouter
.route('/:card_id')
Expand All @@ -58,6 +51,7 @@ cardsRouter
})
.catch(next);
})
//PATCH METHOD WILL BE USED IN THE FUTURE
.patch(bodyParser, (req, res, next) => {
const { content, list_id } = req.body;
const cardToUpdate = { content, list_id };
Expand All @@ -72,23 +66,14 @@ cardsRouter
},
});
}

CardsService.cardExists(req.app.get('db'), content).then((cardExists) => {
if (cardExists)
return res.status(400).json({ error: `card name already exists` });

CardsService.updateCard(
req.app.get('db'),
req.params.card_id,
cardToUpdate
)
.then((cardUpdate) => {
logger.info('card was updated');
res.status(204).end();
})
.catch(next);
});
CardsService.updateCard(req.app.get('db'), req.params.card_id, cardToUpdate)
.then((cardUpdate) => {
logger.info('card was updated');
res.status(204).end();
})
.catch(next);
});

cardsRouter.route('/list/:list_id').get((req, res, next) => {
const { list_id } = req.params;
CardsService.getCardByListId(req.app.get('db'), list_id)
Expand Down
4 changes: 1 addition & 3 deletions src/lists/lists-route.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@ const express = require('express');
const ListsService = require('./lists-service');
const logger = require('../logger');
const bodyParser = express.json();
// const { requireAuth } = require('../middleware/jwt-auth');
// needs API KEY set

const listsRouter = express.Router();

listsRouter
Expand Down Expand Up @@ -54,6 +51,7 @@ listsRouter
})
.catch(next);
})
//PATCH METHOD WILL BE USED IN THE FUTURE
.patch(bodyParser, (req, res, next) => {
const { title, project_id } = req.body;
const listToUpdate = { title, project_id };
Expand Down
1 change: 0 additions & 1 deletion src/lists/lists-service.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
const xss = require('xss');
// const Treeize = require('treeize');

const ListsService = {
listExists(db, title) {
Expand Down
5 changes: 2 additions & 3 deletions src/logger.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
const winston = require('winston');
const { NODE_ENV } = require('./config');

// set up winston
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [new winston.transports.File({ filename: 'info.log' })]
transports: [new winston.transports.File({ filename: 'info.log' })],
});

if (NODE_ENV !== 'production') {
logger.add(
new winston.transports.Console({
format: winston.format.simple()
format: winston.format.simple(),
})
);
}
Expand Down
Loading

0 comments on commit 9917407

Please sign in to comment.