import 'package:angel3_validate/angel3_validate.dart';
import 'package:test/test.dart';

void main() {
  final Validator orderItemSchema = Validator({
    'id': [isInt, isPositive],
    'item_no': isString,
    'item_name': isString,
    'quantity': isInt,
    'description?': isString
  });

  final Validator orderSchema = Validator({
    'id': [isInt, isPositive],
    'order_no': isString,
    'order_items*': [isList, everyElement(orderItemSchema)]
  }, defaultValues: {
    'order_items': []
  });

  group('json data', () {
    test('validate with child element', () {
      var orderItem = {
        'id': 1,
        'item_no': 'a1',
        'item_name': 'Apple',
        'quantity': 1
      };

      var formData = {
        'id': 1,
        'order_no': '2',
        'order_items': [orderItem]
      };
      var result = orderSchema.check(formData);

      expect(result.errors.isEmpty, true);
    });

    test('validate empty child', () {
      var formData = {'id': 1, 'order_no': '2'};
      var result = orderSchema.check(formData);

      expect(result.errors.isEmpty, true);
    });

    test('validate invalid child field', () {
      var orderItem = {
        'id': 1,
        'item_no': 'a1',
        'item_name': 'Apple',
        'quantity': 1,
        'description': 1
      };

      var formData = {
        'id': 1,
        'order_no': '2',
        'order_items': [orderItem]
      };
      var result = orderSchema.check(formData);

      expect(result.errors.isEmpty, false);
    });
  });
}