Skip to content

Commit 3af49b4

Browse files
Add deleteDoc() (#3138)
1 parent 239bea3 commit 3af49b4

File tree

5 files changed

+34
-20
lines changed

5 files changed

+34
-20
lines changed

packages/firestore/lite/index.node.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ export {
3535
collection,
3636
doc,
3737
parent,
38-
getDoc
38+
getDoc,
39+
deleteDoc
3940
} from './src/api/reference';
4041

4142
// TOOD(firestorelite): Add tests when setDoc() is available

packages/firestore/lite/src/api/reference.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,12 @@ import { FirebaseFirestore, FirestoreDataConverter } from '../../index';
2626
import { ResourcePath } from '../../../src/model/path';
2727
import { AutoId } from '../../../src/util/misc';
2828
import { DocumentSnapshot } from './snapshot';
29-
import { invokeBatchGetDocumentsRpc } from '../../../src/remote/datastore';
29+
import {
30+
invokeBatchGetDocumentsRpc,
31+
invokeCommitRpc
32+
} from '../../../src/remote/datastore';
3033
import { hardAssert } from '../../../src/util/assert';
34+
import { DeleteMutation, Precondition } from '../../../src/model/mutation';
3135
import { cast } from './util';
3236
import {
3337
validateArgType,
@@ -266,3 +270,16 @@ export function getDoc<T>(
266270
);
267271
});
268272
}
273+
274+
export function deleteDoc(
275+
reference: firestore.DocumentReference
276+
): Promise<void> {
277+
const ref = cast(reference, DocumentReference);
278+
return ref.firestore
279+
._ensureClientConfigured()
280+
.then(datastore =>
281+
invokeCommitRpc(datastore, [
282+
new DeleteMutation(ref._key, Precondition.none())
283+
])
284+
);
285+
}

packages/firestore/lite/test/integration.test.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ import {
3030
CollectionReference,
3131
doc,
3232
DocumentReference,
33-
getDoc
33+
getDoc,
34+
deleteDoc
3435
} from '../src/api/reference';
3536
import { expectEqual, expectNotEqual } from '../../test/util/helpers';
3637
import { FieldValue } from '../../src/api/field_value';
@@ -171,6 +172,13 @@ describe('getDoc()', () => {
171172
// TODO(firestorelite): Expand test coverage once we can write docs
172173
});
173174

175+
describe('deleteDoc()', () => {
176+
it('can delete a non-existing document', () => {
177+
return withTestDoc(docRef => deleteDoc(docRef));
178+
});
179+
});
180+
181+
// TODO(firestorelite): Expand test coverage once we can write docs
174182
describe('FieldValue', () => {
175183
it('support equality checking with isEqual()', () => {
176184
expectEqual(FieldValue.delete(), FieldValue.delete());

packages/firestore/src/remote/datastore.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import { CredentialsProvider } from '../api/credentials';
1919
import { MaybeDocument, Document } from '../model/document';
2020
import { DocumentKey } from '../model/document_key';
21-
import { Mutation, MutationResult } from '../model/mutation';
21+
import { Mutation } from '../model/mutation';
2222
import * as api from '../protos/firestore_proto_api';
2323
import { debugCast, hardAssert } from '../util/assert';
2424
import { Code, FirestoreError } from '../util/error';
@@ -106,20 +106,13 @@ export function newDatastore(
106106
export async function invokeCommitRpc(
107107
datastore: Datastore,
108108
mutations: Mutation[]
109-
): Promise<MutationResult[]> {
109+
): Promise<void> {
110110
const datastoreImpl = debugCast(datastore, DatastoreImpl);
111111
const params = {
112112
database: datastoreImpl.serializer.encodedDatabaseId,
113113
writes: mutations.map(m => datastoreImpl.serializer.toMutation(m))
114114
};
115-
const response = await datastoreImpl.invokeRPC<
116-
api.CommitRequest,
117-
api.CommitResponse
118-
>('Commit', params);
119-
return datastoreImpl.serializer.fromWriteResults(
120-
response.writeResults,
121-
response.commitTime
122-
);
115+
await datastoreImpl.invokeRPC('Commit', params);
123116
}
124117

125118
export async function invokeBatchGetDocumentsRpc(

packages/firestore/test/integration/remote/remote.test.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,9 @@ describe('Remote Storage', () => {
3030
addEqualityMatcher();
3131

3232
it('can write', () => {
33-
return withTestDatastore(async ds => {
33+
return withTestDatastore(ds => {
3434
const mutation = setMutation('docs/1', { sort: 1 });
35-
const result = await invokeCommitRpc(ds, [mutation]);
36-
expect(result.length).to.equal(1);
37-
38-
const version = result[0].version;
39-
expect(version).not.to.equal(null);
40-
expect(SnapshotVersion.min().compareTo(version!)).to.be.lessThan(0);
35+
return invokeCommitRpc(ds, [mutation]);
4136
});
4237
});
4338

0 commit comments

Comments
 (0)