diff --git a/test/contacts_test.dart b/test/contacts_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..c7d72a6e8ffd7659526bd851eb97670cc277d289
--- /dev/null
+++ b/test/contacts_test.dart
@@ -0,0 +1,38 @@
+import 'dart:convert';
+import 'dart:typed_data';
+
+import 'package:flutter_test/flutter_test.dart';
+import 'package:ginkgo/data/models/contact.dart';
+
+void main() {
+  final Contact c = Contact(
+    nick: 'Alice',
+    pubKey: 'abcd1234',
+    avatar: Uint8List.fromList(<int>[1, 2, 3]),
+    notes: 'Some notes',
+    name: 'Alice Smith',
+  );
+
+  test('Serializing and deserializing Contact', () {
+    final Map<String, dynamic> contactJson = c.toJson();
+    final Contact contact = Contact.fromJson(contactJson);
+    final dynamic json = contact.toJson();
+
+    expect(json, equals(contactJson));
+
+    const String contactS =
+        '{"nick":null,"pubKey":"7wnDh2FPdwNW8Dd5JyoJTbspuu8b9QJKps2xAYenefsu","avatar":[],"notes":null,"name":null}';
+    final Contact contactFromS =
+        Contact.fromJson(jsonDecode(contactS) as Map<String, dynamic>);
+    expect(contactFromS.pubKey,
+        equals('7wnDh2FPdwNW8Dd5JyoJTbspuu8b9QJKps2xAYenefsu'));
+
+    const String contactWithAvatarS =
+        '{"nick":null,"pubKey":"7wnDh2FPdwNW8Dd5JyoJTbspuu8b9QJKps2xAYenefsu","avatar":[68,174,66,96,130],"notes":null,"name":null}';
+    final Contact contactFromWithAvatar = Contact.fromJson(
+        jsonDecode(contactWithAvatarS) as Map<String, dynamic>);
+    expect(contactFromWithAvatar.avatar, isNotNull);
+    expect(contactFromWithAvatar.avatar!.toList(),
+        equals(<int>[68, 174, 66, 96, 130]));
+  });
+}