Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .env-example
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
PORT=
API_NAME=

DB_URI=

SECRET=
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node_modules/
.env
.env.test
__tests__/coverage
24 changes: 24 additions & 0 deletions __tests__/factories.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
const { factory } = require('factory-girl')
const faker = require('faker')

const User = require('../src/models/User')

// sets locale to BR
faker.locale = "pt_BR";

factory.define('User', User, {
firstName: faker.name.firstName(),
lastName: faker.name.lastName(),
email: faker.internet.email(),
password: faker.internet.password(),
phones: [
{
number: faker.phone.phoneNumber('99#######'),
area_code: faker.random.number(99),
country_code: faker.phone.phoneNumber('+###')
}
]
})

module.exports = factory

240 changes: 240 additions & 0 deletions __tests__/user.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,240 @@
const request = require('supertest')
const app = require('../src/app')
const factory = require('./factories')
const Usr = require('../src/models/user')
const faker = require('faker')

describe('SignUp', () => {

beforeEach(async () => {
await Usr.deleteMany()
})

it('should create a new user', async () => {

let response = await request(app)
.post('/signup')
.send({
firstName: faker.name.firstName(),
lastName: faker.name.lastName(),
email: faker.internet.email(),
password: faker.internet.password(),
phones: [
{
number: faker.phone.phoneNumber('99#######'),
area_code: faker.random.number(99),
country_code: faker.phone.phoneNumber('+###')
}
]
})

expect(response.status).toBe(201)

})

it('should not create a new user when there are missing fields', async () => {

let response = await request(app)
.post('/signup')
.send({
lastName: faker.name.lastName(),
email: faker.internet.email(),
password: faker.internet.password(),
phones: [
{
number: faker.phone.phoneNumber('99#######'),
area_code: faker.random.number(99),
country_code: faker.phone.phoneNumber('+###')
}
]
})

expect(response.status).toBe(400)

})

it('should not create a new user when there are invalid fields', async () => {

let response = await request(app)
.post('/signup')
.send({
firstName: '',
lastName: faker.name.lastName(),
email: faker.internet.email(),
password: faker.internet.password(),
phones: [
{
number: faker.phone.phoneNumber('99#######'),
area_code: faker.random.number(99),
country_code: faker.phone.phoneNumber('+###')
}
]
})

expect(response.status).toBe(400)

})

it('should not create a new user when the email already exists', async () => {

let user = await factory.create('User')

let response = await request(app)
.post('/signup')
.send({
firstName: faker.name.firstName(),
lastName: faker.name.lastName(),
email: user.email,
password: faker.internet.password(),
phones: [
{
number: faker.phone.phoneNumber('99#######'),
area_code: faker.random.number(99),
country_code: faker.phone.phoneNumber('+###')
}
]
})

expect(response.status).toBe(400)

})

})


describe('SignIn', () => {

beforeEach(async () => {
await Usr.deleteMany()
})

it('should authenticate with valid credentials', async () => {

let user = await factory.create('User', { password: '123456' })

// console.log(user)

let response = await request(app)
.post('/signin')
.send({
email: user.email,
password: '123456'
})

expect(response.status).toBe(200)

})

it('should not authenticate with invalid credentials', async () => {

let user = await factory.create('User')

let response = await request(app)
.post('/signin')
.send({
email: user.email,
password: '123456'
})

expect(response.status).toBe(401)

})

it('should return a JWT when authenticated with valid credentials', async () => {

let user = await factory.create('User', { password: '123456' })

let response = await request(app)
.post('/signin')
.send({
email: user.email,
password: '123456'
})

expect(response.body).toHaveProperty('token')

})

})

describe('Me', () => {

beforeEach(async () => {
await Usr.deleteMany()
})

it("should return user's information when called with a valid JWT", async () => {

let response
let user = await factory.create('User', { password: '123456' })

response = await request(app)
.post('/signin')
.send({
email: user.email,
password: '123456'
})

let token = response.body.token

response = await request(app)
.get('/me')
.set({
authorization: 'Bearer ' + token
})

expect(response.status).toBe(200)

})

it("should not return user's information when called with a invalid JWT", async () => {

let response
let user = await factory.create('User', { password: '123456' })

response = await request(app)
.post('/signin')
.send({
email: user.email,
password: '123456'
})

let token = response.body.token

response = await request(app)
.get('/me')
.set({
authorization: token
})

expect(response.status).toBe(401)

})

it("should not return user's information when called with a valid JWT of a user that doesn't exist", async () => {

let response
let user = await factory.create('User', { password: '123456' })

response = await request(app)
.post('/signin')
.send({
email: user.email,
password: '123456'
})

let token = response.body.token

await Usr.deleteMany()

response = await request(app)
.get('/me')
.set({
authorization: 'Bearer ' + token
})

expect(response.status).toBe(404)

})

})
Loading