...

Source file src/github.com/go-kivik/kivik/v4/int/errors/errors_test.go

Documentation: github.com/go-kivik/kivik/v4/int/errors

     1  // Licensed under the Apache License, Version 2.0 (the "License"); you may not
     2  // use this file except in compliance with the License. You may obtain a copy of
     3  // the License at
     4  //
     5  //  http://www.apache.org/licenses/LICENSE-2.0
     6  //
     7  // Unless required by applicable law or agreed to in writing, software
     8  // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     9  // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
    10  // License for the specific language governing permissions and limitations under
    11  // the License.
    12  
    13  package errors
    14  
    15  import (
    16  	"encoding/json"
    17  	"errors"
    18  	"fmt"
    19  	"net/http"
    20  	"regexp"
    21  	"testing"
    22  
    23  	"gitlab.com/flimzy/testy"
    24  )
    25  
    26  func TestFormatError(t *testing.T) {
    27  	type tst struct {
    28  		err  error
    29  		str  string
    30  		std  string
    31  		full string
    32  	}
    33  	tests := testy.NewTable()
    34  	tests.Add("standard error", tst{
    35  		err:  errors.New("foo"),
    36  		str:  "foo",
    37  		std:  "foo",
    38  		full: "foo",
    39  	})
    40  	tests.Add("not from server", tst{
    41  		err:  &Error{Status: http.StatusNotFound, Err: errors.New("not found")},
    42  		str:  "not found",
    43  		std:  "not found",
    44  		full: `404 / Not Found: not found`,
    45  	})
    46  	tests.Add("with message", tst{
    47  		err:  &Error{Status: http.StatusNotFound, Message: "It's missing", Err: errors.New("not found")},
    48  		str:  "It's missing: not found",
    49  		std:  "It's missing: not found",
    50  		full: `It's missing: 404 / Not Found: not found`,
    51  	})
    52  	tests.Add("embedded error", func() interface{} {
    53  		_, err := json.Marshal(func() {}) //nolint:staticcheck
    54  		return tst{
    55  			err:  &Error{Status: http.StatusBadRequest, Err: err},
    56  			str:  "json: unsupported type: func()",
    57  			std:  "json: unsupported type: func()",
    58  			full: `400 / Bad Request: json: unsupported type: func()`,
    59  		}
    60  	})
    61  	tests.Add("embedded network error", func() interface{} {
    62  		client := testy.HTTPClient(func(_ *http.Request) (*http.Response, error) {
    63  			_, err := json.Marshal(func() {}) //nolint:staticcheck
    64  			return nil, &Error{Status: http.StatusBadRequest, Err: err}
    65  		})
    66  		req, _ := http.NewRequest(http.MethodGet, "/", nil)
    67  		_, err := client.Do(req)
    68  		return tst{
    69  			err:  err,
    70  			str:  "Get /: json: unsupported type: func()",
    71  			std:  "Get /: json: unsupported type: func()",
    72  			full: "Get /: json: unsupported type: func()",
    73  		}
    74  	})
    75  
    76  	re := testy.Replacement{
    77  		Regexp:      regexp.MustCompile(`"/"`),
    78  		Replacement: "/",
    79  	}
    80  
    81  	tests.Run(t, func(t *testing.T, test tst) {
    82  		if d := testy.DiffText(test.str, test.err.Error(), re); d != nil {
    83  			t.Errorf("Error():\n%s", d)
    84  		}
    85  		if d := testy.DiffText(test.std, fmt.Sprintf("%v", test.err), re); d != nil {
    86  			t.Errorf("Standard:\n%s", d)
    87  		}
    88  		if d := testy.DiffText(test.full, fmt.Sprintf("%+v", test.err), re); d != nil {
    89  			t.Errorf("Full:\n%s", d)
    90  		}
    91  	})
    92  }
    93  

View as plain text