diff --git a/firebase.go b/firebase.go index c926f2d..678a8fc 100644 --- a/firebase.go +++ b/firebase.go @@ -200,3 +200,23 @@ func (r *Reference) Delete() error { return nil } + +func (r *Reference) Child(path string) *Reference { + url := r.url + + // Append path. + if url[len(url)-1] == '/' { + url = url[:len(url)-1] + } + if path[0] == '/' { + url += path + } else { + url += "/" + path + } + + // Transfer token. + ref := NewReference(url) + ref.token = r.token + + return ref +} diff --git a/firebase_test.go b/firebase_test.go index a0ec8ff..f434182 100644 --- a/firebase_test.go +++ b/firebase_test.go @@ -239,3 +239,23 @@ func TestThatExportWorks(t *testing.T) { r = NewReference(url).Export(true).Export(false) _ = r } + +func TestThatChildWorks(t *testing.T) { + url := "https://SampleChat.firebaseIO-demo.com/users/fred" + + parent := NewReference(url).Auth("secret-token") + + child := parent.Child("name") + if child.url != url+"/name" { + t.Error("Expected child URL to equal", url+"/name", ", got", child.url) + } + + child = parent.Child("/name") + if child.url != url+"/name" { + t.Error("Expected child URL to equal", url+"/name", ", got", child.url) + } + + if child.token != parent.token { + t.Error("Expected child to receive parent's auth token.") + } +}