Files

152 lines
3.6 KiB
Go

// Copyright 2026 Beacon Contributors
// SPDX-License-Identifier: AGPL-3.0-or-later
package db
import (
"context"
"errors"
"testing"
sqlc "github.com/MeshCore-Beacon/beacon-server/db/sqlc"
mockdb "github.com/MeshCore-Beacon/beacon-server/db/sqlc/mock"
"go.uber.org/mock/gomock"
)
func TestListIATAs(t *testing.T) {
ctrl := gomock.NewController(t)
mock := mockdb.NewMockQuerier(ctrl)
lat := 49.1967
lng := -123.1815
name := "Vancouver"
mock.EXPECT().
ListIATAs(gomock.Any()).
Return([]sqlc.IataCode{
{Iata: "YVR", DisplayName: &name, ApproxLat: &lat, ApproxLng: &lng},
}, nil)
store := &Store{q: mock}
iatas, err := store.ListIATAs(context.Background())
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if len(iatas) != 1 {
t.Fatalf("expected 1 iata, got %d", len(iatas))
}
if iatas[0].IATA != "YVR" {
t.Errorf("expected IATA YVR, got %s", iatas[0].IATA)
}
if *iatas[0].Lat != lat {
t.Errorf("expected Lat %f, got %f", lat, *iatas[0].Lat)
}
}
func TestGetIATA(t *testing.T) {
ctrl := gomock.NewController(t)
mock := mockdb.NewMockQuerier(ctrl)
lat := 49.1967
lng := -123.1815
name := "Vancouver"
mock.EXPECT().
GetIATA(gomock.Any(), "YVR").
Return(sqlc.IataCode{Iata: "YVR", DisplayName: &name, ApproxLat: &lat, ApproxLng: &lng}, nil)
store := &Store{q: mock}
iata, err := store.GetIATA(context.Background(), "YVR")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if iata.IATA != "YVR" {
t.Errorf("expected YVR, got %s", iata.IATA)
}
if *iata.Lng != lng {
t.Errorf("expected Lng %f, got %f", lng, *iata.Lng)
}
}
func TestGetRegion_WithZoomLevel(t *testing.T) {
ctrl := gomock.NewController(t)
mock := mockdb.NewMockQuerier(ctrl)
zoom := int32(10)
mock.EXPECT().
GetRegion(gomock.Any(), int32(1)).
Return(sqlc.GetRegionRow{
ID: 1,
Slug: "bc",
Name: "British Columbia",
ZoomLevel: &zoom,
}, nil)
mock.EXPECT().
GetRegionIATAs(gomock.Any(), int32(1)).
Return([]string{"YVR", "YYJ"}, nil)
store := &Store{q: mock}
region, err := store.GetRegion(context.Background(), 1)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if region.Slug != "bc" {
t.Errorf("expected slug bc, got %s", region.Slug)
}
if region.ZoomLevel == nil {
t.Fatal("expected ZoomLevel to be set")
}
if *region.ZoomLevel != 10 {
t.Errorf("expected ZoomLevel 10, got %d", *region.ZoomLevel)
}
if len(region.IATAs) != 2 {
t.Errorf("expected 2 IATAs, got %d", len(region.IATAs))
}
}
func TestGetRegion_IATAError(t *testing.T) {
ctrl := gomock.NewController(t)
mock := mockdb.NewMockQuerier(ctrl)
mock.EXPECT().
GetRegion(gomock.Any(), int32(1)).
Return(sqlc.GetRegionRow{ID: 1, Slug: "bc", Name: "British Columbia"}, nil)
mock.EXPECT().
GetRegionIATAs(gomock.Any(), int32(1)).
Return(nil, errors.New("db error"))
store := &Store{q: mock}
_, err := store.GetRegion(context.Background(), 1)
if err == nil {
t.Fatal("expected error, got nil")
}
}
func TestGetRegionBySlug(t *testing.T) {
ctrl := gomock.NewController(t)
mock := mockdb.NewMockQuerier(ctrl)
mock.EXPECT().
GetRegionBySlug(gomock.Any(), "bc").
Return(sqlc.GetRegionBySlugRow{ID: 1, Slug: "bc", Name: "British Columbia"}, nil)
mock.EXPECT().
GetRegionIATAs(gomock.Any(), int32(1)).
Return([]string{"YVR"}, nil)
store := &Store{q: mock}
region, err := store.GetRegionBySlug(context.Background(), "bc")
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
if region.Slug != "bc" {
t.Errorf("expected slug bc, got %s", region.Slug)
}
if len(region.IATAs) != 1 {
t.Errorf("expected 1 IATA, got %d", len(region.IATAs))
}
}