forked from eatvio/eatvio_app
194 lines
5.0 KiB
Dart
194 lines
5.0 KiB
Dart
import 'package:eatvio_app/features/feed/models/comment_model.dart';
|
|
import 'package:eatvio_app/core/models/pagination_model.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
void main() {
|
|
group('CommentModel', () {
|
|
test('creates CommentModel with empty list', () {
|
|
const links = Links(
|
|
first: 'http://example.com?page=1',
|
|
last: 'http://example.com?page=1',
|
|
prev: null,
|
|
next: null,
|
|
);
|
|
|
|
const meta = Meta(
|
|
currentPage: 1,
|
|
from: null,
|
|
lastPage: 1,
|
|
links: [],
|
|
path: '/api/comments',
|
|
perPage: 10,
|
|
to: null,
|
|
total: 0,
|
|
);
|
|
|
|
const model = CommentModel(
|
|
data: [],
|
|
links: links,
|
|
meta: meta,
|
|
);
|
|
|
|
expect(model.data, isEmpty);
|
|
expect(model.meta.total, 0);
|
|
});
|
|
|
|
test('creates CommentModel with comments', () {
|
|
final comments = [
|
|
Comment(
|
|
id: 1,
|
|
authorName: 'John Doe',
|
|
authorSlug: 'john-doe',
|
|
authorProfileIcon: 'icon1.jpg',
|
|
body: 'First comment',
|
|
childrenComments: [],
|
|
createdAt: DateTime(2023, 1, 1),
|
|
),
|
|
Comment(
|
|
id: 2,
|
|
authorName: 'Jane Smith',
|
|
authorSlug: 'jane-smith',
|
|
authorProfileIcon: 'icon2.jpg',
|
|
body: 'Second comment',
|
|
childrenComments: [],
|
|
createdAt: DateTime(2023, 1, 2),
|
|
),
|
|
];
|
|
|
|
const links = Links(
|
|
first: 'http://example.com?page=1',
|
|
last: 'http://example.com?page=1',
|
|
prev: null,
|
|
next: null,
|
|
);
|
|
|
|
const meta = Meta(
|
|
currentPage: 1,
|
|
from: 1,
|
|
lastPage: 1,
|
|
links: [],
|
|
path: '/api/comments',
|
|
perPage: 10,
|
|
to: 2,
|
|
total: 2,
|
|
);
|
|
|
|
final model = CommentModel(
|
|
data: comments,
|
|
links: links,
|
|
meta: meta,
|
|
);
|
|
|
|
expect(model.data.length, 2);
|
|
expect(model.data[0].id, 1);
|
|
expect(model.data[0].authorName, 'John Doe');
|
|
expect(model.data[1].id, 2);
|
|
expect(model.data[1].authorName, 'Jane Smith');
|
|
});
|
|
|
|
test('creates CommentModel from JSON', () {
|
|
final json = {
|
|
'data': [
|
|
{
|
|
'id': 1,
|
|
'author_name': 'John Doe',
|
|
'author_slug': 'john-doe',
|
|
'author_profile_icon': 'icon1.jpg',
|
|
'body': 'Test comment',
|
|
'children_comments': [],
|
|
'created_at': '2023-01-01T00:00:00Z',
|
|
},
|
|
],
|
|
'links': {
|
|
'first': 'http://example.com?page=1',
|
|
'last': 'http://example.com?page=1',
|
|
'prev': null,
|
|
'next': null,
|
|
},
|
|
'meta': {
|
|
'current_page': 1,
|
|
'from': 1,
|
|
'last_page': 1,
|
|
'links': [],
|
|
'path': '/api/comments',
|
|
'per_page': 10,
|
|
'to': 1,
|
|
'total': 1,
|
|
},
|
|
};
|
|
|
|
final model = CommentModel.fromJson(json);
|
|
|
|
expect(model.data.length, 1);
|
|
expect(model.data[0].id, 1);
|
|
expect(model.data[0].authorName, 'John Doe');
|
|
});
|
|
});
|
|
|
|
group('Comment', () {
|
|
test('creates Comment with all parameters', () {
|
|
final comment = Comment(
|
|
id: 1,
|
|
authorName: 'John Doe',
|
|
authorSlug: 'john-doe',
|
|
authorProfileIcon: 'icon.jpg',
|
|
body: 'Test comment body',
|
|
childrenComments: [],
|
|
createdAt: DateTime(2023, 1, 1),
|
|
);
|
|
|
|
expect(comment.id, 1);
|
|
expect(comment.authorName, 'John Doe');
|
|
expect(comment.authorSlug, 'john-doe');
|
|
expect(comment.authorProfileIcon, 'icon.jpg');
|
|
expect(comment.body, 'Test comment body');
|
|
expect(comment.childrenComments, isEmpty);
|
|
expect(comment.createdAt, DateTime(2023, 1, 1));
|
|
});
|
|
|
|
test('creates Comment with nested children', () {
|
|
final childComment = Comment(
|
|
id: 2,
|
|
authorName: 'Jane Smith',
|
|
authorSlug: 'jane-smith',
|
|
authorProfileIcon: 'icon2.jpg',
|
|
body: 'Reply comment',
|
|
childrenComments: [],
|
|
createdAt: DateTime(2023, 1, 2),
|
|
);
|
|
|
|
final parentComment = Comment(
|
|
id: 1,
|
|
authorName: 'John Doe',
|
|
authorSlug: 'john-doe',
|
|
authorProfileIcon: 'icon1.jpg',
|
|
body: 'Parent comment',
|
|
childrenComments: [childComment],
|
|
createdAt: DateTime(2023, 1, 1),
|
|
);
|
|
|
|
expect(parentComment.childrenComments.length, 1);
|
|
expect(parentComment.childrenComments[0].id, 2);
|
|
expect(parentComment.childrenComments[0].authorName, 'Jane Smith');
|
|
});
|
|
|
|
test('creates Comment from JSON', () {
|
|
final json = {
|
|
'id': 1,
|
|
'author_name': 'John Doe',
|
|
'author_slug': 'john-doe',
|
|
'author_profile_icon': 'icon.jpg',
|
|
'body': 'Test comment',
|
|
'children_comments': [],
|
|
'created_at': '2023-01-01T00:00:00Z',
|
|
};
|
|
|
|
final comment = Comment.fromJson(json);
|
|
|
|
expect(comment.id, 1);
|
|
expect(comment.authorName, 'John Doe');
|
|
expect(comment.body, 'Test comment');
|
|
});
|
|
});
|
|
}
|