github.com/qri-io/qri@v0.10.1-0.20220104210721-c771715036cb/lib/http/api_test.go (about)

     1  package http
     2  
     3  import (
     4  	"bytes"
     5  	"net/http"
     6  	"testing"
     7  
     8  	"github.com/google/go-cmp/cmp"
     9  	"github.com/qri-io/qri/dsref"
    10  )
    11  
    12  func TestDatasetRefFromReq(t *testing.T) {
    13  	cases := []struct {
    14  		url      string
    15  		expected dsref.Ref
    16  		err      string
    17  	}{
    18  		{"http://localhost:2503/peername", dsref.Ref{Username: "peername"}, ""},
    19  		{"http://localhost:2503/peername?limit=10&offset=2", dsref.Ref{Username: "peername"}, ""},
    20  		{"http://localhost:2503/peername/datasetname", dsref.Ref{Username: "peername", Name: "datasetname"}, ""},
    21  		{"http://localhost:2503/peername/datasetname/at/ipfs/QmdWJ7RnFj3SdWW85mR4AYP17C8dRPD9eUPyTqUxVyGMgD", dsref.Ref{Username: "peername", Name: "datasetname", Path: "/ipfs/QmdWJ7RnFj3SdWW85mR4AYP17C8dRPD9eUPyTqUxVyGMgD"}, ""},
    22  		// {"http://localhost:2503/peername/datasetname/at/ntwk/QmdWJ7RnFj3SdWW85mR4AYP17C8dRPD9eUPyTqUxVyGMgD", dsref.Ref{Username: "peername", Name: "datasetname", Path: "/ntwk/QmdWJ7RnFj3SdWW85mR4AYP17C8dRPD9eUPyTqUxVyGMgD"}, ""},
    23  		{"http://localhost:2503/peername/datasetname/at/mem/QmdWJ7RnFj3SdWW85mR4AYP17C8dRPD9eUPyTqUxVyGMgD/dataset.json", dsref.Ref{Username: "peername", Name: "datasetname", Path: "/mem/QmdWJ7RnFj3SdWW85mR4AYP17C8dRPD9eUPyTqUxVyGMgD"}, "unexpected character at position 72: '/'"},
    24  		{"http://localhost:2503/peername/datasetname/at/ipfs/QmdWJ7RnFj3SdWW85mR4AYP17C8dRPD9eUPyTqUxVyGMgD", dsref.Ref{Username: "peername", Name: "datasetname", Path: "/ipfs/QmdWJ7RnFj3SdWW85mR4AYP17C8dRPD9eUPyTqUxVyGMgD"}, ""},
    25  		{"http://google.com:8000/peername/datasetname/at/ipfs/QmdWJ7RnFj3SdWW85mR4AYP17C8dRPD9eUPyTqUxVyGMgD", dsref.Ref{Username: "peername", Name: "datasetname", Path: "/ipfs/QmdWJ7RnFj3SdWW85mR4AYP17C8dRPD9eUPyTqUxVyGMgD"}, ""},
    26  		{"http://google.com:8000/peername", dsref.Ref{Username: "peername"}, ""},
    27  		// {"http://google.com/peername", dsref.Ref{Username: "peername"}, ""},
    28  		{"/peername", dsref.Ref{Username: "peername"}, ""},
    29  		{"http://www.fkjhdekaldschjxilujkjkjknwjkn.org/peername/datasetname", dsref.Ref{Username: "peername", Name: "datasetname"}, ""},
    30  		{"http://www.fkjhdekaldschjxilujkjkjknwjkn.org/peername/datasetname/", dsref.Ref{Username: "peername", Name: "datasetname"}, "unexpected character at position 20: '/'"},
    31  		{"http://example.com", dsref.Ref{}, ""},
    32  		{"", dsref.Ref{}, ""},
    33  	}
    34  
    35  	for i, c := range cases {
    36  		r, err := http.NewRequest("GET", c.url, bytes.NewReader(nil))
    37  		if err != nil {
    38  			t.Errorf("case %d, error making request: %s", i, err)
    39  		}
    40  		got, err := DatasetRefFromReq("", r)
    41  		if (c.err != "" && err == nil) || (err != nil && c.err != err.Error()) {
    42  			t.Errorf("case %d, error mismatch: expected '%s' but got '%s'", i, c.err, err)
    43  			continue
    44  		}
    45  		if diff := cmp.Diff(c.expected, got); diff != "" {
    46  			t.Errorf("case %d: output mismatch (-want +got):\n%s", i, diff)
    47  		}
    48  	}
    49  }