TransHub_backend / test-protection-system.js
linguabot's picture
Upload folder using huggingface_hub
da819ac verified
const mongoose = require('mongoose');
const SourceText = require('./models/SourceText');
// MongoDB connection
const MONGODB_URI = process.env.MONGODB_URI || 'mongodb+srv://nothingyu:wSg3lbO1PkHiRMq9@sandbox.ecysggv.mongodb.net/?retryWrites=true&w=majority&appName=sandbox';
async function testProtectionSystem() {
try {
console.log('🌐 Connecting to MongoDB...');
await mongoose.connect(MONGODB_URI);
console.log('βœ… Connected to MongoDB');
// Find a protected task to test
const protectedTask = await SourceText.findOne({
isProtected: true,
weekNumber: 1
});
if (!protectedTask) {
console.log('❌ No protected tasks found');
return;
}
console.log(`\nπŸ§ͺ TESTING PROTECTION SYSTEM:`);
console.log(` Task: ${protectedTask.title}`);
console.log(` ID: ${protectedTask._id}`);
console.log(` Protected: ${protectedTask.isProtected ? 'YES' : 'NO'}`);
console.log(` Reason: ${protectedTask.protectedReason}`);
// Test 1: Try to update a protected task (should fail)
console.log('\nπŸ”’ TEST 1: Attempting to update protected task...');
try {
const updateResult = await SourceText.findByIdAndUpdate(
protectedTask._id,
{ content: 'This should not work!' },
{ new: true }
);
if (updateResult) {
console.log('❌ PROTECTION FAILED: Task was updated despite being protected!');
}
} catch (error) {
console.log('βœ… PROTECTION WORKING: Update was prevented');
}
// Test 2: Try to delete a protected task (should fail)
console.log('\nπŸ”’ TEST 2: Attempting to delete protected task...');
try {
const deleteResult = await SourceText.findByIdAndDelete(protectedTask._id);
if (deleteResult) {
console.log('❌ PROTECTION FAILED: Task was deleted despite being protected!');
} else {
console.log('βœ… PROTECTION WORKING: Deletion was prevented');
}
} catch (error) {
console.log('βœ… PROTECTION WORKING: Deletion was prevented');
}
// Test 3: Show how to safely unlock a task
console.log('\nπŸ”“ TEST 3: Demonstrating unlock process...');
console.log(' To unlock a protected task, you need the special key:');
console.log(' Key: UNLOCK_WEEK1_WEEK2_2024');
console.log(' Usage: unlockProtectedTask(taskId, key)');
// Test 4: Show current protection status
console.log('\nπŸ“Š PROTECTION STATUS:');
const allProtectedTasks = await SourceText.find({ isProtected: true });
const week1Protected = allProtectedTasks.filter(t => t.weekNumber === 1).length;
const week2Protected = allProtectedTasks.filter(t => t.weekNumber === 2).length;
console.log(` Week 1 protected tasks: ${week1Protected}`);
console.log(` Week 2 protected tasks: ${week2Protected}`);
console.log(` Total protected tasks: ${allProtectedTasks.length}`);
// Test 5: Show safe update for non-protected tasks
console.log('\nβœ… TEST 5: Safe update for non-protected tasks...');
const nonProtectedTask = await SourceText.findOne({
isProtected: { $ne: true },
category: 'tutorial'
});
if (nonProtectedTask) {
console.log(` Found non-protected task: ${nonProtectedTask.title}`);
console.log(` This task can be safely updated`);
} else {
console.log(` No non-protected tutorial tasks found`);
}
console.log('\nπŸŽ‰ PROTECTION SYSTEM TEST COMPLETE');
console.log('\nπŸ“‹ PROTECTION SUMMARY:');
console.log(' βœ… Week 1 and Week 2 tutorial tasks are LOCKED');
console.log(' βœ… Protected tasks cannot be accidentally modified');
console.log(' βœ… Special key required to unlock tasks');
console.log(' βœ… Modification history is tracked');
console.log(' βœ… Safe updates still work for non-protected tasks');
} catch (error) {
console.error('❌ Error testing protection system:', error);
} finally {
await mongoose.disconnect();
console.log('πŸ”Œ Disconnected from MongoDB');
}
}
// SAFE UPDATE FUNCTION WITH PROTECTION CHECK
async function safeUpdateTask(taskId, updates, reason = 'No reason provided') {
try {
console.log('🌐 Connecting to MongoDB...');
await mongoose.connect(MONGODB_URI);
console.log('βœ… Connected to MongoDB');
const task = await SourceText.findById(taskId);
if (!task) {
console.log(`❌ Task with ID ${taskId} not found`);
return false;
}
if (task.isProtected) {
console.log(`🚫 CANNOT UPDATE: Task "${task.title}" is PROTECTED`);
console.log(` Reason: ${task.protectedReason}`);
console.log(` To update this task, you must first unlock it`);
return false;
}
// Safe to update
const updatedTask = await SourceText.findByIdAndUpdate(
taskId,
{
...updates,
lastModified: new Date(),
modificationHistory: [
...(task.modificationHistory || []),
{
action: 'UPDATED',
timestamp: new Date(),
reason: reason
}
]
},
{ new: true }
);
console.log(`βœ… Updated task: ${updatedTask.title}`);
return true;
} catch (error) {
console.error('❌ Error updating task:', error);
return false;
} finally {
await mongoose.disconnect();
console.log('πŸ”Œ Disconnected from MongoDB');
}
}
// Export for use in other scripts
module.exports = {
testProtectionSystem,
safeUpdateTask
};
// Run the test
testProtectionSystem();