Clean. Here's a summary of the changes for issue #40:
Before: 4 test classes, each creating and destroying its own droplet (4 machines total):
- TestDropletLifecycle — create/list/destroy
- TestDNSLifecycle — create with DNS, verify, destroy
- TestCreateWithInitialize — create with type, verify
- TestCustomTag — create with tag, verify
After: 1 test class with a class-scoped fixture that creates a single droplet with all features (--type e2e-basic, --update-dns, --tag, --wait-for-ip), and 6 individual test methods that each verify a specific aspect:
1. test_droplet_appears_in_list — name in list output
2. test_droplet_has_ip — IP assigned
3. test_dns_record_created — A record exists
4. test_dns_zone_in_create_output — DNS zone in CLI output
5. test_type_tag_applied — type tag filterable
6. test_custom_tag_applied — custom tag filterable
Each test is reported as a separate pass/fail. The fixture teardown handles destroy with --delete-dns. This reduces the number of machines from 4 to 1, and also extracts the droplet ID parsing into a shared _extract_droplet_id() helper.