first commit 🎉
This commit is contained in:
@@ -0,0 +1,220 @@
|
||||
import { describe, expect, it } from 'bun:test'
|
||||
import { loginBody, getInfoResponse, loginResponseSchema, getInfoSchema } from '~/modules/auth/schema'
|
||||
|
||||
describe('Auth Schema', () => {
|
||||
describe('loginBody', () => {
|
||||
it('should validate correct login body', () => {
|
||||
const validBody = {
|
||||
email: 'test@example.com',
|
||||
password: 'password123',
|
||||
}
|
||||
|
||||
expect(() => loginBody.parse(validBody)).not.toThrow()
|
||||
})
|
||||
|
||||
it('should reject invalid email format', () => {
|
||||
const invalidBody = {
|
||||
email: 'invalid-email',
|
||||
password: 'password123',
|
||||
}
|
||||
|
||||
expect(() => loginBody.parse(invalidBody)).toThrow()
|
||||
})
|
||||
|
||||
it('should reject short password', () => {
|
||||
const invalidBody = {
|
||||
email: 'test@example.com',
|
||||
password: 'short',
|
||||
}
|
||||
|
||||
expect(() => loginBody.parse(invalidBody)).toThrow()
|
||||
})
|
||||
|
||||
it('should reject missing email', () => {
|
||||
const invalidBody = {
|
||||
password: 'password123',
|
||||
}
|
||||
|
||||
expect(() => loginBody.parse(invalidBody)).toThrow()
|
||||
})
|
||||
|
||||
it('should reject missing password', () => {
|
||||
const invalidBody = {
|
||||
email: 'test@example.com',
|
||||
}
|
||||
|
||||
expect(() => loginBody.parse(invalidBody)).toThrow()
|
||||
})
|
||||
})
|
||||
|
||||
describe('getInfoResponse', () => {
|
||||
it('should validate admin user info', () => {
|
||||
const adminUser = {
|
||||
id: 123,
|
||||
name: 'Admin User',
|
||||
email: 'admin@example.com',
|
||||
phone: null,
|
||||
image: null,
|
||||
googleId: null,
|
||||
role: 'admin',
|
||||
status: true,
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date(),
|
||||
}
|
||||
|
||||
expect(() => getInfoResponse.parse(adminUser)).not.toThrow()
|
||||
})
|
||||
|
||||
it('should validate volunteer user info', () => {
|
||||
const volunteerUser = {
|
||||
id: 456,
|
||||
name: 'Volunteer User',
|
||||
email: 'volunteer@example.com',
|
||||
phone: '+1234567890',
|
||||
image: null,
|
||||
googleId: null,
|
||||
role: 'volunteer',
|
||||
status: true,
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date(),
|
||||
}
|
||||
|
||||
expect(() => getInfoResponse.parse(volunteerUser)).not.toThrow()
|
||||
})
|
||||
|
||||
it('should reject invalid role', () => {
|
||||
const invalidUser = {
|
||||
id: 'user-123',
|
||||
name: 'Test User',
|
||||
email: 'test@example.com',
|
||||
role: 'invalid-role',
|
||||
image: null,
|
||||
googleId: null,
|
||||
}
|
||||
|
||||
expect(() => getInfoResponse.parse(invalidUser)).toThrow()
|
||||
})
|
||||
|
||||
it('should reject volunteer without volunteer data', () => {
|
||||
const invalidVolunteer = {
|
||||
role: 'volunteer',
|
||||
}
|
||||
|
||||
expect(() => getInfoResponse.parse(invalidVolunteer)).toThrow()
|
||||
})
|
||||
})
|
||||
|
||||
describe('loginResponseSchema', () => {
|
||||
it('should have correct 200 response structure', () => {
|
||||
const response200 = loginResponseSchema[200]
|
||||
expect(response200).toBeDefined()
|
||||
|
||||
const validResponse = {
|
||||
message: 'Logged in.',
|
||||
data: {
|
||||
accessToken: 'some-jwt-token',
|
||||
},
|
||||
}
|
||||
|
||||
expect(() => response200.parse(validResponse)).not.toThrow()
|
||||
})
|
||||
|
||||
it('should have correct 401 response structure', () => {
|
||||
const response401 = loginResponseSchema[401]
|
||||
expect(response401).toBeDefined()
|
||||
|
||||
const validError = {
|
||||
message: 'Invalid username or password.',
|
||||
}
|
||||
|
||||
expect(() => response401.parse(validError)).not.toThrow()
|
||||
})
|
||||
|
||||
it('should reject 200 response with wrong message', () => {
|
||||
const response200 = loginResponseSchema[200]
|
||||
const invalidResponse = {
|
||||
message: 'Wrong message.',
|
||||
data: {
|
||||
accessToken: 'some-jwt-token',
|
||||
},
|
||||
}
|
||||
|
||||
expect(() => response200.parse(invalidResponse)).toThrow()
|
||||
})
|
||||
})
|
||||
|
||||
describe('getInfoSchema', () => {
|
||||
it('should have correct 200 response structure for admin', () => {
|
||||
const response200 = getInfoSchema[200]
|
||||
expect(response200).toBeDefined()
|
||||
|
||||
const validResponse = {
|
||||
message: 'Get user info.',
|
||||
data: {
|
||||
id: 123,
|
||||
name: 'Admin User',
|
||||
email: 'admin@example.com',
|
||||
phone: null,
|
||||
image: null,
|
||||
googleId: null,
|
||||
role: 'admin',
|
||||
status: true,
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date(),
|
||||
},
|
||||
}
|
||||
|
||||
expect(() => response200.parse(validResponse)).not.toThrow()
|
||||
})
|
||||
|
||||
it('should have correct 200 response structure for volunteer', () => {
|
||||
const response200 = getInfoSchema[200]
|
||||
|
||||
const validResponse = {
|
||||
message: 'Get user info.',
|
||||
data: {
|
||||
id: 789,
|
||||
name: 'Volunteer User',
|
||||
email: 'volunteer@example.com',
|
||||
phone: '+1234567890',
|
||||
image: null,
|
||||
googleId: null,
|
||||
role: 'volunteer',
|
||||
status: true,
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date(),
|
||||
},
|
||||
}
|
||||
|
||||
expect(() => response200.parse(validResponse)).not.toThrow()
|
||||
})
|
||||
|
||||
it('should have correct 401 response structure', () => {
|
||||
const response401 = getInfoSchema[401]
|
||||
expect(response401).toBeDefined()
|
||||
|
||||
const validError = {
|
||||
message: 'Unauthenticated.',
|
||||
}
|
||||
|
||||
expect(() => response401.parse(validError)).not.toThrow()
|
||||
})
|
||||
|
||||
it('should reject 200 response with wrong message', () => {
|
||||
const response200 = getInfoSchema[200]
|
||||
const invalidResponse = {
|
||||
message: 'Wrong message.',
|
||||
data: {
|
||||
id: 'user-123',
|
||||
name: 'Test User',
|
||||
email: 'test@example.com',
|
||||
role: 'admin',
|
||||
image: null,
|
||||
googleId: null,
|
||||
},
|
||||
}
|
||||
|
||||
expect(() => response200.parse(invalidResponse)).toThrow()
|
||||
})
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user