The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;

use Test::More tests => 9;

use HTML::Widgets::NavMenu::ToJSON;
use HTML::Widgets::NavMenu::ToJSON::Data_Persistence::YAML;

use File::Temp qw(tempdir);
use File::Spec;

use JSON ( qw(decode_json) );

{
    my $tempdir = tempdir( CLEANUP => 1);

    my $yaml_fn = File::Spec->catfile($tempdir, "persistence.yaml");
    my $tree_contents =
    {
        'host' => "default",
        'text' => "Top 1",
        'title' => "T1 Title",
        'subs' =>
        [
            {
                'text' => "Home",
                'url' => "",
            },
            {
                'text' => "About Me",
                'title' => "About Myself",
                'url' => "me/",
                'expand' => { 're' => "^me/", },
                'subs' =>
                [
                    {
                        'text' => "Group Hug",
                        'url' => "me/group-hug/",
                    },
                    {
                        'text' => "Cool I/O",
                        'url' => "me/cool-io/",
                    },
                    {
                        'text' => "Resume",
                        'url' => "resume.html",
                    },
                ],
            },
            {
                'text' => "Halifax",
                'url' => "halifax/",
                'skip' => 1,
            },
            {
                'text' => "Software",
                'title' => "Open Source Software I Wrote",
                'url' => "open-source/",
                'expand' => { 're' => "^open-source/", },
                'subs' =>
                [
                    {
                        'text' => "Fooware",
                        'url' => "open-source/fooware/",
                        'skip' => 1,
                    },
                    {
                        'text' => "Condor-Man",
                        'title' => "Kwalitee",
                        'url' => "open-source/condor-man/",
                    },
                ],
            },
        ],
    };

    my $persistence =
    HTML::Widgets::NavMenu::ToJSON::Data_Persistence::YAML->new(
        {
            filename => $yaml_fn,
        }
    );

    # TEST
    ok ($persistence, "Persistence obj was initialized.");

    my $obj = HTML::Widgets::NavMenu::ToJSON->new(
        {
            data_persistence_store => $persistence,
            # The one given as input to HTML::Widgets::NavMenu
            tree_contents => $tree_contents,
        }
    );

    # TEST
    ok ($persistence, "JSON converter was initialized.");

    my $json = $obj->output_as_json( { } );
    my $as_perl = decode_json ($json);

    # TEST
    is ($as_perl->[0]->{id}, 1, "Root id is 1.");

    # TEST
    is ($as_perl->[0]->{text}, 'Home', "Root text is Home.");

    # TEST
    is ($as_perl->[0]->{url}, '', "Root url is empty.");

    # TEST
    is ($as_perl->[1]->{text}, 'About Me', '1 text');

    # TEST
    is ($as_perl->[1]->{title}, 'About Myself', '1 title');

    # TEST
    is ($as_perl->[1]->{subs}->[0]->{text}, 'Group Hug', 'subs 0 text');

    # TEST
    is ($as_perl->[1]->{subs}->[2]->{url}, 'resume.html', 'subs 1 url');
}