FitTrackee/fittrackee_client/e2e/register.test.js

178 lines
5.7 KiB
JavaScript

import { Selector } from 'testcafe'
import { TEST_URL } from './utils'
const randomstring = require('randomstring')
let username = randomstring.generate(8)
const email = `${username}@test.com`
const password = 'lentghOk'
// eslint-disable-next-line no-undef
fixture('/register').page(`${TEST_URL}/register`)
test('should display the registration form', async t => {
await t
.navigateTo(`${TEST_URL}/register`)
.expect(Selector('H1').withText('Register').exists).ok()
.expect(Selector('form').exists).ok()
.expect(Selector('input[name="username"]').exists).ok()
.expect(Selector('input[name="email"]').exists).ok()
.expect(Selector('input[name="password"]').exists).ok()
.expect(Selector('input[name="password_conf"]').exists).ok()
})
test('should allow a user to register', async t => {
// register user
await t
.navigateTo(`${TEST_URL}/register`)
.expect(Selector('H1').withText('Register').exists).ok()
.typeText('input[name="username"]', username)
.typeText('input[name="email"]', email)
.typeText('input[name="password"]', password)
.typeText('input[name="password_conf"]', password)
.click(Selector('input[type="submit"]'))
// assert user is redirected to '/'
await t
.expect(Selector('H1').withText('Register').exists).notOk()
})
test('should throw an error if the username is taken', async t => {
// register user with duplicate user name
await t
.navigateTo(`${TEST_URL}/register`)
.typeText('input[name="username"]', username)
.typeText('input[name="email"]', `${email}2`)
.typeText('input[name="password"]', password)
.typeText('input[name="password_conf"]', password)
.click(Selector('input[type="submit"]'))
// assert user registration failed
await t
.expect(Selector('H1').withText('Register').exists).ok()
.expect(Selector('code').withText(
'Sorry. That user already exists.').exists).ok()
})
username = randomstring.generate(8)
test('should throw an error if the email is taken', async t => {
// register user with duplicate email
await t
.navigateTo(`${TEST_URL}/register`)
.typeText('input[name="username"]', `${username}2`)
.typeText('input[name="email"]', email)
.typeText('input[name="password"]', password)
.typeText('input[name="password_conf"]', password)
.click(Selector('input[type="submit"]'))
// assert user registration failed
await t
.expect(Selector('H1').withText('Register').exists).ok()
.expect(Selector('code').withText(
'Sorry. That user already exists.').exists).ok()
})
test('should throw an error if the username is too short', async t => {
const shortUsername = 'a'
// register user with duplicate email
await t
.navigateTo(`${TEST_URL}/register`)
.typeText('input[name="username"]', `${shortUsername}`)
.typeText('input[name="email"]', email)
.typeText('input[name="password"]', password)
.typeText('input[name="password_conf"]', password)
.click(Selector('input[type="submit"]'))
// assert user registration failed
await t
.expect(Selector('H1').withText('Register').exists).ok()
.expect(Selector('code').withText(
'3 to 12 characters required for username.').exists).ok()
})
test('should throw an error if the user is too long', async t => {
const longUsername = randomstring.generate(20)
// register user with duplicate email
await t
.navigateTo(`${TEST_URL}/register`)
.typeText('input[name="username"]', `${longUsername}`)
.typeText('input[name="email"]', email)
.typeText('input[name="password"]', password)
.typeText('input[name="password_conf"]', password)
.click(Selector('input[type="submit"]'))
// assert user registration failed
await t
.expect(Selector('H1').withText('Register').exists).ok()
.expect(Selector('code').withText(
'3 to 12 characters required for username.').exists).ok()
})
test('should throw an error if the email is invalid', async t => {
const invalidEmail = `${username}@test`
// register user with duplicate email
await t
.navigateTo(`${TEST_URL}/register`)
.typeText('input[name="username"]', username)
.typeText('input[name="email"]', invalidEmail)
.typeText('input[name="password"]', password)
.typeText('input[name="password_conf"]', password)
.click(Selector('input[type="submit"]'))
// assert user registration failed
await t
.expect(Selector('H1').withText('Register').exists).ok()
.expect(Selector('code').withText(
'Valid email must be provided.').exists).ok()
})
test('should throw an error if passwords don\'t match', async t => {
// register user with duplicate email
await t
.navigateTo(`${TEST_URL}/register`)
.typeText('input[name="username"]', username)
.typeText('input[name="email"]', email)
.typeText('input[name="password"]', password)
.typeText('input[name="password_conf"]', `${password}2`)
.click(Selector('input[type="submit"]'))
// assert user registration failed
await t
.expect(Selector('H1').withText('Register').exists).ok()
.expect(Selector('code').withText(
'Password and password confirmation don\'t match.').exists).ok()
})
test('should throw an error if the password is too short', async t => {
const invalidPassword = '1234567'
// register user with duplicate email
await t
.navigateTo(`${TEST_URL}/register`)
.typeText('input[name="username"]', username)
.typeText('input[name="email"]', email)
.typeText('input[name="password"]', invalidPassword)
.typeText('input[name="password_conf"]', invalidPassword)
.click(Selector('input[type="submit"]'))
// assert user registration failed
await t
.expect(Selector('H1').withText('Register').exists).ok()
.expect(Selector('code').withText(
'8 characters required for password.').exists).ok()
})