Skip to content
Closed
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
8 changes: 6 additions & 2 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,19 @@ function createApp(validateUsername, validatePassword, validateEmail) {

app.use(express.json())
app.use(cors())

app.use(express.static(__dirname + '/public'));

app.post('/users', async(req, res) => {
const { username, password, email } = req.body

// Lisa kontroll, et väljad on olemas
if (!username || !password || !email) {
return res.status(400).send({error: "Missing required fields"})
}

const validUsername = validateUsername(username)
const validPassword = validatePassword(password)
const validEmail = validateEmail(email)
const validEmail = validateEmail(email)

if (validUsername && validPassword && validEmail) {
res.send({userId: '1', message: "Valid User"})
Expand Down
185 changes: 152 additions & 33 deletions app.mock.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,57 +3,176 @@ const request = require('supertest')
const validateUsername = require('./validation/validateUsername')
const validatePassword = require('./validation/validatePassword')

//Mock validateEmail to isolate tests
// Mokeeri validateEmail
jest.mock('./validation/validateEmail', () => {
return jest.fn((email) => {
//Simulate real world simulation
if (!email || typeof email !== 'string') return false;
const re = /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/i;
const re = /^[^\s@]+@([^\s@]+\.)+(com|org|edu|net|io)$/i;
return re.test(email);
})
})

const validateEmail = require('./validation/validateEmail')
const app = createApp(validateUsername, validatePassword, validateEmail)

describe('given correct username and password', () => {
test('return status 200', async () => {
const response = await request(app).post('/users').send({
username: 'Username',
password: 'Password123',
email: 'student@example.com'
const startTime = Date.now();
let server;

beforeAll((done) => {
server = app.listen(3002, done);
});

afterAll((done) => {
server.close(done);
const endTime = Date.now();
console.log('\n=================================');
console.log('📊 ÜLESANNE 2 - MOKEERITUD TESTIDE TULEMUSED');
console.log('=================================');
console.log(`⏱️ Testide kogu jooksuaeg: ${endTime - startTime} ms`);
console.log('=================================\n');
});

// IDENTSED TESTID nagu app.test.js
describe('Kasutaja registreerimissüsteemi MOKEERITUD API testid', () => {

describe('Kasutajanime valideerimine', () => {

test('✅ Kehtiv kasutajanimi - ainult tähed', async () => {
const response = await request(app).post('/users').send({
username: 'JohnDoe',
password: 'TestPassword123',
email: 'john@example.com'
})
expect(response.statusCode).toBe(200)
})

test('✅ Kehtiv kasutajanimi - tähed ja numbrid', async () => {
const response = await request(app).post('/users').send({
username: 'John123',
password: 'TestPassword123',
email: 'john@example.com'
})
expect(response.statusCode).toBe(200)
})

test('✅ Kehtiv kasutajanimi - tähed, numbrid ja punktid', async () => {
const response = await request(app).post('/users').send({
username: 'john.doe.123',
password: 'TestPassword123',
email: 'john@example.com'
})
expect(response.statusCode).toBe(200)
})

test('❌ Liiga lühike kasutajanimi', async () => {
const response = await request(app).post('/users').send({
username: 'abc',
password: 'TestPassword123',
email: 'john@example.com'
})
expect(response.statusCode).toBe(400)
})

test('❌ Puuduv kasutajanimi', async () => {
const response = await request(app).post('/users').send({
password: 'TestPassword123',
email: 'john@example.com'
})
expect(response.statusCode).toBe(400)
})
expect(response.statusCode).toBe(200)
})

test('returns userId', async () => {
const response = await request(app).post('/users').send({
username: 'Username',
password: 'Password123',
email: 'student@example.com'
describe('Parooli valideerimine', () => {

test('✅ Kehtiv parool', async () => {
const response = await request(app).post('/users').send({
username: 'validuser',
password: 'StrongPass123',
email: 'user@example.com'
})
expect(response.statusCode).toBe(200)
})

test('❌ Liiga lühike parool', async () => {
const response = await request(app).post('/users').send({
username: 'validuser',
password: 'Pass123',
email: 'user@example.com'
})
expect(response.statusCode).toBe(400)
})

test('❌ Parool ilma suure täheta', async () => {
const response = await request(app).post('/users').send({
username: 'validuser',
password: 'weakpass123',
email: 'user@example.com'
})
expect(response.statusCode).toBe(400)
})

test('❌ Puuduv parool', async () => {
const response = await request(app).post('/users').send({
username: 'validuser',
email: 'user@example.com'
})
expect(response.statusCode).toBe(400)
})
expect(response.body.userId).toBeDefined();
})

// test response content type?
// test response message
// test response user id value
// ...
})
describe('Emaili valideerimine (mokeeritud)', () => {

test('✅ Kehtiv email', async () => {
const response = await request(app).post('/users').send({
username: 'validuser',
password: 'StrongPass123',
email: 'user@example.com'
})
expect(response.statusCode).toBe(200)
})

test('❌ Vigane email - puudub @', async () => {
const response = await request(app).post('/users').send({
username: 'validuser',
password: 'StrongPass123',
email: 'userexample.com'
})
expect(response.statusCode).toBe(400)
})

describe('given incorrect or missing username and password', () => {
test('return status 400', async () => {
const response = await request(app).post('/users').send({
username: 'user',
password: 'password',
email: 'not-an-email'
test('❌ Vigane email - kehtetu domeen', async () => {
const response = await request(app).post('/users').send({
username: 'validuser',
password: 'StrongPass123',
email: 'user@example.invalid'
})
expect(response.statusCode).toBe(400)
})

test('❌ Puuduv email', async () => {
const response = await request(app).post('/users').send({
username: 'validuser',
password: 'StrongPass123'
})
expect(response.statusCode).toBe(400)
})
expect(response.statusCode).toBe(400)
})

// test response message
// test that response does NOT have userId
// test incorrect username or password according to requirements
// test missing username or password
// ...
describe('Kompleksstsenaariumid', () => {

test('✅ Kõik väljad korrektsed', async () => {
const response = await request(app).post('/users').send({
username: 'perfect.user',
password: 'PerfectPass123',
email: 'perfect@example.com'
})
expect(response.statusCode).toBe(200)
expect(response.body.userId).toBe('1')
})

test('❌ Tühi päring', async () => {
const response = await request(app).post('/users').send({})
expect(response.statusCode).toBe(400)
})
})
})
Loading
Loading