158 lines
3.8 KiB
JavaScript
158 lines
3.8 KiB
JavaScript
import TestServer from 'fetch-test-server';
|
|
import app from '..';
|
|
import { flushdb, sequelize, seed } from '../test/support';
|
|
|
|
const server = new TestServer(app.callback());
|
|
|
|
beforeEach(flushdb);
|
|
afterAll(() => server.close());
|
|
afterAll(() => sequelize.close());
|
|
|
|
describe('#auth.signup', async () => {
|
|
it('should signup a new user', async () => {
|
|
const res = await server.post('/api/auth.signup', {
|
|
body: {
|
|
username: 'testuser',
|
|
name: 'Test User',
|
|
email: 'new.user@example.com',
|
|
password: 'test123!',
|
|
},
|
|
});
|
|
const body = await res.json();
|
|
|
|
expect(res.status).toEqual(200);
|
|
expect(body.ok).toBe(true);
|
|
expect(body.data.user).toBeTruthy();
|
|
});
|
|
|
|
it('should require params', async () => {
|
|
const res = await server.post('/api/auth.signup', {
|
|
body: {
|
|
username: 'testuser',
|
|
},
|
|
});
|
|
const body = await res.json();
|
|
|
|
expect(res.status).toEqual(400);
|
|
expect(body).toMatchSnapshot();
|
|
});
|
|
|
|
it('should require valid email', async () => {
|
|
const res = await server.post('/api/auth.signup', {
|
|
body: {
|
|
username: 'testuser',
|
|
name: 'Test User',
|
|
email: 'example.com',
|
|
password: 'test123!',
|
|
},
|
|
});
|
|
const body = await res.json();
|
|
|
|
expect(res.status).toEqual(400);
|
|
expect(body).toMatchSnapshot();
|
|
});
|
|
|
|
it('should require unique email', async () => {
|
|
await seed();
|
|
const res = await server.post('/api/auth.signup', {
|
|
body: {
|
|
username: 'testuser',
|
|
name: 'Test User',
|
|
email: 'user1@example.com',
|
|
password: 'test123!',
|
|
},
|
|
});
|
|
const body = await res.json();
|
|
|
|
expect(res.status).toEqual(400);
|
|
expect(body).toMatchSnapshot();
|
|
});
|
|
|
|
it('should require unique username', async () => {
|
|
await seed();
|
|
const res = await server.post('/api/auth.signup', {
|
|
body: {
|
|
username: 'user1',
|
|
name: 'Test User',
|
|
email: 'userone@example.com',
|
|
password: 'test123!',
|
|
},
|
|
});
|
|
const body = await res.json();
|
|
|
|
expect(res.status).toEqual(400);
|
|
expect(body).toMatchSnapshot();
|
|
});
|
|
});
|
|
|
|
describe('#auth.login', () => {
|
|
test('should login with email', async () => {
|
|
await seed();
|
|
const res = await server.post('/api/auth.login', {
|
|
body: {
|
|
username: 'user1@example.com',
|
|
password: 'test123!',
|
|
},
|
|
});
|
|
const body = await res.json();
|
|
|
|
expect(res.status).toEqual(200);
|
|
expect(body.ok).toBe(true);
|
|
expect(body.data.user).toMatchSnapshot();
|
|
});
|
|
|
|
test('should login with username', async () => {
|
|
await seed();
|
|
const res = await server.post('/api/auth.login', {
|
|
body: {
|
|
username: 'user1',
|
|
password: 'test123!',
|
|
},
|
|
});
|
|
const body = await res.json();
|
|
|
|
expect(res.status).toEqual(200);
|
|
expect(body.ok).toBe(true);
|
|
expect(body.data.user).toMatchSnapshot();
|
|
});
|
|
|
|
test('should validate password', async () => {
|
|
await seed();
|
|
const res = await server.post('/api/auth.login', {
|
|
body: {
|
|
email: 'user1@example.com',
|
|
password: 'bad_password',
|
|
},
|
|
});
|
|
const body = await res.json();
|
|
|
|
expect(res.status).toEqual(400);
|
|
expect(body).toMatchSnapshot();
|
|
});
|
|
|
|
test('should require either username or email', async () => {
|
|
const res = await server.post('/api/auth.login', {
|
|
body: {
|
|
password: 'test123!',
|
|
},
|
|
});
|
|
const body = await res.json();
|
|
|
|
expect(res.status).toEqual(400);
|
|
expect(body).toMatchSnapshot();
|
|
});
|
|
|
|
test('should require password', async () => {
|
|
await seed();
|
|
const res = await server.post('/api/auth.login', {
|
|
body: {
|
|
email: 'user1@example.com',
|
|
},
|
|
});
|
|
const body = await res.json();
|
|
|
|
expect(res.status).toEqual(400);
|
|
expect(body).toMatchSnapshot();
|
|
});
|
|
});
|