From 4576d455f1c53c9eddf0cf92482ee28037066273 Mon Sep 17 00:00:00 2001
From: "Vojtech Vitek (V-Teq)" <vojtech.vitek@pressly.com>
Date: Thu, 30 Jun 2016 15:42:39 -0400
Subject: [PATCH] Add test to prevent JSON `null` on empty
 int64array/stringarray

---
 postgresql/local_test.go | 83 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 83 insertions(+)
 create mode 100644 postgresql/local_test.go

diff --git a/postgresql/local_test.go b/postgresql/local_test.go
new file mode 100644
index 00000000..0a17bbe8
--- /dev/null
+++ b/postgresql/local_test.go
@@ -0,0 +1,83 @@
+package postgresql
+
+import (
+	"database/sql"
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+	"upper.io/db.v2"
+)
+
+func TestStringAndInt64Array(t *testing.T) {
+	sess := mustOpen()
+	driver := sess.Driver().(*sql.DB)
+
+	defer func() {
+		driver.Exec(`DROP TABLE IF EXISTS array_types`)
+		sess.Close()
+	}()
+
+	if _, err := driver.Exec(`
+		CREATE TABLE array_types (
+			id serial primary key,
+			integers bigint[] DEFAULT NULL,
+			strings varchar(64)[]
+		)`); err != nil {
+		assert.NoError(t, err)
+	}
+
+	arrayTypes := sess.Collection("array_types")
+	err := arrayTypes.Truncate()
+	assert.NoError(t, err)
+
+	type arrayType struct {
+		ID       int64    `db:"id,pk"`
+		Integers []int64  `db:"integers,int64array"`
+		Strings  []string `db:"strings,stringarray"`
+	}
+
+	tt := []arrayType{
+		// Test nil arrays.
+		arrayType{
+			ID:       1,
+			Integers: nil,
+			Strings:  nil,
+		},
+
+		// Test empty arrays.
+		arrayType{
+			ID:       2,
+			Integers: []int64{},
+			Strings:  []string{},
+		},
+
+		// Test non-empty arrays.
+		arrayType{
+			ID:       3,
+			Integers: []int64{1, 2, 3},
+			Strings:  []string{"1", "2", "3"},
+		},
+	}
+
+	for _, item := range tt {
+		id, err := arrayTypes.Insert(item)
+		assert.NoError(t, err)
+
+		if pk, ok := id.(int64); !ok || pk == 0 {
+			t.Fatalf("Expecting an ID.")
+		}
+
+		var itemCheck arrayType
+		err = arrayTypes.Find(db.Cond{"id": id}).One(&itemCheck)
+		assert.NoError(t, err)
+		assert.Len(t, itemCheck.Integers, len(item.Integers))
+		assert.Len(t, itemCheck.Strings, len(item.Strings))
+
+		// Check nil/zero values just to make sure that the arrays won't
+		// be JSON-marshalled into `null` instead of empty array `[]`.
+		assert.NotNil(t, itemCheck.Integers)
+		assert.NotNil(t, itemCheck.Strings)
+		assert.NotZero(t, itemCheck.Integers)
+		assert.NotZero(t, itemCheck.Strings)
+	}
+}
-- 
GitLab