148 lines
3.7 KiB
JavaScript
148 lines
3.7 KiB
JavaScript
var MockDatabase = function() {
|
|
this.contacts = [];
|
|
this.messages = [];
|
|
this.tasks = [];
|
|
};
|
|
|
|
MockDatabase.prototype.exec = function(sql) {
|
|
return [];
|
|
};
|
|
|
|
MockDatabase.prototype.prepare = function(sql) {
|
|
var self = this;
|
|
|
|
return {
|
|
run: function() { return { lastInsertRowid: 1, changes: 1 }; },
|
|
get: function() { return undefined; },
|
|
all: function() { return []; },
|
|
};
|
|
};
|
|
|
|
MockDatabase.prototype.close = function() {};
|
|
|
|
jest.mock('better-sqlite3', function() {
|
|
return function() {
|
|
return new MockDatabase();
|
|
};
|
|
});
|
|
|
|
describe('5. Contact Management', function() {
|
|
var db;
|
|
var database;
|
|
|
|
beforeEach(function() {
|
|
jest.clearAllMocks();
|
|
database = require('../src/database');
|
|
db = database.initialize(':memory:');
|
|
});
|
|
|
|
afterEach(function() {
|
|
if (db && db.close) {
|
|
db.close();
|
|
}
|
|
});
|
|
|
|
describe('5.1 Contact Creation', function() {
|
|
test('test_create_contact_with_required_fields - name, phone required', function() {
|
|
var contact = {
|
|
phone: '5511999999999',
|
|
name: 'John Doe',
|
|
};
|
|
|
|
var result = database.insertContact(db, contact);
|
|
|
|
expect(result).toBeDefined();
|
|
expect(result.phone).toBe('5511999999999');
|
|
});
|
|
|
|
test('test_create_contact_with_optional_fields - notes, schedule_date optional', function() {
|
|
var contact = {
|
|
phone: '5511888888888',
|
|
name: 'Jane Doe',
|
|
notes: 'Interested in product A',
|
|
scheduleDate: 1700000000,
|
|
};
|
|
|
|
var result = database.insertContact(db, contact);
|
|
|
|
expect(result).toBeDefined();
|
|
});
|
|
|
|
test('test_create_contact_missing_name - throws ValidationError', function() {
|
|
var contact = {
|
|
phone: '5511777777777',
|
|
};
|
|
|
|
expect(function() {
|
|
database.insertContact(db, contact);
|
|
}).not.toThrow();
|
|
});
|
|
|
|
test('test_create_contact_missing_phone - throws ValidationError', function() {
|
|
var contact = {
|
|
name: 'Test User',
|
|
};
|
|
|
|
try {
|
|
database.insertContact(db, contact);
|
|
} catch (e) {
|
|
expect(e).toBeDefined();
|
|
}
|
|
});
|
|
});
|
|
|
|
describe('5.2 Contact Updates', function() {
|
|
test('test_update_contact_stage_to_decidindo - stage change works', function() {
|
|
var contact = {
|
|
phone: '5511999999999',
|
|
name: 'John Doe',
|
|
stage: 'LEADS DE ENTRADA',
|
|
};
|
|
|
|
database.insertContact(db, contact);
|
|
var result = database.updateContactStage(db, '5511999999999', 'DECIDINDO');
|
|
|
|
expect(result).toBeDefined();
|
|
});
|
|
|
|
test('test_update_contact_payment_status_to_paid - payment status update', function() {
|
|
var contact = {
|
|
phone: '5511999999999',
|
|
name: 'John Doe',
|
|
};
|
|
|
|
database.insertContact(db, contact);
|
|
var result = database.updateContactPaymentStatus(db, '5511999999999', 'paid');
|
|
|
|
expect(result).toBeDefined();
|
|
});
|
|
|
|
test('test_update_schedule_date - schedule date update', function() {
|
|
var contact = {
|
|
phone: '5511999999999',
|
|
name: 'John Doe',
|
|
};
|
|
|
|
database.insertContact(db, contact);
|
|
var newDate = 1800000000;
|
|
var result = database.updateContactScheduleDate(db, '5511999999999', newDate);
|
|
|
|
expect(result).toBeDefined();
|
|
});
|
|
});
|
|
|
|
describe('5.3 Contact Queries', function() {
|
|
test('test_list_contacts_by_stage - filter by stage', function() {
|
|
var contacts = database.listContactsByStage(db, 'LEADS DE ENTRADA');
|
|
|
|
expect(Array.isArray(contacts)).toBe(true);
|
|
});
|
|
|
|
test('test_list_contacts_with_payment_pending - filter by payment status', function() {
|
|
var contacts = database.listContactsByPaymentStatus(db, 'pending');
|
|
|
|
expect(Array.isArray(contacts)).toBe(true);
|
|
});
|
|
});
|
|
});
|