Preheat the oven to 400°F (200°C or 180°C for a fan oven).
Lightly grease a 9 x 13 inch casserole dish with vegetable oil.
Place the chopped onions, eggplant, zucchini, red peppers and mushrooms on a large baking tray and toss with 2 tablespoons of the olive oil. (You’ll need the rest later.)
Roast the vegetables for 15 minutes.
Remove from the oven, drizzle over the remaining 2 tablespoons of olive oil and turn the vegetables.
Return to the oven for a further 20 minutes.
Meanwhile, heat the 2 teaspoons of olive oil in a medium saucepan over medium heat. (Don’t be tempted to use a smaller saucepan as you are going to add the roast vegetables later.)
Toss in the garlic and warm it through but don’t let it take on any colour.
Add the tomato sauce or passata and the pesto (if using).
Add the oregano and salt and pepper to taste.
Turn the heat down and simmer for about 5 to 10 minutes, stirring occasionally.
Remove the roast vegetables from the oven when they are cooked and add them to the tomato sauce mixture in the saucepan.
Stir through gently, cover and remove from the heat.
In another small saucepan, melt the butter over medium heat.
Whisk in the flour.
Cook for two to three minutes, whisking constantly.
Gradually add the milk, whisking after each addition, to make a fairly thick sauce.
Add salt and pepper to taste.
Place the roast vegetable and tomato mixture in the bottom of the casserole dish, spreading it out evenly.
Top with a fairly even layer of spinach, if you are using it.
Spread the white sauce over the top of the casserole. Mix the cheeses together and sprinkle over top.
Bake for 20 to 30 minutes, or until the top begins to turn golden brown.
Enjoy with a salad and /or crusty bread.