@use 'sass:map';
@use 'sass:list';
@use 'sass-true' as *;
@use '../base' as *;

@include describe('Theme Module System') {
    $components: (
        igx-checkbox: (
            'usedBy': (
                igx-combo,
                igx-grid
            )
        )
    ) !global;

    @include it('should register a component') {
        $result: (
            'deps': (igx-drop-down),
            'usedBy': ()
        );

        @include register-component($name: igx-test, $deps: (igx-drop-down));
        @include assert-equal(map.get($components, igx-test), $result);
    }

    @include it('should build a dependency tree and register dependencies by extension') {
        @include register-component($name: igx-drop-down, $deps: (igx-overlay));
        @include dependecy-tree($components);

        $usedBy: map.get($components, igx-overlay, 'usedBy');
        @include assert-equal(list.index($usedBy, igx-test) != null, true);
    }

    @include it('should include theme if other themes depend on it') {
        $excluded: (igx-checkbox, igx-combo);
        $test: is-used(
            $component: 'igx-checkbox',
            $checklist: $excluded,
        );
        @include assert-equal($test, true);
    }

    @include it('should exclude theme if no themes depend on it') {
        $excluded: (igx-checkbox, igx-grid, igx-combo);
        $test: is-used(
            $component: 'igx-checkbox',
            $checklist: $excluded,
        );

        @include assert-equal($test, false);
    }
}
