// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:lib.app.dart/logging.dart';
import 'package:sledge/sledge.dart';
import 'package:test/test.dart';

Schema newSchema() {
  final schemaDescription = <String, BaseType>{
    'a': Integer(),
    'b': Integer()
  };
  return Schema(schemaDescription);
}

void main() {
  setupLogger();

  test('Verify that two unnamed DocumentId have different prefixes', () {
    Schema schema = newSchema();
    final id1 = DocumentId(schema);
    final id2 = DocumentId(schema);
    expect(id1.prefix, isNot(equals(id2.prefix)));
  });

  test('Verify that two identically named DocumentId have identical prefixes',
      () {
    Schema schema = newSchema();
    final id1 = DocumentId.fromIntId(schema, 42);
    final id2 = DocumentId.fromIntId(schema, 42);
    expect(id1.prefix, equals(id2.prefix));
  });

  test('Verify that an incorrect parameter results in an exception', () {
    Schema schema = newSchema();
    final list = <int>[];
    expect(() => DocumentId(schema, list), throwsA(anything));
  });
}
