package errdefs import ( "fmt" "net/http" "testing" ) func TestFromStatusCode(t *testing.T) { testErr := fmt.Errorf("some error occurred") testCases := []struct { err error status int check func(error) bool }{ { err: testErr, status: http.StatusNotFound, check: IsNotFound, }, { err: testErr, status: http.StatusBadRequest, check: IsInvalidParameter, }, { err: testErr, status: http.StatusConflict, check: IsConflict, }, { err: testErr, status: http.StatusUnauthorized, check: IsUnauthorized, }, { err: testErr, status: http.StatusServiceUnavailable, check: IsUnavailable, }, { err: testErr, status: http.StatusForbidden, check: IsForbidden, }, { err: testErr, status: http.StatusNotModified, check: IsNotModified, }, { err: testErr, status: http.StatusNotImplemented, check: IsNotImplemented, }, { err: testErr, status: http.StatusInternalServerError, check: IsSystem, }, { err: Unknown(testErr), status: http.StatusInternalServerError, check: IsUnknown, }, { err: DataLoss(testErr), status: http.StatusInternalServerError, check: IsDataLoss, }, { err: Deadline(testErr), status: http.StatusInternalServerError, check: IsDeadline, }, { err: Cancelled(testErr), status: http.StatusInternalServerError, check: IsCancelled, }, } for _, tc := range testCases { t.Run(http.StatusText(tc.status), func(t *testing.T) { err := FromStatusCode(tc.err, tc.status) if !tc.check(err) { t.Errorf("unexpected error-type %T", err) } }) } }