The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use Wiki::Toolkit::TestLib;
use Test::More;

if ( scalar @Wiki::Toolkit::TestLib::wiki_info == 0 ) {
    plan skip_all => "no backends configured";
} else {
    plan tests => ( 9 * scalar @Wiki::Toolkit::TestLib::wiki_info );
}

my $iterator = Wiki::Toolkit::TestLib->new_wiki_maker;

while ( my $wiki = $iterator->new_wiki ) {
    # Put some test data in.
    $wiki->write_node( "Reun Thai", "A restaurant", undef,
        { postcode => "W6 9PL",
          category => [ "Thai Food", "Restaurant", "Hammersmith" ],
          latitude => "51.911", longitude => "" } );

    $wiki->write_node( "GBK", "A burget restaurant", undef,
        { postcode => "OX1 2AY",
          category => [ "Burgers", "Restaurant", "Oxford" ] });

    # And one with an un-moderated version
    $wiki->write_node( "Cafe Roma", "A cafe", undef,
        { category => [ "Cafe", "Oxford" ],
          latitude => "51.759", longitude => "-1.270" },
        1 
    );
    $wiki->moderate_node("Cafe Roma", 1);

    my %node = $wiki->retrieve_node( "Cafe Roma" );
    $wiki->write_node( "Cafe Roma", "A cafe unmod", $node{"checksum"},
        { category => [ "Cafe", "Oxford", "Unmoderated", "NotSeen" ],
          latitude => "51.759", longitude => "-1.270",
          locale => [ "Oxford" ] },
    );


    my @md;


    # With nothing, get back undef
    is($wiki->store->list_metadata_by_type(), undef, "Needs a type given");


    # Postcode should be easy
    @md = $wiki->store->list_metadata_by_type("postcode");
    is_deeply( [sort @md], [ "OX1 2AY", "W6 9PL" ], 
       "Correct metadata listing" );


    # Latitude also
    @md = $wiki->store->list_metadata_by_type("latitude");
    is_deeply( [sort @md], [ "51.759", "51.911" ],
       "Correct metadata listing" );


    # For category, will not see unmoderated versio
    @md = $wiki->store->list_metadata_by_type("category");
    is_deeply( [sort @md], [ "Burgers", "Cafe", "Hammersmith",
                           "Oxford", "Restaurant", "Thai Food" ],
       "Correct metadata listing" );

    @md = $wiki->store->list_metadata_names();
    is_deeply( [sort @md], [ "category", "latitude", "longitude", "postcode" ],
       "Correct metadata names" );


    # Now moderate that one, see it come in
    $wiki->moderate_node("Cafe Roma", 2);
    @md = $wiki->store->list_metadata_by_type("category");
    is_deeply( [sort @md], [ "Burgers", "Cafe", "Hammersmith", "NotSeen",
                           "Oxford", "Restaurant", "Thai Food", "Unmoderated" ],
       "Correct metadata listing" );

    @md = $wiki->store->list_metadata_names();
    is_deeply( [sort @md], [ "category", "latitude", "locale",
                             "longitude", "postcode" ],
       "Correct metadata names" );


    # And un-moderate another, see its go away
    $wiki->store->dbh->do("UPDATE content SET moderated = 'f' WHERE version = 2");
    @md = $wiki->store->list_metadata_by_type("category");
    is_deeply( [sort @md], [ "Burgers", "Cafe", "Hammersmith",
                           "Oxford", "Restaurant", "Thai Food" ],
       "Correct metadata listing" );

    @md = $wiki->store->list_metadata_names();
    is_deeply( [sort @md], [ "category", "latitude", "longitude", "postcode" ],
       "Correct metadata names" );
}