Skip to content

Commit bebc1dd

Browse files
author
Lauren Long
committed
Merge branch 'master' of github.com:firebase/firebase-functions
2 parents 6a102ea + f4ff209 commit bebc1dd

File tree

2 files changed

+15
-93
lines changed

2 files changed

+15
-93
lines changed

spec/providers/database.spec.ts

Lines changed: 7 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -62,86 +62,24 @@ describe('DatabaseBuilder', () => {
6262
resource: 'projects/_/instances/subdomains/refs/users',
6363
} as any);
6464
});
65-
});
66-
67-
describe('#onCreate()', () => {
68-
it('should return "ref.create" as the event type', () => {
69-
let eventType = database.ref('foo').onCreate(() => null).__trigger.eventTrigger.eventType;
70-
expect(eventType).to.eq('providers/google.firebase.database/eventTypes/ref.create');
71-
});
72-
73-
it('should construct a proper resource path', () => {
74-
let resource = database.ref('foo').onCreate(() => null).__trigger.eventTrigger.resource;
75-
expect(resource).to.eq('projects/_/instances/subdomain/refs/foo');
76-
});
7765

78-
it('should return a handler that emits events with a proper DeltaSnapshot', () => {
79-
let handler = database.ref('/users/{id}').onCreate(event => {
80-
expect(event.data.val()).to.deep.equal({ foo: 'bar' });
66+
it('should interpolate params until the server does it', () => {
67+
let handler = database.ref('/users/{id}').onWrite(event => {
68+
expect(event.resource).to.equal('projects/_/instances/subdomain/refs/users/aUserId');
8169
});
8270

8371
return handler({
8472
data: {
8573
data: null,
86-
delta: { foo: 'bar' },
74+
delta: 'hello',
8775
},
88-
resource: 'projects/_/instances/subdomains/refs/users',
89-
} as any);
90-
});
91-
});
92-
93-
describe('#onUpdate()', () => {
94-
it('should return "ref.update" as the event type', () => {
95-
let eventType = database.ref('foo').onUpdate(() => null).__trigger.eventTrigger.eventType;
96-
expect(eventType).to.eq('providers/google.firebase.database/eventTypes/ref.update');
97-
});
98-
99-
it('should construct a proper resource path', () => {
100-
let resource = database.ref('foo').onUpdate(() => null).__trigger.eventTrigger.resource;
101-
expect(resource).to.eq('projects/_/instances/subdomain/refs/foo');
102-
});
103-
104-
it('should return a handler that emits events with a proper DeltaSnapshot', () => {
105-
let handler = database.ref('/users/{id}').onUpdate(event => {
106-
expect(event.data.val()).to.deep.equal({ foo: 'bar' });
107-
});
108-
109-
return handler({
110-
data: {
111-
data: null,
112-
delta: { foo: 'bar' },
76+
resource: 'projects/_/instances/subdomain/refs/users/{id}',
77+
params: {
78+
id: 'aUserId',
11379
},
114-
resource: 'projects/_/instances/subdomains/refs/users',
115-
} as any);
116-
});
117-
});
118-
119-
describe('#onDelete()', () => {
120-
it('should return "ref.delete" as the event type', () => {
121-
let eventType = database.ref('foo').onDelete(() => null).__trigger.eventTrigger.eventType;
122-
expect(eventType).to.eq('providers/google.firebase.database/eventTypes/ref.delete');
123-
});
124-
125-
it('should construct a proper resource path', () => {
126-
let resource = database.ref('foo').onDelete(() => null).__trigger.eventTrigger.resource;
127-
expect(resource).to.eq('projects/_/instances/subdomain/refs/foo');
128-
});
129-
130-
it('should return a handler that emits events with a proper DeltaSnapshot', () => {
131-
let handler = database.ref('/users/{id}').onDelete(event => {
132-
expect(event.data.val()).to.deep.equal({ foo: 'bar' });
13380
});
134-
135-
return handler({
136-
data: {
137-
data: null,
138-
delta: { foo: 'bar' },
139-
},
140-
resource: 'projects/_/instances/subdomains/refs/users',
141-
} as any);
14281
});
14382
});
144-
14583
});
14684

14785
describe('DeltaSnapshot', () => {

src/providers/database.ts

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -79,28 +79,6 @@ export class RefBuilder {
7979

8080
/** Respond to any write that affects a ref. */
8181
onWrite(handler: (event: Event<DeltaSnapshot>) => PromiseLike<any> | any): CloudFunction<DeltaSnapshot> {
82-
return this.onOperation(handler, 'ref.write');
83-
}
84-
85-
/** Respond to new data on a ref. */
86-
onCreate(handler: (event: Event<DeltaSnapshot>) => PromiseLike<any> | any): CloudFunction<DeltaSnapshot> {
87-
return this.onOperation(handler, 'ref.create');
88-
}
89-
90-
/** Respond to update on a ref. */
91-
onUpdate(handler: (event: Event<DeltaSnapshot>) => PromiseLike<any> | any): CloudFunction<DeltaSnapshot> {
92-
return this.onOperation(handler, 'ref.update');
93-
}
94-
95-
/** Respond to all data being deleted from a ref. */
96-
onDelete(handler: (event: Event<DeltaSnapshot>) => PromiseLike<any> | any): CloudFunction<DeltaSnapshot> {
97-
return this.onOperation(handler, 'ref.delete');
98-
}
99-
100-
private onOperation(
101-
handler: (event: Event<DeltaSnapshot>) => PromiseLike<any> | any,
102-
eventType: string): CloudFunction<DeltaSnapshot> {
103-
10482
const dataConstructor = (raw: Event<any>) => {
10583
if (raw.data instanceof DeltaSnapshot) {
10684
return raw.data;
@@ -115,10 +93,16 @@ export class RefBuilder {
11593
};
11694
return makeCloudFunction({
11795
provider, handler,
118-
eventType: eventType,
96+
eventType: 'ref.write',
11997
resource: this.resource,
12098
dataConstructor,
121-
before: (event) => this.apps.retain(event),
99+
before: (event) => {
100+
// BUG(36000428) Remove when no longer necessary
101+
_.forEach(event.params, (val, key) => {
102+
event.resource = _.replace(event.resource, `{${key}}`, val);
103+
});
104+
this.apps.retain(event);
105+
},
122106
after: (event) => this.apps.release(event),
123107
});
124108
}

0 commit comments

Comments
 (0)