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

void main() {
  late Container container;

  setUp(() {
    container = Container(const EmptyReflector())
      ..registerSingleton<Song>(Song(title: 'I Wish'))
      ..registerNamedSingleton('foo', 1)
      ..registerFactory<Artist>((container) {
        return Artist(
          name: 'Stevie Wonder',
          song: container.make<Song>(),
        );
      });
  });

  test('hasNamed', () {
    var child = container.createChild()..registerNamedSingleton('bar', 2);
    expect(child.hasNamed('foo'), true);
    expect(child.hasNamed('bar'), true);
    expect(child.hasNamed('baz'), false);
  });

  test('has on singleton', () {
    var result = container.has<Song>();
    expect(result, true);
  });

  test('has on factory', () {
    expect(container.has<Artist>(), true);
  });

  test('false if neither', () {
    expect(container.has<bool>(), false);
  });
}

class Artist {
  final String? name;
  final Song? song;

  Artist({this.name, this.song});
}

class Song {
  final String? title;

  Song({this.title});
}