...
1 package sql
2
3 import (
4 "errors"
5 "testing"
6
7 "github.com/jackc/pgconn"
8 "github.com/lib/pq"
9 "github.com/stretchr/testify/assert"
10 )
11
12 const (
13 msg = "invalid type for uuid"
14 code = "08000"
15 verbose = "long verbose sql jagon"
16 severity = "FATAL"
17 )
18
19 func TestSetMessage(t *testing.T) {
20 sqlerr := New(msg)
21 assert.NotNil(t, sqlerr)
22 assert.Equal(t, msg, sqlerr.Message)
23 }
24
25 func TestSetErrorCode(t *testing.T) {
26 sqlerr := New("").SetErrorCode(code)
27 assert.NotNil(t, sqlerr)
28 assert.Equal(t, pq.ErrorCode(code), sqlerr.ErrorCode)
29 }
30
31 func TestSetErrorType(t *testing.T) {
32 _type := EdgeSQLErrType
33 sqlerr := New("").SetErrorType(_type)
34 assert.NotNil(t, sqlerr)
35 assert.Equal(t, _type, sqlerr.ErrorType)
36 }
37
38 func TestSetVerbose(t *testing.T) {
39 sqlerr := New("").SetVerbose(verbose)
40 assert.NotNil(t, sqlerr)
41 assert.Equal(t, verbose, sqlerr.Verbose)
42 }
43
44 func TestSetSeverity(t *testing.T) {
45 sqlerr := New("").SetSeverity(pq.Efatal)
46 assert.NotNil(t, sqlerr)
47 assert.Equal(t, pq.Efatal, sqlerr.Severity)
48 }
49
50 func TestError(t *testing.T) {
51 sqlerr := New("").SetMessage(msg)
52 assert.NotNil(t, sqlerr)
53 assert.Equal(t, msg, sqlerr.Error())
54 }
55
56 func TestIsError(t *testing.T) {
57 err := errors.New(msg)
58 sqlerr := Wrap(err)
59 assert.NotNil(t, sqlerr)
60 assert.True(t, errors.Is(sqlerr, err))
61 }
62
63 func TestUnmarshalError(t *testing.T) {
64 pgErr := &pgconn.PgError{
65 Severity: pq.Efatal,
66 Code: "22P02",
67 Message: msg,
68 }
69 castedPgErr := error(pgErr)
70 sqlerr := New("").unmarshalError(castedPgErr)
71 assert.Equal(t, pq.ErrorCode(pgErr.Code), sqlerr.ErrorCode)
72 assert.Equal(t, EdgeSQLErrType, sqlerr.ErrorType)
73 assert.Equal(t, pq.Efatal, sqlerr.Severity)
74 }
75
76 func TestExtensions(t *testing.T) {
77 expectedExts := map[string]interface{}{
78 "severity": severity,
79 "statusCode": code,
80 "errorType": EdgeSQLErrType,
81 }
82 sqlerr := New("").SetMessage(msg).SetSeverity(pq.Efatal).SetErrorCode(code)
83 actualExts := sqlerr.Extensions()
84 assert.Equal(t, expectedExts["severity"], actualExts["severity"])
85 assert.Equal(t, pq.ErrorCode(expectedExts["statusCode"].(string)), actualExts["statusCode"])
86 assert.Equal(t, expectedExts["errorType"].(string), actualExts["errorType"])
87 }
88
View as plain text