This hearty and veggie-packed soup is great for a crowd or for several family dinners. Protip: cooking the pasta separately and adding it to serving bowls prevents the shells from soaking up all the broth in the pot, especially if you have leftovers.
Heat two tablespoons of the olive oil in a large pot over high heat. Remove sausage from casings (if you bought links) and crumble it into the pot. Cook, stirring occasionally, until sausage is browned and cooked through. Remove sausage to a plate and spoon out and discard all but about two tablespoons of fat from the pot.
Lower heat to medium. Add onion, carrots and celery and stir to coat with fat. Cook for about 10 minutes, stirring occasionally, until carrots are fairly tender and veggies are lightly browned in spots. Add garlic and cook, stirring, one minute more.
Stir in stock and tomatoes, scraping up any browned bits from the bottom of the pot. Bring to a boil over high heat, then reduce heat to simmer for five minutes.
Meanwhile, cook pasta shells to al dente in a separate pot of well salted water. Drain and toss with remaining tablespoon olive oil.
Back in the big soup pot, add beans, reserved sausage and spinach. Simmer until spinach is wilted. Off the heat, stir in parsley and black pepper to taste.
Ladle soup into bowls, stirring some pasta shells into each. Serve with cheese to pass at the table.