json_test.go 1.26 KB
Newer Older
1
package jsonutil
2 3 4 5 6 7 8 9 10 11 12 13 14 15

import (
	"encoding/json"
	"os"
	"path/filepath"
	"testing"

	"github.com/stretchr/testify/require"
)

func TestRoundTripJSON(t *testing.T) {
	dir := t.TempDir()
	file := filepath.Join(dir, "test.json")
	data := &jsonTestData{A: "yay", B: 3}
16
	err := WriteJSON(file, data, 0o755)
17 18 19 20 21 22 23 24 25
	require.NoError(t, err)

	// Confirm the file is uncompressed
	fileContent, err := os.ReadFile(file)
	require.NoError(t, err)
	err = json.Unmarshal(fileContent, &jsonTestData{})
	require.NoError(t, err)

	var result *jsonTestData
26
	result, err = LoadJSON[jsonTestData](file)
27 28 29 30 31 32 33 34
	require.NoError(t, err)
	require.EqualValues(t, data, result)
}

func TestRoundTripJSONWithGzip(t *testing.T) {
	dir := t.TempDir()
	file := filepath.Join(dir, "test.json.gz")
	data := &jsonTestData{A: "yay", B: 3}
35
	err := WriteJSON(file, data, 0o755)
36 37 38 39 40 41 42 43 44
	require.NoError(t, err)

	// Confirm the file isn't raw JSON
	fileContent, err := os.ReadFile(file)
	require.NoError(t, err)
	err = json.Unmarshal(fileContent, &jsonTestData{})
	require.Error(t, err, "should not be able to decode without decompressing")

	var result *jsonTestData
45
	result, err = LoadJSON[jsonTestData](file)
46 47 48 49 50 51 52 53
	require.NoError(t, err)
	require.EqualValues(t, data, result)
}

type jsonTestData struct {
	A string `json:"a"`
	B int    `json:"b"`
}