Skip to content

Commit 9ef77bd

Browse files
committed
Model tests
1 parent aa19e1d commit 9ef77bd

File tree

5 files changed

+75
-0
lines changed

5 files changed

+75
-0
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import 'package:flutter/foundation.dart';
2+
import 'package:tdd_number_trivia/features/number_trivia/domain/entities/number_trivia.dart';
3+
4+
class NumberTriviaModel extends NumberTrivia {
5+
NumberTriviaModel({@required String text, @required int number})
6+
: super(text: text, number: number);
7+
8+
factory NumberTriviaModel.fromJson(Map<String, dynamic> json) {
9+
return NumberTriviaModel(
10+
text: json['text'], number: (json['number'] as num).toInt());
11+
}
12+
13+
Map<String, dynamic> toJson() {
14+
return {'text': text, 'number': number};
15+
}
16+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import 'dart:convert';
2+
3+
import 'package:flutter_test/flutter_test.dart';
4+
import 'package:tdd_number_trivia/features/number_trivia/data/models/number_trivia_model.dart';
5+
import 'package:tdd_number_trivia/features/number_trivia/domain/entities/number_trivia.dart';
6+
7+
import '../../../../fixtures/fixture_reader.dart';
8+
9+
void main() {
10+
final tNumberTriviaModel = NumberTriviaModel(number: 1, text: "Hello world");
11+
final tNumberTriviaModelDouble = NumberTriviaModel(number: 1, text: "Hello");
12+
test("should be a subclass of NumberTrivia entitiy", () async {
13+
expect(tNumberTriviaModel, isA<NumberTrivia>());
14+
});
15+
16+
// Group
17+
group("fromJson", () {
18+
test("should return valid model when json number is integer", () async {
19+
// arrange
20+
final Map<String, dynamic> jsonMap = json.decode(fixture("trivia.json"));
21+
final result = NumberTriviaModel.fromJson(jsonMap);
22+
// act
23+
expect(result, tNumberTriviaModel);
24+
});
25+
26+
test("should return valid model when json number is double", () async {
27+
// arrange
28+
final Map<String, dynamic> jsonMap =
29+
json.decode(fixture("trivia_double.json"));
30+
final result = NumberTriviaModel.fromJson(jsonMap);
31+
// act
32+
expect(result, tNumberTriviaModelDouble);
33+
});
34+
});
35+
36+
group('toJson', () {
37+
test("should return a valid number trivia json map", () async {
38+
final result = tNumberTriviaModel.toJson();
39+
final expectedMap = {"text": "Hello world", "number": 1};
40+
expect(expectedMap, result);
41+
});
42+
});
43+
}

test/fixtures/fixture_reader.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import 'dart:io';
2+
3+
String fixture(String name) => File('test/fixtures/$name').readAsStringSync();

test/fixtures/trivia.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"text": "Hello world",
3+
"number": 1,
4+
"found": true,
5+
"type": "trivia"
6+
}
7+

test/fixtures/trivia_double.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"text": "Hello",
3+
"number": 1.0,
4+
"found": true,
5+
"type": "trivia"
6+
}

0 commit comments

Comments
 (0)