From 3623ea407724174751a3ce029d71c32f8b48fc9e Mon Sep 17 00:00:00 2001 From: aurbina83 Date: Fri, 17 Apr 2026 09:53:03 -0400 Subject: [PATCH 1/2] fix: initialize nil patterns map in extractPlaceID to prevent panic The patterns map was declared but never initialized before being written to in the sync.Once block, causing a nil map assignment panic at runtime. Added unit tests for extractPlaceID covering various URL formats. --- gmaps/reviews.go | 1 + gmaps/reviews_test.go | 58 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 gmaps/reviews_test.go diff --git a/gmaps/reviews.go b/gmaps/reviews.go index 7a8b7379..2bb8aeb6 100644 --- a/gmaps/reviews.go +++ b/gmaps/reviews.go @@ -206,6 +206,7 @@ func extractPlaceID(mapURL string) (string, error) { hexMatchPattern, // Hex format place ID } + patterns = make(map[string]*regexp.Regexp) for _, p := range avail { patterns[p] = regexp.MustCompile(p) } diff --git a/gmaps/reviews_test.go b/gmaps/reviews_test.go new file mode 100644 index 00000000..e9a0b9e0 --- /dev/null +++ b/gmaps/reviews_test.go @@ -0,0 +1,58 @@ +package gmaps + +import ( + "testing" +) + +func Test_extractPlaceID(t *testing.T) { + tests := []struct { + name string + url string + want string + wantErr bool + }{ + { + name: "standard hex format with exclamation prefix", + url: "https://www.google.com/maps/place/Joe's+Pizza+Broadway/@40.7546795,-73.9870291,17z/data=!4m7!3m6!1s0x89c259ab3c1ef289:0x3b67a41175949f55!8m2!3d40.7546795!4d-73.9870291!16s%2Fg%2F11bw4ws2mt?hl=en&entry=ttu", + want: "0x89c259ab3c1ef289:0x3b67a41175949f55", + wantErr: false, + }, + { + name: "place_id query parameter format", + url: "https://www.google.com/maps/place/Joe's+Pizza/@40.7546795,-73.9870291,17z?place_id=ChIJDdnwdv0y5xQRRytw1ihZQeU&hl=en", + want: "ChIJDdnwdv0y5xQRRytw1ihZQeU", + wantErr: false, + }, + { + name: "full place URL with data and hex ID", + url: "https://www.google.com/maps/place/Coffee+Project+New+York/data=!4m7!3m6!1s0x89c2599b5a24d7fd:0x9e354f6cf514b9fc!8m2!3d40.7270884!4d-73.989382!16s%2Fg%2F11c3svpqld!19sChIJ_dckWptZwokR_LkU9WxPNZ4", + want: "0x89c2599b5a24d7fd:0x9e354f6cf514b9fc", + wantErr: false, + }, + { + name: "maps search URL (no place ID)", + url: "https://www.google.com/maps/search/pizza+in+Brooklyn+NY", + want: "", + wantErr: true, + }, + { + name: "empty URL", + url: "", + want: "", + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := extractPlaceID(tt.url) + if (err != nil) != tt.wantErr { + t.Errorf("extractPlaceID() error = %v, wantErr %v", err, tt.wantErr) + return + } + if got != tt.want { + t.Errorf("extractPlaceID() = %v, want %v", got, tt.want) + } + }) + } +} From ac93fc6c88bc318b92953105604174ae6cbeede3 Mon Sep 17 00:00:00 2001 From: Giorgos Komninos Date: Sun, 19 Apr 2026 16:33:21 +0300 Subject: [PATCH 2/2] fix: fix lint errors --- gmaps/reviews_test.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/gmaps/reviews_test.go b/gmaps/reviews_test.go index e9a0b9e0..5296dd63 100644 --- a/gmaps/reviews_test.go +++ b/gmaps/reviews_test.go @@ -1,7 +1,10 @@ +//nolint:testpackage // we need to test unexported functions in the same package package gmaps import ( "testing" + + "github.com/stretchr/testify/assert" ) func Test_extractPlaceID(t *testing.T) { @@ -50,9 +53,8 @@ func Test_extractPlaceID(t *testing.T) { t.Errorf("extractPlaceID() error = %v, wantErr %v", err, tt.wantErr) return } - if got != tt.want { - t.Errorf("extractPlaceID() = %v, want %v", got, tt.want) - } + + assert.Equal(t, tt.want, got, "extractPlaceID() = %v, want %v", got, tt.want) }) } }