const fs = require('fs'); // Mock DOM/Window const callbacks = {}; global.window = { MagicBot: { state: { inventory: { items: [] }, garden: {}, shops: {} }, automation: { autoFeed: true, petDiet: new Set(['Tomato']) }, events: { emit: (event, data) => { } }, on: (event, callback) => { callbacks[event] = callback; }, sendMsg: (msg) => { console.log("SEND_MSG:", JSON.stringify(msg)); }, sellAll: null // Will be overwritten } }; // Start MB definition const MB = global.window.MagicBot; // Mock Inventory with Pet and Food MB.state.inventory.items = [ { id: "pet_1", itemType: "Pet", petSpecies: "Worm", quantity: 1 }, { id: "crop_tomato_1", itemType: "Produce", species: "Tomato", quantity: 5 }, { id: "crop_carrot_1", itemType: "Produce", species: "Carrot", quantity: 5 } ]; // Load main.js content to get the logic // We need to strip the wrapping IIFE or just eval it. // However, the file reads `const MB = window.MagicBot;`. // If we eval it, it should attach methods to our mock MB. const mainJsPath = '/home/matiss/Documents/Code/magicbot/extension/modules/main.js'; const mainJsContent = fs.readFileSync(mainJsPath, 'utf8'); try { eval(mainJsContent); } catch (e) { // Ignore errors related to interval or DOM if any, // but main.js mostly sets up interval and methods. console.log("Eval loaded with some harmless errors likely:", e.message); } // Re-enable automation and set diet after main.js reset it MB.automation.autoFeed = true; MB.automation.petDiet = new Set(['Tomato']); // Test Feeding console.log("\n--- TEST: Explicit Feed ---"); console.log("Pet Diet:", [...MB.automation.petDiet]); MB.feedPets(); // Test Auto Sell Trigger console.log("\n--- TEST: Auto Sell Trigger ---"); MB.sellAll();