| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'package:lib.app.dart/logging.dart'; |
| import 'package:sledge/sledge.dart'; |
| import 'package:test/test.dart'; |
| |
| import 'helpers.dart'; |
| |
| Schema newSchema() { |
| final schemaDescription = <String, BaseType>{ |
| 'a': Integer(), |
| }; |
| return Schema(schemaDescription); |
| } |
| |
| void main() async { |
| setupLogger(); |
| |
| test('Test immediate deletions.', () async { |
| Schema schema = newSchema(); |
| final id = DocumentId(schema); |
| Sledge sledge = newSledgeForTesting(); |
| Document doc; |
| await sledge.runInTransaction(() async { |
| doc = await sledge.getDocument(id); |
| doc['a'].value = 32; |
| doc.delete(); |
| expect(() => doc['a'].value, throwsStateError); |
| }); |
| expect(() => doc['a'].value, throwsStateError); |
| }); |
| |
| test('Test deletions.', () async { |
| Schema schema = newSchema(); |
| final id = DocumentId(schema); |
| Sledge sledge = newSledgeForTesting(); |
| |
| // Create document. |
| await sledge.runInTransaction(() async { |
| Document doc = await sledge.getDocument(id); |
| doc['a'].value = 32; |
| }); |
| // Verify that the document exists and delete it. |
| await sledge.runInTransaction(() async { |
| final query = Query(schema); |
| final docs = await sledge.getDocuments(query); |
| expect(docs.length, equals(1)); |
| docs[0].delete(); |
| }); |
| // Verify that document deos not exist anymore. |
| await sledge.runInTransaction(() async { |
| final query = Query(schema); |
| final docs = await sledge.getDocuments(query); |
| expect(docs.length, equals(0)); |
| }); |
| }); |
| |
| test('Test rollbacked deletions.', () async { |
| Schema schema = newSchema(); |
| final id = DocumentId(schema); |
| Sledge sledge = newSledgeForTesting(); |
| Document doc; |
| // Create document. |
| await sledge.runInTransaction(() async { |
| doc = await sledge.getDocument(id); |
| doc['a'].value = 42; |
| }); |
| // Delete document and abort transaction. |
| await sledge.runInTransaction(() async { |
| doc.delete(); |
| sledge.abortAndRollback(); |
| }); |
| // Verify that the document still exists. |
| expect(doc['a'].value, equals(42)); |
| }); |
| } |