mirror of
https://github.com/cubixle/ebay.git
synced 2026-04-30 05:58:45 +01:00
Cleanup integration test
This commit is contained in:
@@ -0,0 +1,124 @@
|
||||
package integration
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/rand"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/url"
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
_ "github.com/joho/godotenv/autoload"
|
||||
"github.com/jybp/ebay"
|
||||
"golang.org/x/oauth2"
|
||||
"golang.org/x/oauth2/clientcredentials"
|
||||
)
|
||||
|
||||
var (
|
||||
integration bool
|
||||
clientID string
|
||||
clientSecret string
|
||||
redirectURL string
|
||||
)
|
||||
|
||||
func init() {
|
||||
flag.BoolVar(&integration, "integration", false, "run integration tests")
|
||||
flag.Parse()
|
||||
if !integration {
|
||||
return
|
||||
}
|
||||
clientID = os.Getenv("SANDBOX_CLIENT_ID")
|
||||
clientSecret = os.Getenv("SANDBOX_CLIENT_SECRET")
|
||||
|
||||
// Your accept redirect URL should be setup to redirect to https://localhost:52125/accept
|
||||
redirectURL = os.Getenv("SANDBOX_RU_NAME")
|
||||
|
||||
if clientID == "" || clientSecret == "" || redirectURL == "" {
|
||||
panic("Please set SANDBOX_CLIENT_ID, SANDBOX_CLIENT_SECRET and SANDBOX_REDIRECT_URL.")
|
||||
}
|
||||
}
|
||||
|
||||
// TestGrantFlows is a verbose integration test that checks the client credentials grant flow as well as the
|
||||
// authorization code grant flow are working properly on the eBay sandbox.
|
||||
// Make sure to set the various environment variables required.
|
||||
func TestGrantFlows(t *testing.T) {
|
||||
if !integration {
|
||||
t.SkipNow()
|
||||
}
|
||||
|
||||
// You have to manually create an auction in the sandbox and retrieve its URL.
|
||||
// Auctions can't be created using the rest api (yet?).
|
||||
auctionURL := os.Getenv("SANDOX_AUCTION_URL")
|
||||
|
||||
ctx := context.Background()
|
||||
|
||||
conf := clientcredentials.Config{
|
||||
ClientID: clientID,
|
||||
ClientSecret: clientSecret,
|
||||
TokenURL: ebay.OAuth20SandboxEndpoint.TokenURL,
|
||||
Scopes: []string{ebay.ScopeRoot},
|
||||
}
|
||||
|
||||
client := ebay.NewSandboxClient(oauth2.NewClient(ctx, ebay.TokenSource(conf.TokenSource(ctx))))
|
||||
|
||||
lit, err := client.Buy.Browse.GetItemByLegacyID(ctx, auctionURL[strings.LastIndex(auctionURL, "/")+1:])
|
||||
if err != nil {
|
||||
t.Fatalf("%+v", err)
|
||||
}
|
||||
it, err := client.Buy.Browse.GetItem(ctx, lit.ItemID)
|
||||
if err != nil {
|
||||
t.Fatalf("%+v", err)
|
||||
}
|
||||
isAuction := false
|
||||
for _, opt := range it.BuyingOptions {
|
||||
if opt == ebay.BrowseBuyingOptionAuction {
|
||||
isAuction = true
|
||||
}
|
||||
}
|
||||
if !isAuction {
|
||||
t.Fatalf("item %s is not an auction. BuyingOptions are: %+v", it.ItemID, it.BuyingOptions)
|
||||
}
|
||||
|
||||
t.Logf("item %s UniqueBidderCount:%d minimumBidPrice: %+v currentPriceToBid: %+v\n", it.ItemID, it.UniqueBidderCount, it.MinimumPriceToBid, it.CurrentBidPrice)
|
||||
|
||||
b := make([]byte, 16)
|
||||
if _, err := io.ReadFull(rand.Reader, b); err != nil {
|
||||
t.Fatalf("%+v", err)
|
||||
}
|
||||
state := url.QueryEscape(string(b))
|
||||
serve, teardown, authCodeC, err := oauthServer("ebay test", ":52125", state)
|
||||
if err != nil {
|
||||
t.Fatalf("%+v", err)
|
||||
}
|
||||
go func() { serve() }()
|
||||
|
||||
oauthConf := oauth2.Config{
|
||||
ClientID: clientID,
|
||||
ClientSecret: clientSecret,
|
||||
Endpoint: ebay.OAuth20SandboxEndpoint,
|
||||
RedirectURL: redirectURL,
|
||||
Scopes: []string{ebay.ScopeBuyOfferAuction},
|
||||
}
|
||||
|
||||
url := oauthConf.AuthCodeURL(state)
|
||||
fmt.Printf("Visit the URL: %v\n", url)
|
||||
|
||||
authCode := <-authCodeC
|
||||
defer func() { teardown() }()
|
||||
|
||||
tok, err := oauthConf.Exchange(ctx, authCode)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
client = ebay.NewSandboxClient(oauth2.NewClient(ctx, ebay.TokenSource(oauthConf.TokenSource(ctx, tok))))
|
||||
|
||||
bid, err := client.Buy.Offer.GetBidding(ctx, it.ItemID, ebay.BuyMarketplaceUSA)
|
||||
if err != nil && !ebay.IsError(err, ebay.ErrGetBiddingNoBiddingActivity) {
|
||||
t.Fatalf("Expected error code %d, got %+v.", ebay.ErrGetBiddingNoBiddingActivity, err)
|
||||
}
|
||||
t.Logf("bidding: %+v", bid)
|
||||
}
|
||||
Reference in New Issue
Block a user