Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
*.ipr
*.iws
.idea/
coverage/

# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
Expand All @@ -30,6 +31,7 @@
.pub-cache/
.pub/
/build/
pubspec.lock

# Web related
lib/generated_plugin_registrant.dart
Expand Down
12 changes: 11 additions & 1 deletion lib/src/mock_data_snapshot.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,20 @@ import 'package:firebase_database/firebase_database.dart';
import 'package:mockito/mockito.dart';

class MockDataSnapshot extends Mock implements DataSnapshot {
final DatabaseReference _ref;
final dynamic _value;

MockDataSnapshot(this._value);
MockDataSnapshot(this._ref, this._value);

@override
String? get key => _ref.key;

@override
DatabaseReference get ref => _ref;

@override
dynamic get value => _value;

@override
bool get exists => _value != null;
}
45 changes: 34 additions & 11 deletions lib/src/mock_database_reference.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,13 @@ import 'mock_firebase_database.dart';

class MockDatabaseReference extends Mock implements DatabaseReference {
var _nodePath = '/';

// ignore: prefer_final_fields
static Map<String, dynamic>? _persitedData = <String, dynamic>{};
static Map<String, dynamic>? _persistedData = <String, dynamic>{};
Map<String, dynamic>? _volatileData = <String, dynamic>{};

MockDatabaseReference();

MockDatabaseReference._(nodePath, [this._volatileData]) {
_nodePath += nodePath;
}
Expand All @@ -22,18 +25,26 @@ class MockDatabaseReference extends Mock implements DatabaseReference {

Map<String, dynamic>? get _data {
if (MockFirebaseDatabase.persistData) {
return _persitedData;
return _persistedData;
}
return _volatileData;
}

set _data(data) {
if (MockFirebaseDatabase.persistData) {
_persitedData = data;
_persistedData = data;
} else
return _volatileData = data;
}

@override
String? get key {
if (_nodePath == '/') {
return null;
}
return _nodePath.substring(1, _nodePath.length - 1).split('/').last;
}

@override
String get path => _nodePath;

Expand Down Expand Up @@ -122,11 +133,7 @@ class MockDatabaseReference extends Mock implements DatabaseReference {
);
}

@override

/// __WARNING!__ For now only the DatabaseEventType.value event is supported.
Future<DatabaseEvent> once(
[DatabaseEventType eventType = DatabaseEventType.value]) {
dynamic _getCurrentData() {
var tempData = _data;
// remove start and end slashes.
var nodePath = _nodePath.substring(1, _nodePath.length - 1);
Expand All @@ -143,21 +150,37 @@ class MockDatabaseReference extends Mock implements DatabaseReference {
}
}
}
return Future.value(
MockDatabaseEvent(MockDataSnapshot(tempData![nodePath])));

return tempData![nodePath];
}

@override

/// __WARNING!__ For now only the DatabaseEventType.value event is supported.
Future<DatabaseEvent> once(
[DatabaseEventType eventType = DatabaseEventType.value]) {
var tempData = _getCurrentData();
return Future.value(MockDatabaseEvent(MockDataSnapshot(this, tempData)));
}

@override
Future<DataSnapshot> get() {
var tempData = _getCurrentData();
return Future.value(MockDataSnapshot(this, tempData));
}
}

class _Int {
int value;

_Int(this.value);

_Int increment() {
++value;
return this;
}
}


// Map<String, dynamic> _makeSupportGenericValue(Map<String, dynamic> data) {
// var _dataWithGenericValue = {'__generic_mock_data_value__': Object()};
// _dataWithGenericValue.addAll(data);
Expand Down
4 changes: 2 additions & 2 deletions lib/src/mock_firebase_database.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class MockFirebaseDatabase extends Mock implements FirebaseDatabase {
// ignore: unused_field
static bool _persistData = true;
//Todo support non persistence.
static void setDataPersistanceEnabled({bool ennabled = true}) {
_persistData = ennabled;
static void setDataPersistenceEnabled({bool enabled = true}) {
_persistData = enabled;
}
}
Loading