Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 73 additions & 4 deletions tests/test_e2e.py
Original file line number Diff line number Diff line change
Expand Up @@ -518,16 +518,23 @@ def test_full_cli_e2e(self) -> None:
self._test_job_commands()

# ==============================================================
# PHASE 14: Cleanup
# PHASE 14: Storage column delete
# ==============================================================

_step(40, "config delete", "cleanup config via CLI")
_step(40, "storage delete-column", "dry-run + actual delete + verify")
self._test_delete_column(table_id)

# ==============================================================
# PHASE 15: Cleanup
# ==============================================================

_step(41, "config delete", "cleanup config via CLI")
self._test_config_delete(config_id)

_step(41, "storage delete-table + delete-bucket", "CLI-driven cleanup")
_step(42, "storage delete-table + delete-bucket", "CLI-driven cleanup")
self._test_storage_cleanup(bucket_id, table_id)

_step(42, "project edit + remove", "final cleanup")
_step(43, "project edit + remove", "final cleanup")
self._test_project_edit_and_remove()

print("\n" + "=" * 60)
Expand Down Expand Up @@ -1871,6 +1878,68 @@ def _test_config_delete(self, config_id: str) -> None:
# Remove from cleanup since we deleted via CLI
self._created_config_ids.remove((TEST_COMPONENT_ID, config_id))

def _test_delete_column(self, table_id: str) -> None:
"""Delete a column from a table: dry-run, actual delete, verify."""
# Verify the table has 'value' column before we delete it
data = self._run_ok(
"storage",
"table-detail",
"--project",
self.alias,
"--table-id",
table_id,
)
columns_before = data["data"]["columns"]
assert "value" in columns_before, f"Expected 'value' column, got {columns_before}"

# delete-column dry-run
data = self._run_ok(
"storage",
"delete-column",
"--project",
self.alias,
"--table-id",
table_id,
"--column",
"value",
"--dry-run",
)
assert data["data"]["dry_run"] is True
assert "value" in data["data"]["would_delete"]
assert data["data"]["table_id"] == table_id

# delete-column (actual)
data = self._run_ok(
"storage",
"delete-column",
"--project",
self.alias,
"--table-id",
table_id,
"--column",
"value",
"--yes",
)
assert "value" in data["data"]["deleted"]
assert data["data"]["failed"] == []
assert data["data"]["table_id"] == table_id

# Verify the column is gone
data = self._run_ok(
"storage",
"table-detail",
"--project",
self.alias,
"--table-id",
table_id,
)
columns_after = data["data"]["columns"]
assert "value" not in columns_after, (
f"'value' column should be deleted, got {columns_after}"
)
assert "id" in columns_after
assert "name" in columns_after

def _test_storage_cleanup(self, bucket_id: str, table_id: str) -> None:
"""Delete table and bucket via CLI commands."""
# delete-table (dry-run first)
Expand Down