group_usage_rollup_migration_test.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. //go:build unit
  2. package migrations
  3. import (
  4. "testing"
  5. "github.com/stretchr/testify/require"
  6. )
  7. func TestMigration222CreatesGroupUsageRollups(t *testing.T) {
  8. content, err := FS.ReadFile("222_group_usage_daily_rollups.sql")
  9. require.NoError(t, err)
  10. sql := string(content)
  11. require.Contains(t, sql, "CREATE TABLE IF NOT EXISTS usage_group_daily_rollups")
  12. require.Contains(t, sql, "actual_cost DECIMAL(20, 10)")
  13. require.Contains(t, sql, "PRIMARY KEY (bucket_date, group_id)")
  14. require.Contains(t, sql, "CREATE TABLE IF NOT EXISTS usage_group_rollup_state")
  15. require.Contains(t, sql, "CHECK (id = 1)")
  16. require.Contains(t, sql, "TIMESTAMPTZ '1970-01-01 00:00:00+00'")
  17. require.Contains(t, sql, "ON CONFLICT (id) DO NOTHING")
  18. }
  19. func TestMigration222InvalidatesClosedBucketsWhenUsageLogsChange(t *testing.T) {
  20. content, err := FS.ReadFile("222_group_usage_daily_rollups.sql")
  21. require.NoError(t, err)
  22. sql := string(content)
  23. require.Contains(t, sql, "CREATE OR REPLACE FUNCTION invalidate_group_usage_rollup_state")
  24. require.Contains(t, sql, "SELECT closed_before")
  25. require.Contains(t, sql, "FOR UPDATE")
  26. require.Contains(t, sql, "FOR KEY SHARE")
  27. require.Contains(t, sql, "REFERENCING NEW TABLE AS inserted_usage_logs")
  28. require.Contains(t, sql, "closed_before = LEAST(closed_before, affected_date)")
  29. require.Contains(t, sql, "CREATE TRIGGER usage_logs_group_rollup_invalidate_insert")
  30. require.Contains(t, sql, "CREATE TRIGGER usage_logs_group_rollup_invalidate_delete")
  31. require.Contains(t, sql, "CREATE TRIGGER usage_logs_group_rollup_invalidate_update")
  32. require.Contains(t, sql, "AFTER UPDATE OF created_at, group_id, actual_cost")
  33. }
  34. func TestMigration223TracksConfiguredTimezone(t *testing.T) {
  35. content, err := FS.ReadFile("223_group_usage_rollup_timezone.sql")
  36. require.NoError(t, err)
  37. sql := string(content)
  38. require.Contains(t, sql, "ADD COLUMN IF NOT EXISTS timezone_name TEXT")
  39. require.Contains(t, sql, "DEFAULT 'Asia/Shanghai'")
  40. require.Contains(t, sql, "current_setting('TimeZone')")
  41. require.Contains(t, sql, "CREATE OR REPLACE FUNCTION invalidate_group_usage_rollup_state")
  42. require.Contains(t, sql, "CREATE OR REPLACE FUNCTION invalidate_group_usage_rollup_state_after_insert")
  43. }