Added several tests
This commit is contained in:
		@@ -2,7 +2,6 @@ package discogs
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"fmt"
 | 
					 | 
				
			||||||
	"io/ioutil"
 | 
						"io/ioutil"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
	"net/url"
 | 
						"net/url"
 | 
				
			||||||
@@ -33,7 +32,7 @@ func NewClient(o *Options) (*Client, error) {
 | 
				
			|||||||
	header = &http.Header{}
 | 
						header = &http.Header{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if o == nil || o.UserAgent == "" {
 | 
						if o == nil || o.UserAgent == "" {
 | 
				
			||||||
		return nil, fmt.Errorf("failed to set user-agent")
 | 
							return nil, ErrUserAgentInvalid
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	header.Add("User-Agent", o.UserAgent)
 | 
						header.Add("User-Agent", o.UserAgent)
 | 
				
			||||||
@@ -68,7 +67,7 @@ func currency(c string) (string, error) {
 | 
				
			|||||||
	case "":
 | 
						case "":
 | 
				
			||||||
		return "USD", nil
 | 
							return "USD", nil
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		return "", fmt.Errorf("invalid currency abbreviation")
 | 
							return "", ErrCurrencyNotSupported
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,3 +29,63 @@ func initDiscogsClient(t *testing.T, options *Options) *Client {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	return client
 | 
						return client
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestNewClient(t *testing.T) {
 | 
				
			||||||
 | 
						tests := map[string]struct {
 | 
				
			||||||
 | 
							options *Options
 | 
				
			||||||
 | 
							err     error
 | 
				
			||||||
 | 
						}{
 | 
				
			||||||
 | 
							"normal": {&Options{
 | 
				
			||||||
 | 
								UserAgent: testUserAgent,
 | 
				
			||||||
 | 
								Currency:  "USD",
 | 
				
			||||||
 | 
							}, nil},
 | 
				
			||||||
 | 
							"incorrect user-agent": {&Options{
 | 
				
			||||||
 | 
								UserAgent: "",
 | 
				
			||||||
 | 
								Currency:  "USD",
 | 
				
			||||||
 | 
							}, ErrUserAgentInvalid},
 | 
				
			||||||
 | 
							"incorrect currency": {&Options{
 | 
				
			||||||
 | 
								UserAgent: testUserAgent,
 | 
				
			||||||
 | 
								Currency:  "RUR",
 | 
				
			||||||
 | 
							}, ErrCurrencyNotSupported},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for name, tt := range tests {
 | 
				
			||||||
 | 
							t.Run(name, func(t *testing.T) {
 | 
				
			||||||
 | 
								if _, err := NewClient(tt.options); err != tt.err {
 | 
				
			||||||
 | 
									t.Errorf("err got=%s; want=%s", err, tt.err)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestCurrency(t *testing.T) {
 | 
				
			||||||
 | 
						tests := []struct {
 | 
				
			||||||
 | 
							currency string
 | 
				
			||||||
 | 
							want     string
 | 
				
			||||||
 | 
							err      error
 | 
				
			||||||
 | 
						}{
 | 
				
			||||||
 | 
							{currency: "", want: "USD", err: nil},
 | 
				
			||||||
 | 
							{currency: "USD", want: "USD", err: nil},
 | 
				
			||||||
 | 
							{currency: "GBP", want: "GBP", err: nil},
 | 
				
			||||||
 | 
							{currency: "EUR", want: "EUR", err: nil},
 | 
				
			||||||
 | 
							{currency: "CAD", want: "CAD", err: nil},
 | 
				
			||||||
 | 
							{currency: "AUD", want: "AUD", err: nil},
 | 
				
			||||||
 | 
							{currency: "JPY", want: "JPY", err: nil},
 | 
				
			||||||
 | 
							{currency: "CHF", want: "CHF", err: nil},
 | 
				
			||||||
 | 
							{currency: "MXN", want: "MXN", err: nil},
 | 
				
			||||||
 | 
							{currency: "BRL", want: "BRL", err: nil},
 | 
				
			||||||
 | 
							{currency: "NZD", want: "NZD", err: nil},
 | 
				
			||||||
 | 
							{currency: "SEK", want: "SEK", err: nil},
 | 
				
			||||||
 | 
							{currency: "ZAR", want: "ZAR", err: nil},
 | 
				
			||||||
 | 
							{currency: "RUR", want: "", err: ErrCurrencyNotSupported},
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						for i, tt := range tests {
 | 
				
			||||||
 | 
							cur, err := currency(tt.currency)
 | 
				
			||||||
 | 
							if err != tt.err {
 | 
				
			||||||
 | 
								t.Errorf("#%d err got=%s; want=%s", i, err, tt.err)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if cur != tt.want {
 | 
				
			||||||
 | 
								t.Errorf("#%d currency got=%s; want=%s", i, cur, tt.want)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										41
									
								
								errors.go
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								errors.go
									
									
									
									
									
								
							@@ -2,39 +2,20 @@ package discogs
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// APIError represents a Discogs API Error response
 | 
					// Error represents a Discogs API error
 | 
				
			||||||
type APIError struct {
 | 
					type Error struct {
 | 
				
			||||||
	Message string `json:"message"`
 | 
						Message string
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Error ...
 | 
					func (e *Error) Error() string {
 | 
				
			||||||
func (e APIError) Error() string {
 | 
						return fmt.Sprintf("%s", strings.ToLower(e.Message))
 | 
				
			||||||
	if e.Message != "" {
 | 
					 | 
				
			||||||
		return fmt.Sprintf("discogs: %v", e.Message)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return ""
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Empty returns true if empty. Otherwise, at least 1 error message/code is
 | 
					// APIErrors
 | 
				
			||||||
// present and false is returned.
 | 
					var (
 | 
				
			||||||
func (e APIError) Empty() bool {
 | 
						ErrCurrencyNotSupported = &Error{"currency does not supported"}
 | 
				
			||||||
	if e.Message == "" {
 | 
						ErrUserAgentInvalid     = &Error{"invalid user-agent"}
 | 
				
			||||||
		return true
 | 
					)
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return false
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// relevantError returns any non-nil http-related error (creating the request,
 | 
					 | 
				
			||||||
// getting the response, decoding) if any. If the decoded apiError is non-zero
 | 
					 | 
				
			||||||
// the apiError is returned. Otherwise, no errors occurred, returns nil.
 | 
					 | 
				
			||||||
func relevantError(httpError error, apiError APIError) error {
 | 
					 | 
				
			||||||
	if httpError != nil {
 | 
					 | 
				
			||||||
		return httpError
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if apiError.Empty() {
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return apiError
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@ import (
 | 
				
			|||||||
func main() {
 | 
					func main() {
 | 
				
			||||||
	d, err := discogs.NewClient(&discogs.Options{
 | 
						d, err := discogs.NewClient(&discogs.Options{
 | 
				
			||||||
		UserAgent: "TestDiscogsClient/0.0.1 +http://example.com",
 | 
							UserAgent: "TestDiscogsClient/0.0.1 +http://example.com",
 | 
				
			||||||
		Currency:  "EUR",
 | 
							Currency:  "AAA",
 | 
				
			||||||
		Token:     "",
 | 
							Token:     "",
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user