Added (*Dropbox).LatestCursor() call and tests
See: https://www.dropbox.com/developers/core/docs#delta-latest-cursor
This commit is contained in:
parent
5bb11ef380
commit
113ba79265
26
dropbox.go
26
dropbox.go
|
@ -68,7 +68,7 @@ type CopyRef struct {
|
|||
type DeltaPage struct {
|
||||
Reset bool // if true the local state must be cleared.
|
||||
HasMore bool // if true an other call to delta should be made.
|
||||
Cursor string // Tag of the current state.
|
||||
Cursor // Tag of the current state.
|
||||
Entries []DeltaEntry // List of changed entries.
|
||||
}
|
||||
|
||||
|
@ -91,6 +91,10 @@ type ChunkUploadResponse struct {
|
|||
Expires DBTime `json:"expires"` // Expiration time of this upload.
|
||||
}
|
||||
|
||||
type Cursor struct {
|
||||
Cursor string `json:"cursor"`
|
||||
}
|
||||
|
||||
// Format of reply when http error code is not 200.
|
||||
// Format may be:
|
||||
// {"error": "reason"}
|
||||
|
@ -684,7 +688,7 @@ func (db *Dropbox) Delta(cursor, pathPrefix string) (*DeltaPage, error) {
|
|||
type deltaPageParser struct {
|
||||
Reset bool `json:"reset"` // if true the local state must be cleared.
|
||||
HasMore bool `json:"has_more"` // if true an other call to delta should be made.
|
||||
Cursor string `json:"cursor"` // Tag of the current state.
|
||||
Cursor // Tag of the current state.
|
||||
Entries [][]json.RawMessage `json:"entries"` // List of changed entries.
|
||||
}
|
||||
var dpp deltaPageParser
|
||||
|
@ -854,3 +858,21 @@ func (db *Dropbox) Move(src, dst string) (*Entry, error) {
|
|||
"to_path": {dst}}, &rv)
|
||||
return &rv, err
|
||||
}
|
||||
|
||||
func (db *Dropbox) LatestCursor(prefix string, mediaInfo bool) (*Cursor, error) {
|
||||
var (
|
||||
params = &url.Values{}
|
||||
cur Cursor
|
||||
)
|
||||
|
||||
if prefix != "" {
|
||||
params.Set("path_prefix", prefix)
|
||||
}
|
||||
|
||||
if mediaInfo {
|
||||
params.Set("include_media_info", "true")
|
||||
}
|
||||
|
||||
err := db.doRequest("POST", "delta/latest_cursor", params, &cur)
|
||||
return &cur, err
|
||||
}
|
||||
|
|
|
@ -719,3 +719,65 @@ func TestShares(t *testing.T) {
|
|||
t.Errorf("got %#v expected %#v", *received, expected)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLatestCursor(t *testing.T) {
|
||||
tab := []struct {
|
||||
prefix string
|
||||
mediaInfo bool
|
||||
}{
|
||||
{
|
||||
prefix: "",
|
||||
mediaInfo: false,
|
||||
},
|
||||
{
|
||||
prefix: "/some",
|
||||
mediaInfo: false,
|
||||
},
|
||||
{
|
||||
prefix: "",
|
||||
mediaInfo: true,
|
||||
},
|
||||
{
|
||||
prefix: "/some",
|
||||
mediaInfo: true,
|
||||
},
|
||||
}
|
||||
|
||||
expected := Cursor{Cursor: "some"}
|
||||
cur, err := json.Marshal(expected)
|
||||
if err != nil {
|
||||
t.Fatal("Failed to JSON encode Cursor")
|
||||
}
|
||||
|
||||
for _, testCase := range tab {
|
||||
db := newDropbox(t)
|
||||
fake := FakeHTTP{
|
||||
Method: "POST",
|
||||
Host: "api.dropbox.com",
|
||||
Path: "/1/delta/latest_cursor",
|
||||
t: t,
|
||||
Params: map[string]string{
|
||||
"locale": "en",
|
||||
},
|
||||
ResponseData: cur,
|
||||
}
|
||||
|
||||
if testCase.prefix != "" {
|
||||
fake.Params["path_prefix"] = testCase.prefix
|
||||
}
|
||||
|
||||
if testCase.mediaInfo {
|
||||
fake.Params["include_media_info"] = "true"
|
||||
}
|
||||
|
||||
http.DefaultClient = &http.Client{
|
||||
Transport: fake,
|
||||
}
|
||||
|
||||
if received, err := db.LatestCursor(testCase.prefix, testCase.mediaInfo); err != nil {
|
||||
t.Errorf("API error: %s", err)
|
||||
} else if !reflect.DeepEqual(expected, *received) {
|
||||
t.Errorf("got %#v expected %#v", *received, expected)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Reference in New Issue
Block a user