Add Postgres mapping for SPC outlooks
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
package postgres
|
||||
|
||||
import "testing"
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestWeatherPostgresSchemaShape(t *testing.T) {
|
||||
s := PostgresSchema()
|
||||
@@ -20,6 +23,8 @@ func TestWeatherPostgresSchemaShape(t *testing.T) {
|
||||
tableAlertRuns: true,
|
||||
tableAlerts: true,
|
||||
tableAlertReferences: true,
|
||||
tableOutlookRuns: true,
|
||||
tableOutlooks: true,
|
||||
}
|
||||
|
||||
if len(s.Tables) != len(wantTables) {
|
||||
@@ -43,6 +48,29 @@ func TestWeatherPostgresSchemaShape(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestWeatherPostgresSchemaIncludesOutlookTables(t *testing.T) {
|
||||
runColumns := columnsForTable(t, tableOutlookRuns)
|
||||
for _, col := range []string{"event_id", "event_kind", "event_source", "event_schema", "event_emitted_at", "event_effective_at", "location_id", "location_name", "latitude", "longitude", "as_of", "issued_at", "outlook_count"} {
|
||||
if !runColumns[col] {
|
||||
t.Fatalf("%s missing %s column", tableOutlookRuns, col)
|
||||
}
|
||||
}
|
||||
assertTablePrimaryKey(t, tableOutlookRuns, []string{"event_id"})
|
||||
assertTableIndex(t, tableOutlookRuns, "idx_wf_outlook_run_location_as_of", []string{"location_id", "as_of"})
|
||||
assertTableIndex(t, tableOutlookRuns, "idx_wf_outlook_run_as_of", []string{"as_of"})
|
||||
|
||||
outlookColumns := columnsForTable(t, tableOutlooks)
|
||||
for _, col := range []string{"run_event_id", "outlook_index", "as_of", "product", "day", "outlook_type", "label", "label_text", "severity_rank", "valid_from", "valid_to", "issued_at", "expires_at", "forecaster", "headline", "summary", "discussion", "source_url", "image_url", "contains_location", "geometry_json"} {
|
||||
if !outlookColumns[col] {
|
||||
t.Fatalf("%s missing %s column", tableOutlooks, col)
|
||||
}
|
||||
}
|
||||
assertTablePrimaryKey(t, tableOutlooks, []string{"run_event_id", "outlook_index"})
|
||||
assertTableIndex(t, tableOutlooks, "idx_wf_outlooks_contains_valid", []string{"contains_location", "valid_from", "valid_to"})
|
||||
assertTableIndex(t, tableOutlooks, "idx_wf_outlooks_day_type_label", []string{"day", "outlook_type", "label"})
|
||||
assertTableIndex(t, tableOutlooks, "idx_wf_outlooks_valid", []string{"valid_from", "valid_to"})
|
||||
}
|
||||
|
||||
func TestWeatherPostgresSchemaIncludesWeatherStoryColumns(t *testing.T) {
|
||||
runColumns := columnsForTable(t, tableWeatherStoryRuns)
|
||||
if !runColumns["as_of"] {
|
||||
@@ -60,6 +88,39 @@ func TestWeatherPostgresSchemaIncludesWeatherStoryColumns(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func assertTablePrimaryKey(t *testing.T, table string, want []string) {
|
||||
t.Helper()
|
||||
for _, tbl := range PostgresSchema().Tables {
|
||||
if tbl.Name != table {
|
||||
continue
|
||||
}
|
||||
if strings.Join(tbl.PrimaryKey, ",") != strings.Join(want, ",") {
|
||||
t.Fatalf("%s primary key = %#v, want %#v", table, tbl.PrimaryKey, want)
|
||||
}
|
||||
return
|
||||
}
|
||||
t.Fatalf("missing table %q", table)
|
||||
}
|
||||
|
||||
func assertTableIndex(t *testing.T, table string, name string, want []string) {
|
||||
t.Helper()
|
||||
for _, tbl := range PostgresSchema().Tables {
|
||||
if tbl.Name != table {
|
||||
continue
|
||||
}
|
||||
for _, idx := range tbl.Indexes {
|
||||
if idx.Name == name {
|
||||
if strings.Join(idx.Columns, ",") != strings.Join(want, ",") {
|
||||
t.Fatalf("%s index %s columns = %#v, want %#v", table, name, idx.Columns, want)
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
t.Fatalf("%s missing index %s", table, name)
|
||||
}
|
||||
t.Fatalf("missing table %q", table)
|
||||
}
|
||||
|
||||
func columnsForTable(t *testing.T, table string) map[string]bool {
|
||||
t.Helper()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user