import 'package:eatvio_app/features/profile/models/sub_model.dart'; import 'package:eatvio_app/core/models/pagination_model.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { group('SubPaginationModel', () { test('creates SubPaginationModel 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/subs', perPage: 10, to: null, total: 0, ); const model = SubPaginationModel( data: [], links: links, meta: meta, ); expect(model.data, isEmpty); expect(model.meta.total, 0); }); test('creates SubPaginationModel with subs', () { final subs = [ SubModel( slug: 'user1', name: 'User One', city: 'New York', birthdate: DateTime(1990, 1, 1), isEntitySubscribedByMe: true, profilePhotoUrl: 'photo1.jpg', roles: ['consultant'], ), SubModel( slug: 'user2', name: 'User Two', city: 'London', birthdate: DateTime(1995, 5, 15), isEntitySubscribedByMe: false, profilePhotoUrl: 'photo2.jpg', roles: ['user'], ), ]; 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/subs', perPage: 10, to: 2, total: 2, ); final model = SubPaginationModel( data: subs, links: links, meta: meta, ); expect(model.data.length, 2); expect(model.data[0].slug, 'user1'); expect(model.data[0].name, 'User One'); expect(model.data[1].slug, 'user2'); expect(model.data[1].name, 'User Two'); }); test('creates SubPaginationModel from JSON', () { final json = { 'data': [ { 'slug': 'user1', 'name': 'User One', 'city': 'New York', 'birthdate': '1990-01-01T00:00:00Z', 'is_entity_subscribed_by_me': true, 'profile_photo_url': 'photo1.jpg', 'roles': ['consultant'], }, ], '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/subs', 'per_page': 10, 'to': 1, 'total': 1, }, }; final model = SubPaginationModel.fromJson(json); expect(model.data.length, 1); expect(model.data[0].slug, 'user1'); expect(model.data[0].name, 'User One'); }); }); group('SubModel', () { test('creates SubModel with all parameters', () { final sub = SubModel( slug: 'user1', name: 'User One', city: 'New York', birthdate: DateTime(1990, 1, 1), isEntitySubscribedByMe: true, profilePhotoUrl: 'photo1.jpg', roles: ['consultant', 'nutritionist'], ); expect(sub.slug, 'user1'); expect(sub.name, 'User One'); expect(sub.city, 'New York'); expect(sub.birthdate, DateTime(1990, 1, 1)); expect(sub.isEntitySubscribedByMe, true); expect(sub.profilePhotoUrl, 'photo1.jpg'); expect(sub.roles.length, 2); expect(sub.roles, contains('consultant')); expect(sub.roles, contains('nutritionist')); }); test('creates SubModel with empty roles', () { final sub = SubModel( slug: 'user2', name: 'User Two', city: 'London', birthdate: DateTime(1995, 5, 15), isEntitySubscribedByMe: false, profilePhotoUrl: 'photo2.jpg', roles: [], ); expect(sub.roles, isEmpty); }); test('creates SubModel from JSON', () { final json = { 'slug': 'user1', 'name': 'User One', 'city': 'New York', 'birthdate': '1990-01-01T00:00:00Z', 'is_entity_subscribed_by_me': true, 'profile_photo_url': 'photo1.jpg', 'roles': ['consultant'], }; final sub = SubModel.fromJson(json); expect(sub.slug, 'user1'); expect(sub.name, 'User One'); expect(sub.isEntitySubscribedByMe, true); }); }); }